summaryrefslogtreecommitdiffstats
path: root/devtools/client/aboutdebugging/modules/worker.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/aboutdebugging/modules/worker.js')
-rw-r--r--devtools/client/aboutdebugging/modules/worker.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/devtools/client/aboutdebugging/modules/worker.js b/devtools/client/aboutdebugging/modules/worker.js
new file mode 100644
index 000000000..1623088c6
--- /dev/null
+++ b/devtools/client/aboutdebugging/modules/worker.js
@@ -0,0 +1,77 @@
+/* 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 };
+});