Add network request context menu entry for creating header override
This CL adds the ability to create header overrides from the list of
network requests in the network panel via the context menu.
If a local folder for storing local overrides has already been
configured beforehand, the context menu takes the user straight to the
'.headers' file where header overrides are to be specified. If
overrides have not been configured before, the user has to name a
local folder for storing overrides first.
Video: https://i.imgur.com/kLGlOtL.mp4
Bug: 1297533
Change-Id: I8b31fe41d922e1662da68320fcc188c596c0a058
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3542245
Reviewed-by: Danil Somsikov <[email protected]>
Commit-Queue: Wolfgang Beyer <[email protected]>
diff --git a/front_end/panels/network/NetworkLogView.ts b/front_end/panels/network/NetworkLogView.ts
index cdedfdd..9d5fca9 100644
--- a/front_end/panels/network/NetworkLogView.ts
+++ b/front_end/panels/network/NetworkLogView.ts
@@ -42,8 +42,10 @@
import * as HAR from '../../models/har/har.js';
import * as IssuesManager from '../../models/issues_manager/issues_manager.js';
import * as Logs from '../../models/logs/logs.js';
+import * as Persistence from '../../models/persistence/persistence.js';
import * as TextUtils from '../../models/text_utils/text_utils.js';
import * as NetworkForward from '../../panels/network/forward/forward.js';
+import * as Sources from '../../panels/sources/sources.js';
import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
import * as Components from '../../ui/legacy/components/utils/utils.js';
@@ -346,6 +348,11 @@
*@description Text in Network Log View of the Network panel
*/
areYouSureYouWantToClearBrowserCookies: 'Are you sure you want to clear browser cookies?',
+ /**
+ *@description A context menu item in the Network Log View of the Network panel
+ * for creating a header override
+ */
+ createResponseHeaderOverride: 'Create response header override',
};
const str_ = i18n.i18n.registerUIStrings('panels/network/NetworkLogView.ts', UIStrings);
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -1576,6 +1583,10 @@
contextMenu.saveSection().appendItem(i18nString(UIStrings.saveAllAsHarWithContent), this.exportAll.bind(this));
+ contextMenu.editSection().appendItem(
+ i18nString(UIStrings.createResponseHeaderOverride),
+ this.#handleCreateResponseHeaderOverrideClick.bind(this, request));
+ contextMenu.editSection().appendSeparator();
contextMenu.editSection().appendItem(i18nString(UIStrings.clearBrowserCache), this.clearBrowserCache.bind(this));
contextMenu.editSection().appendItem(
i18nString(UIStrings.clearBrowserCookies), this.clearBrowserCookies.bind(this));
@@ -1691,6 +1702,27 @@
void stream.close();
}
+ async #handleCreateResponseHeaderOverrideClick(request: SDK.NetworkRequest.NetworkRequest): Promise<void> {
+ if (Persistence.NetworkPersistenceManager.NetworkPersistenceManager.instance().project()) {
+ await this.#revealHeaderOverrideEditor(request);
+ } else { // If folder for local overrides has not been provided yet
+ UI.InspectorView.InspectorView.instance().displaySelectOverrideFolderInfobar(async(): Promise<void> => {
+ await Sources.SourcesNavigator.OverridesNavigatorView.instance().setupNewWorkspace();
+ await this.#revealHeaderOverrideEditor(request);
+ });
+ }
+ }
+
+ async #revealHeaderOverrideEditor(request: SDK.NetworkRequest.NetworkRequest): Promise<void> {
+ const networkPersistanceManager = Persistence.NetworkPersistenceManager.NetworkPersistenceManager.instance();
+ const uiSourceCode = await networkPersistanceManager.getOrCreateHeadersUISourceCodeFromUrl(request.url());
+ if (uiSourceCode) {
+ const sourcesPanel = Sources.SourcesPanel.SourcesPanel.instance();
+ sourcesPanel.showUISourceCode(uiSourceCode);
+ sourcesPanel.revealInNavigator(uiSourceCode);
+ }
+ }
+
private clearBrowserCache(): void {
if (confirm(i18nString(UIStrings.areYouSureYouWantToClearBrowser))) {
SDK.NetworkManager.MultitargetNetworkManager.instance().clearBrowserCache();