tor-browser

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

script-audio-transform.https.html (2682B)


      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="video" autoplay playsInline></video>
     13        <script src="routines.js"></script>
     14        <script>
     15 function waitForMessage(test, port, data)
     16 {
     17    let gotMessage;
     18    const promise = new Promise((resolve, reject) => {
     19        gotMessage = resolve;
     20        test.step_timeout(() => { reject("did not get " + data) }, 5000);
     21    });
     22    port.onmessage = event => {
     23       if (event.data === data)
     24           gotMessage();
     25    };
     26    return promise;
     27 }
     28 
     29 promise_test(async (test) => {
     30    worker = new Worker("script-audio-transform-worker.js");
     31    const data = await new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
     32    assert_equals(data, "registered");
     33 
     34    await setMediaPermission("granted", ["microphone"]);
     35    const localStream = await navigator.mediaDevices.getUserMedia({audio: true});
     36 
     37    const senderChannel = new MessageChannel;
     38    const receiverChannel = new MessageChannel;
     39    const senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', mediaType:'audio', side:'sender', port:senderChannel.port2}, [senderChannel.port2]);
     40    const receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', mediaType:'audio', side:'receiver', port:receiverChannel.port2}, [receiverChannel.port2]);
     41    senderTransform.port = senderChannel.port1;
     42    receiverTransform.port = receiverChannel.port1;
     43 
     44    promise1 = waitForMessage(test, senderTransform.port, "started audio sender");
     45    promise2 = waitForMessage(test, receiverTransform.port, "started audio receiver");
     46 
     47    const stream = await new Promise((resolve, reject) => {
     48        createConnections(test, (firstConnection) => {
     49            sender = firstConnection.addTrack(localStream.getAudioTracks()[0], localStream);
     50            sender.transform = senderTransform;
     51        }, (secondConnection) => {
     52            secondConnection.ontrack = (trackEvent) => {
     53                receiver = trackEvent.receiver;
     54                receiver.transform = receiverTransform;
     55                resolve(trackEvent.streams[0]);
     56            };
     57        });
     58        test.step_timeout(() => reject("Test timed out"), 5000);
     59    });
     60 
     61    await promise1;
     62    await promise2;
     63 
     64    video.srcObject = stream;
     65    return video.play();
     66 });
     67        </script>
     68    </body>
     69 </html>