tor-browser

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

RTCRtpSender.https.html (4828B)


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