[overrides] Add "Has overrides" column and filter autocomplete in the Network panel

screenshot: https://crbug.com/1472952#c1

Bug: 1472952
Change-Id: Ic78b58f8cf77e24681093732059542e92fceb895
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4777909
Reviewed-by: Wolfgang Beyer <[email protected]>
Commit-Queue: Jecelyn Yeen <[email protected]>
diff --git a/front_end/panels/network/NetworkLogView.ts b/front_end/panels/network/NetworkLogView.ts
index 3bf3b06..f2cc8ca 100644
--- a/front_end/panels/network/NetworkLogView.ts
+++ b/front_end/panels/network/NetworkLogView.ts
@@ -741,6 +741,30 @@
     return (String(request.statusCode)) === value;
   }
 
+  private static hasOverridesFilter(value: string, request: SDK.NetworkRequest.NetworkRequest): boolean {
+    if (!value) {
+      return false;
+    }
+
+    if (value === overrideFilter.no) {
+      return request.overrideTypes.length === 0;
+    }
+
+    if (value === overrideFilter.yes) {
+      return request.overrideTypes.length > 0;
+    }
+
+    if (value === overrideFilter.content) {
+      return request.overrideTypes.includes('content');
+    }
+
+    if (value === overrideFilter.headers) {
+      return request.overrideTypes.includes('headers');
+    }
+
+    return request.overrideTypes.join(',').includes(value);
+  }
+
   static getHTTPRequestsFilter(request: SDK.NetworkRequest.NetworkRequest): boolean {
     return request.parsedURL.isValid && (request.scheme in HTTPSchemas);
   }
@@ -923,6 +947,10 @@
     this.suggestionBuilder.addItem(NetworkForward.UIFilter.FilterType.LargerThan, '10k');
     this.suggestionBuilder.addItem(NetworkForward.UIFilter.FilterType.LargerThan, '1M');
     this.textFilterUI.setSuggestionProvider(this.suggestionBuilder.completions.bind(this.suggestionBuilder));
+    this.suggestionBuilder.addItem(NetworkForward.UIFilter.FilterType.HasOverrides, overrideFilter.yes);
+    this.suggestionBuilder.addItem(NetworkForward.UIFilter.FilterType.HasOverrides, overrideFilter.no);
+    this.suggestionBuilder.addItem(NetworkForward.UIFilter.FilterType.HasOverrides, overrideFilter.content);
+    this.suggestionBuilder.addItem(NetworkForward.UIFilter.FilterType.HasOverrides, overrideFilter.headers);
   }
 
   private filterChanged(): void {
@@ -1942,6 +1970,9 @@
       case NetworkForward.UIFilter.FilterType.StatusCode:
         return NetworkLogView.statusCodeFilter.bind(null, value);
 
+      case NetworkForward.UIFilter.FilterType.HasOverrides:
+        return NetworkLogView.hasOverridesFilter.bind(null, value);
+
       case NetworkForward.UIFilter.FilterType.ResourceType:
         return NetworkLogView.resourceTypeFilter.bind(null, value);
 
@@ -2414,4 +2445,11 @@
   reset(): void;
 }
 
+export const overrideFilter = {
+  yes: 'yes',
+  no: 'no',
+  content: 'content',
+  headers: 'headers',
+};
+
 export type Filter = (request: SDK.NetworkRequest.NetworkRequest) => boolean;