browser_WorkerDebugger_waiting.initialize.js (2359B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 const wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"].getService( 6 Ci.nsIWorkerDebuggerManager 7 ); 8 9 const BASE_URL = "chrome://mochitests/content/browser/dom/workers/test/"; 10 const WORKER_URL = BASE_URL + "WorkerDebugger.initialize_waiting_worker.js"; 11 const DEBUGGER_URL = BASE_URL + "WorkerDebugger.initialize_waiting_debugger.js"; 12 13 add_task(async function test() { 14 const onDbg = waitForRegister(WORKER_URL); 15 const worker = new Worker(WORKER_URL); 16 17 // Wait for the worker to be initialized and have called Atomics.wait 18 // otherwise WorkerDebugger.initialize may evaluate the debugger script 19 // before the worker is paused on wait(). 20 info("Wait for worker to be initialized"); 21 await new Promise(resolve => { 22 worker.onmessage = resolve; 23 }); 24 const dbg = await onDbg; 25 26 info("Calling WorkerDebugger::Initialize"); 27 const onDebuggerScriptEvaluated = new Promise(resolve => { 28 const listener = { 29 onMessage(msg) { 30 is(msg, "debugger script ran"); 31 dbg.removeListener(listener); 32 resolve(); 33 }, 34 }; 35 dbg.addListener(listener); 36 }); 37 dbg.initialize(DEBUGGER_URL); 38 ok(true, "dbg.initialize didn't throw"); 39 40 info("Waiting for debugger script to be evaluated and dispatching a message"); 41 await onDebuggerScriptEvaluated; 42 43 info("Terminating the worker and waiting for it to be unregistered"); 44 const onUnregistered = waitForUnregister(WORKER_URL); 45 worker.terminate(); 46 await onUnregistered; 47 }); 48 49 function waitForRegister(url, dbgUrl) { 50 return new Promise(function (resolve) { 51 wdm.addListener({ 52 onRegister(dbg) { 53 if (dbg.url !== url) { 54 return; 55 } 56 ok(true, "Debugger with url " + url + " should be registered."); 57 wdm.removeListener(this); 58 resolve(dbg); 59 }, 60 }); 61 }); 62 } 63 64 function waitForUnregister(url) { 65 return new Promise(function (resolve) { 66 wdm.addListener({ 67 onUnregister(dbg) { 68 if (dbg.url !== url) { 69 return; 70 } 71 ok(true, "Debugger with url " + url + " should be unregistered."); 72 wdm.removeListener(this); 73 resolve(); 74 }, 75 }); 76 }); 77 }