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>