77 lines
2.3 KiB
JavaScript
77 lines
2.3 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
const wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"].getService(
|
|
Ci.nsIWorkerDebuggerManager
|
|
);
|
|
|
|
const BASE_URL = "chrome://mochitests/content/browser/dom/workers/test/";
|
|
const WORKER_URL = BASE_URL + "WorkerDebugger.initialize_waiting_worker.js";
|
|
const DEBUGGER_URL = BASE_URL + "WorkerDebugger.initialize_waiting_debugger.js";
|
|
|
|
add_task(async function test() {
|
|
const onDbg = waitForRegister(WORKER_URL);
|
|
const worker = new Worker(WORKER_URL);
|
|
|
|
// Wait for the worker to be initialized and have called Atomics.wait
|
|
// otherwise WorkerDebugger.initialize may evaluate the debugger script
|
|
// before the worker is paused on wait().
|
|
info("Wait for worker to be initialized");
|
|
await new Promise(resolve => {
|
|
worker.onmessage = resolve;
|
|
});
|
|
const dbg = await onDbg;
|
|
|
|
info("Calling WorkerDebugger::Initialize");
|
|
const onDebuggerScriptEvaluated = new Promise(resolve => {
|
|
const listener = {
|
|
onMessage(msg) {
|
|
is(msg, "debugger script ran");
|
|
dbg.removeListener(listener);
|
|
resolve();
|
|
},
|
|
};
|
|
dbg.addListener(listener);
|
|
});
|
|
dbg.initialize(DEBUGGER_URL);
|
|
ok(true, "dbg.initialize didn't throw");
|
|
|
|
info("Waiting for debugger script to be evaluated and dispatching a message");
|
|
await onDebuggerScriptEvaluated;
|
|
|
|
info("Terminating the worker and waiting for it to be unregistered");
|
|
const onUnregistered = waitForUnregister(WORKER_URL);
|
|
worker.terminate();
|
|
await onUnregistered;
|
|
});
|
|
|
|
function waitForRegister(url, dbgUrl) {
|
|
return new Promise(function (resolve) {
|
|
wdm.addListener({
|
|
onRegister(dbg) {
|
|
if (dbg.url !== url) {
|
|
return;
|
|
}
|
|
ok(true, "Debugger with url " + url + " should be registered.");
|
|
wdm.removeListener(this);
|
|
resolve(dbg);
|
|
},
|
|
});
|
|
});
|
|
}
|
|
|
|
function waitForUnregister(url) {
|
|
return new Promise(function (resolve) {
|
|
wdm.addListener({
|
|
onUnregister(dbg) {
|
|
if (dbg.url !== url) {
|
|
return;
|
|
}
|
|
ok(true, "Debugger with url " + url + " should be unregistered.");
|
|
wdm.removeListener(this);
|
|
resolve();
|
|
},
|
|
});
|
|
});
|
|
}
|