blob: e2c92bc1c0814f294e1b9153febc76886cf2fdb9 [file] [log] [blame]
Soares Chen172fe9d2017-07-18 09:30:181<!doctype html>
2<meta charset=utf-8>
Soares Chen5c1f1432017-07-27 03:19:293<title>RTCRtpParameters degradationPreference</title>
Soares Chen172fe9d2017-07-18 09:30:184<script src="/resources/testharness.js"></script>
5<script src="/resources/testharnessreport.js"></script>
6<script src="dictionary-helper.js"></script>
7<script src="RTCRtpParameters-helper.js"></script>
8<script>
9 'use strict';
10
11 // Test is based on the following editor draft:
12 // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
13
14 // The following helper functions are called from RTCRtpParameters-helper.js:
15 // validateSenderRtpParameters
16
17 /*
18 5.2. RTCRtpSender Interface
19 interface RTCRtpSender {
20 Promise<void> setParameters(optional RTCRtpParameters parameters);
21 RTCRtpParameters getParameters();
22 };
23
24 dictionary RTCRtpParameters {
25 DOMString transactionId;
26 sequence<RTCRtpEncodingParameters> encodings;
27 sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
28 RTCRtcpParameters rtcp;
29 sequence<RTCRtpCodecParameters> codecs;
30 RTCDegradationPreference degradationPreference;
31 };
32
33 enum RTCDegradationPreference {
34 "maintain-framerate",
35 "maintain-resolution",
36 "balanced"
37 };
38
39 - degradationPreference is set to the last value passed into setParameters,
40 or the default value of "balanced" if setParameters hasn't been called.
41 */
42
43 promise_test(t => {
44 const pc = new RTCPeerConnection();
Philipp Hancke1622a022018-06-11 10:00:5345 t.add_cleanup(() => pc.close());
Soares Chen172fe9d2017-07-18 09:30:1846 const { sender } = pc.addTransceiver('audio');
47
48 const param = sender.getParameters();
49 validateSenderRtpParameters(param);
50
Soares Chen5c1f1432017-07-27 03:19:2951 assert_equals(param.degradationPreference, 'balanced',
52 'Expect initial param.degradationPreference to be balanced');
Soares Chen172fe9d2017-07-18 09:30:1853
Soares Chen5c1f1432017-07-27 03:19:2954 param.degradationPreference = 'maintain-framerate';
Soares Chen172fe9d2017-07-18 09:30:1855
56 return pc.setParameters(param)
57 .then(() => {
58 const param = sender.getParameters();
59 validateSenderRtpParameters(param);
60
Soares Chen5c1f1432017-07-27 03:19:2961 assert_equals(param.degradationPreference, 'maintain-framerate');
Soares Chen172fe9d2017-07-18 09:30:1862 });
Soares Chen5c1f1432017-07-27 03:19:2963 }, 'setParameters with degradationPreference set should succeed');
Soares Chen172fe9d2017-07-18 09:30:1864
65 promise_test(t => {
66 const pc = new RTCPeerConnection();
Philipp Hancke1622a022018-06-11 10:00:5367 t.add_cleanup(() => pc.close());
Soares Chen172fe9d2017-07-18 09:30:1868 const { sender } = pc.addTransceiver('audio');
69
70 const param = sender.getParameters();
71 validateSenderRtpParameters(param);
72
Soares Chen5c1f1432017-07-27 03:19:2973 assert_equals(param.degradationPreference, 'balanced',
74 'Expect initial param.degradationPreference to be balanced');
Soares Chen172fe9d2017-07-18 09:30:1875
Soares Chen5c1f1432017-07-27 03:19:2976 param.degradationPreference = undefined;
Soares Chen172fe9d2017-07-18 09:30:1877
78 return pc.setParameters(param)
79 .then(() => {
80 const param = sender.getParameters();
81 validateSenderRtpParameters(param);
82
Soares Chen5c1f1432017-07-27 03:19:2983 assert_equals(param.degradationPreference, undefined);
Soares Chen172fe9d2017-07-18 09:30:1884 });
Soares Chen5c1f1432017-07-27 03:19:2985 }, 'setParameters with degradationPreference unset should succeed');
Soares Chen172fe9d2017-07-18 09:30:1886
87</script>