tor-browser

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

script-write-twice-transform.https.html (2385B)


      1 <!doctype html>
      2 <html>
      3    <head>
      4        <meta charset="utf-8">
      5 <script src="/resources/testharness.js"></script>
      6        <script src="/resources/testharnessreport.js"></script>
      7        <script src=/resources/testdriver.js></script>
      8 <script src=/resources/testdriver-vendor.js></script>
      9 <script src='../mediacapture-streams/permission-helper.js'></script>
     10    </head>
     11    <body>
     12        <video id="video1" autoplay></video>
     13        <video id="video2" autoplay></video>
     14        <script src ="routines.js"></script>
     15        <script>
     16 async function waitForMessage(worker, data)
     17 {
     18    while (true) {
     19        const received = await new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
     20        if (data === received)
     21            return;
     22    }
     23 }
     24 
     25 promise_test(async (test) => {
     26    worker = new Worker('script-write-twice-transform-worker.js');
     27    const data = await new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
     28    assert_equals(data, "registered");
     29 
     30    await setMediaPermission("granted", ["camera"]);
     31    const localStream = await navigator.mediaDevices.getUserMedia({video: true});
     32 
     33    let sender, receiver;
     34    const senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', side:'sender', role:'encrypt'});
     35    const receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', side:'receiver', role:'decrypt'});
     36 
     37    const startedPromise = new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
     38 
     39    const stream = await new Promise((resolve, reject) => {
     40        createConnections(test, (firstConnection) => {
     41            pc1 = firstConnection;
     42            sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
     43            sender.transform = senderTransform;
     44        }, (secondConnection) => {
     45            pc2 = secondConnection;
     46            secondConnection.ontrack = (trackEvent) => {
     47                receiver = trackEvent.receiver;
     48                receiver.transform = receiverTransform;
     49                resolve(trackEvent.streams[0]);
     50            };
     51        });
     52        test.step_timeout(() => reject("Test timed out"), 5000);
     53    });
     54 
     55    assert_equals(await startedPromise, "started");
     56 
     57    video1.srcObject = stream;
     58    await video1.play();
     59 }, "video exchange with write twice transform");
     60        </script>
     61    </body>
     62 </html>