tor-browser

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

outbound-rtp.https.html (1962B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <meta name="timeout" content="long">
      4 <title>RTCPeerConnection getStats test related to outbound-rtp stats</title>
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 <script src="../webrtc/RTCPeerConnection-helper.js"></script>
      8 <script>
      9 async function extractOutboundRtpStats(pc, expected) {
     10  // If remote stats are never reported, return after 5 seconds.
     11  const startTime = performance.now();
     12  let stats;
     13  while (true) {
     14    const report = await pc.getStats();
     15    stats = [...report.values()].filter(({type}) => type === 'outbound-rtp');
     16    if (stats.length && stats.every(({active}) => active == expected)) {
     17      break;
     18    }
     19    if (performance.now() > startTime + 5000) {
     20      break;
     21    }
     22  }
     23  return stats;
     24 }
     25 
     26 promise_test(async (test) => {
     27  const pc1 = new RTCPeerConnection();
     28  test.add_cleanup(() => pc1.close());
     29  const pc2 = new RTCPeerConnection();
     30  test.add_cleanup(() => pc2.close());
     31 
     32  const stream = await getNoiseStream({audio: true, video: true});
     33  stream.getTracks().forEach(t => pc1.addTrack(t, stream));
     34  exchangeIceCandidates(pc1, pc2);
     35  exchangeOfferAnswer(pc1, pc2);
     36  await waitForRtpAndRtcpStats(pc1);
     37  let outboundStats = await extractOutboundRtpStats(pc1, true);
     38  assert_equals(outboundStats.length, 2);
     39  assert_true(outboundStats[0].active);
     40  assert_true(outboundStats[1].active);
     41 
     42  pc1.getSenders().forEach(async sender => {
     43    const parameters = sender.getParameters();
     44    parameters.encodings[0].active = false;
     45    await sender.setParameters(parameters);
     46  });
     47  // Avoid any stats caching.
     48  await (new Promise(r => test.step_timeout(r, 100)));
     49 
     50  outboundStats = await extractOutboundRtpStats(pc1, false);
     51  assert_equals(outboundStats.length, 2);
     52  assert_false(outboundStats[0].active);
     53  assert_false(outboundStats[1].active);
     54 }, 'setting an encoding to false is reflected in outbound-rtp stats');
     55 </script>