worker-owner.js (1011B)
1 const is_worker = !('window' in self); 2 const parent_or_self = is_worker ? self : self.parent; 3 4 function startWorkerAndObserveReports(worker_url, wait_for_report) { 5 const worker = new Worker(worker_url); 6 const result_promise = new Promise(resolve => { 7 worker.onmessage = _ => resolve('success'); 8 worker.onerror = _ => resolve('error'); 9 }); 10 worker.postMessage("postMessage('reply to owner from worker');"); 11 12 const report_promise = new Promise(resolve => { 13 const observer = new ReportingObserver(reports => { 14 observer.disconnect(); 15 resolve(reports.map(r => r.toJSON())); 16 }); 17 observer.observe(); 18 }); 19 20 if (wait_for_report) { 21 Promise.all([result_promise, report_promise]).then(results => { 22 parent_or_self.postMessage(results[1]); 23 }); 24 } else { 25 result_promise.then(result => { 26 parent_or_self.postMessage([]); 27 }); 28 } 29 } 30 31 if (is_worker) { 32 onmessage = e => { 33 startWorkerAndObserveReports(e.data.worker_url, e.data.wait_for_report); 34 }; 35 }