From 2834d00a380ae782e7dea90fbd9ca86af4cf6b66 Mon Sep 17 00:00:00 2001 From: Nicolas Chevobbe Date: Fri, 15 May 2020 16:03:32 +0000 Subject: [PATCH] Bug 1636924 - Remove unnecessary isTopLevel and type properties from onTargetAvailable/onTargetDestroyed callback parameter. r=ochameau. Since targetFronts now have isTopLevel and targetType properties, we can directly use those, as the targetFront is included in the callback parameter. This patch remove those properties and refactor consumer code. Differential Revision: https://phabricator.services.mozilla.com/D74651 --- .../accessibility/accessibility-proxy.js | 4 +- devtools/client/accessibility/panel.js | 4 +- devtools/client/application/initializer.js | 8 ++-- .../client/debugger/src/client/firefox.js | 7 ++-- devtools/client/dom/panel.js | 4 +- devtools/client/framework/toolbox.js | 21 ++++++----- .../client/inspector/animation/animation.js | 4 +- .../client/inspector/changes/ChangesView.js | 8 ++-- devtools/client/inspector/inspector.js | 8 ++-- .../inspector/shared/walker-event-listener.js | 4 +- devtools/client/memory/panel.js | 4 +- .../src/connector/firefox-connector.js | 4 +- devtools/client/performance/panel.js | 6 +-- devtools/client/responsive/ui.js | 4 +- devtools/client/storage/ui.js | 8 ++-- devtools/client/styleeditor/StyleEditorUI.jsm | 8 ++-- devtools/client/webconsole/webconsole-ui.js | 24 ++++-------- .../legacy-listeners/console-messages.js | 8 ++-- .../legacy-listeners/error-messages.js | 8 ++-- .../legacy-listeners/platform-messages.js | 12 ++---- .../resources/legacy-listeners/root-node.js | 10 +---- devtools/shared/resources/resource-watcher.js | 37 +++---------------- devtools/shared/resources/target-list.js | 16 ++------ .../tests/browser_target_list_frames.js | 16 ++++---- .../tests/browser_target_list_preffedoff.js | 20 ++++++---- .../tests/browser_target_list_processes.js | 18 ++++----- .../browser_target_list_switchToTarget.js | 34 +++++++---------- .../tests/browser_target_list_watchTargets.js | 31 +++++++++------- .../tests/browser_target_list_workers.js | 24 +++++++----- .../components/extensions/ExtensionParent.jsm | 4 +- 30 files changed, 159 insertions(+), 209 deletions(-) diff --git a/devtools/client/accessibility/accessibility-proxy.js b/devtools/client/accessibility/accessibility-proxy.js index 120b354140c6..1bb5b90df28d 100644 --- a/devtools/client/accessibility/accessibility-proxy.js +++ b/devtools/client/accessibility/accessibility-proxy.js @@ -307,8 +307,8 @@ class AccessibilityProxy { : this.accessibilityEventsMap; } - async _onTargetAvailable({ targetFront, isTopLevel }) { - if (isTopLevel) { + async _onTargetAvailable({ targetFront }) { + if (targetFront.isTopLevel) { await this._updateTarget(targetFront); } } diff --git a/devtools/client/accessibility/panel.js b/devtools/client/accessibility/panel.js index 419be7217473..f246f1c2c542 100644 --- a/devtools/client/accessibility/panel.js +++ b/devtools/client/accessibility/panel.js @@ -162,8 +162,8 @@ AccessibilityPanel.prototype = { this._opening.then(() => this.refresh()); }, - async onTargetAvailable({ targetFront, isTopLevel, isTargetSwitching }) { - if (isTopLevel) { + async onTargetAvailable({ targetFront, isTargetSwitching }) { + if (targetFront.isTopLevel) { await this.accessibilityProxy.initializeProxyForPanel(targetFront); this.accessibilityProxy.currentTarget.on("navigate", this.onTabNavigated); } diff --git a/devtools/client/application/initializer.js b/devtools/client/application/initializer.js index c08290f26d87..ec1e71acfabf 100644 --- a/devtools/client/application/initializer.js +++ b/devtools/client/application/initializer.js @@ -126,16 +126,16 @@ window.Application = { targetFront.off("navigate", this.handleOnNavigate); }, - onTargetAvailable({ targetFront, isTopLevel }) { - if (!isTopLevel) { + onTargetAvailable({ targetFront }) { + if (!targetFront.isTopLevel) { return; // ignore target frames that are not top level for now } this.setupTarget(targetFront); }, - onTargetDestroyed({ targetFront, isTopLevel }) { - if (!isTopLevel) { + onTargetDestroyed({ targetFront }) { + if (!targetFront.isTopLevel) { return; // ignore target frames that are not top level for now } diff --git a/devtools/client/debugger/src/client/firefox.js b/devtools/client/debugger/src/client/firefox.js index 3661391beb22..37e8f3e81c22 100644 --- a/devtools/client/debugger/src/client/firefox.js +++ b/devtools/client/debugger/src/client/firefox.js @@ -33,10 +33,9 @@ export async function onConnect( async function onTargetAvailable({ targetFront, - isTopLevel, isTargetSwitching, }): Promise { - if (!isTopLevel) { + if (!targetFront.isTopLevel) { return; } @@ -91,8 +90,8 @@ async function onTargetAvailable({ await clientCommands.checkIfAlreadyPaused(); } -function onTargetDestroyed({ targetFront, isTopLevel }): void { - if (isTopLevel) { +function onTargetDestroyed({ targetFront }): void { + if (targetFront.isTopLevel) { targetFront.off("will-navigate", actions.willNavigate); targetFront.off("navigate", actions.navigated); removeEventsTopTarget(targetFront); diff --git a/devtools/client/dom/panel.js b/devtools/client/dom/panel.js index 3602158f011b..a6110748a5a8 100644 --- a/devtools/client/dom/panel.js +++ b/devtools/client/dom/panel.js @@ -130,9 +130,9 @@ DomPanel.prototype = { this.refresh(); }, - onTargetAvailable: function({ isTopLevel, isTargetSwitching }) { + onTargetAvailable: function({ targetFront }) { // Only care about top-level targets. - if (!isTopLevel) { + if (!targetFront.isTopLevel) { return; } diff --git a/devtools/client/framework/toolbox.js b/devtools/client/framework/toolbox.js index 704f281d1273..159df69ca53c 100644 --- a/devtools/client/framework/toolbox.js +++ b/devtools/client/framework/toolbox.js @@ -722,8 +722,8 @@ Toolbox.prototype = { * This method will be called for the top-level target, as well as any potential * additional targets we may care about. */ - async _onTargetAvailable({ type, targetFront, isTopLevel }) { - if (isTopLevel) { + async _onTargetAvailable({ targetFront }) { + if (targetFront.isTopLevel) { // Attach to a new top-level target. // For now, register these event listeners only on the top level target targetFront.on("will-navigate", this._onWillNavigate); @@ -736,19 +736,19 @@ Toolbox.prototype = { }); } - await this._attachTarget({ type, targetFront, isTopLevel }); + await this._attachTarget(targetFront); if (this.hostType !== Toolbox.HostType.PAGE) { await this.store.dispatch(registerTarget(targetFront)); } - if (isTopLevel) { + if (targetFront.isTopLevel) { this.emit("top-target-attached"); } }, - _onTargetDestroyed({ type, targetFront, isTopLevel }) { - if (isTopLevel) { + _onTargetDestroyed({ targetFront }) { + if (targetFront.isTopLevel) { this.detachTarget(); } @@ -764,7 +764,7 @@ Toolbox.prototype = { * And we listen for thread actor events in order to update toolbox UI when * we hit a breakpoint. */ - async _attachTarget({ type, targetFront, isTopLevel }) { + async _attachTarget(targetFront) { await targetFront.attach(); // Start tracking network activity on toolbox open for targets such as tabs. @@ -775,10 +775,13 @@ Toolbox.prototype = { // already tracked by the content process targets. At least in the context // of the Browser Toolbox. // We would have to revisit that for the content toolboxes. - if (isTopLevel || type != TargetList.TYPES.FRAME) { + if ( + targetFront.isTopLevel || + targetFront.targetType != TargetList.TYPES.FRAME + ) { const threadFront = await this._attachAndResumeThread(targetFront); this._startThreadFrontListeners(threadFront); - if (isTopLevel) { + if (targetFront.isTopLevel) { this._threadFront = threadFront; } } diff --git a/devtools/client/inspector/animation/animation.js b/devtools/client/inspector/animation/animation.js index 2f271b5fa093..4bb6b8288f42 100644 --- a/devtools/client/inspector/animation/animation.js +++ b/devtools/client/inspector/animation/animation.js @@ -445,8 +445,8 @@ class AnimationInspector { this.inspector.store.dispatch(updateSidebarSize(size)); } - async onTargetAvailable({ isTopLevel, targetFront }) { - if (isTopLevel) { + async onTargetAvailable({ targetFront }) { + if (targetFront.isTopLevel) { this.animationsFront = await targetFront.getFront("animations"); this.animationsFront.setWalkerActor(this.inspector.walker); this.animationsFront.on("mutations", this.onAnimationsMutation); diff --git a/devtools/client/inspector/changes/ChangesView.js b/devtools/client/inspector/changes/ChangesView.js index 28333cf40a48..2e4419c98665 100644 --- a/devtools/client/inspector/changes/ChangesView.js +++ b/devtools/client/inspector/changes/ChangesView.js @@ -126,26 +126,26 @@ class ChangesView { changesFront.off("clear-changes", this.onClearChanges); } - async onTargetAvailable({ type, targetFront, isTopLevel }) { + async onTargetAvailable({ targetFront }) { targetFront.watchFronts( "changes", this.onChangesFrontAvailable, this.onChangesFrontDestroyed ); - if (isTopLevel) { + if (targetFront.isTopLevel) { targetFront.on("will-navigate", this.onClearChanges); } } - async onTargetDestroyed({ type, targetFront, isTopLevel }) { + async onTargetDestroyed({ targetFront }) { targetFront.unwatchFronts( "changes", this.onChangesFrontAvailable, this.onChangesFrontDestroyed ); - if (isTopLevel) { + if (targetFront.isTopLevel) { targetFront.off("will-navigate", this.onClearChanges); } } diff --git a/devtools/client/inspector/inspector.js b/devtools/client/inspector/inspector.js index b0c4016c7e93..ff01249c7d44 100644 --- a/devtools/client/inspector/inspector.js +++ b/devtools/client/inspector/inspector.js @@ -213,9 +213,9 @@ Inspector.prototype = { return this._deferredOpen(); }, - async _onTargetAvailable({ type, targetFront, isTopLevel }) { + async _onTargetAvailable({ targetFront }) { // Ignore all targets but the top level one - if (!isTopLevel) { + if (!targetFront.isTopLevel) { return; } @@ -229,9 +229,9 @@ Inspector.prototype = { ]); }, - _onTargetDestroyed({ type, targetFront, isTopLevel }) { + _onTargetDestroyed({ targetFront }) { // Ignore all targets but the top level one - if (!isTopLevel) { + if (!targetFront.isTopLevel) { return; } targetFront.off("will-navigate", this._onBeforeNavigate); diff --git a/devtools/client/inspector/shared/walker-event-listener.js b/devtools/client/inspector/shared/walker-event-listener.js index 2ebdf1c7ecc1..ac493176b342 100644 --- a/devtools/client/inspector/shared/walker-event-listener.js +++ b/devtools/client/inspector/shared/walker-event-listener.js @@ -59,7 +59,7 @@ class WalkerEventListener { ); } - async _onTargetAvailable({ type, targetFront, isTopLevel }) { + async _onTargetAvailable({ targetFront }) { const inspectorFront = await targetFront.getFront("inspector"); const { walker } = inspectorFront; for (const [name, listener] of Object.entries(this._listenerMap)) { @@ -67,7 +67,7 @@ class WalkerEventListener { } } - _onTargetDestroyed({ type, targetFront, isTopLevel }) { + _onTargetDestroyed({ targetFront }) { const inspectorFront = targetFront.getCachedFront("inspector"); if (inspectorFront) { const { walker } = inspectorFront; diff --git a/devtools/client/memory/panel.js b/devtools/client/memory/panel.js index 7e600723a098..71728b300533 100644 --- a/devtools/client/memory/panel.js +++ b/devtools/client/memory/panel.js @@ -44,8 +44,8 @@ MemoryPanel.prototype = { return this; }, - async _onTargetAvailable({ targetFront, isTopLevel }) { - if (isTopLevel) { + async _onTargetAvailable({ targetFront }) { + if (targetFront.isTopLevel) { const front = await targetFront.getFront("memory"); await front.attach(); this.initializer.updateFront(front); diff --git a/devtools/client/netmonitor/src/connector/firefox-connector.js b/devtools/client/netmonitor/src/connector/firefox-connector.js index a8e23c5aa171..b88b359f29eb 100644 --- a/devtools/client/netmonitor/src/connector/firefox-connector.js +++ b/devtools/client/netmonitor/src/connector/firefox-connector.js @@ -117,8 +117,8 @@ class FirefoxConnector { await this.addListeners(); } - async onTargetAvailable({ targetFront, isTopLevel, isTargetSwitching }) { - if (!isTopLevel) { + async onTargetAvailable({ targetFront, isTargetSwitching }) { + if (!targetFront.isTopLevel) { return; } diff --git a/devtools/client/performance/panel.js b/devtools/client/performance/panel.js index 066f5bb04f04..b8e5ca45bf9e 100644 --- a/devtools/client/performance/panel.js +++ b/devtools/client/performance/panel.js @@ -116,11 +116,9 @@ PerformancePanel.prototype = { * @param {TargetFront} - targetFront * As we are watching only FRAME type for this panel, * the target should be a instance of BrowsingContextTarget. - * @param {Boolean} - isTopLevel - * true if the target is a full page. */ - async _handleTargetAvailable({ targetFront, isTopLevel }) { - if (isTopLevel) { + async _handleTargetAvailable({ targetFront }) { + if (targetFront.isTopLevel) { const { PerformanceController, PerformanceView } = this.panelWin; const performanceFront = await targetFront.getFront("performance"); diff --git a/devtools/client/responsive/ui.js b/devtools/client/responsive/ui.js index b07d6a7a98b2..bd9db4e2250c 100644 --- a/devtools/client/responsive/ui.js +++ b/devtools/client/responsive/ui.js @@ -1177,8 +1177,8 @@ class ResponsiveUI { return this.browserWindow; } - async onTargetAvailable({ isTopLevel, targetFront }) { - if (isTopLevel) { + async onTargetAvailable({ targetFront }) { + if (targetFront.isTopLevel) { this.responsiveFront = await targetFront.getFront("responsive"); await this.restoreActorState(); } diff --git a/devtools/client/storage/ui.js b/devtools/client/storage/ui.js index 588ec5af3063..eff005a5fa5f 100644 --- a/devtools/client/storage/ui.js +++ b/devtools/client/storage/ui.js @@ -279,10 +279,10 @@ class StorageUI { ); } - async _onTargetAvailable({ type, targetFront, isTopLevel }) { + async _onTargetAvailable({ targetFront }) { // Only support top level target and navigation to new processes. // i.e. ignore additional targets created for remote - if (!isTopLevel) { + if (!targetFront.isTopLevel) { return; } @@ -324,10 +324,10 @@ class StorageUI { } } - _onTargetDestroyed({ type, targetFront, isTopLevel }) { + _onTargetDestroyed({ targetFront }) { // Only support top level target and navigation to new processes. // i.e. ignore additional targets created for remote - if (!isTopLevel) { + if (!targetFront.isTopLevel) { return; } diff --git a/devtools/client/styleeditor/StyleEditorUI.jsm b/devtools/client/styleeditor/StyleEditorUI.jsm index f3b05fb0a73c..639c64a21b88 100644 --- a/devtools/client/styleeditor/StyleEditorUI.jsm +++ b/devtools/client/styleeditor/StyleEditorUI.jsm @@ -1133,8 +1133,8 @@ StyleEditorUI.prototype = { this.selectStyleSheet(source, location.line - 1, location.column - 1); }, - async _onTargetAvailable({ targetFront, isTopLevel }) { - if (isTopLevel) { + async _onTargetAvailable({ targetFront }) { + if (targetFront.isTopLevel) { await this.initializeHighlighter(targetFront); const stylesheetsFront = await targetFront.getFront("stylesheets"); @@ -1146,8 +1146,8 @@ StyleEditorUI.prototype = { } }, - async _onTargetDestroyed({ isTopLevel }) { - if (isTopLevel) { + async _onTargetDestroyed({ targetFront }) { + if (targetFront.isTopLevel) { this._clear(); } }, diff --git a/devtools/client/webconsole/webconsole-ui.js b/devtools/client/webconsole/webconsole-ui.js index 88af3d264ffe..98203d50c851 100644 --- a/devtools/client/webconsole/webconsole-ui.js +++ b/devtools/client/webconsole/webconsole-ui.js @@ -373,34 +373,25 @@ class WebConsoleUI { * i.e. it was already existing or has just been created. * * @private - * @param string type - * One of the string of TargetList.TYPES to describe which - * type of target is available. * @param Front targetFront * The Front of the target that is available. * This Front inherits from TargetMixin and is typically * composed of a BrowsingContextTargetFront or ContentProcessTargetFront. - * @param boolean isTopLevel - * If true, means that this is the top level target. - * This typically happens on startup, providing the current - * top level target. But also on navigation, when we navigate - * to an URL which has to be loaded in a distinct process. - * A new top level target is created. */ - async _onTargetAvailable({ type, targetFront, isTopLevel }) { + async _onTargetAvailable({ targetFront }) { const dispatchTargetAvailable = () => { const store = this.wrapper && this.wrapper.getStore(); if (store) { this.wrapper.getStore().dispatch({ type: constants.TARGET_AVAILABLE, - targetType: type, + targetType: targetFront.targetType, }); } }; // This is a top level target. It may update on process switches // when navigating to another domain. - if (isTopLevel) { + if (targetFront.isTopLevel) { const fissionSupport = Services.prefs.getBoolPref( constants.PREFS.FEATURES.BROWSER_TOOLBOX_FISSION ); @@ -425,8 +416,9 @@ class WebConsoleUI { isContentToolbox && Services.prefs.getBoolPref("devtools.contenttoolbox.fission"); if ( - type != this.hud.targetList.TYPES.PROCESS && - (type != this.hud.targetList.TYPES.FRAME || !listenForFrames) + targetFront.targetType != this.hud.targetList.TYPES.PROCESS && + (targetFront.targetType != this.hud.targetList.TYPES.FRAME || + !listenForFrames) ) { return; } @@ -442,8 +434,8 @@ class WebConsoleUI { * @private * See _onTargetAvailable for param's description. */ - _onTargetDestroyed({ type, targetFront, isTopLevel }) { - if (isTopLevel) { + _onTargetDestroyed({ targetFront }) { + if (targetFront.isTopLevel) { this.proxy.disconnect(); this.proxy = null; } else { diff --git a/devtools/shared/resources/legacy-listeners/console-messages.js b/devtools/shared/resources/legacy-listeners/console-messages.js index a1ad75d299a7..b913b5723557 100644 --- a/devtools/shared/resources/legacy-listeners/console-messages.js +++ b/devtools/shared/resources/legacy-listeners/console-messages.js @@ -6,9 +6,7 @@ module.exports = async function({ targetList, - targetType, targetFront, - isTopLevel, isFissionEnabledOnContentToolbox, onAvailable, }) { @@ -20,9 +18,9 @@ module.exports = async function({ const isContentToolbox = targetList.targetFront.isLocalTab; const listenForFrames = isContentToolbox && isFissionEnabledOnContentToolbox; const isAllowed = - isTopLevel || - targetType === targetList.TYPES.PROCESS || - (targetType === targetList.TYPES.FRAME && listenForFrames); + targetFront.isTopLevel || + targetFront.targetType === targetList.TYPES.PROCESS || + (targetFront.targetType === targetList.TYPES.FRAME && listenForFrames); if (!isAllowed) { return; diff --git a/devtools/shared/resources/legacy-listeners/error-messages.js b/devtools/shared/resources/legacy-listeners/error-messages.js index e85284c8c4a6..9dd14e10f183 100644 --- a/devtools/shared/resources/legacy-listeners/error-messages.js +++ b/devtools/shared/resources/legacy-listeners/error-messages.js @@ -6,9 +6,7 @@ module.exports = async function({ targetList, - targetType, targetFront, - isTopLevel, isFissionEnabledOnContentToolbox, onAvailable, }) { @@ -20,9 +18,9 @@ module.exports = async function({ const isContentToolbox = targetList.targetFront.isLocalTab; const listenForFrames = isContentToolbox && isFissionEnabledOnContentToolbox; const isAllowed = - isTopLevel || - targetType === targetList.TYPES.PROCESS || - (targetType === targetList.TYPES.FRAME && listenForFrames); + targetFront.isTopLevel || + targetFront.targetType === targetList.TYPES.PROCESS || + (targetFront.targetType === targetList.TYPES.FRAME && listenForFrames); if (!isAllowed) { return; diff --git a/devtools/shared/resources/legacy-listeners/platform-messages.js b/devtools/shared/resources/legacy-listeners/platform-messages.js index 681fd44c7b02..1dcfdfeed7f5 100644 --- a/devtools/shared/resources/legacy-listeners/platform-messages.js +++ b/devtools/shared/resources/legacy-listeners/platform-messages.js @@ -4,17 +4,13 @@ "use strict"; -module.exports = async function({ - targetList, - targetType, - targetFront, - isTopLevel, - onAvailable, -}) { +module.exports = async function({ targetList, targetFront, onAvailable }) { // Only allow the top level target and processes. // Frames can be ignored as logMessage are never sent to them anyway. // Also ignore workers as they are not supported yet. (see bug 1592584) - const isAllowed = isTopLevel || targetType === targetList.TYPES.PROCESS; + const isAllowed = + targetFront.isTopLevel || + targetFront.targetType === targetList.TYPES.PROCESS; if (!isAllowed) { return; } diff --git a/devtools/shared/resources/legacy-listeners/root-node.js b/devtools/shared/resources/legacy-listeners/root-node.js index 6b048a8915b4..4e1ce54a6082 100644 --- a/devtools/shared/resources/legacy-listeners/root-node.js +++ b/devtools/shared/resources/legacy-listeners/root-node.js @@ -4,14 +4,8 @@ "use strict"; -module.exports = async function({ - targetList, - targetType, - targetFront, - isTopLevel, - onAvailable, -}) { - if (!isTopLevel) { +module.exports = async function({ targetList, targetFront, onAvailable }) { + if (!targetFront.isTopLevel) { return; } diff --git a/devtools/shared/resources/resource-watcher.js b/devtools/shared/resources/resource-watcher.js index 7ac5811759dc..497ed9638f4a 100644 --- a/devtools/shared/resources/resource-watcher.js +++ b/devtools/shared/resources/resource-watcher.js @@ -136,21 +136,12 @@ class ResourceWatcher { /** * Method called by the TargetList for each already existing or target which has just been created. * - * @param {string} type - * One of the string of TargetList.TYPES to describe which - * type of target is available. * @param {Front} targetFront * The Front of the target that is available. * This Front inherits from TargetMixin and is typically * composed of a BrowsingContextTargetFront or ContentProcessTargetFront. - * @param {boolean} isTopLevel - * If true, means that this is the top level target. - * This typically happens on startup, providing the current - * top level target. But also on navigation, when we navigate - * to an URL which has to be loaded in a distinct process. - * A new top level target is created. */ - async _onTargetAvailable({ type, targetFront, isTopLevel }) { + async _onTargetAvailable({ targetFront }) { // For each resource type... for (const resourceType of Object.values(ResourceWatcher.TYPES)) { // ...which has at least one listener... @@ -158,12 +149,7 @@ class ResourceWatcher { continue; } // ...request existing resource and new one to come from this one target - await this._watchResourcesForTarget( - type, - targetFront, - isTopLevel, - resourceType - ); + await this._watchResourcesForTarget(targetFront, resourceType); } } @@ -171,7 +157,7 @@ class ResourceWatcher { * Method called by the TargetList when a target has just been destroyed * See _onTargetAvailable for arguments, they are the same. */ - _onTargetDestroyed({ type, targetFront }) { + _onTargetDestroyed({ targetFront }) { //TODO: Is there a point in doing anything? // // We could remove the available/destroyed event, but as the target is destroyed @@ -269,14 +255,7 @@ class ResourceWatcher { for (const targetType of this.targetList.ALL_TYPES) { // XXX: May be expose a getReallyAllTarget() on TargetList? for (const target of this.targetList.getAllTargets(targetType)) { - promises.push( - this._watchResourcesForTarget( - targetType, - target, - target == this.targetList.targetFront, - resourceType - ) - ); + promises.push(this._watchResourcesForTarget(target, resourceType)); } } await Promise.all(promises); @@ -286,7 +265,7 @@ class ResourceWatcher { * Call backward compatibility code from `LegacyListeners` in order to listen for a given * type of resource from a given target. */ - _watchResourcesForTarget(targetType, targetFront, isTopLevel, resourceType) { + _watchResourcesForTarget(targetFront, resourceType) { const onAvailable = this._onResourceAvailable.bind( this, targetFront, @@ -294,9 +273,7 @@ class ResourceWatcher { ); return LegacyListeners[resourceType]({ targetList: this.targetList, - targetType, targetFront, - isTopLevel, isFissionEnabledOnContentToolbox: this.contentToolboxFissionPrefValue, onAvailable, }); @@ -367,13 +344,11 @@ const LegacyListeners = { .PLATFORM_MESSAGES]: require("devtools/shared/resources/legacy-listeners/platform-messages"), async [ResourceWatcher.TYPES.DOCUMENT_EVENTS]({ targetList, - targetType, targetFront, - isTopLevel, onAvailable, }) { // DocumentEventsListener of webconsole handles only top level document. - if (!isTopLevel) { + if (!targetFront.isTopLevel) { return; } diff --git a/devtools/shared/resources/target-list.js b/devtools/shared/resources/target-list.js index aa275d9ffa44..6f9ac3a5de66 100644 --- a/devtools/shared/resources/target-list.js +++ b/devtools/shared/resources/target-list.js @@ -127,28 +127,22 @@ class TargetList { // Map the descriptor typeName to a target type. const targetType = this.getTargetType(targetFront); - const isTopLevel = targetFront == this.targetFront; targetFront.setTargetType(targetType); - targetFront.setIsTopLevel(isTopLevel); + targetFront.setIsTopLevel(targetFront == this.targetFront); this._targets.add(targetFront); // Notify the target front creation listeners await this._createListeners.emitAsync(targetType, { - type: targetType, targetFront, - isTopLevel, isTargetSwitching, }); } _onTargetDestroyed(targetFront, isTargetSwitching = false) { - const targetType = targetFront.targetType; - this._destroyListeners.emit(targetType, { - type: targetType, + this._destroyListeners.emit(targetFront.targetType, { targetFront, - isTopLevel: targetFront.isTopLevel, isTargetSwitching, }); this._targets.delete(targetFront); @@ -301,10 +295,8 @@ class TargetList { * The type of target to listen for. Constant of TargetList.TYPES. * @param {Function} onAvailable * Callback fired when a target has been just created or was already available. - * The function is called with three arguments: - * - {String} type: The target type + * The function is called with the following arguments: * - {TargetFront} targetFront: The target Front - * - {Boolean} isTopLevel: Is this target the top level one? * - {Boolean} isTargetSwitching: Is this target relates to a navigation and * this replaced a previously available target, this flag will be true * @param {Function} onDestroy @@ -327,9 +319,7 @@ class TargetList { // which may setup things regarding the existing targets // and listen callsite may care about the full initialization await onAvailable({ - type: targetFront.targetType, targetFront, - isTopLevel: targetFront == this.targetFront, isTargetSwitching: false, }); } catch (e) { diff --git a/devtools/shared/resources/tests/browser_target_list_frames.js b/devtools/shared/resources/tests/browser_target_list_frames.js index 0515e66a4353..b268bd28b42a 100644 --- a/devtools/shared/resources/tests/browser_target_list_frames.js +++ b/devtools/shared/resources/tests/browser_target_list_frames.js @@ -61,15 +61,15 @@ async function testBrowserFrames(mainRoot) { // Assert that watchTargets will call the create callback for all existing frames const targets = []; - const onAvailable = ({ type, targetFront, isTopLevel }) => { + const onAvailable = ({ targetFront }) => { is( - type, + targetFront.targetType, TargetList.TYPES.FRAME, "We are only notified about frame targets" ); ok( - targetFront == target ? isTopLevel : !isTopLevel, - "isTopLevel argument is correct" + targetFront == target ? targetFront.isTopLevel : !targetFront.isTopLevel, + "isTopLevel property is correct" ); targets.push(targetFront); }; @@ -125,15 +125,15 @@ async function testTabFrames(mainRoot) { // Assert that watchTargets will call the create callback for all existing frames const targets = []; - const onAvailable = ({ type, targetFront, isTopLevel }) => { + const onAvailable = ({ targetFront }) => { is( - type, + targetFront.targetType, TargetList.TYPES.FRAME, "We are only notified about frame targets" ); ok( - targetFront == target ? isTopLevel : !isTopLevel, - "isTopLevel argument is correct" + targetFront == target ? targetFront.isTopLevel : !targetFront.isTopLevel, + "isTopLevel property is correct" ); targets.push(targetFront); }; diff --git a/devtools/shared/resources/tests/browser_target_list_preffedoff.js b/devtools/shared/resources/tests/browser_target_list_preffedoff.js index 72aa2268e61c..8a6ef0986526 100644 --- a/devtools/shared/resources/tests/browser_target_list_preffedoff.js +++ b/devtools/shared/resources/tests/browser_target_list_preffedoff.js @@ -60,7 +60,7 @@ async function testPreffedOffMainProcess(mainRoot, mainProcess) { ); const processTargets = []; - const onProcessAvailable = ({ type, targetFront, isTopLevel }) => { + const onProcessAvailable = ({ targetFront }) => { processTargets.push(targetFront); }; await targetList.watchTargets([TargetList.TYPES.PROCESS], onProcessAvailable); @@ -68,13 +68,16 @@ async function testPreffedOffMainProcess(mainRoot, mainProcess) { targetList.unwatchTargets([TargetList.TYPES.PROCESS], onProcessAvailable); const frameTargets = []; - const onFrameAvailable = ({ type, targetFront, isTopLevel }) => { + const onFrameAvailable = ({ targetFront }) => { is( - type, + targetFront.targetType, TargetList.TYPES.FRAME, "We are only notified about frame targets" ); - ok(isTopLevel, "We are only notified about the top level target"); + ok( + targetFront.isTopLevel, + "We are only notified about the top level target" + ); frameTargets.push(targetFront); }; await targetList.watchTargets([TargetList.TYPES.FRAME], onFrameAvailable); @@ -123,13 +126,16 @@ async function testPreffedOffTab(mainRoot) { targetList.unwatchTargets([TargetList.TYPES.PROCESS], onProcessAvailable); const frameTargets = []; - const onFrameAvailable = ({ type, targetFront, isTopLevel }) => { + const onFrameAvailable = ({ targetFront }) => { is( - type, + targetFront.targetType, TargetList.TYPES.FRAME, "We are only notified about frame targets" ); - ok(isTopLevel, "We are only notified about the top level target"); + ok( + targetFront.isTopLevel, + "We are only notified about the top level target" + ); frameTargets.push(targetFront); }; await targetList.watchTargets([TargetList.TYPES.FRAME], onFrameAvailable); diff --git a/devtools/shared/resources/tests/browser_target_list_processes.js b/devtools/shared/resources/tests/browser_target_list_processes.js index 4d517f932b2d..3267cb9b7c44 100644 --- a/devtools/shared/resources/tests/browser_target_list_processes.js +++ b/devtools/shared/resources/tests/browser_target_list_processes.js @@ -62,22 +62,22 @@ async function testProcesses(targetList, target) { // Assert that watchTargets will call the create callback for all existing frames const targets = new Set(); - const onAvailable = ({ type, targetFront, isTopLevel }) => { + const onAvailable = ({ targetFront }) => { if (targets.has(targetFront)) { ok(false, "The same target is notified multiple times via onAvailable"); } is( - type, + targetFront.targetType, TargetList.TYPES.PROCESS, "We are only notified about process targets" ); ok( - targetFront == target ? isTopLevel : !isTopLevel, - "isTopLevel argument is correct" + targetFront == target ? targetFront.isTopLevel : !targetFront.isTopLevel, + "isTopLevel property is correct" ); targets.add(targetFront); }; - const onDestroyed = ({ type, targetFront, isTopLevel }) => { + const onDestroyed = ({ targetFront }) => { if (!targets.has(targetFront)) { ok( false, @@ -85,12 +85,12 @@ async function testProcesses(targetList, target) { ); } is( - type, + targetFront.targetType, TargetList.TYPES.PROCESS, "We are only notified about process targets" ); ok( - !isTopLevel, + !targetFront.isTopLevel, "We are never notified about the top level target destruction" ); targets.delete(targetFront); @@ -115,7 +115,7 @@ async function testProcesses(targetList, target) { const previousTargets = new Set(targets); // Assert that onAvailable is called for processes created *after* the call to watchTargets const onProcessCreated = new Promise(resolve => { - const onAvailable2 = ({ type, targetFront, isTopLevel }) => { + const onAvailable2 = ({ targetFront }) => { if (previousTargets.has(targetFront)) { return; } @@ -139,7 +139,7 @@ async function testProcesses(targetList, target) { // Assert that onDestroyed is called for destroyed processes const onProcessDestroyed = new Promise(resolve => { const onAvailable3 = () => {}; - const onDestroyed3 = ({ type, targetFront, isTopLevel }) => { + const onDestroyed3 = ({ targetFront }) => { resolve(targetFront); targetList.unwatchTargets( [TargetList.TYPES.PROCESS], diff --git a/devtools/shared/resources/tests/browser_target_list_switchToTarget.js b/devtools/shared/resources/tests/browser_target_list_switchToTarget.js index f88e1af7fe74..1406debfd587 100644 --- a/devtools/shared/resources/tests/browser_target_list_switchToTarget.js +++ b/devtools/shared/resources/tests/browser_target_list_switchToTarget.js @@ -47,22 +47,19 @@ async function testSwitchToTarget(client) { const frameTargets = []; let currentTarget = firstTarget; - const onFrameAvailable = ({ - type, - targetFront, - isTopLevel, - isTargetSwitching, - }) => { + const onFrameAvailable = ({ targetFront, isTargetSwitching }) => { is( - type, + targetFront.targetType, TargetList.TYPES.FRAME, "We are only notified about frame targets" ); ok( - targetFront == currentTarget ? isTopLevel : !isTopLevel, - "isTopLevel argument is correct" + targetFront == currentTarget + ? targetFront.isTopLevel + : !targetFront.isTopLevel, + "isTopLevel property is correct" ); - if (isTopLevel) { + if (targetFront.isTopLevel) { // When calling watchTargets, this will be false, but it will be true when calling switchToTarget is( isTargetSwitching, @@ -75,22 +72,19 @@ async function testSwitchToTarget(client) { frameTargets.push(targetFront); }; const destroyedTargets = []; - const onFrameDestroyed = ({ - type, - targetFront, - isTopLevel, - isTargetSwitching, - }) => { + const onFrameDestroyed = ({ targetFront, isTargetSwitching }) => { is( - type, + targetFront.targetType, TargetList.TYPES.FRAME, "target-destroyed: We are only notified about frame targets" ); ok( - targetFront == firstTarget ? isTopLevel : !isTopLevel, - "target-destroyed: isTopLevel argument is correct" + targetFront == firstTarget + ? targetFront.isTopLevel + : !targetFront.isTopLevel, + "target-destroyed: isTopLevel property is correct" ); - if (isTopLevel) { + if (targetFront.isTopLevel) { is( isTargetSwitching, true, diff --git a/devtools/shared/resources/tests/browser_target_list_watchTargets.js b/devtools/shared/resources/tests/browser_target_list_watchTargets.js index 4d3808dd408b..a8e2eda98d08 100644 --- a/devtools/shared/resources/tests/browser_target_list_watchTargets.js +++ b/devtools/shared/resources/tests/browser_target_list_watchTargets.js @@ -45,22 +45,22 @@ async function testWatchTargets(mainRoot) { "Check that onAvailable is called for processes already created *before* the call to watchTargets" ); const targets = new Set(); - const onAvailable = ({ type, targetFront, isTopLevel }) => { + const onAvailable = ({ targetFront }) => { if (targets.has(targetFront)) { ok(false, "The same target is notified multiple times via onAvailable"); } is( - type, + targetFront.targetType, TargetList.TYPES.PROCESS, "We are only notified about process targets" ); ok( - targetFront == target ? isTopLevel : !isTopLevel, - "isTopLevel argument is correct" + targetFront == target ? targetFront.isTopLevel : !targetFront.isTopLevel, + "isTopLevel property is correct" ); targets.add(targetFront); }; - const onDestroyed = ({ type, targetFront, isTopLevel }) => { + const onDestroyed = ({ targetFront }) => { if (!targets.has(targetFront)) { ok( false, @@ -68,12 +68,12 @@ async function testWatchTargets(mainRoot) { ); } is( - type, + targetFront.targetType, TargetList.TYPES.PROCESS, "We are only notified about process targets" ); ok( - !isTopLevel, + !targetFront.isTopLevel, "We are not notified about the top level target destruction" ); targets.delete(targetFront); @@ -105,7 +105,7 @@ async function testWatchTargets(mainRoot) { ); const previousTargets = new Set(targets); const onProcessCreated = new Promise(resolve => { - const onAvailable2 = ({ type, targetFront, isTopLevel }) => { + const onAvailable2 = ({ targetFront }) => { if (previousTargets.has(targetFront)) { return; } @@ -130,7 +130,7 @@ async function testWatchTargets(mainRoot) { // Assert that onDestroyed is called for destroyed processes const onProcessDestroyed = new Promise(resolve => { const onAvailable3 = () => {}; - const onDestroyed3 = ({ type, targetFront, isTopLevel }) => { + const onDestroyed3 = ({ targetFront }) => { resolve(targetFront); targetList.unwatchTargets( [TargetList.TYPES.PROCESS], @@ -185,22 +185,25 @@ async function testContentProcessTarget(mainRoot) { // as listening for additional target is only enable for the parent process target. // See bug 1593928. const targets = new Set(); - const onAvailable = ({ type, targetFront, isTopLevel }) => { + const onAvailable = ({ targetFront }) => { if (targets.has(targetFront)) { // This may fail if the top level target is reported by LegacyImplementation // to TargetList and emits an available event for it. ok(false, "The same target is notified multiple times via onAvailable"); } is( - type, + targetFront.targetType, TargetList.TYPES.PROCESS, "We are only notified about process targets" ); is(targetFront, target, "This is the existing top level target"); - ok(isTopLevel, "We are only notified about the top level target"); + ok( + targetFront.isTopLevel, + "We are only notified about the top level target" + ); targets.add(targetFront); }; - const onDestroyed = ({ type, targetFront, isTopLevel }) => { + const onDestroyed = _ => { ok(false, "onDestroyed should never be called in this test"); }; await targetList.watchTargets( @@ -235,7 +238,7 @@ async function testThrowingInOnAvailable(mainRoot) { ); const targets = new Set(); let thrown = false; - const onAvailable = ({ type, targetFront, isTopLevel }) => { + const onAvailable = ({ targetFront }) => { if (!thrown) { thrown = true; throw new Error("Force an exception when processing the first target"); diff --git a/devtools/shared/resources/tests/browser_target_list_workers.js b/devtools/shared/resources/tests/browser_target_list_workers.js index b6764d57da8e..0fcb0159f045 100644 --- a/devtools/shared/resources/tests/browser_target_list_workers.js +++ b/devtools/shared/resources/tests/browser_target_list_workers.js @@ -114,16 +114,16 @@ async function testBrowserWorkers(mainRoot) { "Check that watchTargets will call the create callback for all existing workers" ); const targets = []; - const onAvailable = async ({ type, targetFront, isTopLevel }) => { + const onAvailable = async ({ targetFront }) => { ok( - type === TYPES.WORKER || - type === TYPES.SHARED_WORKER || - type === TYPES.SERVICE_WORKER, + targetFront.targetType === TYPES.WORKER || + targetFront.targetType === TYPES.SHARED_WORKER || + targetFront.targetType === TYPES.SERVICE_WORKER, "We are only notified about worker targets" ); ok( - targetFront == target ? isTopLevel : !isTopLevel, - "isTopLevel argument is correct" + targetFront == target ? targetFront.isTopLevel : !targetFront.isTopLevel, + "isTopLevel property is correct" ); targets.push(targetFront); }; @@ -157,7 +157,7 @@ async function testBrowserWorkers(mainRoot) { // Create a new worker and see if the worker target is reported const onWorkerCreated = new Promise(resolve => { - const onAvailable2 = async ({ type, targetFront, isTopLevel }) => { + const onAvailable2 = async ({ targetFront }) => { if (targets.includes(targetFront)) { return; } @@ -213,9 +213,13 @@ async function testTabWorkers(mainRoot, tab) { // Assert that watchTargets will call the create callback for all existing workers const targets = []; - const onAvailable = async ({ type, targetFront, isTopLevel }) => { - is(type, TYPES.WORKER, "We are only notified about worker targets"); - ok(!isTopLevel, "The workers are never top level"); + const onAvailable = async ({ targetFront }) => { + is( + targetFront.targetType, + TYPES.WORKER, + "We are only notified about worker targets" + ); + ok(!targetFront.isTopLevel, "The workers are never top level"); targets.push(targetFront); }; await targetList.watchTargets([TYPES.WORKER], onAvailable); diff --git a/toolkit/components/extensions/ExtensionParent.jsm b/toolkit/components/extensions/ExtensionParent.jsm index 1a41901e7294..229116f24796 100644 --- a/toolkit/components/extensions/ExtensionParent.jsm +++ b/toolkit/components/extensions/ExtensionParent.jsm @@ -787,8 +787,8 @@ class DevToolsExtensionPageContextParent extends ExtensionPageContextParent { super.shutdown(); } - async _onTargetAvailable({ targetFront, isTopLevel }) { - if (!isTopLevel) { + async _onTargetAvailable({ targetFront }) { + if (!targetFront.isTopLevel) { return; }