tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>