Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"].getService(
Ci.nsIWorkerDebuggerManager
);
const BASE_URL =
const WORKER_URL = BASE_URL + "Worker.tracer.js";
const WORKER_DEBUGGER_URL = BASE_URL + "WorkerDebugger.tracer.js";
add_task(async function testTracingWorker() {
const onDbg = waitForWorkerDebugger(WORKER_URL);
info("Instantiate a regular worker");
const worker = new Worker(WORKER_URL);
info("Wait for worker to reply back");
await new Promise(r => (worker.onmessage = r));
info("Wait for WorkerDebugger to be instantiated");
const dbg = await onDbg;
const onDebuggerScriptSentFrames = new Promise(resolve => {
const listener = {
onMessage(msg) {
dbg.removeListener(listener);
resolve(JSON.parse(msg));
},
};
dbg.addListener(listener);
});
info("Evaluate a Worker Debugger test script");
dbg.initialize(WORKER_DEBUGGER_URL);
info("Wait for frames to be notified by the debugger script");
const frames = await onDebuggerScriptSentFrames;
is(frames.length, 3);
// There is a third frame which relates to the usage of Debugger.Object.executeInGlobal
// which we ignore as that's a test side effect.
const lastFrame = frames.at(-1);
const beforeLastFrame = frames.at(-2);
is(beforeLastFrame.depth, 1);
is(beforeLastFrame.formatedDisplayName, "λ foo");
is(beforeLastFrame.prefix, "testWorkerPrefix: ");
ok(beforeLastFrame.frame);
is(lastFrame.depth, 2);
is(lastFrame.formatedDisplayName, "λ bar");
is(lastFrame.prefix, "testWorkerPrefix: ");
ok(lastFrame.frame);
});
function waitForWorkerDebugger(url) {
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);
},
});
});
}