Add a filter for hiding chrome extensions

Bug: 1257885
Change-Id: I0c5446b2bacb88d8b4c3a92842a609f51d505f64
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4684214
Reviewed-by: Wolfgang Beyer <[email protected]>
Commit-Queue: Ioana Forfotă <[email protected]>
diff --git a/front_end/panels/network/NetworkLogView.ts b/front_end/panels/network/NetworkLogView.ts
index f3dd746..fec3ef1 100644
--- a/front_end/panels/network/NetworkLogView.ts
+++ b/front_end/panels/network/NetworkLogView.ts
@@ -90,6 +90,14 @@
    */
   hidesDataAndBlobUrls: 'Hides data: and blob: URLs',
   /**
+   * @description Label for a filter in the Network panel
+   */
+  chromeExtensions: 'Hide extension requests',
+  /**
+   * @description Tooltip for a filter in the Network panel
+   */
+  hideChromeExtension: 'Hide requests created by Chrome extensions',
+  /**
    *@description Aria accessible name in Network Log View of the Network panel
    */
   resourceTypesToInclude: 'Resource types to include',
@@ -376,6 +384,7 @@
     implements SDK.TargetManager.SDKModelObserver<SDK.NetworkManager.NetworkManager>, NetworkLogViewInterface {
   private readonly networkInvertFilterSetting: Common.Settings.Setting<boolean>;
   private readonly networkHideDataURLSetting: Common.Settings.Setting<boolean>;
+  private readonly networkHideChromeExtensions: Common.Settings.Setting<boolean>;
   private readonly networkShowBlockedCookiesOnlySetting: Common.Settings.Setting<boolean>;
   private readonly networkOnlyBlockedRequestsSetting: Common.Settings.Setting<boolean>;
   private readonly networkOnlyThirdPartySetting: Common.Settings.Setting<boolean>;
@@ -409,6 +418,7 @@
   private readonly onlyBlockedResponseCookiesFilterUI: UI.FilterBar.CheckboxFilterUI;
   private readonly onlyBlockedRequestsUI: UI.FilterBar.CheckboxFilterUI;
   private readonly onlyThirdPartyFilterUI: UI.FilterBar.CheckboxFilterUI;
+  private readonly hideChromeExtensionsUI: UI.FilterBar.CheckboxFilterUI;
   private readonly filterParser: TextUtils.TextUtils.FilterParser;
   private readonly suggestionBuilder: UI.FilterSuggestionBuilder.FilterSuggestionBuilder;
   private dataGrid: DataGrid.SortableDataGrid.SortableDataGrid<NetworkNode>;
@@ -427,6 +437,8 @@
 
     this.networkInvertFilterSetting = Common.Settings.Settings.instance().createSetting('networkInvertFilter', false);
     this.networkHideDataURLSetting = Common.Settings.Settings.instance().createSetting('networkHideDataURL', false);
+    this.networkHideChromeExtensions =
+        Common.Settings.Settings.instance().createSetting('networkHideChromeExtensions', true);
     this.networkShowBlockedCookiesOnlySetting =
         Common.Settings.Settings.instance().createSetting('networkShowBlockedCookiesOnlySetting', false);
     this.networkOnlyBlockedRequestsSetting =
@@ -497,6 +509,13 @@
     UI.Tooltip.Tooltip.install(this.dataURLFilterUI.element(), i18nString(UIStrings.hidesDataAndBlobUrls));
     filterBar.addFilter(this.dataURLFilterUI);
 
+    this.hideChromeExtensionsUI = new UI.FilterBar.CheckboxFilterUI(
+        'chrome-extension', i18nString(UIStrings.chromeExtensions), true, this.networkHideChromeExtensions);
+    this.hideChromeExtensionsUI.addEventListener(
+        UI.FilterBar.FilterUIEvents.FilterChanged, this.filterChanged.bind(this), this);
+    UI.Tooltip.Tooltip.install(this.hideChromeExtensionsUI.element(), i18nString(UIStrings.hideChromeExtension));
+    filterBar.addFilter(this.hideChromeExtensionsUI);
+
     const filterItems =
         Object.values(Common.ResourceType.resourceCategories)
             .map(
@@ -1434,6 +1453,7 @@
     this.dataURLFilterUI.setChecked(false);
     this.onlyBlockedResponseCookiesFilterUI.setChecked(false);
     this.onlyBlockedRequestsUI.setChecked(false);
+    this.hideChromeExtensionsUI.setChecked(true);
     this.resourceCategoryFilterUI.reset();
   }
 
@@ -1787,6 +1807,9 @@
     if (this.onlyThirdPartyFilterUI.checked() && request.isSameSite()) {
       return false;
     }
+    if (this.hideChromeExtensionsUI.checked() && request.scheme === 'chrome-extension') {
+      return false;
+    }
     for (let i = 0; i < this.filters.length; ++i) {
       if (!this.filters[i](request)) {
         return false;