tor-browser

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

RTCRtpReceiver-getParameters.html (4705B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <title>RTCRtpReceiver.prototype.getParameters</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script src="dictionary-helper.js"></script>
      7 <script src="RTCPeerConnection-helper.js"></script>
      8 <script src="RTCRtpParameters-helper.js"></script>
      9 <script>
     10  'use strict';
     11 
     12  // Test is based on the following editor draft:
     13  // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
     14 
     15  // The following helper functions are called from RTCRtpParameters-helper.js:
     16  //   validateReceiverRtpParameters
     17 
     18  /*
     19    Validates the RTCRtpParameters returned from RTCRtpReceiver.prototype.getParameters
     20 
     21    5.3.  RTCRtpReceiver Interface
     22      getParameters
     23        When getParameters is called, the RTCRtpParameters dictionary is constructed
     24        as follows:
     25 
     26        - The headerExtensions sequence is populated based on the header extensions that
     27          the receiver is currently prepared to receive.
     28 
     29        - The codecs sequence is populated based on the codecs that the receiver is currently
     30          prepared to receive.
     31 
     32        - rtcp.reducedSize is set to true if the receiver is currently prepared to receive
     33          reduced-size RTCP packets, and false otherwise. rtcp.cname is left undefined.
     34  */
     35  promise_test(async t => {
     36    const pc = new RTCPeerConnection();
     37    t.add_cleanup(() => pc.close());
     38    pc.addTransceiver('audio');
     39    const callee = await doOfferAnswerExchange(t, pc);
     40    const param = callee.getTransceivers()[0].receiver.getParameters();
     41    validateReceiverRtpParameters(param);
     42 
     43    assert_greater_than(param.headerExtensions.length, 0);
     44    assert_greater_than(param.codecs.length, 0);
     45  }, 'getParameters() with audio receiver');
     46 
     47  promise_test(async t => {
     48    const pc = new RTCPeerConnection();
     49    t.add_cleanup(() => pc.close());
     50    pc.addTransceiver('video');
     51    const callee = await doOfferAnswerExchange(t, pc);
     52    const param = callee.getTransceivers()[0].receiver.getParameters();
     53    validateReceiverRtpParameters(param);
     54 
     55    assert_greater_than(param.headerExtensions.length, 0);
     56    assert_greater_than(param.codecs.length, 0);
     57  }, 'getParameters() with video receiver');
     58 
     59  promise_test(async t => {
     60    const pc = new RTCPeerConnection();
     61    t.add_cleanup(() => pc.close());
     62    pc.addTransceiver('video', {
     63      sendEncodings: [
     64        { rid: "rid1" },
     65        { rid: "rid2" }
     66      ]
     67    });
     68    const callee = await doOfferAnswerExchange(t, pc);
     69    const param = callee.getTransceivers()[0].receiver.getParameters();
     70    validateReceiverRtpParameters(param);
     71    assert_greater_than(param.headerExtensions.length, 0);
     72    assert_greater_than(param.codecs.length, 0);
     73  }, 'getParameters() with simulcast video receiver');
     74 
     75  promise_test(async t => {
     76    const stream = await getNoiseStream({video: true});
     77    t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
     78    const [track] = stream.getTracks();
     79    const caller = new RTCPeerConnection();
     80    t.add_cleanup(() => caller.close());
     81    caller.addTrack(track);
     82    const callee = new RTCPeerConnection();
     83    t.add_cleanup(() => callee.close());
     84    callee.addTrack(track);
     85    var callerReceiver = caller.getTransceivers()[0].receiver;
     86    assert_equals(callerReceiver.getParameters().codecs.length, 0);
     87    assert_equals(callerReceiver.getParameters().headerExtensions.length, 0,
     88      "no caller header extensions before offer");
     89    const offer = await caller.createOffer();
     90    await caller.setLocalDescription(offer);
     91    await callee.setRemoteDescription(offer);
     92    var calleeReceiver = callee.getTransceivers()[0].receiver;
     93    // Callee transceiver exists only after offer - population of parameters
     94    // should only occur after answer.
     95    assert_equals(calleeReceiver.getParameters().headerExtensions.length, 0,
     96      "no callee header extensions before answer");
     97    assert_equals(calleeReceiver.getParameters().codecs.length, 0);
     98    const answer = await callee.createAnswer();
     99    await callee.setLocalDescription(answer);
    100    assert_greater_than(calleeReceiver.getParameters().codecs.length, 0,
    101      "callee codecs after answer");
    102    await caller.setRemoteDescription(answer);
    103    assert_greater_than(callerReceiver.getParameters().codecs.length, 0,
    104      "caller codecs after answer");
    105    assert_greater_than(callerReceiver.getParameters().headerExtensions.length, 0,
    106      "caller header extensions after O/A");
    107    assert_greater_than(calleeReceiver.getParameters().headerExtensions.length, 0,
    108      "callee header extensions after O/A");
    109  }, 'getParameters() surfaces codecs on two-way receiver at the right time');
    110 
    111 </script>