Link to 'Permissions-Policy' header from FrameDetailsView

If a feature is disabled by a 'permissions-policy' or 'feature-policy'
header, display a link from the frame details' permission-policy section
pointing directly to this header in the network panel.

Video: https://i.imgur.com/OmiXv4z.mp4

Bug: 1158827
Change-Id: I18c86fffeee6cc905d5b22041ea8ddf4f480df3e
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2810283
Commit-Queue: Wolfgang Beyer <[email protected]>
Reviewed-by: Sigurd Schneider <[email protected]>
diff --git a/front_end/panels/application/FrameDetailsView.ts b/front_end/panels/application/FrameDetailsView.ts
index c48cba0..a7546f9 100644
--- a/front_end/panels/application/FrameDetailsView.ts
+++ b/front_end/panels/application/FrameDetailsView.ts
@@ -414,6 +414,20 @@
             i18nString(UIStrings.disabledByIframe) :
             blockReason === Protocol.Page.PermissionsPolicyBlockReason.Header ? i18nString(UIStrings.disabledByHeader) :
                                                                                 '';
+        const revealHeader = async(): Promise<void> => {
+          if (!linkTargetRequest) {
+            return;
+          }
+          const headerName =
+              linkTargetRequest.responseHeaderValue('permissions-policy') ? 'permissions-policy' : 'feature-policy';
+          const requestLocation = Network.NetworkSearchScope.UIRequestLocation.responseHeaderMatch(
+              linkTargetRequest,
+              {name: headerName, value: ''},
+          );
+          // TODO(crbug.com/1196676) Refactor to use Common.Revealer
+          await Network.NetworkPanel.RequestLocationRevealer.instance().reveal(requestLocation);
+        };
+
         return LitHtml.html`
           <div class="permissions-row">
             <div>
@@ -433,12 +447,11 @@
                                     (): Promise<void> => Common.Revealer.reveal(linkTargetDOMNode),
                                     ) :
                                 LitHtml.nothing}
-            ${
+              ${
             linkTargetRequest ? this.renderIconLink(
                                     'network_panel_icon',
                                     i18nString(UIStrings.clickToShowHeader),
-                                    (): Promise<void> => Network.NetworkPanel.NetworkPanel.selectAndShowRequest(
-                                        linkTargetRequest, Network.NetworkItemView.Tabs.Headers),
+                                    revealHeader,
                                     ) :
                                 LitHtml.nothing}
             </div>