RTCRtpParameters-rtcp.html (3299B)
1 <!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 }; 31 32 dictionary RTCRtcpParameters { 33 [readonly] 34 DOMString cname; 35 36 [readonly] 37 boolean reducedSize; 38 }; 39 40 getParameters 41 - rtcp.cname is set to the CNAME of the associated RTCPeerConnection. 42 43 rtcp.reducedSize is set to true if reduced-size RTCP has been negotiated for 44 sending, and false otherwise. 45 */ 46 47 /* 48 5.2. setParameters 49 7. If parameters.encodings.length is different from N, or if any parameter 50 in the parameters argument, marked as a Read-only parameter, has a value 51 that is different from the corresponding parameter value returned from 52 sender.getParameters(), abort these steps and return a promise rejected 53 with a newly created InvalidModificationError. Note that this also applies 54 to transactionId. 55 */ 56 promise_test(t => { 57 const pc = new RTCPeerConnection(); 58 t.add_cleanup(() => pc.close()); 59 const { sender } = pc.addTransceiver('audio'); 60 61 const param = sender.getParameters(); 62 validateSenderRtpParameters(param); 63 64 const { rtcp } = param; 65 66 if(rtcp === undefined) { 67 param.rtcp = { cname: 'foo' }; 68 69 } else if(rtcp.cname === undefined) { 70 rtcp.cname = 'foo'; 71 72 } else { 73 rtcp.cname = `${rtcp.cname}-modified`; 74 } 75 76 return promise_rejects_dom(t, 'InvalidModificationError', 77 sender.setParameters(param)); 78 }, `setParameters() with modified rtcp.cname should reject with InvalidModificationError`); 79 80 promise_test(t => { 81 const pc = new RTCPeerConnection(); 82 t.add_cleanup(() => pc.close()); 83 const { sender } = pc.addTransceiver('audio'); 84 85 const param = sender.getParameters(); 86 validateSenderRtpParameters(param); 87 88 const { rtcp } = param; 89 90 if(rtcp === undefined) { 91 param.rtcp = { reducedSize: true }; 92 93 } else if(rtcp.reducedSize === undefined) { 94 rtcp.reducedSize = true; 95 96 } else { 97 rtcp.reducedSize = !rtcp.reducedSize; 98 } 99 100 return promise_rejects_dom(t, 'InvalidModificationError', 101 sender.setParameters(param)); 102 }, `setParameters() with modified rtcp.reducedSize should reject with InvalidModificationError`); 103 104 </script>