tor-browser

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

RTCRtpReceiver-getStats.https.html (5301B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <meta name="timeout" content="long">
      4 <title>RTCRtpReceiver.prototype.getStats</title>
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 <script src="RTCPeerConnection-helper.js"></script>
      8 <script>
      9  'use strict';
     10 
     11  promise_test(async t => {
     12    const caller = new RTCPeerConnection();
     13    t.add_cleanup(() => caller.close());
     14    const callee = new RTCPeerConnection();
     15    t.add_cleanup(() => callee.close());
     16 
     17    const stream = await getNoiseStream({audio:true});
     18    t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
     19    const [track] = stream.getTracks();
     20    callee.addTrack(track, stream);
     21 
     22    const { receiver } = caller.addTransceiver('audio');
     23 
     24    exchangeIceCandidates(caller, callee);
     25    await exchangeOfferAnswer(caller, callee);
     26    await listenToConnected(callee);
     27    await waitForTrackUnmuted(receiver.track);
     28    const statsReport = await receiver.getStats();
     29    assert_true(!![...statsReport.values()].find(({type}) => type === 'inbound-rtp'));
     30  }, 'receiver.getStats() via addTransceiver should return stats report containing inbound-rtp stats');
     31 
     32  promise_test(async t => {
     33    const caller = new RTCPeerConnection();
     34    t.add_cleanup(() => caller.close());
     35    const callee = new RTCPeerConnection();
     36    t.add_cleanup(() => callee.close());
     37    const stream = await getNoiseStream({audio:true});
     38    t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
     39    const [track] = stream.getTracks();
     40    caller.addTrack(track, stream);
     41 
     42    exchangeIceCandidates(caller, callee);
     43    await exchangeOfferAnswer(caller, callee);
     44    const receiver = callee.getReceivers()[0];
     45    await listenToConnected(callee);
     46    await waitForTrackUnmuted(receiver.track);
     47    const statsReport = await receiver.getStats();
     48    assert_true(!![...statsReport.values()].find(({type}) => type === 'inbound-rtp'));
     49  }, 'receiver.getStats() via addTrack should return stats report containing inbound-rtp stats');
     50 
     51  promise_test(async t => {
     52    const caller = new RTCPeerConnection();
     53    t.add_cleanup(() => caller.close());
     54    const callee = new RTCPeerConnection();
     55    t.add_cleanup(() => callee.close());
     56    const stream = await getNoiseStream({audio:true});
     57    t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
     58    const [track] = stream.getTracks();
     59    caller.addTrack(track, stream);
     60 
     61    exchangeIceCandidates(caller, callee);
     62    await exchangeOfferAnswer(caller, callee);
     63    const [receiver] = callee.getReceivers();
     64    await listenToConnected(callee);
     65    await waitForTrackUnmuted(receiver.track);
     66    const [transceiver] = callee.getTransceivers();
     67    const statsPromiseFirst = receiver.getStats();
     68    transceiver.stop();
     69    const statsReportFirst = await statsPromiseFirst;
     70    const statsReportSecond = await receiver.getStats();
     71    assert_true(!![...statsReportFirst.values()].find(({type}) => type === 'inbound-rtp'));
     72    assert_false(!![...statsReportSecond.values()].find(({type}) => type === 'inbound-rtp'));
     73  }, 'receiver.getStats() should work on a stopped transceiver but not have inbound-rtp objects');
     74 
     75  promise_test(async t => {
     76    const caller = new RTCPeerConnection();
     77    t.add_cleanup(() => caller.close());
     78    const callee = new RTCPeerConnection();
     79    t.add_cleanup(() => callee.close());
     80    const stream = await getNoiseStream({audio:true});
     81    t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
     82    const [track] = stream.getTracks();
     83    caller.addTrack(track, stream);
     84 
     85    exchangeIceCandidates(caller, callee);
     86    await exchangeOfferAnswer(caller, callee);
     87    const [receiver] = callee.getReceivers();
     88    await listenToConnected(callee);
     89    await waitForTrackUnmuted(receiver.track);
     90    const statsReportFirst = await receiver.getStats();
     91    callee.close();
     92    const statsReportSecond = await receiver.getStats();
     93    assert_true(!![...statsReportFirst.values()].find(({type}) => type === 'inbound-rtp'));
     94    assert_false(!![...statsReportSecond.values()].find(({type}) => type === 'inbound-rtp'));
     95  }, 'receiver.getStats() should work with a closed PeerConnection but not have inbound-rtp objects');
     96 
     97  promise_test(async t => {
     98    const caller = new RTCPeerConnection();
     99    t.add_cleanup(() => caller.close());
    100    const callee = new RTCPeerConnection();
    101    t.add_cleanup(() => callee.close());
    102    const stream = await getNoiseStream({audio:true});
    103    t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
    104    const [track] = stream.getTracks();
    105    caller.addTrack(track, stream);
    106 
    107    exchangeIceCandidates(caller, callee);
    108    await exchangeOfferAnswer(caller, callee);
    109    const receiver = callee.getReceivers()[0];
    110    await listenToConnected(callee);
    111    await waitForTrackUnmuted(receiver.track);
    112    const statsReport = await receiver.getStats();
    113    assert_true(!![...statsReport.values()].find(({type}) => type === 'candidate-pair'));
    114    assert_true(!![...statsReport.values()].find(({type}) => type === 'local-candidate'));
    115    assert_true(!![...statsReport.values()].find(({type}) => type === 'remote-candidate'));
    116  }, 'receiver.getStats() should return stats report containing ICE candidate stats');
    117 
    118 </script>