fune/devtools/shared/commands/index.js
Alexandre Poirot 3a3fca83a3 Bug 1727177 - [devtools] Fix devtools.netmonitor.saveRequestAndResponseBodies preference with new fission codepath. r=bomsy,devtools-backward-compat-reviewers
We weren't applying the preference to the parent process NetworkEventWatcher
because we were only trying to update this via the WebConsole actor.

In addition, this was introducing intermittent failures in browser_toolbox_frames_list.js
because of the pending request made to the console actor.
Doing only one unique request to NetworkEventParent helps reducing the number of requests and intermittents.

Differential Revision: https://phabricator.services.mozilla.com/D123379
2021-09-01 08:30:22 +00:00

81 lines
2.9 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";
// List of all command modules
// (please try to keep the list alphabetically sorted)
/* eslint sort-keys: "error" */
/* eslint-enable sort-keys */
const Commands = {
inspectedWindowCommand:
"devtools/shared/commands/inspected-window/inspected-window-command",
inspectorCommand: "devtools/shared/commands/inspector/inspector-command",
resourceCommand: "devtools/shared/commands/resource/resource-command",
scriptCommand: "devtools/shared/commands/script/script-command",
targetCommand: "devtools/shared/commands/target/target-command",
targetConfigurationCommand:
"devtools/shared/commands/target-configuration/target-configuration-command",
threadConfigurationCommand:
"devtools/shared/commands/thread-configuration/thread-configuration-command",
};
/* eslint-disable sort-keys */
/**
* For a given descriptor and its related Targets, already initialized,
* return the dictionary with all command instances.
* This dictionary is lazy and commands will be loaded and instanciated on-demand.
*/
async function createCommandsDictionary(descriptorFront) {
// Bug 1675763: Watcher actor is not available in all situations yet.
let watcherFront;
const supportsWatcher = descriptorFront.traits?.watcher;
if (supportsWatcher) {
watcherFront = await descriptorFront.getWatcher();
}
const { client } = descriptorFront;
const dictionary = {
// Expose both client and descriptor for legacy codebases, or tests.
// But ideally only commands should interact with these two objects
client,
descriptorFront,
watcherFront,
// Expose for tests
waitForRequestsToSettle() {
return descriptorFront.client.waitForRequestsToSettle();
},
// We want to keep destroy being defined last
async destroy() {
await descriptorFront.destroy();
await client.close();
},
};
for (const name in Commands) {
loader.lazyGetter(dictionary, name, () => {
const Constructor = require(Commands[name]);
return new Constructor({
// Commands can use other commands
commands: dictionary,
// The context to inspect identified by this descriptor
descriptorFront,
// The front for the Watcher Actor, related to the given descriptor
// This is a key actor to watch for targets and resources and pull global actors running in the parent process
watcherFront,
// From here, we could pass DevToolsClient, or any useful protocol classes...
// so that we abstract where and how to fetch all necessary interfaces
// and avoid having to know that you might pull the client via descriptorFront.client
});
});
}
return dictionary;
}
exports.createCommandsDictionary = createCommandsDictionary;