tor-browser

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

RTCRtpReceiver.https.html (4571B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <title>RTCRtpReceiver</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script>
      7  'use strict';
      8 
      9  promise_test(async t => {
     10    const pc1 = new RTCPeerConnection();
     11    t.add_cleanup(() => pc1.close());
     12    const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
     13    assert_equals(transceiver.receiver.transport, null);
     14  }, 'RTCRtpReceiver should have a null transport initially');
     15 
     16  promise_test(async t => {
     17    const pc1 = new RTCPeerConnection();
     18    t.add_cleanup(() => pc1.close());
     19    const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
     20    await pc1.setLocalDescription();
     21    assert_true(transceiver.receiver.transport instanceof RTCDtlsTransport);
     22  }, 'RTCRtpReceiver should have a transport after sLD(offer)');
     23 
     24  promise_test(async t => {
     25    const pc1 = new RTCPeerConnection();
     26    t.add_cleanup(() => pc1.close());
     27    const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
     28    await pc1.setLocalDescription();
     29    await pc1.setLocalDescription({type: 'rollback', sdp: ''});
     30    assert_equals(transceiver.receiver.transport, null);
     31  }, 'RTCRtpReceiver should have a null transport after rollback of sLD(offer)');
     32 
     33  promise_test(async t => {
     34    const pc1 = new RTCPeerConnection();
     35    t.add_cleanup(() => pc1.close());
     36    const pc2 = new RTCPeerConnection();
     37    t.add_cleanup(() => pc2.close());
     38    const receiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
     39    await pc2.setRemoteDescription(await pc1.createOffer());
     40    const transceiver = pc2.getTransceivers()[0];
     41    assert_equals(transceiver.receiver.transport, null);
     42  }, 'RTCRtpReceiver should have a null transport after sRD(offer)');
     43 
     44  promise_test(async t => {
     45    const pc1 = new RTCPeerConnection();
     46    t.add_cleanup(() => pc1.close());
     47    const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
     48    await pc1.setLocalDescription();
     49    assert_true(transceiver.sender.transport instanceof RTCDtlsTransport);
     50    assert_true(transceiver.receiver.transport instanceof RTCDtlsTransport);
     51    assert_equals(transceiver.receiver.transport, transceiver.sender.transport);
     52  }, 'RTCRtpReceiver should have the same transport object as its corresponding RTCRtpSender');
     53 
     54  promise_test(async t => {
     55    const pc1 = new RTCPeerConnection({bundlePolicy: 'max-bundle'});
     56    t.add_cleanup(() => pc1.close());
     57    const audioTransceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
     58    const videoTransceiver = pc1.addTransceiver('video', { direction: 'recvonly' });
     59    await pc1.setLocalDescription();
     60    assert_equals(videoTransceiver.receiver.transport, audioTransceiver.receiver.transport);
     61  }, 'RTCRtpReceivers that share a bundle transport should have the same transport object');
     62 
     63  promise_test(async t => {
     64    const pc1 = new RTCPeerConnection({bundlePolicy: 'max-compat'});
     65    t.add_cleanup(() => pc1.close());
     66    const pc2 = new RTCPeerConnection();
     67    t.add_cleanup(() => pc2.close());
     68    const audioTransceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
     69    const videoTransceiver = pc1.addTransceiver('video', { direction: 'recvonly' });
     70    await pc1.setLocalDescription();
     71    assert_not_equals(videoTransceiver.receiver.transport, audioTransceiver.receiver.transport);
     72    await pc2.setRemoteDescription(pc1.localDescription);
     73    await pc1.setRemoteDescription(await pc2.createAnswer());
     74    // pc2 will accept the bundle, so these should be the same now
     75    assert_equals(videoTransceiver.receiver.transport, audioTransceiver.receiver.transport);
     76  }, 'RTCRtpReceivers that do not necessarily share a bundle transport should not have the same transport object');
     77 
     78  promise_test(async t => {
     79    const pc1 = new RTCPeerConnection();
     80    t.add_cleanup(() => pc1.close());
     81    const pc2 = new RTCPeerConnection();
     82    t.add_cleanup(() => pc2.close());
     83 
     84    const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
     85    await pc1.setLocalDescription();
     86    const transportBefore = transceiver.receiver.transport;
     87 
     88    await pc2.setRemoteDescription(pc1.localDescription);
     89    await pc1.setRemoteDescription(await pc2.createAnswer());
     90    await pc1.setLocalDescription(await pc1.createOffer({iceRestart: true}));
     91 
     92    const transportAfter = transceiver.receiver.transport;
     93    assert_equals(transportAfter, transportBefore);
     94  }, 'RTCRtpReceiver should have the same transport object after an ICE restart');
     95 
     96 </script>