WorkerDriver.sys.mjs (1754B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 6 export async function runTestInWorker(script, base, listener) { 7 return new Promise(function (resolve) { 8 const globalHeadUrl = new URL( 9 "resource://testing-common/dom/quota/test/modules/worker/head.js" 10 ); 11 12 let modules = {}; 13 14 const worker = new Worker(globalHeadUrl.href); 15 16 worker.onmessage = async function (event) { 17 const data = event.data; 18 const moduleName = data.moduleName; 19 const objectName = data.objectName; 20 21 if (moduleName && objectName) { 22 if (!modules[moduleName]) { 23 modules[moduleName] = ChromeUtils.importESModule( 24 "resource://testing-common/dom/quota/test/modules/" + 25 moduleName + 26 ".sys.mjs" 27 ); 28 } 29 await modules[moduleName][objectName].OnMessageReceived(worker, data); 30 return; 31 } 32 33 switch (data.op) { 34 case "ok": 35 listener.onOk(data.value, data.message); 36 break; 37 38 case "is": 39 listener.onIs(data.a, data.b, data.message); 40 break; 41 42 case "info": 43 listener.onInfo(data.message); 44 break; 45 46 case "finish": 47 resolve(); 48 break; 49 50 case "failure": 51 listener.onOk(false, "Worker had a failure: " + data.message); 52 resolve(); 53 break; 54 } 55 }; 56 57 worker.onerror = function (event) { 58 listener.onOk(false, "Worker had an error: " + event.data); 59 resolve(); 60 }; 61 62 const scriptUrl = new URL(script, base); 63 64 const localHeadUrl = new URL("head.js", scriptUrl); 65 66 worker.postMessage([localHeadUrl.href, scriptUrl.href]); 67 }); 68 }