78 lines
2.4 KiB
JavaScript
78 lines
2.4 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/. */
|
|
|
|
"use strict";
|
|
|
|
const { Task } = require("devtools/shared/task");
|
|
|
|
loader.lazyRequireGetter(this, "gDevTools",
|
|
"devtools/client/framework/devtools", true);
|
|
loader.lazyRequireGetter(this, "TargetFactory",
|
|
"devtools/client/framework/target", true);
|
|
loader.lazyRequireGetter(this, "Toolbox",
|
|
"devtools/client/framework/toolbox", true);
|
|
|
|
/**
|
|
* Open a window-hosted toolbox to debug the worker associated to the provided
|
|
* worker actor.
|
|
*
|
|
* @param {DebuggerClient} client
|
|
* @param {Object} workerActor
|
|
* worker actor form to debug
|
|
*/
|
|
exports.debugWorker = function (client, workerActor) {
|
|
client.attachWorker(workerActor, (response, workerClient) => {
|
|
let workerTarget = TargetFactory.forWorker(workerClient);
|
|
gDevTools.showToolbox(workerTarget, "jsdebugger", Toolbox.HostType.WINDOW)
|
|
.then(toolbox => {
|
|
toolbox.once("destroy", () => workerClient.detach());
|
|
});
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Retrieve all service worker registrations as well as workers from the parent
|
|
* and child processes.
|
|
*
|
|
* @param {DebuggerClient} client
|
|
* @return {Object}
|
|
* - {Array} registrations
|
|
* Array of ServiceWorkerRegistrationActor forms
|
|
* - {Array} workers
|
|
* Array of WorkerActor forms
|
|
*/
|
|
exports.getWorkerForms = Task.async(function* (client) {
|
|
let registrations = [];
|
|
let workers = [];
|
|
|
|
try {
|
|
// List service worker registrations
|
|
({ registrations } =
|
|
yield client.mainRoot.listServiceWorkerRegistrations());
|
|
|
|
// List workers from the Parent process
|
|
({ workers } = yield client.mainRoot.listWorkers());
|
|
|
|
// And then from the Child processes
|
|
let { processes } = yield client.mainRoot.listProcesses();
|
|
for (let process of processes) {
|
|
// Ignore parent process
|
|
if (process.parent) {
|
|
continue;
|
|
}
|
|
let { form } = yield client.getProcess(process.id);
|
|
let processActor = form.actor;
|
|
let response = yield client.request({
|
|
to: processActor,
|
|
type: "listWorkers"
|
|
});
|
|
workers = workers.concat(response.workers);
|
|
}
|
|
} catch (e) {
|
|
// Something went wrong, maybe our client is disconnected?
|
|
}
|
|
|
|
return { registrations, workers };
|
|
});
|