tor-browser

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

RTCRtpSender-getStats.https.html (5364B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <meta name="timeout" content="long">
      4 <title>RTCRtpSender.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    const { sender } = caller.addTransceiver(track);
     21 
     22    exchangeIceCandidates(caller, callee);
     23    await exchangeOfferAnswer(caller, callee);
     24    const [ receiver ] = callee.getReceivers();
     25    await listenToConnected(callee);
     26    await waitForTrackUnmuted(receiver.track);
     27    const statsReport = await sender.getStats();
     28    assert_true(!![...statsReport.values()].find(({type}) => type === 'outbound-rtp'));
     29  }, 'sender.getStats() via addTransceiver should return stats report containing outbound-rtp stats');
     30 
     31  promise_test(async t => {
     32    const caller = new RTCPeerConnection();
     33    t.add_cleanup(() => caller.close());
     34    const callee = new RTCPeerConnection();
     35    t.add_cleanup(() => callee.close());
     36    const stream = await getNoiseStream({audio:true});
     37    t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
     38    const [track] = stream.getTracks();
     39    const sender = caller.addTrack(track, stream);
     40 
     41    exchangeIceCandidates(caller, callee);
     42    await exchangeOfferAnswer(caller, callee);
     43    const [ receiver ] = callee.getReceivers();
     44    await listenToConnected(callee);
     45    await waitForTrackUnmuted(receiver.track);
     46    const statsReport = await sender.getStats();
     47    assert_true(!![...statsReport.values()].find(({type}) => type === 'outbound-rtp'));
     48  }, 'sender.getStats() via addTrack should return stats report containing outbound-rtp stats');
     49 
     50  promise_test(async t => {
     51    const caller = new RTCPeerConnection();
     52    t.add_cleanup(() => caller.close());
     53    const callee = new RTCPeerConnection();
     54    t.add_cleanup(() => callee.close());
     55    const stream = await getNoiseStream({audio:true});
     56    t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
     57    const [track] = stream.getTracks();
     58    caller.addTrack(track, stream);
     59 
     60    exchangeIceCandidates(caller, callee);
     61    await exchangeOfferAnswer(caller, callee);
     62    const [ receiver ] = callee.getReceivers();
     63    await listenToConnected(callee);
     64    await waitForTrackUnmuted(receiver.track);
     65 
     66    const [sender] = caller.getSenders();
     67    const [transceiver] = caller.getTransceivers();
     68    const statsReportFirst = await sender.getStats();
     69    transceiver.stop();
     70    const statsReportSecond = await sender.getStats();
     71    assert_true(!![...statsReportFirst.values()].find(({type}) => type === 'outbound-rtp'));
     72    assert_false(!![...statsReportSecond.values()].find(({type}) => type === 'outbound-rtp'));
     73  }, 'sender.getStats() should work on a stopped transceiver but not have outbound-rtp stats');
     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 [sender] = caller.getSenders();
     91    const statsReportFirst = await sender.getStats();
     92    caller.close();
     93    const statsReportSecond = await sender.getStats();
     94    assert_true(!![...statsReportFirst.values()].find(({type}) => type === 'outbound-rtp'));
     95    assert_false(!![...statsReportSecond.values()].find(({type}) => type === 'outbound-rtp'));
     96  }, 'sender.getStats() should work with a closed PeerConnection but not have outbound-rtp objects');
     97 
     98  promise_test(async t => {
     99    const caller = new RTCPeerConnection();
    100    t.add_cleanup(() => caller.close());
    101    const callee = new RTCPeerConnection();
    102    t.add_cleanup(() => callee.close());
    103    const stream = await getNoiseStream({audio:true});
    104    t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
    105    const [track] = stream.getTracks();
    106    const { sender } = caller.addTransceiver(track);
    107 
    108    exchangeIceCandidates(caller, callee);
    109    await exchangeOfferAnswer(caller, callee);
    110    const [ receiver ] = callee.getReceivers();
    111    await listenToConnected(callee);
    112    await waitForTrackUnmuted(receiver.track);
    113    const statsReport = await sender.getStats();
    114    assert_true(!![...statsReport.values()].find(({type}) => type === 'candidate-pair'));
    115    assert_true(!![...statsReport.values()].find(({type}) => type === 'local-candidate'));
    116    assert_true(!![...statsReport.values()].find(({type}) => type === 'remote-candidate'));
    117  }, 'sender.getStats() should return stats report containing ICE candidate stats');
    118 
    119 </script>