| <!doctype html> |
| <meta charset=utf-8> |
| <title>RTCRtpParameters rtcp</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="dictionary-helper.js"></script> |
| <script src="RTCRtpParameters-helper.js"></script> |
| <script> |
| 'use strict'; |
| |
| // Test is based on the following editor draft: |
| // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html |
| |
| // The following helper functions are called from RTCRtpParameters-helper.js: |
| // validateSenderRtpParameters |
| |
| /* |
| 5.2. RTCRtpSender Interface |
| interface RTCRtpSender { |
| Promise<void> setParameters(optional RTCRtpParameters parameters); |
| RTCRtpParameters getParameters(); |
| }; |
| |
| dictionary RTCRtpParameters { |
| DOMString transactionId; |
| sequence<RTCRtpEncodingParameters> encodings; |
| sequence<RTCRtpHeaderExtensionParameters> headerExtensions; |
| RTCRtcpParameters rtcp; |
| sequence<RTCRtpCodecParameters> codecs; |
| RTCDegradationPreference degradationPreference; |
| }; |
| |
| dictionary RTCRtcpParameters { |
| [readonly] |
| DOMString cname; |
| |
| [readonly] |
| boolean reducedSize; |
| }; |
| |
| getParameters |
| - rtcp.cname is set to the CNAME of the associated RTCPeerConnection. |
| |
| rtcp.reducedSize is set to true if reduced-size RTCP has been negotiated for |
| sending, and false otherwise. |
| */ |
| |
| /* |
| 5.2. setParameters |
| 7. If parameters.encodings.length is different from N, or if any parameter |
| in the parameters argument, marked as a Read-only parameter, has a value |
| that is different from the corresponding parameter value returned from |
| sender.getParameters(), abort these steps and return a promise rejected |
| with a newly created InvalidModificationError. Note that this also applies |
| to transactionId. |
| */ |
| promise_test(t => { |
| const pc = new RTCPeerConnection(); |
| t.add_cleanup(() => pc.close()); |
| const { sender } = pc.addTransceiver('audio'); |
| |
| const param = sender.getParameters(); |
| validateSenderRtpParameters(param); |
| |
| const { rtcp } = param; |
| |
| if(rtcp === undefined) { |
| param.rtcp = { cname: 'foo' }; |
| |
| } else if(rtcp.cname === undefined) { |
| rtcp.cname = 'foo'; |
| |
| } else { |
| rtcp.cname = `${rtcp.cname}-modified`; |
| } |
| |
| return promise_rejects(t, 'InvalidModificationError', |
| sender.setParameters(param)); |
| }, `setParameters() with modified rtcp.cname should reject with InvalidModificationError`); |
| |
| promise_test(t => { |
| const pc = new RTCPeerConnection(); |
| t.add_cleanup(() => pc.close()); |
| const { sender } = pc.addTransceiver('audio'); |
| |
| const param = sender.getParameters(); |
| validateSenderRtpParameters(param); |
| |
| const { rtcp } = param; |
| |
| if(rtcp === undefined) { |
| param.rtcp = { reducedSize: true }; |
| |
| } else if(rtcp.reducedSize === undefined) { |
| rtcp.reducedSize = true; |
| |
| } else { |
| rtcp.reducedSize = !rtcp.reducedSize; |
| } |
| |
| return promise_rejects(t, 'InvalidModificationError', |
| sender.setParameters(param)); |
| }, `setParameters() with modified rtcp.reducedSize should reject with InvalidModificationError`); |
| |
| </script> |