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>