Files
sousa-gecko/devtools/server/actors/targets/session-data-processors/thread-configuration.js
T
Alexandre Poirot c684086c38 Bug 1944109 - [devtools] Allow debugging scripts via their WindowGlobal target when reusing the browser toolbox codepath. r=devtools-reviewers,devtools-backward-compat-reviewers,hbenl,bomsy
The Browser Toolbox currently debug all scripts in a given content process
via the related Content Process Target actor.
Because of this, we have to ignore the WindowGlobal Target actors
for anything related to Sources, breakpoints,...

But VS.Code would benefit from reusing the Browser Toolbox codepath,
while never using the Content Process targets (which have no real meaning for the user in VS.code),
and instead debug the sources via the WindowGlobal Target actors.

Introduce a new configuration to be able to distinguish the two codepaths.

Differential Revision: https://phabricator.services.mozilla.com/D235681
2025-02-27 09:56:47 +00:00

47 lines
1.7 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 {
STATES: THREAD_STATES,
} = require("resource://devtools/server/actors/thread.js");
const Targets = require("resource://devtools/server/actors/targets/index.js");
module.exports = {
async addOrSetSessionDataEntry(targetActor, entries) {
// The Browser Toolbox uses the Content Process target's Thread actor to debug all scripts
// running into a given process. This includes WindowGlobal scripts.
// Because of this, and in such configuration, we have to ignore the WindowGlobal targets.
if (
targetActor.sessionContext.type == "all" &&
!targetActor.sessionContext.enableWindowGlobalThreadActors &&
targetActor.targetType === Targets.TYPES.FRAME &&
targetActor.typeName != "parentProcessTarget"
) {
return;
}
const threadOptions = {};
for (const { key, value } of entries) {
threadOptions[key] = value;
}
if (targetActor.threadActor.state == THREAD_STATES.DETACHED) {
await targetActor.threadActor.attach(threadOptions);
} else if (!targetActor.threadActor.isDestroyed()) {
// Regarding `updateType`, `entries` is always a partial set of configurations.
// We will acknowledge the passed attribute, but if we had set some other attributes
// before this call, they will stay as-is.
// So it is as if this session data was also using "add" updateType.
await targetActor.threadActor.reconfigure(threadOptions);
}
},
removeSessionDataEntry() {
// configuration data entries are always added/updated, never removed.
},
};