blob: 82fb49be7dea91b0be43ddbbf1d259d3d80b7d99 [file] [log] [blame]
Soares Chen172fe9d2017-07-18 09:30:181<!doctype html>
2<meta charset=utf-8>
3<title>RTCRtpParameters rtcp</title>
4<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 dictionary RTCRtcpParameters {
34 [readonly]
35 DOMString cname;
36
37 [readonly]
38 boolean reducedSize;
39 };
40
41 getParameters
42 - rtcp.cname is set to the CNAME of the associated RTCPeerConnection.
43
44 rtcp.reducedSize is set to true if reduced-size RTCP has been negotiated for
45 sending, and false otherwise.
46 */
47
48 /*
49 5.2. setParameters
50 7. If parameters.encodings.length is different from N, or if any parameter
51 in the parameters argument, marked as a Read-only parameter, has a value
52 that is different from the corresponding parameter value returned from
53 sender.getParameters(), abort these steps and return a promise rejected
54 with a newly created InvalidModificationError. Note that this also applies
55 to transactionId.
56 */
57 promise_test(t => {
58 const pc = new RTCPeerConnection();
Philipp Hancke1622a022018-06-11 10:00:5359 t.add_cleanup(() => pc.close());
Soares Chen172fe9d2017-07-18 09:30:1860 const { sender } = pc.addTransceiver('audio');
61
62 const param = sender.getParameters();
63 validateSenderRtpParameters(param);
64
65 const { rtcp } = param;
66
67 if(rtcp === undefined) {
68 param.rtcp = { cname: 'foo' };
69
70 } else if(rtcp.cname === undefined) {
71 rtcp.cname = 'foo';
72
73 } else {
74 rtcp.cname = `${rtcp.cname}-modified`;
75 }
76
Boris Zbarskyb7f2dd32020-02-04 21:26:4877 return promise_rejects_dom(t, 'InvalidModificationError',
Soares Chen172fe9d2017-07-18 09:30:1878 sender.setParameters(param));
Soares Chen172fe9d2017-07-18 09:30:1879 }, `setParameters() with modified rtcp.cname should reject with InvalidModificationError`);
80
81 promise_test(t => {
82 const pc = new RTCPeerConnection();
Philipp Hancke1622a022018-06-11 10:00:5383 t.add_cleanup(() => pc.close());
Soares Chen172fe9d2017-07-18 09:30:1884 const { sender } = pc.addTransceiver('audio');
85
86 const param = sender.getParameters();
87 validateSenderRtpParameters(param);
88
89 const { rtcp } = param;
90
91 if(rtcp === undefined) {
92 param.rtcp = { reducedSize: true };
93
94 } else if(rtcp.reducedSize === undefined) {
95 rtcp.reducedSize = true;
96
97 } else {
98 rtcp.reducedSize = !rtcp.reducedSize;
99 }
100
Boris Zbarskyb7f2dd32020-02-04 21:26:48101 return promise_rejects_dom(t, 'InvalidModificationError',
Soares Chen172fe9d2017-07-18 09:30:18102 sender.setParameters(param));
Soares Chen172fe9d2017-07-18 09:30:18103 }, `setParameters() with modified rtcp.reducedSize should reject with InvalidModificationError`);
104
105</script>