| <!doctype html> |
| <title>Test piping data through MediaStreamTrackGenerator in a worker</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script id="workerCode" type="javascript/worker"> |
| self.onmessage = (e) => { |
| try { |
| const generator = new MediaStreamTrackGenerator({kind: 'video'}); |
| e.data.readable.pipeTo(generator.writable); |
| self.postMessage({result: 'Success'}); |
| } catch (e) { |
| self.postMessage({result: 'Failure', error: e}); |
| } |
| } |
| </script> |
| <script> |
| 'use strict'; |
| |
| promise_test(async t => { |
| const workerBlob = new Blob([document.querySelector('#workerCode').textContent], |
| { type: "text/javascript" }); |
| const workerUrl = window.URL.createObjectURL(workerBlob); |
| const worker = new Worker(workerUrl); |
| window.URL.revokeObjectURL(workerUrl); |
| const result = new Promise((resolve, reject) => { |
| worker.onmessage = (e) => { |
| if (e.data.result === 'Failure') { |
| reject('Failed with error ' + e.data.error); |
| } else { |
| resolve(); |
| } |
| }; |
| }); |
| const stream = await navigator.mediaDevices.getUserMedia({ video: true }); |
| const track = stream.getVideoTracks()[0]; |
| const processor = new MediaStreamTrackProcessor({ track: track }); |
| worker.postMessage({ readable: processor.readable }, |
| [processor.readable]); |
| return result; |
| }, 'A worker is able to pipe data through a MediaStreamTrackGenerator without crashing'); |
| </script> |