tor-browser

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

sframe-transform-in-worker.https.html (2432B)


      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" controls autoplay></video>
     13        <script src ="routines.js"></script>
     14        <script>
     15 async function waitForMessage(worker, data)
     16 {
     17    while (true) {
     18        const received = await new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
     19        if (data === received)
     20            return;
     21    }
     22 }
     23 
     24 promise_test(async (test) => {
     25    worker = new Worker('sframe-transform-worker.js');
     26    const data = await new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
     27    assert_equals(data, "registered");
     28    await setMediaPermission("granted", ["camera"]);
     29    const localStream = await navigator.mediaDevices.getUserMedia({ video: true });
     30 
     31    let sender, receiver;
     32    const senderTransform = new SFrameTransform({ compatibilityMode: "H264" });
     33    const receiverTransform = new RTCRtpScriptTransform(worker, "SFrameRTCRtpTransform");
     34 
     35    const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
     36    senderTransform.setEncryptionKey(key);
     37 
     38    const startedPromise = new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
     39 
     40    const stream = await new Promise((resolve, reject) => {
     41        createConnections(test, (firstConnection) => {
     42            pc1 = firstConnection;
     43            sender = firstConnection.addTrack(localStream.getTracks()[0], localStream);
     44            sender.transform = senderTransform;
     45        }, (secondConnection) => {
     46            pc2 = secondConnection;
     47            secondConnection.ontrack = (trackEvent) => {
     48                receiver = trackEvent.receiver;
     49                receiver.transform = receiverTransform;
     50                resolve(trackEvent.streams[0]);
     51            };
     52        });
     53        test.step_timeout(() => reject("Test timed out"), 5000);
     54    });
     55 
     56    video1.srcObject = stream;
     57    await video1.play();
     58 }, "video exchange with SFrame transform in worker");
     59        </script>
     60    </body>
     61 </html>