test_peerConnection_setParametersCompatMode.html (6437B)
1 <!DOCTYPE HTML> 2 <html> 3 4 <head> 5 <script type="application/javascript" src="pc.js"></script> 6 <script type="application/javascript" src="sdpUtils.js"></script> 7 </head> 8 9 <body> 10 <pre id="test"> 11 <script type="application/javascript"> 12 createHTML({ 13 bug: "1401592", 14 title: "Test that setParameters compat mode works", 15 visible: true 16 }); 17 18 function compareCodecParam(observed, expected) { 19 info(`Comparing ${JSON.stringify(observed)} to ${JSON.stringify(expected)}`); 20 is(observed.payloadType, expected.payloadType); 21 is(observed.clockRate, expected.clockRate); 22 is(observed.channels, expected.channels); 23 is(observed.mimeType.toLowerCase(), expected.mimeType.toLowerCase()); 24 if (expected.hasOwnProperty('sdpFmtpLine')) { 25 is(observed.sdpFmtpLine, expected.sdpFmtpLine); 26 } 27 } 28 29 function compareCodecParams(observed, expected) { 30 is(observed.length, expected.length); 31 if (observed.length == expected.length) { 32 for (let i = 0; i < observed.length; ++i) { 33 compareCodecParam(observed[i], expected[i]); 34 } 35 } 36 } 37 38 const tests = [ 39 async function checkNoGetParameters() { 40 await withPrefs([["media.peerconnection.allow_old_setParameters", true]], 41 async () => { 42 const pc = new RTCPeerConnection(); 43 const { sender } = pc.addTransceiver('video', { 44 sendEncodings: [{ rid: "0" }, { rid: "1" }, { rid: "2" }] 45 }); 46 await sender.setParameters({ encodings: [{ rid: "0" }, { rid: "1" }, { rid: "2" }] }); 47 } 48 ); 49 }, 50 51 async function checkStaleGetParameters() { 52 await withPrefs([["media.peerconnection.allow_old_setParameters", true]], 53 async () => { 54 const pc = new RTCPeerConnection(); 55 const { sender } = pc.addTransceiver('video', { 56 sendEncodings: [{ rid: "0" }, { rid: "1" }, { rid: "2" }] 57 }); 58 const params = sender.getParameters(); 59 await new Promise(r => setTimeout(r, 10)); 60 await sender.setParameters(params); 61 } 62 ); 63 }, 64 65 async function checkLengthChanged() { 66 await withPrefs([["media.peerconnection.allow_old_setParameters", true]], 67 async () => { 68 const pc = new RTCPeerConnection(); 69 const { sender } = pc.addTransceiver('video', { 70 sendEncodings: [{ rid: "0" }, { rid: "1" }, { rid: "2" }] 71 }); 72 73 const params = sender.getParameters(); 74 params.encodings.pop(); 75 await sender.setParameters(params); 76 } 77 ); 78 }, 79 80 async function checkNoTransactionId() { 81 await withPrefs([["media.peerconnection.allow_old_setParameters", true]], 82 async () => { 83 const pc = new RTCPeerConnection(); 84 const { sender } = pc.addTransceiver('video', { 85 sendEncodings: [{ rid: "0" }, { rid: "1" }, { rid: "2" }] 86 }); 87 88 const params = sender.getParameters(); 89 delete params.transactionId; 90 await sender.setParameters(params); 91 } 92 ); 93 }, 94 95 async function checkCodecsUndefined() { 96 await withPrefs([["media.peerconnection.allow_old_setParameters", true]], 97 async () => { 98 const pc1 = new RTCPeerConnection(); 99 const pc2 = new RTCPeerConnection(); 100 const { sender } = pc1.addTransceiver('video'); 101 await pc1.setLocalDescription(); 102 await pc2.setRemoteDescription(pc1.localDescription); 103 await pc1.setRemoteDescription(await pc2.createAnswer()); 104 let params = sender.getParameters(); 105 const codecsCopy = [...params.codecs]; 106 delete params.codecs; 107 await sender.setParameters(params); 108 params = sender.getParameters(); 109 compareCodecParams(params.codecs, codecsCopy); 110 } 111 ); 112 }, 113 114 async function checkCodecsExtended() { 115 await withPrefs([["media.peerconnection.allow_old_setParameters", true]], 116 async () => { 117 const pc1 = new RTCPeerConnection(); 118 const pc2 = new RTCPeerConnection(); 119 const { sender } = pc1.addTransceiver('video'); 120 await pc1.setLocalDescription(); 121 await pc2.setRemoteDescription(pc1.localDescription); 122 await pc1.setRemoteDescription(await pc2.createAnswer()); 123 let params = sender.getParameters(); 124 const codecsCopy = [...params.codecs]; 125 params.codecs.push({payloadType: 2, mimeType: 'video/flarglblurp', clockRate: 1000}); 126 await sender.setParameters(params); 127 params = sender.getParameters(); 128 compareCodecParams(params.codecs, codecsCopy); 129 } 130 ); 131 }, 132 133 async function checkCodecsTruncated() { 134 await withPrefs([["media.peerconnection.allow_old_setParameters", true]], 135 async () => { 136 const pc1 = new RTCPeerConnection(); 137 const pc2 = new RTCPeerConnection(); 138 const { sender } = pc1.addTransceiver('video'); 139 await pc1.setLocalDescription(); 140 await pc2.setRemoteDescription(pc1.localDescription); 141 await pc1.setRemoteDescription(await pc2.createAnswer()); 142 let params = sender.getParameters(); 143 const codecsCopy = [...params.codecs]; 144 params.codecs.pop(); 145 await sender.setParameters(params); 146 params = sender.getParameters(); 147 compareCodecParams(params.codecs, codecsCopy); 148 } 149 ); 150 }, 151 152 async function checkCodecsReordered() { 153 await withPrefs([["media.peerconnection.allow_old_setParameters", true]], 154 async () => { 155 const pc1 = new RTCPeerConnection(); 156 const pc2 = new RTCPeerConnection(); 157 const { sender } = pc1.addTransceiver('video'); 158 await pc1.setLocalDescription(); 159 await pc2.setRemoteDescription(pc1.localDescription); 160 await pc1.setRemoteDescription(await pc2.createAnswer()); 161 let params = sender.getParameters(); 162 const codecsCopy = [...params.codecs]; 163 params.codecs.reverse(); 164 await sender.setParameters(params); 165 params = sender.getParameters(); 166 compareCodecParams(params.codecs, codecsCopy); 167 } 168 ); 169 }, 170 ]; 171 172 runNetworkTest(async () => { 173 for (const test of tests) { 174 info(`Running test: ${test.name}`); 175 await test(); 176 info(`Done running test: ${test.name}`); 177 } 178 }); 179 180 </script> 181 </pre> 182 </body> 183 </html>