tor-browser

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

MediaStreamTrackGenerator-pipes-data-in-worker.https.html (1531B)


      1 <!doctype html>
      2 <title>Test piping data through MediaStreamTrackGenerator in a worker</title>
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script id="workerCode" type="javascript/worker">
      6 self.onmessage = (e) => {
      7  try {
      8    const generator = new MediaStreamTrackGenerator({kind: 'video'});
      9    e.data.readable.pipeTo(generator.writable);
     10    self.postMessage({result: 'Success'});
     11  } catch (e) {
     12    self.postMessage({result: 'Failure', error: e});
     13  }
     14 }
     15 </script>
     16 <script>
     17 'use strict';
     18 
     19 promise_test(async t => {
     20    const workerBlob = new Blob([document.querySelector('#workerCode').textContent],
     21        { type: "text/javascript" });
     22    const workerUrl = window.URL.createObjectURL(workerBlob);
     23    const worker = new Worker(workerUrl);
     24    window.URL.revokeObjectURL(workerUrl);
     25    const result = new Promise((resolve, reject) => {
     26        worker.onmessage = (e) => {
     27            if (e.data.result === 'Failure') {
     28                reject('Failed with error ' + e.data.error);
     29            } else {
     30                resolve();
     31            }
     32        };
     33    });
     34    const stream = await navigator.mediaDevices.getUserMedia({ video: true });
     35    const track = stream.getVideoTracks()[0];
     36    const processor = new MediaStreamTrackProcessor({ track: track });
     37    worker.postMessage({ readable: processor.readable },
     38        [processor.readable]);
     39    return result;
     40 }, 'A worker is able to pipe data through a MediaStreamTrackGenerator without crashing');
     41 </script>