chrome-devtools-frontend 1.0.1022059 → 1.0.1022409
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/front_end/core/i18n/locales/en-US.json +33 -0
 - package/front_end/core/i18n/locales/en-XL.json +33 -0
 - package/front_end/core/sdk/DebuggerModel.ts +10 -0
 - package/front_end/models/bindings/DebuggerLanguagePlugins.ts +9 -0
 - package/front_end/models/bindings/ResourceScriptMapping.ts +12 -1
 - package/front_end/models/issues_manager/RelatedIssue.ts +1 -1
 - package/front_end/models/issues_manager/descriptions/federatedAuthRequestErrorIdToken.md +1 -1
 - package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidRequest.md +1 -1
 - package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidResponse.md +1 -1
 - package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenNoResponse.md +1 -1
 - package/front_end/panels/network/components/RequestHeadersView.css +55 -0
 - package/front_end/panels/network/components/RequestHeadersView.ts +278 -14
 - package/front_end/panels/sources/AddSourceMapURLDialog.ts +17 -3
 - package/front_end/panels/sources/CallStackSidebarPane.ts +7 -0
 - package/front_end/panels/sources/DebuggerPlugin.ts +29 -3
 - package/front_end/panels/sources/ScopeChainSidebarPane.ts +8 -0
 - package/front_end/panels/sources/SourcesPanel.ts +14 -0
 - package/package.json +1 -1
 - package/scripts/eslint_rules/lib/custom_element_definitions_location.js +1 -1
 - package/scripts/eslint_rules/tests/custom_element_definitions_location_test.js +5 -0
 
| 
         @@ -6797,6 +6797,9 @@ 
     | 
|
| 
       6797 
6797 
     | 
    
         
             
              "panels/network/BlockedURLsPane.ts | textPatternToBlockMatching": {
         
     | 
| 
       6798 
6798 
     | 
    
         
             
                "message": "Text pattern to block matching requests; use * for wildcard"
         
     | 
| 
       6799 
6799 
     | 
    
         
             
              },
         
     | 
| 
      
 6800 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | chooseThisOptionIfTheResourceAnd": {
         
     | 
| 
      
 6801 
     | 
    
         
            +
                "message": "Choose this option if the resource and the document are served from the same site."
         
     | 
| 
      
 6802 
     | 
    
         
            +
              },
         
     | 
| 
       6800 
6803 
     | 
    
         
             
              "panels/network/components/RequestHeadersView.ts | fromDiskCache": {
         
     | 
| 
       6801 
6804 
     | 
    
         
             
                "message": "(from disk cache)"
         
     | 
| 
       6802 
6805 
     | 
    
         
             
              },
         
     | 
| 
         @@ -6818,6 +6821,15 @@ 
     | 
|
| 
       6818 
6821 
     | 
    
         
             
              "panels/network/components/RequestHeadersView.ts | general": {
         
     | 
| 
       6819 
6822 
     | 
    
         
             
                "message": "General"
         
     | 
| 
       6820 
6823 
     | 
    
         
             
              },
         
     | 
| 
      
 6824 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | learnMore": {
         
     | 
| 
      
 6825 
     | 
    
         
            +
                "message": "Learn more"
         
     | 
| 
      
 6826 
     | 
    
         
            +
              },
         
     | 
| 
      
 6827 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | learnMoreInTheIssuesTab": {
         
     | 
| 
      
 6828 
     | 
    
         
            +
                "message": "Learn more in the issues tab"
         
     | 
| 
      
 6829 
     | 
    
         
            +
              },
         
     | 
| 
      
 6830 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | onlyChooseThisOptionIfAn": {
         
     | 
| 
      
 6831 
     | 
    
         
            +
                "message": "Only choose this option if an arbitrary website including this resource does not impose a security risk."
         
     | 
| 
      
 6832 
     | 
    
         
            +
              },
         
     | 
| 
       6821 
6833 
     | 
    
         
             
              "panels/network/components/RequestHeadersView.ts | raw": {
         
     | 
| 
       6822 
6834 
     | 
    
         
             
                "message": "Raw"
         
     | 
| 
       6823 
6835 
     | 
    
         
             
              },
         
     | 
| 
         @@ -6845,6 +6857,21 @@ 
     | 
|
| 
       6845 
6857 
     | 
    
         
             
              "panels/network/components/RequestHeadersView.ts | statusCode": {
         
     | 
| 
       6846 
6858 
     | 
    
         
             
                "message": "Status Code"
         
     | 
| 
       6847 
6859 
     | 
    
         
             
              },
         
     | 
| 
      
 6860 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | thisDocumentWasBlockedFrom": {
         
     | 
| 
      
 6861 
     | 
    
         
            +
                "message": "This document was blocked from loading in an iframe with a sandbox attribute because this document specified a cross-origin opener policy."
         
     | 
| 
      
 6862 
     | 
    
         
            +
              },
         
     | 
| 
      
 6863 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | toEmbedThisFrameInYourDocument": {
         
     | 
| 
      
 6864 
     | 
    
         
            +
                "message": "To embed this frame in your document, the response needs to enable the cross-origin embedder policy by specifying the following response header:"
         
     | 
| 
      
 6865 
     | 
    
         
            +
              },
         
     | 
| 
      
 6866 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | toUseThisResourceFromADifferent": {
         
     | 
| 
      
 6867 
     | 
    
         
            +
                "message": "To use this resource from a different origin, the server needs to specify a cross-origin resource policy in the response headers:"
         
     | 
| 
      
 6868 
     | 
    
         
            +
              },
         
     | 
| 
      
 6869 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | toUseThisResourceFromADifferentOrigin": {
         
     | 
| 
      
 6870 
     | 
    
         
            +
                "message": "To use this resource from a different origin, the server may relax the cross-origin resource policy response header:"
         
     | 
| 
      
 6871 
     | 
    
         
            +
              },
         
     | 
| 
      
 6872 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | toUseThisResourceFromADifferentSite": {
         
     | 
| 
      
 6873 
     | 
    
         
            +
                "message": "To use this resource from a different site, the server may relax the cross-origin resource policy response header:"
         
     | 
| 
      
 6874 
     | 
    
         
            +
              },
         
     | 
| 
       6848 
6875 
     | 
    
         
             
              "panels/network/components/RequestTrustTokensView.ts | aClientprovidedArgumentWas": {
         
     | 
| 
       6849 
6876 
     | 
    
         
             
                "message": "A client-provided argument was malformed or otherwise invalid."
         
     | 
| 
       6850 
6877 
     | 
    
         
             
              },
         
     | 
| 
         @@ -9650,6 +9677,9 @@ 
     | 
|
| 
       9650 
9677 
     | 
    
         
             
              "panels/sources/AddSourceMapURLDialog.ts | add": {
         
     | 
| 
       9651 
9678 
     | 
    
         
             
                "message": "Add"
         
     | 
| 
       9652 
9679 
     | 
    
         
             
              },
         
     | 
| 
      
 9680 
     | 
    
         
            +
              "panels/sources/AddSourceMapURLDialog.ts | debugInfoUrl": {
         
     | 
| 
      
 9681 
     | 
    
         
            +
                "message": "DWARF symbols URL: "
         
     | 
| 
      
 9682 
     | 
    
         
            +
              },
         
     | 
| 
       9653 
9683 
     | 
    
         
             
              "panels/sources/AddSourceMapURLDialog.ts | sourceMapUrl": {
         
     | 
| 
       9654 
9684 
     | 
    
         
             
                "message": "Source map URL: "
         
     | 
| 
       9655 
9685 
     | 
    
         
             
              },
         
     | 
| 
         @@ -9821,6 +9851,9 @@ 
     | 
|
| 
       9821 
9851 
     | 
    
         
             
              "panels/sources/DebuggerPlugin.ts | addSourceMap": {
         
     | 
| 
       9822 
9852 
     | 
    
         
             
                "message": "Add source map…"
         
     | 
| 
       9823 
9853 
     | 
    
         
             
              },
         
     | 
| 
      
 9854 
     | 
    
         
            +
              "panels/sources/DebuggerPlugin.ts | addWasmDebugInfo": {
         
     | 
| 
      
 9855 
     | 
    
         
            +
                "message": "Add DWARF debug info…"
         
     | 
| 
      
 9856 
     | 
    
         
            +
              },
         
     | 
| 
       9824 
9857 
     | 
    
         
             
              "panels/sources/DebuggerPlugin.ts | associatedFilesAreAvailable": {
         
     | 
| 
       9825 
9858 
     | 
    
         
             
                "message": "Associated files are available via file tree or {PH1}."
         
     | 
| 
       9826 
9859 
     | 
    
         
             
              },
         
     | 
| 
         @@ -6797,6 +6797,9 @@ 
     | 
|
| 
       6797 
6797 
     | 
    
         
             
              "panels/network/BlockedURLsPane.ts | textPatternToBlockMatching": {
         
     | 
| 
       6798 
6798 
     | 
    
         
             
                "message": "T̂éx̂t́ p̂át̂t́êŕn̂ t́ô b́l̂óĉḱ m̂át̂ćĥín̂ǵ r̂éq̂úêśt̂ś; ûśê * f́ôŕ ŵíl̂d́ĉár̂d́"
         
     | 
| 
       6799 
6799 
     | 
    
         
             
              },
         
     | 
| 
      
 6800 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | chooseThisOptionIfTheResourceAnd": {
         
     | 
| 
      
 6801 
     | 
    
         
            +
                "message": "Ĉh́ôóŝé t̂h́îś ôṕt̂íôń îf́ t̂h́ê ŕêśôúr̂ćê án̂d́ t̂h́ê d́ôćûḿêńt̂ ár̂é ŝér̂v́êd́ f̂ŕôḿ t̂h́ê śâḿê śît́ê."
         
     | 
| 
      
 6802 
     | 
    
         
            +
              },
         
     | 
| 
       6800 
6803 
     | 
    
         
             
              "panels/network/components/RequestHeadersView.ts | fromDiskCache": {
         
     | 
| 
       6801 
6804 
     | 
    
         
             
                "message": "(f̂ŕôḿ d̂íŝḱ ĉáĉh́ê)"
         
     | 
| 
       6802 
6805 
     | 
    
         
             
              },
         
     | 
| 
         @@ -6818,6 +6821,15 @@ 
     | 
|
| 
       6818 
6821 
     | 
    
         
             
              "panels/network/components/RequestHeadersView.ts | general": {
         
     | 
| 
       6819 
6822 
     | 
    
         
             
                "message": "Ĝén̂ér̂ál̂"
         
     | 
| 
       6820 
6823 
     | 
    
         
             
              },
         
     | 
| 
      
 6824 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | learnMore": {
         
     | 
| 
      
 6825 
     | 
    
         
            +
                "message": "L̂éâŕn̂ ḿôŕê"
         
     | 
| 
      
 6826 
     | 
    
         
            +
              },
         
     | 
| 
      
 6827 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | learnMoreInTheIssuesTab": {
         
     | 
| 
      
 6828 
     | 
    
         
            +
                "message": "L̂éâŕn̂ ḿôŕê ín̂ t́ĥé îśŝúêś t̂áb̂"
         
     | 
| 
      
 6829 
     | 
    
         
            +
              },
         
     | 
| 
      
 6830 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | onlyChooseThisOptionIfAn": {
         
     | 
| 
      
 6831 
     | 
    
         
            +
                "message": "Ôńl̂ý ĉh́ôóŝé t̂h́îś ôṕt̂íôń îf́ âń âŕb̂ít̂ŕâŕŷ ẃêb́ŝít̂é îńĉĺûd́îńĝ t́ĥíŝ ŕêśôúr̂ćê d́ôéŝ ńôt́ îḿp̂óŝé â śêćûŕît́ŷ ŕîśk̂."
         
     | 
| 
      
 6832 
     | 
    
         
            +
              },
         
     | 
| 
       6821 
6833 
     | 
    
         
             
              "panels/network/components/RequestHeadersView.ts | raw": {
         
     | 
| 
       6822 
6834 
     | 
    
         
             
                "message": "R̂áŵ"
         
     | 
| 
       6823 
6835 
     | 
    
         
             
              },
         
     | 
| 
         @@ -6845,6 +6857,21 @@ 
     | 
|
| 
       6845 
6857 
     | 
    
         
             
              "panels/network/components/RequestHeadersView.ts | statusCode": {
         
     | 
| 
       6846 
6858 
     | 
    
         
             
                "message": "Ŝt́ât́ûś Ĉód̂é"
         
     | 
| 
       6847 
6859 
     | 
    
         
             
              },
         
     | 
| 
      
 6860 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | thisDocumentWasBlockedFrom": {
         
     | 
| 
      
 6861 
     | 
    
         
            +
                "message": "T̂h́îś d̂óĉúm̂én̂t́ ŵáŝ b́l̂óĉḱêd́ f̂ŕôḿ l̂óâd́îńĝ ín̂ án̂ iframe ẃît́ĥ á sandbox ât́t̂ŕîb́ût́ê b́êćâúŝé t̂h́îś d̂óĉúm̂én̂t́ ŝṕêćîf́îéd̂ á ĉŕôśŝ-ór̂íĝín̂ óp̂én̂ér̂ ṕôĺîćŷ."
         
     | 
| 
      
 6862 
     | 
    
         
            +
              },
         
     | 
| 
      
 6863 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | toEmbedThisFrameInYourDocument": {
         
     | 
| 
      
 6864 
     | 
    
         
            +
                "message": "T̂ó êḿb̂éd̂ t́ĥíŝ f́r̂ám̂é îń ŷóûŕ d̂óĉúm̂én̂t́, t̂h́ê ŕêśp̂ón̂śê ńêéd̂ś t̂ó êńâb́l̂é t̂h́ê ćr̂óŝś-ôŕîǵîń êḿb̂éd̂d́êŕ p̂ól̂íĉý b̂ý ŝṕêćîf́ŷín̂ǵ t̂h́ê f́ôĺl̂óŵín̂ǵ r̂éŝṕôńŝé ĥéâd́êŕ:"
         
     | 
| 
      
 6865 
     | 
    
         
            +
              },
         
     | 
| 
      
 6866 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | toUseThisResourceFromADifferent": {
         
     | 
| 
      
 6867 
     | 
    
         
            +
                "message": "T̂ó ûśê t́ĥíŝ ŕêśôúr̂ćê f́r̂óm̂ á d̂íf̂f́êŕêńt̂ ór̂íĝín̂, t́ĥé ŝér̂v́êŕ n̂éêd́ŝ t́ô śp̂éĉíf̂ý â ćr̂óŝś-ôŕîǵîń r̂éŝóûŕĉé p̂ól̂íĉý îń t̂h́ê ŕêśp̂ón̂śê h́êád̂ér̂ś:"
         
     | 
| 
      
 6868 
     | 
    
         
            +
              },
         
     | 
| 
      
 6869 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | toUseThisResourceFromADifferentOrigin": {
         
     | 
| 
      
 6870 
     | 
    
         
            +
                "message": "T̂ó ûśê t́ĥíŝ ŕêśôúr̂ćê f́r̂óm̂ á d̂íf̂f́êŕêńt̂ ór̂íĝín̂, t́ĥé ŝér̂v́êŕ m̂áŷ ŕêĺâx́ t̂h́ê ćr̂óŝś-ôŕîǵîń r̂éŝóûŕĉé p̂ól̂íĉý r̂éŝṕôńŝé ĥéâd́êŕ:"
         
     | 
| 
      
 6871 
     | 
    
         
            +
              },
         
     | 
| 
      
 6872 
     | 
    
         
            +
              "panels/network/components/RequestHeadersView.ts | toUseThisResourceFromADifferentSite": {
         
     | 
| 
      
 6873 
     | 
    
         
            +
                "message": "T̂ó ûśê t́ĥíŝ ŕêśôúr̂ćê f́r̂óm̂ á d̂íf̂f́êŕêńt̂ śît́ê, t́ĥé ŝér̂v́êŕ m̂áŷ ŕêĺâx́ t̂h́ê ćr̂óŝś-ôŕîǵîń r̂éŝóûŕĉé p̂ól̂íĉý r̂éŝṕôńŝé ĥéâd́êŕ:"
         
     | 
| 
      
 6874 
     | 
    
         
            +
              },
         
     | 
| 
       6848 
6875 
     | 
    
         
             
              "panels/network/components/RequestTrustTokensView.ts | aClientprovidedArgumentWas": {
         
     | 
| 
       6849 
6876 
     | 
    
         
             
                "message": "Â ćl̂íêńt̂-ṕr̂óv̂íd̂éd̂ ár̂ǵûḿêńt̂ ẃâś m̂ál̂f́ôŕm̂éd̂ ór̂ ót̂h́êŕŵíŝé îńv̂ál̂íd̂."
         
     | 
| 
       6850 
6877 
     | 
    
         
             
              },
         
     | 
| 
         @@ -9650,6 +9677,9 @@ 
     | 
|
| 
       9650 
9677 
     | 
    
         
             
              "panels/sources/AddSourceMapURLDialog.ts | add": {
         
     | 
| 
       9651 
9678 
     | 
    
         
             
                "message": "Âd́d̂"
         
     | 
| 
       9652 
9679 
     | 
    
         
             
              },
         
     | 
| 
      
 9680 
     | 
    
         
            +
              "panels/sources/AddSourceMapURLDialog.ts | debugInfoUrl": {
         
     | 
| 
      
 9681 
     | 
    
         
            +
                "message": "D̂ẂÂŔF̂ śŷḿb̂ól̂ś ÛŔL̂: "
         
     | 
| 
      
 9682 
     | 
    
         
            +
              },
         
     | 
| 
       9653 
9683 
     | 
    
         
             
              "panels/sources/AddSourceMapURLDialog.ts | sourceMapUrl": {
         
     | 
| 
       9654 
9684 
     | 
    
         
             
                "message": "Ŝóûŕĉé m̂áp̂ ÚR̂Ĺ: "
         
     | 
| 
       9655 
9685 
     | 
    
         
             
              },
         
     | 
| 
         @@ -9821,6 +9851,9 @@ 
     | 
|
| 
       9821 
9851 
     | 
    
         
             
              "panels/sources/DebuggerPlugin.ts | addSourceMap": {
         
     | 
| 
       9822 
9852 
     | 
    
         
             
                "message": "Âd́d̂ śôúr̂ćê ḿâṕ…"
         
     | 
| 
       9823 
9853 
     | 
    
         
             
              },
         
     | 
| 
      
 9854 
     | 
    
         
            +
              "panels/sources/DebuggerPlugin.ts | addWasmDebugInfo": {
         
     | 
| 
      
 9855 
     | 
    
         
            +
                "message": "Âd́d̂ D́ŴÁR̂F́ d̂éb̂úĝ ín̂f́ô…"
         
     | 
| 
      
 9856 
     | 
    
         
            +
              },
         
     | 
| 
       9824 
9857 
     | 
    
         
             
              "panels/sources/DebuggerPlugin.ts | associatedFilesAreAvailable": {
         
     | 
| 
       9825 
9858 
     | 
    
         
             
                "message": "Âśŝóĉíât́êd́ f̂íl̂éŝ ár̂é âv́âíl̂áb̂ĺê v́îá f̂íl̂é t̂ŕêé ôŕ {PH1}."
         
     | 
| 
       9826 
9859 
     | 
    
         
             
              },
         
     | 
| 
         @@ -737,6 +737,14 @@ export class DebuggerModel extends SDKModel<EventTypes> { 
     | 
|
| 
       737 
737 
     | 
    
         
             
                this.#sourceMapManagerInternal.attachSourceMap(script, script.sourceURL, script.sourceMapURL);
         
     | 
| 
       738 
738 
     | 
    
         
             
              }
         
     | 
| 
       739 
739 
     | 
    
         | 
| 
      
 740 
     | 
    
         
            +
              async setDebugInfoURL(script: Script, _externalURL: Platform.DevToolsPath.UrlString): Promise<void> {
         
     | 
| 
      
 741 
     | 
    
         
            +
                if (this.#expandCallFramesCallback && this.#debuggerPausedDetailsInternal) {
         
     | 
| 
      
 742 
     | 
    
         
            +
                  this.#debuggerPausedDetailsInternal.callFrames =
         
     | 
| 
      
 743 
     | 
    
         
            +
                      await this.#expandCallFramesCallback.call(null, this.#debuggerPausedDetailsInternal.callFrames);
         
     | 
| 
      
 744 
     | 
    
         
            +
                }
         
     | 
| 
      
 745 
     | 
    
         
            +
                this.dispatchEventToListeners(Events.DebugInfoAttached, script);
         
     | 
| 
      
 746 
     | 
    
         
            +
              }
         
     | 
| 
      
 747 
     | 
    
         
            +
             
     | 
| 
       740 
748 
     | 
    
         
             
              executionContextDestroyed(executionContext: ExecutionContext): void {
         
     | 
| 
       741 
749 
     | 
    
         
             
                const sourceMapIds = Array.from(this.#sourceMapIdToScript.keys());
         
     | 
| 
       742 
750 
     | 
    
         
             
                for (const sourceMapId of sourceMapIds) {
         
     | 
| 
         @@ -968,6 +976,7 @@ export enum Events { 
     | 
|
| 
       968 
976 
     | 
    
         
             
              DebuggerWasDisabled = 'DebuggerWasDisabled',
         
     | 
| 
       969 
977 
     | 
    
         
             
              DebuggerPaused = 'DebuggerPaused',
         
     | 
| 
       970 
978 
     | 
    
         
             
              DebuggerResumed = 'DebuggerResumed',
         
     | 
| 
      
 979 
     | 
    
         
            +
              DebugInfoAttached = 'DebugInfoAttached',
         
     | 
| 
       971 
980 
     | 
    
         
             
              ParsedScriptSource = 'ParsedScriptSource',
         
     | 
| 
       972 
981 
     | 
    
         
             
              DiscardedAnonymousScriptSource = 'DiscardedAnonymousScriptSource',
         
     | 
| 
       973 
982 
     | 
    
         
             
              GlobalObjectCleared = 'GlobalObjectCleared',
         
     | 
| 
         @@ -985,6 +994,7 @@ export type EventTypes = { 
     | 
|
| 
       985 
994 
     | 
    
         
             
              [Events.GlobalObjectCleared]: DebuggerModel,
         
     | 
| 
       986 
995 
     | 
    
         
             
              [Events.CallFrameSelected]: DebuggerModel,
         
     | 
| 
       987 
996 
     | 
    
         
             
              [Events.DebuggerIsReadyToPause]: DebuggerModel,
         
     | 
| 
      
 997 
     | 
    
         
            +
              [Events.DebugInfoAttached]: Script,
         
     | 
| 
       988 
998 
     | 
    
         
             
            };
         
     | 
| 
       989 
999 
     | 
    
         | 
| 
       990 
1000 
     | 
    
         
             
            class DebuggerDispatcher implements ProtocolProxyApi.DebuggerDispatcher {
         
     | 
| 
         @@ -1200,6 +1200,15 @@ export class DebuggerLanguagePluginManager implements 
     | 
|
| 
       1200 
1200 
     | 
    
         
             
                return [];
         
     | 
| 
       1201 
1201 
     | 
    
         
             
              }
         
     | 
| 
       1202 
1202 
     | 
    
         | 
| 
      
 1203 
     | 
    
         
            +
              setDebugInfoURL(script: SDK.Script.Script, externalURL: Platform.DevToolsPath.UrlString): void {
         
     | 
| 
      
 1204 
     | 
    
         
            +
                if (this.hasPluginForScript(script)) {
         
     | 
| 
      
 1205 
     | 
    
         
            +
                  return;
         
     | 
| 
      
 1206 
     | 
    
         
            +
                }
         
     | 
| 
      
 1207 
     | 
    
         
            +
                script.debugSymbols = {type: Protocol.Debugger.DebugSymbolsType.ExternalDWARF, externalURL};
         
     | 
| 
      
 1208 
     | 
    
         
            +
                this.parsedScriptSource({data: script});
         
     | 
| 
      
 1209 
     | 
    
         
            +
                void script.debuggerModel.setDebugInfoURL(script, externalURL);
         
     | 
| 
      
 1210 
     | 
    
         
            +
              }
         
     | 
| 
      
 1211 
     | 
    
         
            +
             
     | 
| 
       1203 
1212 
     | 
    
         
             
              private parsedScriptSource(event: Common.EventTarget.EventTargetEvent<SDK.Script.Script>): void {
         
     | 
| 
       1204 
1213 
     | 
    
         
             
                const script = event.data;
         
     | 
| 
       1205 
1214 
     | 
    
         
             
                if (!script.sourceURL) {
         
     | 
| 
         @@ -38,7 +38,8 @@ import * as Workspace from '../workspace/workspace.js'; 
     | 
|
| 
       38 
38 
     | 
    
         
             
            import type {Breakpoint} from './BreakpointManager.js';
         
     | 
| 
       39 
39 
     | 
    
         
             
            import {BreakpointManager} from './BreakpointManager.js';
         
     | 
| 
       40 
40 
     | 
    
         
             
            import {ContentProviderBasedProject} from './ContentProviderBasedProject.js';
         
     | 
| 
       41 
     | 
    
         
            -
            import type {DebuggerSourceMapping 
     | 
| 
      
 41 
     | 
    
         
            +
            import type {DebuggerSourceMapping} from './DebuggerWorkspaceBinding.js';
         
     | 
| 
      
 42 
     | 
    
         
            +
            import {DebuggerWorkspaceBinding} from './DebuggerWorkspaceBinding.js';
         
     | 
| 
       42 
43 
     | 
    
         
             
            import {NetworkProject} from './NetworkProject.js';
         
     | 
| 
       43 
44 
     | 
    
         
             
            import {metadataForURL} from './ResourceUtils.js';
         
     | 
| 
       44 
45 
     | 
    
         | 
| 
         @@ -455,6 +456,16 @@ export class ResourceScriptFile extends Common.ObjectWrapper.ObjectWrapper<Resou 
     | 
|
| 
       455 
456 
     | 
    
         
             
                this.scriptInternal.debuggerModel.setSourceMapURL(this.scriptInternal, sourceMapURL);
         
     | 
| 
       456 
457 
     | 
    
         
             
              }
         
     | 
| 
       457 
458 
     | 
    
         | 
| 
      
 459 
     | 
    
         
            +
              addDebugInfoURL(debugInfoURL: Platform.DevToolsPath.UrlString): void {
         
     | 
| 
      
 460 
     | 
    
         
            +
                if (!this.scriptInternal) {
         
     | 
| 
      
 461 
     | 
    
         
            +
                  return;
         
     | 
| 
      
 462 
     | 
    
         
            +
                }
         
     | 
| 
      
 463 
     | 
    
         
            +
                const {pluginManager} = DebuggerWorkspaceBinding.instance();
         
     | 
| 
      
 464 
     | 
    
         
            +
                if (pluginManager) {
         
     | 
| 
      
 465 
     | 
    
         
            +
                  pluginManager.setDebugInfoURL(this.scriptInternal, debugInfoURL);
         
     | 
| 
      
 466 
     | 
    
         
            +
                }
         
     | 
| 
      
 467 
     | 
    
         
            +
              }
         
     | 
| 
      
 468 
     | 
    
         
            +
             
     | 
| 
       458 
469 
     | 
    
         
             
              hasSourceMapURL(): boolean {
         
     | 
| 
       459 
470 
     | 
    
         
             
                return this.scriptInternal !== undefined && Boolean(this.scriptInternal.sourceMapURL);
         
     | 
| 
       460 
471 
     | 
    
         
             
              }
         
     | 
| 
         @@ -7,7 +7,7 @@ import * as SDK from '../../core/sdk/sdk.js'; 
     | 
|
| 
       7 
7 
     | 
    
         
             
            import type {Issue, IssueCategory} from './Issue.js';
         
     | 
| 
       8 
8 
     | 
    
         
             
            import {IssuesManager} from './IssuesManager.js';
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            export type IssuesAssociatable = SDK.NetworkRequest.NetworkRequest 
     | 
| 
      
 10 
     | 
    
         
            +
            export type IssuesAssociatable = Readonly<SDK.NetworkRequest.NetworkRequest>|SDK.Cookie.Cookie|string;
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
            function issuesAssociatedWithNetworkRequest(issues: Issue[], request: SDK.NetworkRequest.NetworkRequest): Issue[] {
         
     | 
| 
       13 
13 
     | 
    
         
             
              return issues.filter(issue => {
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Error retrieving  
     | 
| 
      
 1 
     | 
    
         
            +
            # Error retrieving a token.
         
     | 
    
        package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidRequest.md
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # The  
     | 
| 
      
 1 
     | 
    
         
            +
            # The token fetching request is invalid.
         
     | 
    
        package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidResponse.md
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Provider's  
     | 
| 
      
 1 
     | 
    
         
            +
            # Provider's token is invalid.
         
     | 
    
        package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenNoResponse.md
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # The response body is empty when fetching the provider's  
     | 
| 
      
 1 
     | 
    
         
            +
            # The response body is empty when fetching the provider's token.
         
     | 
| 
         @@ -109,3 +109,58 @@ div.raw-headers-row { 
     | 
|
| 
       109 
109 
     | 
    
         
             
              white-space: pre-wrap;
         
     | 
| 
       110 
110 
     | 
    
         
             
              word-break: break-all;
         
     | 
| 
       111 
111 
     | 
    
         
             
            }
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
            .header-badge-text {
         
     | 
| 
      
 114 
     | 
    
         
            +
              font-variant: small-caps;
         
     | 
| 
      
 115 
     | 
    
         
            +
              font-weight: 500;
         
     | 
| 
      
 116 
     | 
    
         
            +
              white-space: pre-wrap;
         
     | 
| 
      
 117 
     | 
    
         
            +
              word-break: break-all;
         
     | 
| 
      
 118 
     | 
    
         
            +
            }
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            .header-badge {
         
     | 
| 
      
 121 
     | 
    
         
            +
              display: inline;
         
     | 
| 
      
 122 
     | 
    
         
            +
              margin-right: 0.75em;
         
     | 
| 
      
 123 
     | 
    
         
            +
              background-color: var(--color-accent-red);
         
     | 
| 
      
 124 
     | 
    
         
            +
              color: var(--color-background);
         
     | 
| 
      
 125 
     | 
    
         
            +
              border-radius: 100vh;
         
     | 
| 
      
 126 
     | 
    
         
            +
              padding-left: 6px;
         
     | 
| 
      
 127 
     | 
    
         
            +
              padding-right: 6px;
         
     | 
| 
      
 128 
     | 
    
         
            +
            }
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            .call-to-action {
         
     | 
| 
      
 131 
     | 
    
         
            +
              background-color: var(--color-background-elevation-1);
         
     | 
| 
      
 132 
     | 
    
         
            +
              padding: 8px;
         
     | 
| 
      
 133 
     | 
    
         
            +
              border-radius: 2px;
         
     | 
| 
      
 134 
     | 
    
         
            +
            }
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
            .call-to-action-body {
         
     | 
| 
      
 137 
     | 
    
         
            +
              padding: 6px 0;
         
     | 
| 
      
 138 
     | 
    
         
            +
              margin-left: 9.5px;
         
     | 
| 
      
 139 
     | 
    
         
            +
              border-left: 2px solid var(--issue-color-yellow);
         
     | 
| 
      
 140 
     | 
    
         
            +
              padding-left: 18px;
         
     | 
| 
      
 141 
     | 
    
         
            +
              line-height: 20px;
         
     | 
| 
      
 142 
     | 
    
         
            +
            }
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
            .call-to-action .explanation {
         
     | 
| 
      
 145 
     | 
    
         
            +
              font-weight: bold;
         
     | 
| 
      
 146 
     | 
    
         
            +
            }
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
            .call-to-action code {
         
     | 
| 
      
 149 
     | 
    
         
            +
              font-size: 90%;
         
     | 
| 
      
 150 
     | 
    
         
            +
            }
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
            .call-to-action .example .comment::before {
         
     | 
| 
      
 153 
     | 
    
         
            +
              content: " — ";
         
     | 
| 
      
 154 
     | 
    
         
            +
            }
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
            .link,
         
     | 
| 
      
 157 
     | 
    
         
            +
            .devtools-link {
         
     | 
| 
      
 158 
     | 
    
         
            +
              color: var(--color-link);
         
     | 
| 
      
 159 
     | 
    
         
            +
              text-decoration: underline;
         
     | 
| 
      
 160 
     | 
    
         
            +
              cursor: pointer;
         
     | 
| 
      
 161 
     | 
    
         
            +
              padding: 2px 0; /* adjust focus ring size */
         
     | 
| 
      
 162 
     | 
    
         
            +
            }
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
            .inline-icon {
         
     | 
| 
      
 165 
     | 
    
         
            +
              vertical-align: middle;
         
     | 
| 
      
 166 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -3,11 +3,16 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            // found in the LICENSE file.
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            import * as Common from '../../../core/common/common.js';
         
     | 
| 
      
 6 
     | 
    
         
            +
            import * as Host from '../../../core/host/host.js';
         
     | 
| 
       6 
7 
     | 
    
         
             
            import * as i18n from '../../../core/i18n/i18n.js';
         
     | 
| 
      
 8 
     | 
    
         
            +
            import * as Platform from '../../../core/platform/platform.js';
         
     | 
| 
       7 
9 
     | 
    
         
             
            import {assertNotNullOrUndefined} from '../../../core/platform/platform.js';
         
     | 
| 
       8 
10 
     | 
    
         
             
            import * as SDK from '../../../core/sdk/sdk.js';
         
     | 
| 
      
 11 
     | 
    
         
            +
            import * as Protocol from '../../../generated/protocol.js';
         
     | 
| 
      
 12 
     | 
    
         
            +
            import * as IssuesManager from '../../../models/issues_manager/issues_manager.js';
         
     | 
| 
       9 
13 
     | 
    
         
             
            import * as Buttons from '../../../ui/components/buttons/buttons.js';
         
     | 
| 
       10 
14 
     | 
    
         
             
            import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
         
     | 
| 
      
 15 
     | 
    
         
            +
            import * as IconButton from '../../../ui/components/icon_button/icon_button.js';
         
     | 
| 
       11 
16 
     | 
    
         
             
            import * as Input from '../../../ui/components/input/input.js';
         
     | 
| 
       12 
17 
     | 
    
         
             
            import * as UI from '../../../ui/legacy/legacy.js';
         
     | 
| 
       13 
18 
     | 
    
         
             
            import * as LitHtml from '../../../ui/lit-html/lit-html.js';
         
     | 
| 
         @@ -19,6 +24,11 @@ const {render, html} = LitHtml; 
     | 
|
| 
       19 
24 
     | 
    
         | 
| 
       20 
25 
     | 
    
         
             
            const UIStrings = {
         
     | 
| 
       21 
26 
     | 
    
         
             
              /**
         
     | 
| 
      
 27 
     | 
    
         
            +
              *@description Text in Headers View of the Network panel
         
     | 
| 
      
 28 
     | 
    
         
            +
              */
         
     | 
| 
      
 29 
     | 
    
         
            +
              chooseThisOptionIfTheResourceAnd:
         
     | 
| 
      
 30 
     | 
    
         
            +
                  'Choose this option if the resource and the document are served from the same site.',
         
     | 
| 
      
 31 
     | 
    
         
            +
              /**
         
     | 
| 
       22 
32 
     | 
    
         
             
              *@description Text in Request Headers View of the Network panel
         
     | 
| 
       23 
33 
     | 
    
         
             
              */
         
     | 
| 
       24 
34 
     | 
    
         
             
              fromDiskCache: '(from disk cache)',
         
     | 
| 
         @@ -47,10 +57,23 @@ const UIStrings = { 
     | 
|
| 
       47 
57 
     | 
    
         
             
              */
         
     | 
| 
       48 
58 
     | 
    
         
             
              general: 'General',
         
     | 
| 
       49 
59 
     | 
    
         
             
              /**
         
     | 
| 
      
 60 
     | 
    
         
            +
              *@description Text that is usually a hyperlink to more documentation
         
     | 
| 
      
 61 
     | 
    
         
            +
              */
         
     | 
| 
      
 62 
     | 
    
         
            +
              learnMore: 'Learn more',
         
     | 
| 
      
 63 
     | 
    
         
            +
              /**
         
     | 
| 
      
 64 
     | 
    
         
            +
              *@description Text for a link to the issues panel
         
     | 
| 
      
 65 
     | 
    
         
            +
              */
         
     | 
| 
      
 66 
     | 
    
         
            +
              learnMoreInTheIssuesTab: 'Learn more in the issues tab',
         
     | 
| 
      
 67 
     | 
    
         
            +
              /**
         
     | 
| 
       50 
68 
     | 
    
         
             
              *@description Label for a checkbox to switch between raw and parsed headers
         
     | 
| 
       51 
69 
     | 
    
         
             
              */
         
     | 
| 
       52 
70 
     | 
    
         
             
              raw: 'Raw',
         
     | 
| 
       53 
71 
     | 
    
         
             
              /**
         
     | 
| 
      
 72 
     | 
    
         
            +
              *@description Text in Headers View of the Network panel
         
     | 
| 
      
 73 
     | 
    
         
            +
              */
         
     | 
| 
      
 74 
     | 
    
         
            +
              onlyChooseThisOptionIfAn:
         
     | 
| 
      
 75 
     | 
    
         
            +
                  'Only choose this option if an arbitrary website including this resource does not impose a security risk.',
         
     | 
| 
      
 76 
     | 
    
         
            +
              /**
         
     | 
| 
       54 
77 
     | 
    
         
             
              *@description Text in Request Headers View of the Network panel
         
     | 
| 
       55 
78 
     | 
    
         
             
              */
         
     | 
| 
       56 
79 
     | 
    
         
             
              referrerPolicy: 'Referrer Policy',
         
     | 
| 
         @@ -82,9 +105,35 @@ const UIStrings = { 
     | 
|
| 
       82 
105 
     | 
    
         
             
              *@description HTTP response code
         
     | 
| 
       83 
106 
     | 
    
         
             
              */
         
     | 
| 
       84 
107 
     | 
    
         
             
              statusCode: 'Status Code',
         
     | 
| 
      
 108 
     | 
    
         
            +
              /**
         
     | 
| 
      
 109 
     | 
    
         
            +
              *@description Text in Headers View of the Network panel
         
     | 
| 
      
 110 
     | 
    
         
            +
              */
         
     | 
| 
      
 111 
     | 
    
         
            +
              thisDocumentWasBlockedFrom:
         
     | 
| 
      
 112 
     | 
    
         
            +
                  'This document was blocked from loading in an `iframe` with a `sandbox` attribute because this document specified a cross-origin opener policy.',
         
     | 
| 
      
 113 
     | 
    
         
            +
              /**
         
     | 
| 
      
 114 
     | 
    
         
            +
              *@description Text in Headers View of the Network panel
         
     | 
| 
      
 115 
     | 
    
         
            +
              */
         
     | 
| 
      
 116 
     | 
    
         
            +
              toEmbedThisFrameInYourDocument:
         
     | 
| 
      
 117 
     | 
    
         
            +
                  'To embed this frame in your document, the response needs to enable the cross-origin embedder policy by specifying the following response header:',
         
     | 
| 
      
 118 
     | 
    
         
            +
              /**
         
     | 
| 
      
 119 
     | 
    
         
            +
              *@description Text in Headers View of the Network panel
         
     | 
| 
      
 120 
     | 
    
         
            +
              */
         
     | 
| 
      
 121 
     | 
    
         
            +
              toUseThisResourceFromADifferent:
         
     | 
| 
      
 122 
     | 
    
         
            +
                  'To use this resource from a different origin, the server needs to specify a cross-origin resource policy in the response headers:',
         
     | 
| 
      
 123 
     | 
    
         
            +
              /**
         
     | 
| 
      
 124 
     | 
    
         
            +
              *@description Text in Headers View of the Network panel
         
     | 
| 
      
 125 
     | 
    
         
            +
              */
         
     | 
| 
      
 126 
     | 
    
         
            +
              toUseThisResourceFromADifferentOrigin:
         
     | 
| 
      
 127 
     | 
    
         
            +
                  'To use this resource from a different origin, the server may relax the cross-origin resource policy response header:',
         
     | 
| 
      
 128 
     | 
    
         
            +
              /**
         
     | 
| 
      
 129 
     | 
    
         
            +
              *@description Text in Headers View of the Network panel
         
     | 
| 
      
 130 
     | 
    
         
            +
              */
         
     | 
| 
      
 131 
     | 
    
         
            +
              toUseThisResourceFromADifferentSite:
         
     | 
| 
      
 132 
     | 
    
         
            +
                  'To use this resource from a different site, the server may relax the cross-origin resource policy response header:',
         
     | 
| 
       85 
133 
     | 
    
         
             
            };
         
     | 
| 
       86 
134 
     | 
    
         
             
            const str_ = i18n.i18n.registerUIStrings('panels/network/components/RequestHeadersView.ts', UIStrings);
         
     | 
| 
       87 
135 
     | 
    
         
             
            const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
         
     | 
| 
      
 136 
     | 
    
         
            +
            const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
         
     | 
| 
       88 
137 
     | 
    
         | 
| 
       89 
138 
     | 
    
         
             
            export class RequestHeadersView extends UI.Widget.VBox {
         
     | 
| 
       90 
139 
     | 
    
         
             
              readonly #headersView = new RequestHeadersComponent();
         
     | 
| 
         @@ -152,6 +201,39 @@ export class RequestHeadersComponent extends HTMLElement { 
     | 
|
| 
       152 
201 
     | 
    
         
             
              #renderResponseHeaders(): LitHtml.TemplateResult {
         
     | 
| 
       153 
202 
     | 
    
         
             
                assertNotNullOrUndefined(this.#request);
         
     | 
| 
       154 
203 
     | 
    
         | 
| 
      
 204 
     | 
    
         
            +
                const headersWithIssues = [];
         
     | 
| 
      
 205 
     | 
    
         
            +
                if (this.#request.wasBlocked()) {
         
     | 
| 
      
 206 
     | 
    
         
            +
                  const headerWithIssues =
         
     | 
| 
      
 207 
     | 
    
         
            +
                      BlockedReasonDetails.get((this.#request.blockedReason() as Protocol.Network.BlockedReason));
         
     | 
| 
      
 208 
     | 
    
         
            +
                  if (headerWithIssues) {
         
     | 
| 
      
 209 
     | 
    
         
            +
                    headersWithIssues.push(headerWithIssues);
         
     | 
| 
      
 210 
     | 
    
         
            +
                  }
         
     | 
| 
      
 211 
     | 
    
         
            +
                }
         
     | 
| 
      
 212 
     | 
    
         
            +
             
     | 
| 
      
 213 
     | 
    
         
            +
                function mergeHeadersWithIssues(
         
     | 
| 
      
 214 
     | 
    
         
            +
                    headers: SDK.NetworkRequest.NameValue[], headersWithIssues: HeaderDescriptor[]): HeaderDescriptor[] {
         
     | 
| 
      
 215 
     | 
    
         
            +
                  let i = 0, j = 0;
         
     | 
| 
      
 216 
     | 
    
         
            +
                  const result: HeaderDescriptor[] = [];
         
     | 
| 
      
 217 
     | 
    
         
            +
                  while (i < headers.length && j < headersWithIssues.length) {
         
     | 
| 
      
 218 
     | 
    
         
            +
                    if (headers[i].name < headersWithIssues[j].name) {
         
     | 
| 
      
 219 
     | 
    
         
            +
                      result.push({...headers[i++], headerNotSet: false});
         
     | 
| 
      
 220 
     | 
    
         
            +
                    } else if (headers[i].name > headersWithIssues[j].name) {
         
     | 
| 
      
 221 
     | 
    
         
            +
                      result.push({...headersWithIssues[j++], headerNotSet: true});
         
     | 
| 
      
 222 
     | 
    
         
            +
                    } else {
         
     | 
| 
      
 223 
     | 
    
         
            +
                      result.push({...headersWithIssues[j++], ...headers[i++], headerNotSet: false});
         
     | 
| 
      
 224 
     | 
    
         
            +
                    }
         
     | 
| 
      
 225 
     | 
    
         
            +
                  }
         
     | 
| 
      
 226 
     | 
    
         
            +
                  while (i < headers.length) {
         
     | 
| 
      
 227 
     | 
    
         
            +
                    result.push({...headers[i++], headerNotSet: false});
         
     | 
| 
      
 228 
     | 
    
         
            +
                  }
         
     | 
| 
      
 229 
     | 
    
         
            +
                  while (j < headersWithIssues.length) {
         
     | 
| 
      
 230 
     | 
    
         
            +
                    result.push({...headersWithIssues[j++], headerNotSet: true});
         
     | 
| 
      
 231 
     | 
    
         
            +
                  }
         
     | 
| 
      
 232 
     | 
    
         
            +
                  return result;
         
     | 
| 
      
 233 
     | 
    
         
            +
                }
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
      
 235 
     | 
    
         
            +
                const mergedHeaders = mergeHeadersWithIssues(this.#request.sortedResponseHeaders.slice(), headersWithIssues);
         
     | 
| 
      
 236 
     | 
    
         
            +
             
     | 
| 
       155 
237 
     | 
    
         
             
                const toggleShowRaw = (): void => {
         
     | 
| 
       156 
238 
     | 
    
         
             
                  this.#showResponseHeadersText = !this.#showResponseHeadersText;
         
     | 
| 
       157 
239 
     | 
    
         
             
                  this.#render();
         
     | 
| 
         @@ -172,12 +254,7 @@ export class RequestHeadersComponent extends HTMLElement { 
     | 
|
| 
       172 
254 
     | 
    
         
             
                  >
         
     | 
| 
       173 
255 
     | 
    
         
             
                    ${this.#showResponseHeadersText ?
         
     | 
| 
       174 
256 
     | 
    
         
             
                        this.#renderRawHeaders(this.#request.responseHeadersText, true) : html`
         
     | 
| 
       175 
     | 
    
         
            -
                      ${ 
     | 
| 
       176 
     | 
    
         
            -
                        <div class="row">
         
     | 
| 
       177 
     | 
    
         
            -
                          <div class="header-name">${header.name}:</div>
         
     | 
| 
       178 
     | 
    
         
            -
                          <div class="header-value">${header.value}</div>
         
     | 
| 
       179 
     | 
    
         
            -
                        </div>
         
     | 
| 
       180 
     | 
    
         
            -
                      `)}
         
     | 
| 
      
 257 
     | 
    
         
            +
                      ${mergedHeaders.map(header => this.#renderHeader(header))}
         
     | 
| 
       181 
258 
     | 
    
         
             
                    `}
         
     | 
| 
       182 
259 
     | 
    
         
             
                  </${Category.litTagName}>
         
     | 
| 
       183 
260 
     | 
    
         
             
                `;
         
     | 
| 
         @@ -186,13 +263,17 @@ export class RequestHeadersComponent extends HTMLElement { 
     | 
|
| 
       186 
263 
     | 
    
         
             
              #renderRequestHeaders(): LitHtml.TemplateResult {
         
     | 
| 
       187 
264 
     | 
    
         
             
                assertNotNullOrUndefined(this.#request);
         
     | 
| 
       188 
265 
     | 
    
         | 
| 
      
 266 
     | 
    
         
            +
                const headers = this.#request.requestHeaders().slice();
         
     | 
| 
      
 267 
     | 
    
         
            +
                headers.sort(function(a, b) {
         
     | 
| 
      
 268 
     | 
    
         
            +
                  return Platform.StringUtilities.compare(a.name.toLowerCase(), b.name.toLowerCase());
         
     | 
| 
      
 269 
     | 
    
         
            +
                });
         
     | 
| 
      
 270 
     | 
    
         
            +
                const requestHeadersText = this.#request.requestHeadersText();
         
     | 
| 
      
 271 
     | 
    
         
            +
             
     | 
| 
       189 
272 
     | 
    
         
             
                const toggleShowRaw = (): void => {
         
     | 
| 
       190 
273 
     | 
    
         
             
                  this.#showRequestHeadersText = !this.#showRequestHeadersText;
         
     | 
| 
       191 
274 
     | 
    
         
             
                  this.#render();
         
     | 
| 
       192 
275 
     | 
    
         
             
                };
         
     | 
| 
       193 
276 
     | 
    
         | 
| 
       194 
     | 
    
         
            -
                const requestHeadersText = this.#request.requestHeadersText();
         
     | 
| 
       195 
     | 
    
         
            -
             
     | 
| 
       196 
277 
     | 
    
         
             
                // Disabled until https://crbug.com/1079231 is fixed.
         
     | 
| 
       197 
278 
     | 
    
         
             
                // clang-format off
         
     | 
| 
       198 
279 
     | 
    
         
             
                return html`
         
     | 
| 
         @@ -208,17 +289,85 @@ export class RequestHeadersComponent extends HTMLElement { 
     | 
|
| 
       208 
289 
     | 
    
         
             
                  >
         
     | 
| 
       209 
290 
     | 
    
         
             
                    ${(this.#showRequestHeadersText && requestHeadersText) ?
         
     | 
| 
       210 
291 
     | 
    
         
             
                        this.#renderRawHeaders(requestHeadersText, false) : html`
         
     | 
| 
       211 
     | 
    
         
            -
                      ${ 
     | 
| 
       212 
     | 
    
         
            -
                        <div class="row">
         
     | 
| 
       213 
     | 
    
         
            -
                          <div class="header-name">${header.name}:</div>
         
     | 
| 
       214 
     | 
    
         
            -
                          <div class="header-value">${header.value}</div>
         
     | 
| 
       215 
     | 
    
         
            -
                        </div>
         
     | 
| 
       216 
     | 
    
         
            -
                      `)}
         
     | 
| 
      
 292 
     | 
    
         
            +
                      ${headers.map(header => this.#renderHeader({...header, headerNotSet: false}))}
         
     | 
| 
       217 
293 
     | 
    
         
             
                    `}
         
     | 
| 
       218 
294 
     | 
    
         
             
                  </${Category.litTagName}>
         
     | 
| 
       219 
295 
     | 
    
         
             
                `;
         
     | 
| 
       220 
296 
     | 
    
         
             
              }
         
     | 
| 
       221 
297 
     | 
    
         | 
| 
      
 298 
     | 
    
         
            +
              #renderHeader(header: HeaderDescriptor): LitHtml.TemplateResult {
         
     | 
| 
      
 299 
     | 
    
         
            +
                return html`
         
     | 
| 
      
 300 
     | 
    
         
            +
                  <div class="row">
         
     | 
| 
      
 301 
     | 
    
         
            +
                    <div class="header-name">${header.headerNotSet ? html`<div class="header-badge header-badge-text">not-set</div>` : ''}${header.name}:</div>
         
     | 
| 
      
 302 
     | 
    
         
            +
                    <div class="header-value ${header.headerValueIncorrect ? 'header-warning' : ''}">${header.value?.toString()||''}</div>
         
     | 
| 
      
 303 
     | 
    
         
            +
                  </div>
         
     | 
| 
      
 304 
     | 
    
         
            +
                  ${this.#maybeRenderHeaderDetails(header.details)}
         
     | 
| 
      
 305 
     | 
    
         
            +
                `;
         
     | 
| 
      
 306 
     | 
    
         
            +
              }
         
     | 
| 
      
 307 
     | 
    
         
            +
             
     | 
| 
      
 308 
     | 
    
         
            +
              #maybeRenderHeaderDetails(headerDetails?: HeaderDetailsDescriptor): LitHtml.LitTemplate {
         
     | 
| 
      
 309 
     | 
    
         
            +
                if (!headerDetails) {
         
     | 
| 
      
 310 
     | 
    
         
            +
                  return LitHtml.nothing;
         
     | 
| 
      
 311 
     | 
    
         
            +
                }
         
     | 
| 
      
 312 
     | 
    
         
            +
                return html`
         
     | 
| 
      
 313 
     | 
    
         
            +
                  <div class="header-details">
         
     | 
| 
      
 314 
     | 
    
         
            +
                    <div class="call-to-action">
         
     | 
| 
      
 315 
     | 
    
         
            +
                      <div class="call-to-action-body">
         
     | 
| 
      
 316 
     | 
    
         
            +
                        <div class="explanation">${headerDetails.explanation()}</div>
         
     | 
| 
      
 317 
     | 
    
         
            +
                        ${headerDetails.examples.map(example => html`
         
     | 
| 
      
 318 
     | 
    
         
            +
                          <div class="example">
         
     | 
| 
      
 319 
     | 
    
         
            +
                            <code>${example.codeSnippet}</code>
         
     | 
| 
      
 320 
     | 
    
         
            +
                            ${example.comment ? html`
         
     | 
| 
      
 321 
     | 
    
         
            +
                              <span class="comment">${example.comment()}</span>
         
     | 
| 
      
 322 
     | 
    
         
            +
                            ` : ''}
         
     | 
| 
      
 323 
     | 
    
         
            +
                          </div>
         
     | 
| 
      
 324 
     | 
    
         
            +
                        `)}
         
     | 
| 
      
 325 
     | 
    
         
            +
                        ${this.#maybeRenderHeaderDetailsLink(headerDetails)}
         
     | 
| 
      
 326 
     | 
    
         
            +
                      </div>
         
     | 
| 
      
 327 
     | 
    
         
            +
                    </div>
         
     | 
| 
      
 328 
     | 
    
         
            +
                  </div>
         
     | 
| 
      
 329 
     | 
    
         
            +
                `;
         
     | 
| 
      
 330 
     | 
    
         
            +
              }
         
     | 
| 
      
 331 
     | 
    
         
            +
             
     | 
| 
      
 332 
     | 
    
         
            +
              #maybeRenderHeaderDetailsLink(headerDetails?: HeaderDetailsDescriptor): LitHtml.LitTemplate {
         
     | 
| 
      
 333 
     | 
    
         
            +
                if (this.#request && IssuesManager.RelatedIssue.hasIssueOfCategory(this.#request, IssuesManager.Issue.IssueCategory.CrossOriginEmbedderPolicy)) {
         
     | 
| 
      
 334 
     | 
    
         
            +
                  const followLink = (): void => {
         
     | 
| 
      
 335 
     | 
    
         
            +
                    Host.userMetrics.issuesPanelOpenedFrom(Host.UserMetrics.IssueOpener.LearnMoreLinkCOEP);
         
     | 
| 
      
 336 
     | 
    
         
            +
                    if (this.#request) {
         
     | 
| 
      
 337 
     | 
    
         
            +
                      void IssuesManager.RelatedIssue.reveal(
         
     | 
| 
      
 338 
     | 
    
         
            +
                          this.#request, IssuesManager.Issue.IssueCategory.CrossOriginEmbedderPolicy);
         
     | 
| 
      
 339 
     | 
    
         
            +
                    }
         
     | 
| 
      
 340 
     | 
    
         
            +
                  };
         
     | 
| 
      
 341 
     | 
    
         
            +
                  return html`
         
     | 
| 
      
 342 
     | 
    
         
            +
                    <div class="devtools-link" @click=${followLink}>
         
     | 
| 
      
 343 
     | 
    
         
            +
                      <${IconButton.Icon.Icon.litTagName} class="inline-icon" .data=${{
         
     | 
| 
      
 344 
     | 
    
         
            +
                        iconName: 'issue-exclamation-icon',
         
     | 
| 
      
 345 
     | 
    
         
            +
                        color: 'var(--issue-color-yellow)',
         
     | 
| 
      
 346 
     | 
    
         
            +
                        width: '16px',
         
     | 
| 
      
 347 
     | 
    
         
            +
                        height: '16px',
         
     | 
| 
      
 348 
     | 
    
         
            +
                        } as IconButton.Icon.IconData}>
         
     | 
| 
      
 349 
     | 
    
         
            +
                      </${IconButton.Icon.Icon.litTagName}>
         
     | 
| 
      
 350 
     | 
    
         
            +
                      ${i18nString(UIStrings.learnMoreInTheIssuesTab)}
         
     | 
| 
      
 351 
     | 
    
         
            +
                    </div>
         
     | 
| 
      
 352 
     | 
    
         
            +
                  `;
         
     | 
| 
      
 353 
     | 
    
         
            +
                }
         
     | 
| 
      
 354 
     | 
    
         
            +
                if (headerDetails?.link) {
         
     | 
| 
      
 355 
     | 
    
         
            +
                  return html`
         
     | 
| 
      
 356 
     | 
    
         
            +
                    <x-link href=${headerDetails.link.url} class="link">
         
     | 
| 
      
 357 
     | 
    
         
            +
                      <${IconButton.Icon.Icon.litTagName} class="inline-icon" .data=${{
         
     | 
| 
      
 358 
     | 
    
         
            +
                        iconName: 'link_icon',
         
     | 
| 
      
 359 
     | 
    
         
            +
                        color: 'var(--color-link)',
         
     | 
| 
      
 360 
     | 
    
         
            +
                        width: '16px',
         
     | 
| 
      
 361 
     | 
    
         
            +
                        height: '16px',
         
     | 
| 
      
 362 
     | 
    
         
            +
                      } as IconButton.Icon.IconData}>
         
     | 
| 
      
 363 
     | 
    
         
            +
                      </${IconButton.Icon.Icon.litTagName}
         
     | 
| 
      
 364 
     | 
    
         
            +
                      >${i18nString(UIStrings.learnMore)}
         
     | 
| 
      
 365 
     | 
    
         
            +
                    </x-link>
         
     | 
| 
      
 366 
     | 
    
         
            +
                  `;
         
     | 
| 
      
 367 
     | 
    
         
            +
                }
         
     | 
| 
      
 368 
     | 
    
         
            +
                return LitHtml.nothing;
         
     | 
| 
      
 369 
     | 
    
         
            +
              }
         
     | 
| 
      
 370 
     | 
    
         
            +
             
     | 
| 
       222 
371 
     | 
    
         
             
              #renderRawHeaders(rawHeadersText: string, forResponseHeaders: boolean): LitHtml.TemplateResult {
         
     | 
| 
       223 
372 
     | 
    
         
             
                const trimmed = rawHeadersText.trim();
         
     | 
| 
       224 
373 
     | 
    
         
             
                const showFull = forResponseHeaders ? this.#showResponseHeadersTextFull : this.#showRequestHeadersTextFull;
         
     | 
| 
         @@ -434,3 +583,118 @@ declare global { 
     | 
|
| 
       434 
583 
     | 
    
         
             
                'devtools-request-headers-category': Category;
         
     | 
| 
       435 
584 
     | 
    
         
             
              }
         
     | 
| 
       436 
585 
     | 
    
         
             
            }
         
     | 
| 
      
 586 
     | 
    
         
            +
             
     | 
| 
      
 587 
     | 
    
         
            +
            interface HeaderDetailsDescriptor {
         
     | 
| 
      
 588 
     | 
    
         
            +
              explanation: () => string;
         
     | 
| 
      
 589 
     | 
    
         
            +
              examples: Array<{
         
     | 
| 
      
 590 
     | 
    
         
            +
                codeSnippet: string,
         
     | 
| 
      
 591 
     | 
    
         
            +
                comment?: (() => string),
         
     | 
| 
      
 592 
     | 
    
         
            +
              }>;
         
     | 
| 
      
 593 
     | 
    
         
            +
              link: {
         
     | 
| 
      
 594 
     | 
    
         
            +
                url: string,
         
     | 
| 
      
 595 
     | 
    
         
            +
              }|null;
         
     | 
| 
      
 596 
     | 
    
         
            +
            }
         
     | 
| 
      
 597 
     | 
    
         
            +
             
     | 
| 
      
 598 
     | 
    
         
            +
            interface HeaderDescriptor {
         
     | 
| 
      
 599 
     | 
    
         
            +
              name: string;
         
     | 
| 
      
 600 
     | 
    
         
            +
              value: Object|null;
         
     | 
| 
      
 601 
     | 
    
         
            +
              headerValueIncorrect?: boolean|null;
         
     | 
| 
      
 602 
     | 
    
         
            +
              details?: HeaderDetailsDescriptor;
         
     | 
| 
      
 603 
     | 
    
         
            +
              headerNotSet: boolean|null;
         
     | 
| 
      
 604 
     | 
    
         
            +
            }
         
     | 
| 
      
 605 
     | 
    
         
            +
             
     | 
| 
      
 606 
     | 
    
         
            +
            const BlockedReasonDetails = new Map<Protocol.Network.BlockedReason, HeaderDescriptor>([
         
     | 
| 
      
 607 
     | 
    
         
            +
              [
         
     | 
| 
      
 608 
     | 
    
         
            +
                Protocol.Network.BlockedReason.CoepFrameResourceNeedsCoepHeader,
         
     | 
| 
      
 609 
     | 
    
         
            +
                {
         
     | 
| 
      
 610 
     | 
    
         
            +
                  name: 'cross-origin-embedder-policy',
         
     | 
| 
      
 611 
     | 
    
         
            +
                  value: null,
         
     | 
| 
      
 612 
     | 
    
         
            +
                  headerValueIncorrect: null,
         
     | 
| 
      
 613 
     | 
    
         
            +
                  details: {
         
     | 
| 
      
 614 
     | 
    
         
            +
                    explanation: i18nLazyString(UIStrings.toEmbedThisFrameInYourDocument),
         
     | 
| 
      
 615 
     | 
    
         
            +
                    examples: [{codeSnippet: 'Cross-Origin-Embedder-Policy: require-corp', comment: undefined}],
         
     | 
| 
      
 616 
     | 
    
         
            +
                    link: {url: 'https://web.dev/coop-coep/'},
         
     | 
| 
      
 617 
     | 
    
         
            +
                  },
         
     | 
| 
      
 618 
     | 
    
         
            +
                  headerNotSet: null,
         
     | 
| 
      
 619 
     | 
    
         
            +
                },
         
     | 
| 
      
 620 
     | 
    
         
            +
              ],
         
     | 
| 
      
 621 
     | 
    
         
            +
              [
         
     | 
| 
      
 622 
     | 
    
         
            +
                Protocol.Network.BlockedReason.CorpNotSameOriginAfterDefaultedToSameOriginByCoep,
         
     | 
| 
      
 623 
     | 
    
         
            +
                {
         
     | 
| 
      
 624 
     | 
    
         
            +
                  name: 'cross-origin-resource-policy',
         
     | 
| 
      
 625 
     | 
    
         
            +
                  value: null,
         
     | 
| 
      
 626 
     | 
    
         
            +
                  headerValueIncorrect: null,
         
     | 
| 
      
 627 
     | 
    
         
            +
                  details: {
         
     | 
| 
      
 628 
     | 
    
         
            +
                    explanation: i18nLazyString(UIStrings.toUseThisResourceFromADifferent),
         
     | 
| 
      
 629 
     | 
    
         
            +
                    examples: [
         
     | 
| 
      
 630 
     | 
    
         
            +
                      {
         
     | 
| 
      
 631 
     | 
    
         
            +
                        codeSnippet: 'Cross-Origin-Resource-Policy: same-site',
         
     | 
| 
      
 632 
     | 
    
         
            +
                        comment: i18nLazyString(UIStrings.chooseThisOptionIfTheResourceAnd),
         
     | 
| 
      
 633 
     | 
    
         
            +
                      },
         
     | 
| 
      
 634 
     | 
    
         
            +
                      {
         
     | 
| 
      
 635 
     | 
    
         
            +
                        codeSnippet: 'Cross-Origin-Resource-Policy: cross-origin',
         
     | 
| 
      
 636 
     | 
    
         
            +
                        comment: i18nLazyString(UIStrings.onlyChooseThisOptionIfAn),
         
     | 
| 
      
 637 
     | 
    
         
            +
                      },
         
     | 
| 
      
 638 
     | 
    
         
            +
                    ],
         
     | 
| 
      
 639 
     | 
    
         
            +
                    link: {url: 'https://web.dev/coop-coep/'},
         
     | 
| 
      
 640 
     | 
    
         
            +
                  },
         
     | 
| 
      
 641 
     | 
    
         
            +
                  headerNotSet: null,
         
     | 
| 
      
 642 
     | 
    
         
            +
                },
         
     | 
| 
      
 643 
     | 
    
         
            +
              ],
         
     | 
| 
      
 644 
     | 
    
         
            +
              [
         
     | 
| 
      
 645 
     | 
    
         
            +
                Protocol.Network.BlockedReason.CoopSandboxedIframeCannotNavigateToCoopPage,
         
     | 
| 
      
 646 
     | 
    
         
            +
                {
         
     | 
| 
      
 647 
     | 
    
         
            +
                  name: 'cross-origin-opener-policy',
         
     | 
| 
      
 648 
     | 
    
         
            +
                  value: null,
         
     | 
| 
      
 649 
     | 
    
         
            +
                  headerValueIncorrect: false,
         
     | 
| 
      
 650 
     | 
    
         
            +
                  details: {
         
     | 
| 
      
 651 
     | 
    
         
            +
                    explanation: i18nLazyString(UIStrings.thisDocumentWasBlockedFrom),
         
     | 
| 
      
 652 
     | 
    
         
            +
                    examples: [],
         
     | 
| 
      
 653 
     | 
    
         
            +
                    link: {url: 'https://web.dev/coop-coep/'},
         
     | 
| 
      
 654 
     | 
    
         
            +
                  },
         
     | 
| 
      
 655 
     | 
    
         
            +
                  headerNotSet: null,
         
     | 
| 
      
 656 
     | 
    
         
            +
                },
         
     | 
| 
      
 657 
     | 
    
         
            +
              ],
         
     | 
| 
      
 658 
     | 
    
         
            +
              [
         
     | 
| 
      
 659 
     | 
    
         
            +
                Protocol.Network.BlockedReason.CorpNotSameSite,
         
     | 
| 
      
 660 
     | 
    
         
            +
                {
         
     | 
| 
      
 661 
     | 
    
         
            +
                  name: 'cross-origin-resource-policy',
         
     | 
| 
      
 662 
     | 
    
         
            +
                  value: null,
         
     | 
| 
      
 663 
     | 
    
         
            +
                  headerValueIncorrect: true,
         
     | 
| 
      
 664 
     | 
    
         
            +
                  details: {
         
     | 
| 
      
 665 
     | 
    
         
            +
                    explanation: i18nLazyString(UIStrings.toUseThisResourceFromADifferentSite),
         
     | 
| 
      
 666 
     | 
    
         
            +
                    examples: [
         
     | 
| 
      
 667 
     | 
    
         
            +
                      {
         
     | 
| 
      
 668 
     | 
    
         
            +
                        codeSnippet: 'Cross-Origin-Resource-Policy: cross-origin',
         
     | 
| 
      
 669 
     | 
    
         
            +
                        comment: i18nLazyString(UIStrings.onlyChooseThisOptionIfAn),
         
     | 
| 
      
 670 
     | 
    
         
            +
                      },
         
     | 
| 
      
 671 
     | 
    
         
            +
                    ],
         
     | 
| 
      
 672 
     | 
    
         
            +
                    link: null,
         
     | 
| 
      
 673 
     | 
    
         
            +
                  },
         
     | 
| 
      
 674 
     | 
    
         
            +
                  headerNotSet: null,
         
     | 
| 
      
 675 
     | 
    
         
            +
                },
         
     | 
| 
      
 676 
     | 
    
         
            +
              ],
         
     | 
| 
      
 677 
     | 
    
         
            +
              [
         
     | 
| 
      
 678 
     | 
    
         
            +
                Protocol.Network.BlockedReason.CorpNotSameOrigin,
         
     | 
| 
      
 679 
     | 
    
         
            +
                {
         
     | 
| 
      
 680 
     | 
    
         
            +
                  name: 'cross-origin-resource-policy',
         
     | 
| 
      
 681 
     | 
    
         
            +
                  value: null,
         
     | 
| 
      
 682 
     | 
    
         
            +
                  headerValueIncorrect: true,
         
     | 
| 
      
 683 
     | 
    
         
            +
                  details: {
         
     | 
| 
      
 684 
     | 
    
         
            +
                    explanation: i18nLazyString(UIStrings.toUseThisResourceFromADifferentOrigin),
         
     | 
| 
      
 685 
     | 
    
         
            +
                    examples: [
         
     | 
| 
      
 686 
     | 
    
         
            +
                      {
         
     | 
| 
      
 687 
     | 
    
         
            +
                        codeSnippet: 'Cross-Origin-Resource-Policy: same-site',
         
     | 
| 
      
 688 
     | 
    
         
            +
                        comment: i18nLazyString(UIStrings.chooseThisOptionIfTheResourceAnd),
         
     | 
| 
      
 689 
     | 
    
         
            +
                      },
         
     | 
| 
      
 690 
     | 
    
         
            +
                      {
         
     | 
| 
      
 691 
     | 
    
         
            +
                        codeSnippet: 'Cross-Origin-Resource-Policy: cross-origin',
         
     | 
| 
      
 692 
     | 
    
         
            +
                        comment: i18nLazyString(UIStrings.onlyChooseThisOptionIfAn),
         
     | 
| 
      
 693 
     | 
    
         
            +
                      },
         
     | 
| 
      
 694 
     | 
    
         
            +
                    ],
         
     | 
| 
      
 695 
     | 
    
         
            +
                    link: null,
         
     | 
| 
      
 696 
     | 
    
         
            +
                  },
         
     | 
| 
      
 697 
     | 
    
         
            +
                  headerNotSet: null,
         
     | 
| 
      
 698 
     | 
    
         
            +
                },
         
     | 
| 
      
 699 
     | 
    
         
            +
              ],
         
     | 
| 
      
 700 
     | 
    
         
            +
            ]);
         
     | 
| 
         @@ -14,20 +14,25 @@ const UIStrings = { 
     | 
|
| 
       14 
14 
     | 
    
         
             
              */
         
     | 
| 
       15 
15 
     | 
    
         
             
              sourceMapUrl: 'Source map URL: ',
         
     | 
| 
       16 
16 
     | 
    
         
             
              /**
         
     | 
| 
      
 17 
     | 
    
         
            +
              *@description Text in Add Debug Info URL Dialog of the Sources panel
         
     | 
| 
      
 18 
     | 
    
         
            +
              */
         
     | 
| 
      
 19 
     | 
    
         
            +
              debugInfoUrl: 'DWARF symbols URL: ',
         
     | 
| 
      
 20 
     | 
    
         
            +
              /**
         
     | 
| 
       17 
21 
     | 
    
         
             
              *@description Text to add something
         
     | 
| 
       18 
22 
     | 
    
         
             
              */
         
     | 
| 
       19 
23 
     | 
    
         
             
              add: 'Add',
         
     | 
| 
       20 
24 
     | 
    
         
             
            };
         
     | 
| 
       21 
25 
     | 
    
         
             
            const str_ = i18n.i18n.registerUIStrings('panels/sources/AddSourceMapURLDialog.ts', UIStrings);
         
     | 
| 
       22 
26 
     | 
    
         
             
            const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
         
     | 
| 
       23 
     | 
    
         
            -
            export class  
     | 
| 
      
 27 
     | 
    
         
            +
            export class AddDebugInfoURLDialog extends UI.Widget.HBox {
         
     | 
| 
       24 
28 
     | 
    
         
             
              private readonly input: HTMLInputElement;
         
     | 
| 
       25 
29 
     | 
    
         
             
              private readonly dialog: UI.Dialog.Dialog;
         
     | 
| 
       26 
30 
     | 
    
         
             
              private readonly callback: (arg0: Platform.DevToolsPath.UrlString) => void;
         
     | 
| 
       27 
     | 
    
         
            -
              constructor( 
     | 
| 
      
 31 
     | 
    
         
            +
              private constructor(
         
     | 
| 
      
 32 
     | 
    
         
            +
                  label: Platform.UIString.LocalizedString, callback: (arg0: Platform.DevToolsPath.UrlString) => void) {
         
     | 
| 
       28 
33 
     | 
    
         
             
                super(/* isWebComponent */ true);
         
     | 
| 
       29 
34 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
                this.contentElement.createChild('label').textContent =  
     | 
| 
      
 35 
     | 
    
         
            +
                this.contentElement.createChild('label').textContent = label;
         
     | 
| 
       31 
36 
     | 
    
         | 
| 
       32 
37 
     | 
    
         
             
                this.input = UI.UIUtils.createInput('add-source-map', 'text');
         
     | 
| 
       33 
38 
     | 
    
         
             
                this.input.addEventListener('keydown', this.onKeyDown.bind(this), false);
         
     | 
| 
         @@ -43,6 +48,15 @@ export class AddSourceMapURLDialog extends UI.Widget.HBox { 
     | 
|
| 
       43 
48 
     | 
    
         
             
                this.callback = callback;
         
     | 
| 
       44 
49 
     | 
    
         
             
              }
         
     | 
| 
       45 
50 
     | 
    
         | 
| 
      
 51 
     | 
    
         
            +
              static createAddSourceMapURLDialog(callback: (arg0: Platform.DevToolsPath.UrlString) => void): AddDebugInfoURLDialog {
         
     | 
| 
      
 52 
     | 
    
         
            +
                return new AddDebugInfoURLDialog(i18nString(UIStrings.sourceMapUrl), callback);
         
     | 
| 
      
 53 
     | 
    
         
            +
              }
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              static createAddDWARFSymbolsURLDialog(callback: (arg0: Platform.DevToolsPath.UrlString) => void):
         
     | 
| 
      
 56 
     | 
    
         
            +
                  AddDebugInfoURLDialog {
         
     | 
| 
      
 57 
     | 
    
         
            +
                return new AddDebugInfoURLDialog(i18nString(UIStrings.debugInfoUrl), callback);
         
     | 
| 
      
 58 
     | 
    
         
            +
              }
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
       46 
60 
     | 
    
         
             
              show(): void {
         
     | 
| 
       47 
61 
     | 
    
         
             
                super.show(this.dialog.contentElement);
         
     | 
| 
       48 
62 
     | 
    
         
             
                // UI.Dialog extends GlassPane and overrides the `show` method with a wider
         
     | 
| 
         @@ -160,6 +160,9 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte 
     | 
|
| 
       160 
160 
     | 
    
         | 
| 
       161 
161 
     | 
    
         
             
                this.updateItemThrottler = new Common.Throttler.Throttler(100);
         
     | 
| 
       162 
162 
     | 
    
         
             
                this.scheduledForUpdateItems = new Set();
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
                SDK.TargetManager.TargetManager.instance().addModelListener(
         
     | 
| 
      
 165 
     | 
    
         
            +
                    SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.DebugInfoAttached, this.debugInfoAttached, this);
         
     | 
| 
       163 
166 
     | 
    
         
             
              }
         
     | 
| 
       164 
167 
     | 
    
         | 
| 
       165 
168 
     | 
    
         
             
              static instance(opts: {
         
     | 
| 
         @@ -179,6 +182,10 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte 
     | 
|
| 
       179 
182 
     | 
    
         
             
                this.update();
         
     | 
| 
       180 
183 
     | 
    
         
             
              }
         
     | 
| 
       181 
184 
     | 
    
         | 
| 
      
 185 
     | 
    
         
            +
              private debugInfoAttached(): void {
         
     | 
| 
      
 186 
     | 
    
         
            +
                this.update();
         
     | 
| 
      
 187 
     | 
    
         
            +
              }
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
       182 
189 
     | 
    
         
             
              private update(): void {
         
     | 
| 
       183 
190 
     | 
    
         
             
                void this.updateThrottler.schedule(() => this.doUpdate());
         
     | 
| 
       184 
191 
     | 
    
         
             
              }
         
     | 
| 
         @@ -45,7 +45,7 @@ import * as SourceFrame from '../../ui/legacy/components/source_frame/source_fra 
     | 
|
| 
       45 
45 
     | 
    
         
             
            import * as UI from '../../ui/legacy/legacy.js';
         
     | 
| 
       46 
46 
     | 
    
         
             
            import type * as TextEditor from '../../ui/components/text_editor/text_editor.js';
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
            import { 
     | 
| 
      
 48 
     | 
    
         
            +
            import {AddDebugInfoURLDialog} from './AddSourceMapURLDialog.js';
         
     | 
| 
       49 
49 
     | 
    
         
             
            import {BreakpointEditDialog, LogpointPrefix} from './BreakpointEditDialog.js';
         
     | 
| 
       50 
50 
     | 
    
         
             
            import {Plugin} from './Plugin.js';
         
     | 
| 
       51 
51 
     | 
    
         
             
            import {ScriptFormatterEditorAction} from './ScriptFormatterEditorAction.js';
         
     | 
| 
         @@ -112,6 +112,10 @@ const UIStrings = { 
     | 
|
| 
       112 
112 
     | 
    
         
             
              /**
         
     | 
| 
       113 
113 
     | 
    
         
             
              *@description Text in Debugger Plugin of the Sources panel
         
     | 
| 
       114 
114 
     | 
    
         
             
              */
         
     | 
| 
      
 115 
     | 
    
         
            +
              addWasmDebugInfo: 'Add DWARF debug info…',
         
     | 
| 
      
 116 
     | 
    
         
            +
              /**
         
     | 
| 
      
 117 
     | 
    
         
            +
              *@description Text in Debugger Plugin of the Sources panel
         
     | 
| 
      
 118 
     | 
    
         
            +
              */
         
     | 
| 
       115 
119 
     | 
    
         
             
              sourceMapDetected: 'Source map detected.',
         
     | 
| 
       116 
120 
     | 
    
         
             
              /**
         
     | 
| 
       117 
121 
     | 
    
         
             
              *@description Text in Debugger Plugin of the Sources panel
         
     | 
| 
         @@ -480,7 +484,8 @@ export class DebuggerPlugin extends Plugin { 
     | 
|
| 
       480 
484 
     | 
    
         | 
| 
       481 
485 
     | 
    
         
             
              populateTextAreaContextMenu(contextMenu: UI.ContextMenu.ContextMenu): void {
         
     | 
| 
       482 
486 
     | 
    
         
             
                function addSourceMapURL(scriptFile: Bindings.ResourceScriptMapping.ResourceScriptFile): void {
         
     | 
| 
       483 
     | 
    
         
            -
                  const dialog = 
     | 
| 
      
 487 
     | 
    
         
            +
                  const dialog =
         
     | 
| 
      
 488 
     | 
    
         
            +
                      AddDebugInfoURLDialog.createAddSourceMapURLDialog(addSourceMapURLDialogCallback.bind(null, scriptFile));
         
     | 
| 
       484 
489 
     | 
    
         
             
                  dialog.show();
         
     | 
| 
       485 
490 
     | 
    
         
             
                }
         
     | 
| 
       486 
491 
     | 
    
         | 
| 
         @@ -492,13 +497,34 @@ export class DebuggerPlugin extends Plugin { 
     | 
|
| 
       492 
497 
     | 
    
         
             
                  scriptFile.addSourceMapURL(url);
         
     | 
| 
       493 
498 
     | 
    
         
             
                }
         
     | 
| 
       494 
499 
     | 
    
         | 
| 
      
 500 
     | 
    
         
            +
                function addDebugInfoURL(scriptFile: Bindings.ResourceScriptMapping.ResourceScriptFile): void {
         
     | 
| 
      
 501 
     | 
    
         
            +
                  const dialog =
         
     | 
| 
      
 502 
     | 
    
         
            +
                      AddDebugInfoURLDialog.createAddDWARFSymbolsURLDialog(addDebugInfoURLDialogCallback.bind(null, scriptFile));
         
     | 
| 
      
 503 
     | 
    
         
            +
                  dialog.show();
         
     | 
| 
      
 504 
     | 
    
         
            +
                }
         
     | 
| 
      
 505 
     | 
    
         
            +
             
     | 
| 
      
 506 
     | 
    
         
            +
                function addDebugInfoURLDialogCallback(
         
     | 
| 
      
 507 
     | 
    
         
            +
                    scriptFile: Bindings.ResourceScriptMapping.ResourceScriptFile, url: Platform.DevToolsPath.UrlString): void {
         
     | 
| 
      
 508 
     | 
    
         
            +
                  if (!url) {
         
     | 
| 
      
 509 
     | 
    
         
            +
                    return;
         
     | 
| 
      
 510 
     | 
    
         
            +
                  }
         
     | 
| 
      
 511 
     | 
    
         
            +
                  scriptFile.addDebugInfoURL(url);
         
     | 
| 
      
 512 
     | 
    
         
            +
                }
         
     | 
| 
      
 513 
     | 
    
         
            +
             
     | 
| 
       495 
514 
     | 
    
         
             
                if (this.uiSourceCode.project().type() === Workspace.Workspace.projectTypes.Network &&
         
     | 
| 
       496 
515 
     | 
    
         
             
                    Common.Settings.Settings.instance().moduleSetting('jsSourceMapsEnabled').get() &&
         
     | 
| 
       497 
516 
     | 
    
         
             
                    !Bindings.IgnoreListManager.IgnoreListManager.instance().isIgnoreListedUISourceCode(this.uiSourceCode)) {
         
     | 
| 
       498 
517 
     | 
    
         
             
                  if (this.scriptFileForDebuggerModel.size) {
         
     | 
| 
       499 
     | 
    
         
            -
                    const scriptFile  
     | 
| 
      
 518 
     | 
    
         
            +
                    const scriptFile: Bindings.ResourceScriptMapping.ResourceScriptFile =
         
     | 
| 
      
 519 
     | 
    
         
            +
                        this.scriptFileForDebuggerModel.values().next().value;
         
     | 
| 
       500 
520 
     | 
    
         
             
                    const addSourceMapURLLabel = i18nString(UIStrings.addSourceMap);
         
     | 
| 
       501 
521 
     | 
    
         
             
                    contextMenu.debugSection().appendItem(addSourceMapURLLabel, addSourceMapURL.bind(null, scriptFile));
         
     | 
| 
      
 522 
     | 
    
         
            +
                    if (scriptFile.script?.isWasm() &&
         
     | 
| 
      
 523 
     | 
    
         
            +
                        !Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().pluginManager?.hasPluginForScript(
         
     | 
| 
      
 524 
     | 
    
         
            +
                            scriptFile.script)) {
         
     | 
| 
      
 525 
     | 
    
         
            +
                      contextMenu.debugSection().appendItem(
         
     | 
| 
      
 526 
     | 
    
         
            +
                          i18nString(UIStrings.addWasmDebugInfo), addDebugInfoURL.bind(null, scriptFile));
         
     | 
| 
      
 527 
     | 
    
         
            +
                    }
         
     | 
| 
       502 
528 
     | 
    
         
             
                  }
         
     | 
| 
       503 
529 
     | 
    
         
             
                }
         
     | 
| 
       504 
530 
     | 
    
         
             
              }
         
     | 
| 
         @@ -99,6 +99,8 @@ export class ScopeChainSidebarPane extends UI.Widget.VBox implements UI.ContextF 
     | 
|
| 
       99 
99 
     | 
    
         
             
                this.infoElement = document.createElement('div');
         
     | 
| 
       100 
100 
     | 
    
         
             
                this.infoElement.className = 'gray-info-message';
         
     | 
| 
       101 
101 
     | 
    
         
             
                this.infoElement.tabIndex = -1;
         
     | 
| 
      
 102 
     | 
    
         
            +
                SDK.TargetManager.TargetManager.instance().addModelListener(
         
     | 
| 
      
 103 
     | 
    
         
            +
                    SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.DebugInfoAttached, this.debugInfoAttached, this);
         
     | 
| 
       102 
104 
     | 
    
         
             
                void this.update();
         
     | 
| 
       103 
105 
     | 
    
         
             
              }
         
     | 
| 
       104 
106 
     | 
    
         | 
| 
         @@ -151,6 +153,12 @@ export class ScopeChainSidebarPane extends UI.Widget.VBox implements UI.ContextF 
     | 
|
| 
       151 
153 
     | 
    
         
             
                }
         
     | 
| 
       152 
154 
     | 
    
         
             
              }
         
     | 
| 
       153 
155 
     | 
    
         | 
| 
      
 156 
     | 
    
         
            +
              private debugInfoAttached(event: Common.EventTarget.EventTargetEvent<SDK.Script.Script>): void {
         
     | 
| 
      
 157 
     | 
    
         
            +
                if (event.data === this.#scopesScript) {
         
     | 
| 
      
 158 
     | 
    
         
            +
                  void this.update();
         
     | 
| 
      
 159 
     | 
    
         
            +
                }
         
     | 
| 
      
 160 
     | 
    
         
            +
              }
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
       154 
162 
     | 
    
         
             
              private async update(): Promise<void> {
         
     | 
| 
       155 
163 
     | 
    
         
             
                // The `resolveThisObject(callFrame)` and `resolveScopeChain(callFrame)` calls
         
     | 
| 
       156 
164 
     | 
    
         
             
                // below may take a while to complete, so indicate to the user that something
         
     | 
| 
         @@ -314,6 +314,8 @@ export class SourcesPanel extends UI.Panel.Panel implements UI.ContextMenu.Provi 
     | 
|
| 
       314 
314 
     | 
    
         
             
                    SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.DebuggerWasEnabled, this.debuggerWasEnabled, this);
         
     | 
| 
       315 
315 
     | 
    
         
             
                SDK.TargetManager.TargetManager.instance().addModelListener(
         
     | 
| 
       316 
316 
     | 
    
         
             
                    SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.DebuggerPaused, this.debuggerPaused, this);
         
     | 
| 
      
 317 
     | 
    
         
            +
                SDK.TargetManager.TargetManager.instance().addModelListener(
         
     | 
| 
      
 318 
     | 
    
         
            +
                    SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.DebugInfoAttached, this.debugInfoAttached, this);
         
     | 
| 
       317 
319 
     | 
    
         
             
                SDK.TargetManager.TargetManager.instance().addModelListener(
         
     | 
| 
       318 
320 
     | 
    
         
             
                    SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.DebuggerResumed,
         
     | 
| 
       319 
321 
     | 
    
         
             
                    event => this.debuggerResumed(event.data));
         
     | 
| 
         @@ -474,6 +476,18 @@ export class SourcesPanel extends UI.Panel.Panel implements UI.ContextMenu.Provi 
     | 
|
| 
       474 
476 
     | 
    
         
             
                }
         
     | 
| 
       475 
477 
     | 
    
         
             
              }
         
     | 
| 
       476 
478 
     | 
    
         | 
| 
      
 479 
     | 
    
         
            +
              private debugInfoAttached(event: Common.EventTarget.EventTargetEvent<SDK.Script.Script>): void {
         
     | 
| 
      
 480 
     | 
    
         
            +
                const {debuggerModel} = event.data;
         
     | 
| 
      
 481 
     | 
    
         
            +
                if (!debuggerModel.isPaused()) {
         
     | 
| 
      
 482 
     | 
    
         
            +
                  return;
         
     | 
| 
      
 483 
     | 
    
         
            +
                }
         
     | 
| 
      
 484 
     | 
    
         
            +
             
     | 
| 
      
 485 
     | 
    
         
            +
                const details = debuggerModel.debuggerPausedDetails();
         
     | 
| 
      
 486 
     | 
    
         
            +
                if (details && UI.Context.Context.instance().flavor(SDK.Target.Target) === debuggerModel.target()) {
         
     | 
| 
      
 487 
     | 
    
         
            +
                  this.showDebuggerPausedDetails(details);
         
     | 
| 
      
 488 
     | 
    
         
            +
                }
         
     | 
| 
      
 489 
     | 
    
         
            +
              }
         
     | 
| 
      
 490 
     | 
    
         
            +
             
     | 
| 
       477 
491 
     | 
    
         
             
              private showDebuggerPausedDetails(details: SDK.DebuggerModel.DebuggerPausedDetails): void {
         
     | 
| 
       478 
492 
     | 
    
         
             
                this.pausedInternal = true;
         
     | 
| 
       479 
493 
     | 
    
         
             
                void this.updateDebuggerButtonsAndStatus();
         
     | 
    
        package/package.json
    CHANGED
    
    
| 
         @@ -64,7 +64,7 @@ module.exports = { 
     | 
|
| 
       64 
64 
     | 
    
         
             
                      const filePathWithPanelName = classDefiningFileName.substring(PANELS_DIRECTORY.length + 1);
         
     | 
| 
       65 
65 
     | 
    
         
             
                      const filePathWithoutPanelName = filePathWithPanelName.substring(filePathWithPanelName.indexOf(path.sep) + 1);
         
     | 
| 
       66 
66 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
                      if (filePathWithoutPanelName. 
     | 
| 
      
 67 
     | 
    
         
            +
                      if (filePathWithoutPanelName.includes(`components${path.sep}`)) {
         
     | 
| 
       68 
68 
     | 
    
         
             
                        return;
         
     | 
| 
       69 
69 
     | 
    
         
             
                      }
         
     | 
| 
       70 
70 
     | 
    
         
             
                    }
         
     | 
| 
         @@ -27,6 +27,11 @@ ruleTester.run('custom_element_definitions_location', rule, { 
     | 
|
| 
       27 
27 
     | 
    
         
             
                  filename: 'front_end/panels/issues/components/nested/folder/Foo.ts',
         
     | 
| 
       28 
28 
     | 
    
         
             
                  options: [{rootFrontendDirectory: path.join(__dirname, '..', '..', '..', 'front_end')}]
         
     | 
| 
       29 
29 
     | 
    
         
             
                },
         
     | 
| 
      
 30 
     | 
    
         
            +
                {
         
     | 
| 
      
 31 
     | 
    
         
            +
                  code: 'class Foo extends HTMLElement {}',
         
     | 
| 
      
 32 
     | 
    
         
            +
                  filename: 'front_end/panels/performance/library/components/metrics/Metric.ts',
         
     | 
| 
      
 33 
     | 
    
         
            +
                  options: [{rootFrontendDirectory: path.join(__dirname, '..', '..', '..', 'front_end')}]
         
     | 
| 
      
 34 
     | 
    
         
            +
                },
         
     | 
| 
       30 
35 
     | 
    
         
             
                {
         
     | 
| 
       31 
36 
     | 
    
         
             
                  code: 'class Foo extends OtherClass {}',
         
     | 
| 
       32 
37 
     | 
    
         
             
                  filename: 'front_end/models/some/Model.ts',
         
     |