Source code

Revision control

Copy as Markdown

Other Tools

import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
const lazy = {};
XPCOMUtils.defineLazyServiceGetter(
lazy,
"wdm",
"@mozilla.org/dom/workers/workerdebuggermanager;1",
"nsIWorkerDebuggerManager"
);
export class TestWorkerWatcherChild extends JSProcessActorChild {
async receiveMessage(msg) {
switch (msg.name) {
case "Test:StartWatchingWorkers":
this.startWatchingWorkers();
break;
case "Test:StopWatchingWorkers":
this.stopWatchingWorkers();
break;
default:
// Ensure the test case will fail if this JSProcessActorChild does receive
// unexpected messages.
return Promise.reject(
new Error(`Unexpected message received: ${msg.name}`)
);
}
}
startWatchingWorkers() {
if (!this._workerDebuggerListener) {
const actor = this;
this._workerDebuggerListener = {
onRegister(dbg) {
actor.sendAsyncMessage("Test:WorkerSpawned", {
workerType: dbg.type,
workerUrl: dbg.url,
});
},
onUnregister(dbg) {
actor.sendAsyncMessage("Test:WorkerTerminated", {
workerType: dbg.type,
workerUrl: dbg.url,
});
},
};
lazy.wdm.addListener(this._workerDebuggerListener);
}
}
stopWatchingWorkers() {
if (this._workerDebuggerListener) {
lazy.wdm.removeListener(this._workerDebuggerListener);
this._workerDebuggerListener = null;
}
}
willDestroy() {
this.stopWatchingWorkers();
}
}