[module.json extensions] Migrate network actions
Bug: 1134103
Change-Id: I7b0860666042035546d6a78e4c659f5f2a5d2ca0
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2584529
Commit-Queue: Andres Olivares <[email protected]>
Reviewed-by: Tim van der Lippe <[email protected]>
diff --git a/front_end/network/NetworkPanel.js b/front_end/network/NetworkPanel.js
index 2493fdb..594aa95 100644
--- a/front_end/network/NetworkPanel.js
+++ b/front_end/network/NetworkPanel.js
@@ -888,11 +888,26 @@
}
}
+/** @type {!ActionDelegate} */
+let networkActionDelegateInstance;
+
/**
* @implements {UI.ActionRegistration.ActionDelegate}
*/
export class ActionDelegate {
/**
+ * @param {{forceNew: ?boolean}=} opts
+ * @return {ActionDelegate}
+ */
+ static instance(opts = {forceNew: null}) {
+ const {forceNew} = opts;
+ if (!networkActionDelegateInstance || forceNew) {
+ networkActionDelegateInstance = new ActionDelegate();
+ }
+ return networkActionDelegateInstance;
+ }
+
+ /**
* @override
* @param {!UI.Context.Context} context
* @param {string} actionId
diff --git a/front_end/network/module.json b/front_end/network/module.json
index f66756b..718f36b 100644
--- a/front_end/network/module.json
+++ b/front_end/network/module.json
@@ -63,86 +63,10 @@
]
},
{
- "type": "action",
- "actionId": "network.toggle-recording",
- "category": "Network",
- "iconClass": "largeicon-start-recording",
- "toggleable": true,
- "toggledIconClass": "largeicon-stop-recording",
- "toggleWithRedColor": true,
- "contextTypes": [
- "Network.NetworkPanel"
- ],
- "className": "Network.NetworkPanel.ActionDelegate",
- "options": [
- {
- "value": true,
- "title": "Record network log"
- },
- {
- "value": false,
- "title": "Stop recording network log"
- }
- ],
- "bindings": [
- {
- "platform": "windows,linux",
- "shortcut": "Ctrl+E"
- },
- {
- "platform": "mac",
- "shortcut": "Meta+E"
- }
- ]
- },
- {
- "type": "action",
- "actionId": "network.hide-request-details",
- "category": "Network",
- "title": "Hide request details",
- "contextTypes": [
- "Network.NetworkPanel"
- ],
- "className": "Network.NetworkPanel.ActionDelegate",
- "bindings": [
- {
- "shortcut": "Esc"
- }
- ]
- },
- {
"type": "@UI.ViewLocationResolver",
"name": "network-sidebar",
"category": "Network",
"className": "Network.NetworkPanel"
- },
- {
- "type": "action",
- "actionId": "network.search",
- "category": "Network",
- "title": "Search",
- "className": "Network.NetworkPanel.ActionDelegate",
- "contextTypes": [
- "Network.NetworkPanel"
- ],
- "bindings": [
- {
- "platform": "mac",
- "shortcut": "Meta+F",
- "keybindSets": [
- "devToolsDefault",
- "vsCode"
- ]
- },
- {
- "platform": "windows,linux",
- "shortcut": "Ctrl+F",
- "keybindSets": [
- "devToolsDefault",
- "vsCode"
- ]
- }
- ]
}
],
"dependencies": [
diff --git a/front_end/network/network-meta.ts b/front_end/network/network-meta.ts
index 5365ee4..afe0953 100644
--- a/front_end/network/network-meta.ts
+++ b/front_end/network/network-meta.ts
@@ -20,6 +20,13 @@
return loadedNetworkModule;
}
+function maybeRetrieveContextTypes<T = unknown>(getClassCallBack: (loadedNetworkModule: typeof Network) => T[]): T[] {
+ if (loadedNetworkModule === undefined) {
+ return [];
+ }
+ return getClassCallBack(loadedNetworkModule);
+}
+
UI.ViewManager.registerViewExtension({
location: UI.ViewManager.ViewLocationValues.PANEL,
id: 'network',
@@ -66,3 +73,88 @@
return Network.NetworkPanel.SearchNetworkView.instance();
},
});
+
+UI.ActionRegistration.registerActionExtension({
+ actionId: 'network.toggle-recording',
+ category: UI.ActionRegistration.ActionCategory.NETWORK,
+ iconClass: UI.ActionRegistration.IconClass.LARGEICON_START_RECORDING,
+ toggleable: true,
+ toggledIconClass: UI.ActionRegistration.IconClass.LARGEICON_STOP_RECORDING,
+ toggleWithRedColor: true,
+ contextTypes() {
+ return maybeRetrieveContextTypes(Network => [Network.NetworkPanel.NetworkPanel]);
+ },
+ async loadActionDelegate() {
+ const Network = await loadNetworkModule();
+ return Network.NetworkPanel.ActionDelegate.instance();
+ },
+ options: [
+ {
+ value: true,
+ title: ls`Record network log`,
+ },
+ {
+ value: false,
+ title: ls`Stop recording network log`,
+ },
+ ],
+ bindings: [
+ {
+ shortcut: 'Ctrl+E',
+ platform: UI.ActionRegistration.Platform.WindowsLinux,
+ },
+ {
+ shortcut: 'Meta+E',
+ platform: UI.ActionRegistration.Platform.Mac,
+ },
+ ],
+});
+
+UI.ActionRegistration.registerActionExtension({
+ actionId: 'network.hide-request-details',
+ category: UI.ActionRegistration.ActionCategory.NETWORK,
+ title: ls`Hide request details`,
+ contextTypes() {
+ return maybeRetrieveContextTypes(Network => [Network.NetworkPanel.NetworkPanel]);
+ },
+ async loadActionDelegate() {
+ const Network = await loadNetworkModule();
+ return Network.NetworkPanel.ActionDelegate.instance();
+ },
+ bindings: [
+ {
+ shortcut: 'Esc',
+ },
+ ],
+});
+
+UI.ActionRegistration.registerActionExtension({
+ actionId: 'network.search',
+ category: UI.ActionRegistration.ActionCategory.NETWORK,
+ title: ls`Search`,
+ contextTypes() {
+ return maybeRetrieveContextTypes(Network => [Network.NetworkPanel.NetworkPanel]);
+ },
+ async loadActionDelegate() {
+ const Network = await loadNetworkModule();
+ return Network.NetworkPanel.ActionDelegate.instance();
+ },
+ bindings: [
+ {
+ platform: UI.ActionRegistration.Platform.Mac,
+ shortcut: 'Meta+F',
+ keybindSets: [
+ UI.ActionRegistration.KeybindSet.DEVTOOLS_DEFAULT,
+ UI.ActionRegistration.KeybindSet.VS_CODE,
+ ],
+ },
+ {
+ platform: UI.ActionRegistration.Platform.WindowsLinux,
+ shortcut: 'Ctrl+F',
+ keybindSets: [
+ UI.ActionRegistration.KeybindSet.DEVTOOLS_DEFAULT,
+ UI.ActionRegistration.KeybindSet.VS_CODE,
+ ],
+ },
+ ],
+});
diff --git a/front_end/ui/ActionRegistration.ts b/front_end/ui/ActionRegistration.ts
index 48c477d..e64a4ae 100644
--- a/front_end/ui/ActionRegistration.ts
+++ b/front_end/ui/ActionRegistration.ts
@@ -312,12 +312,15 @@
export const ActionCategory = {
ELEMENTS: ls`Elements`,
SCREENSHOT: ls`Screenshot`,
+ NETWORK: ls`Network`,
};
type ActionCategory = typeof ActionCategory[keyof typeof ActionCategory];
export const enum IconClass {
LARGEICON_NODE_SEARCH = 'largeicon-node-search',
+ LARGEICON_START_RECORDING = 'largeicon-start-recording',
+ LARGEICON_STOP_RECORDING = 'largeicon-stop-recording',
}
export const enum KeybindSet {