tor-browser

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

MediaStreamTrack-transfer.https.html (1508B)


      1 <!doctype html>
      2 <title>MediaStreamTrack transfer to Worker</title>
      3 <script src=/resources/testharness.js></script>
      4 <script src=/resources/testharnessreport.js></script>
      5 <script src=/resources/testdriver.js></script>
      6 <script src=/resources/testdriver-vendor.js></script>
      7 <script src=permission-helper.js></script>
      8 <script id="workerCode" type="javascript/worker">
      9 self.onmessage = (e) => {
     10  try {
     11    if(e.data instanceof MediaStreamTrack) {
     12      self.postMessage({result: 'Success'});
     13      return;
     14    } else {
     15      self.postMessage({
     16        result: 'Failure',
     17        error: `${e.data} is not a MediaStreamTrack`
     18      });
     19    }
     20  } catch (error) {
     21    self.postMessage({
     22      result: 'Failure',
     23      error
     24    });
     25  }
     26 }
     27 </script>
     28 <script>
     29 promise_test(async () => {
     30  const workerBlob = new Blob([document.querySelector('#workerCode').textContent],
     31                {type: "text/javascript"});
     32  const workerUrl = window.URL.createObjectURL(workerBlob);
     33  const worker = new Worker(workerUrl);
     34  window.URL.revokeObjectURL(workerUrl);
     35  await setMediaPermission("granted", ["camera"]);
     36  const stream = await navigator.mediaDevices.getDisplayMedia({video: true});
     37  const track = stream.getVideoTracks()[0];
     38  const result = new Promise((resolve, reject) => {
     39    worker.onmessage = (e) => {
     40      if (e.data.result === 'Failure') {
     41        reject('Failed: ' + e.data.error);
     42      } else {
     43        resolve();
     44      }
     45    };
     46  });
     47  worker.postMessage(track, [track]);
     48  return result;
     49 });
     50 </script>