From 9e586eb2de02df39e130d348add2f3dd23f94e1b Mon Sep 17 00:00:00 2001 From: Andres Olivares Date: Fri, 5 Feb 2021 16:42:35 +0000 Subject: [PATCH] [module.json extensions] @UI.ContextMenu.Provider pt. 2 Bug: 1134103 Change-Id: Ib61ab27e45e81b648c803de6ed2f6ad5c38da73e Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2678204 Commit-Queue: Andres Olivares Reviewed-by: Tim van der Lippe --- front_end/network/NetworkPanel.js | 16 ++++++++++++++++ front_end/network/module.json | 9 --------- front_end/network/network-meta.ts | 17 +++++++++++++++++ front_end/persistence/PersistenceActions.js | 17 +++++++++++++++++ front_end/persistence/module.json | 11 ----------- front_end/persistence/persistence-meta.ts | 17 +++++++++++++++++ 6 files changed, 67 insertions(+), 20 deletions(-) diff --git a/front_end/network/NetworkPanel.js b/front_end/network/NetworkPanel.js index 4dc4180607..d5e104a880 100644 --- a/front_end/network/NetworkPanel.js +++ b/front_end/network/NetworkPanel.js @@ -843,10 +843,26 @@ export class NetworkPanel extends UI.Panel.Panel { export const displayScreenshotDelay = 1000; +/** + * @type {ContextMenuProvider} + */ +let contextMenuProviderInstance; + /** * @implements {UI.ContextMenu.Provider} */ export class ContextMenuProvider { + /** + * @param {{forceNew: ?boolean}} opts + */ + static instance(opts = {forceNew: null}) { + const {forceNew} = opts; + if (!contextMenuProviderInstance || forceNew) { + contextMenuProviderInstance = new ContextMenuProvider(); + } + + return contextMenuProviderInstance; + } /** * @override * @param {!Event} event diff --git a/front_end/network/module.json b/front_end/network/module.json index 4b170cf711..1b6a285094 100644 --- a/front_end/network/module.json +++ b/front_end/network/module.json @@ -1,14 +1,5 @@ { "extensions": [ - { - "type": "@UI.ContextMenu.Provider", - "contextTypes": [ - "SDK.NetworkRequest", - "SDK.Resource", - "Workspace.UISourceCode" - ], - "className": "Network.NetworkPanel.ContextMenuProvider" - }, { "type": "@Common.Revealer", "contextTypes": [ diff --git a/front_end/network/network-meta.ts b/front_end/network/network-meta.ts index 5a2c264216..3239d8be4d 100644 --- a/front_end/network/network-meta.ts +++ b/front_end/network/network-meta.ts @@ -4,7 +4,9 @@ import * as Common from '../common/common.js'; import * as Root from '../root/root.js'; +import * as SDK from '../sdk/sdk.js'; import * as UI from '../ui/ui.js'; +import * as Workspace from '../workspace/workspace.js'; // eslint-disable-next-line rulesdir/es_modules_import import type * as Network from './network.js'; @@ -335,3 +337,18 @@ UI.ViewManager.registerLocationResolver({ return Network.NetworkPanel.NetworkPanel.instance(); }, }); + +UI.ContextMenu.registerProvider({ + contextTypes() { + return [ + SDK.NetworkRequest.NetworkRequest, + SDK.Resource.Resource, + Workspace.UISourceCode.UISourceCode, + ]; + }, + async loadProvider() { + const Network = await loadNetworkModule(); + return Network.NetworkPanel.ContextMenuProvider.instance(); + }, + experiment: undefined, +}); diff --git a/front_end/persistence/PersistenceActions.js b/front_end/persistence/PersistenceActions.js index 592373c68b..b0de389b1a 100644 --- a/front_end/persistence/PersistenceActions.js +++ b/front_end/persistence/PersistenceActions.js @@ -33,10 +33,27 @@ export const UIStrings = { }; const str_ = i18n.i18n.registerUIStrings('persistence/PersistenceActions.js', UIStrings); const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_); +/** + * @type {ContextMenuProvider} + */ +let contextMenuProviderInstance; + /** * @implements {UI.ContextMenu.Provider} */ export class ContextMenuProvider { + /** + * @param {{forceNew: ?boolean}} opts + */ + static instance(opts = {forceNew: null}) { + const {forceNew} = opts; + if (!contextMenuProviderInstance || forceNew) { + contextMenuProviderInstance = new ContextMenuProvider(); + } + + return contextMenuProviderInstance; + } + /** * @override * @param {!Event} event diff --git a/front_end/persistence/module.json b/front_end/persistence/module.json index 72bdf2e48b..f7004a4c38 100644 --- a/front_end/persistence/module.json +++ b/front_end/persistence/module.json @@ -4,17 +4,6 @@ "components", "sdk" ], - "extensions": [ - { - "type": "@UI.ContextMenu.Provider", - "contextTypes": [ - "Workspace.UISourceCode", - "SDK.Resource", - "SDK.NetworkRequest" - ], - "className": "Persistence.PersistenceActions.ContextMenuProvider" - } - ], "modules": [ "persistence.js", "persistence-legacy.js", diff --git a/front_end/persistence/persistence-meta.ts b/front_end/persistence/persistence-meta.ts index 05b64003b4..b251b1c715 100644 --- a/front_end/persistence/persistence-meta.ts +++ b/front_end/persistence/persistence-meta.ts @@ -5,7 +5,9 @@ import * as Common from '../common/common.js'; import * as i18n from '../i18n/i18n.js'; import * as Root from '../root/root.js'; +import * as SDK from '../sdk/sdk.js'; import * as UI from '../ui/ui.js'; +import * as Workspace from '../workspace/workspace.js'; // eslint-disable-next-line rulesdir/es_modules_import import type * as Persistence from './persistence.js'; @@ -102,3 +104,18 @@ Common.Settings.registerSettingExtension({ }, ], }); + +UI.ContextMenu.registerProvider({ + contextTypes() { + return [ + Workspace.UISourceCode.UISourceCode, + SDK.Resource.Resource, + SDK.NetworkRequest.NetworkRequest, + ]; + }, + async loadProvider() { + const Persistence = await loadPersistenceModule(); + return Persistence.PersistenceActions.ContextMenuProvider.instance(); + }, + experiment: undefined, +});