tor-browser

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

RTCRtpSynchronizationSource-senderCaptureTimeOffset.html (3716B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <!-- This file contains a test that waits for 2 seconds. -->
      4 <meta name="timeout" content="long">
      5 <title>senderCaptureTimeOffset attribute in RTCRtpSynchronizationSource</title>
      6 <div><video id="remote" width="124" height="124" autoplay></video></div>
      7 <script src="/resources/testharness.js"></script>
      8 <script src="/resources/testharnessreport.js"></script>
      9 <script src="/webrtc/RTCPeerConnection-helper.js"></script>
     10 <script src="/webrtc-extensions/RTCRtpSynchronizationSource-helper.js"></script>
     11 <script>
     12 'use strict';
     13 
     14 function listenForSenderCaptureTimeOffset(t, receiver) {
     15  return new Promise((resolve) => {
     16    function listen() {
     17      const ssrcs = receiver.getSynchronizationSources();
     18      assert_true(ssrcs != undefined);
     19      if (ssrcs.length > 0) {
     20        assert_equals(ssrcs.length, 1);
     21        if (ssrcs[0].captureTimestamp != undefined) {
     22          resolve(ssrcs[0].senderCaptureTimeOffset);
     23          return true;
     24        }
     25      }
     26      return false;
     27    };
     28    t.step_wait(listen, 'No abs-capture-time capture time header extension.');
     29  });
     30 }
     31 
     32 // Passes if `getSynchronizationSources()` contains `senderCaptureTimeOffset` if
     33 // and only if expected.
     34 for (const kind of ['audio', 'video']) {
     35  promise_test(async t => {
     36    const [caller, callee] = await initiateSingleTrackCall(
     37        t, /* caps=  */{[kind]: true}, /* absCaptureTimeOffered= */false,
     38        /* absCaptureTimeAnswered= */false);
     39    const receiver = callee.getReceivers()[0];
     40 
     41    for (const ssrc of await listenForSSRCs(t, receiver)) {
     42      assert_equals(typeof ssrc.senderCaptureTimeOffset, 'undefined');
     43    }
     44  }, '[' + kind + '] getSynchronizationSources() should not contain ' +
     45      'senderCaptureTimeOffset if absolute capture time RTP header extension ' +
     46      'is not offered');
     47 
     48  promise_test(async t => {
     49    const [caller, callee] = await initiateSingleTrackCall(
     50        t, /* caps=  */{[kind]: true}, /* absCaptureTimeOffered= */false,
     51        /* absCaptureTimeAnswered= */false);
     52    const receiver = callee.getReceivers()[0];
     53 
     54    for (const ssrc of await listenForSSRCs(t, receiver)) {
     55      assert_equals(typeof ssrc.senderCaptureTimeOffset, 'undefined');
     56    }
     57  }, '[' + kind + '] getSynchronizationSources() should not contain ' +
     58      'senderCaptureTimeOffset if absolute capture time RTP header extension ' +
     59      'is offered, but not answered');
     60 
     61  promise_test(async t => {
     62    const [caller, callee] = await initiateSingleTrackCall(
     63        t, /* caps=  */{[kind]: true}, /* absCaptureTimeOffered= */true,
     64        /* absCaptureTimeAnswered= */true);
     65    const receiver = callee.getReceivers()[0];
     66    let senderCaptureTimeOffset = await listenForSenderCaptureTimeOffset(
     67        t, receiver);
     68    assert_true(senderCaptureTimeOffset != undefined);
     69  }, '[' + kind + '] getSynchronizationSources() should contain ' +
     70      'senderCaptureTimeOffset if absolute capture time RTP header extension ' +
     71      'is negotiated');
     72 }
     73 
     74 // Passes if `senderCaptureTimeOffset` is zero, which is expected since the test
     75 // creates a local peer connection between `caller` and `callee`.
     76 promise_test(async t => {
     77  const [caller, callee] = await initiateSingleTrackCall(
     78      t, /* caps=  */{audio: true, video: true},
     79      /* absCaptureTimeOffered= */true, /* absCaptureTimeAnswered= */true);
     80  const receivers = callee.getReceivers();
     81  assert_equals(receivers.length, 2);
     82 
     83  for (let i = 0; i < 2; ++i) {
     84    let senderCaptureTimeOffset = await listenForSenderCaptureTimeOffset(
     85        t, receivers[i]);
     86    assert_equals(senderCaptureTimeOffset, 0);
     87  }
     88 }, 'Audio and video RTCRtpSynchronizationSource.senderCaptureTimeOffset must ' +
     89   'be zero');
     90 
     91 </script>