chrome-devtools-frontend 1.0.1031822 → 1.0.1032471

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.
Files changed (37) hide show
  1. package/config/gni/devtools_grd_files.gni +1 -0
  2. package/front_end/core/host/UserMetrics.ts +2 -1
  3. package/front_end/core/i18n/locales/en-US.json +20 -5
  4. package/front_end/core/i18n/locales/en-XL.json +20 -5
  5. package/front_end/core/root/Runtime.ts +1 -0
  6. package/front_end/entrypoints/main/MainImpl.ts +3 -0
  7. package/front_end/generated/InspectorBackendCommands.js +3 -3
  8. package/front_end/generated/SupportedCSSProperties.js +2 -4
  9. package/front_end/generated/protocol.ts +2 -1
  10. package/front_end/models/issues_manager/DeprecationIssue.ts +3 -1
  11. package/front_end/models/text_utils/CodeMirrorUtils.ts +1 -2
  12. package/front_end/models/timeline_model/TimelineModel.ts +52 -0
  13. package/front_end/panels/elements/CSSRuleValidator.ts +12 -13
  14. package/front_end/panels/network/NetworkItemView.ts +15 -2
  15. package/front_end/panels/network/components/RequestHeadersView.css +13 -0
  16. package/front_end/panels/network/components/RequestHeadersView.ts +59 -57
  17. package/front_end/panels/sources/BreakpointsSidebarPane.ts +37 -0
  18. package/front_end/panels/sources/sources-meta.ts +3 -0
  19. package/front_end/panels/sources/sources.ts +2 -0
  20. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +21 -2
  21. package/front_end/panels/timeline/TimelineUIUtils.ts +16 -0
  22. package/front_end/third_party/codemirror.next/bundle.ts +1 -1
  23. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  24. package/front_end/third_party/codemirror.next/chunk/cpp.js +1 -1
  25. package/front_end/third_party/codemirror.next/chunk/java.js +1 -1
  26. package/front_end/third_party/codemirror.next/chunk/json.js +1 -1
  27. package/front_end/third_party/codemirror.next/chunk/legacy.js +1 -1
  28. package/front_end/third_party/codemirror.next/chunk/markdown.js +1 -1
  29. package/front_end/third_party/codemirror.next/chunk/php.js +1 -1
  30. package/front_end/third_party/codemirror.next/chunk/python.js +1 -1
  31. package/front_end/third_party/codemirror.next/chunk/wast.js +1 -1
  32. package/front_end/third_party/codemirror.next/chunk/xml.js +1 -1
  33. package/front_end/third_party/codemirror.next/codemirror.next.d.ts +342 -1314
  34. package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
  35. package/front_end/third_party/codemirror.next/package.json +21 -21
  36. package/front_end/ui/legacy/InspectorView.ts +6 -0
  37. package/package.json +1 -1
@@ -1227,6 +1227,7 @@ grd_files_debug_sources = [
1227
1227
  "front_end/panels/snippets/SnippetsQuickOpen.js",
1228
1228
  "front_end/panels/sources/AddSourceMapURLDialog.js",
1229
1229
  "front_end/panels/sources/BreakpointEditDialog.js",
1230
+ "front_end/panels/sources/BreakpointsSidebarPane.js",
1230
1231
  "front_end/panels/sources/CSSPlugin.js",
1231
1232
  "front_end/panels/sources/CallStackSidebarPane.js",
1232
1233
  "front_end/panels/sources/CoveragePlugin.js",
@@ -638,8 +638,9 @@ export enum DevtoolsExperiments {
638
638
  'authoredDeployedGrouping' = 63,
639
639
  'importantDOMProperties' = 64,
640
640
  'justMyCode' = 65,
641
+ 'breakpointView' = 66,
641
642
  // Increment this when new experiments are added.
642
- 'MaxValue' = 66,
643
+ 'MaxValue' = 67,
643
644
  }
644
645
  /* eslint-enable @typescript-eslint/naming-convention */
645
646
 
@@ -1709,6 +1709,9 @@
1709
1709
  "models/timeline_model/TimelineModel.ts | unknownWorkletS": {
1710
1710
  "message": "Auction Worklet — {PH1}"
1711
1711
  },
1712
+ "models/timeline_model/TimelineModel.ts | userInteractions": {
1713
+ "message": "User Interactions"
1714
+ },
1712
1715
  "models/timeline_model/TimelineModel.ts | workerS": {
1713
1716
  "message": "Worker — {PH1}"
1714
1717
  },
@@ -4842,19 +4845,19 @@
4842
4845
  "message": "Inactive property"
4843
4846
  },
4844
4847
  "panels/elements/CSSRuleValidator.ts | ruleViolatedByParentElementRuleFix": {
4845
- "message": "Please change the parent element's property declaration from {EXISTING_PARENT_ELEMENT_RULE} to {TARGET_PARENT_ELEMENT_RULE} to fix this issue."
4848
+ "message": "Try changing the {EXISTING_PARENT_ELEMENT_RULE} property on the parent to {TARGET_PARENT_ELEMENT_RULE}."
4846
4849
  },
4847
4850
  "panels/elements/CSSRuleValidator.ts | ruleViolatedByParentElementRuleReason": {
4848
- "message": "The parent element has the {REASON_PROPERTY_DECLARATION_CODE} property and therefore, this element's property {AFFECTED_PROPERTY_DECLARATION_CODE} has no effect."
4851
+ "message": "The {REASON_PROPERTY_DECLARATION_CODE} property on the parent element bypasses the effect of {AFFECTED_PROPERTY_DECLARATION_CODE}."
4849
4852
  },
4850
4853
  "panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleChangeSuggestion": {
4851
- "message": "For this property to work, please change the {EXISTING_PROPERTY_DECLARATION} rule to {TARGET_PROPERTY_DECLARATION}."
4854
+ "message": "Try changing the {EXISTING_PROPERTY_DECLARATION} property to {TARGET_PROPERTY_DECLARATION}."
4852
4855
  },
4853
4856
  "panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleFix": {
4854
- "message": "For this property to work, please remove or change the value of {REASON_PROPERTY_DECLARATION_CODE}."
4857
+ "message": "Try removing {REASON_PROPERTY_DECLARATION_CODE} or changing its value."
4855
4858
  },
4856
4859
  "panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleReason": {
4857
- "message": "This element has the {REASON_PROPERTY_DECLARATION_CODE} property and therefore, {AFFECTED_PROPERTY_DECLARATION_CODE} has no effect."
4860
+ "message": "The {REASON_PROPERTY_DECLARATION_CODE} property on the same element bypasses the effect of {AFFECTED_PROPERTY_DECLARATION_CODE}."
4858
4861
  },
4859
4862
  "panels/elements/DOMLinkifier.ts | node": {
4860
4863
  "message": "<node>"
@@ -9785,6 +9788,9 @@
9785
9788
  "panels/sources/BreakpointEditDialog.ts | pauseOnlyWhenTheConditionIsTrue": {
9786
9789
  "message": "Pause only when the condition is true"
9787
9790
  },
9791
+ "panels/sources/BreakpointsSidebarPane.ts | noBreakpoints": {
9792
+ "message": "No breakpoints"
9793
+ },
9788
9794
  "panels/sources/CallStackSidebarPane.ts | addAllContentScriptsToIgnoreList": {
9789
9795
  "message": "Add all content scripts to ignore list"
9790
9796
  },
@@ -10853,6 +10859,9 @@
10853
10859
  "panels/timeline/TimelineFlameChartDataProvider.ts | timings": {
10854
10860
  "message": "Timings"
10855
10861
  },
10862
+ "panels/timeline/TimelineFlameChartDataProvider.ts | userInteractions": {
10863
+ "message": "Interactions"
10864
+ },
10856
10865
  "panels/timeline/TimelineFlameChartNetworkDataProvider.ts | network": {
10857
10866
  "message": "Network"
10858
10867
  },
@@ -11315,6 +11324,9 @@
11315
11324
  "panels/timeline/TimelineUIUtils.ts | event": {
11316
11325
  "message": "Event"
11317
11326
  },
11327
+ "panels/timeline/TimelineUIUtils.ts | eventTiming": {
11328
+ "message": "Event Timing"
11329
+ },
11318
11330
  "panels/timeline/TimelineUIUtils.ts | evolvedClsLink": {
11319
11331
  "message": "evolved"
11320
11332
  },
@@ -11426,6 +11438,9 @@
11426
11438
  "panels/timeline/TimelineUIUtils.ts | installTimer": {
11427
11439
  "message": "Install Timer"
11428
11440
  },
11441
+ "panels/timeline/TimelineUIUtils.ts | interactionEvent": {
11442
+ "message": "Interaction type:{PH1} id:{PH2}"
11443
+ },
11429
11444
  "panels/timeline/TimelineUIUtils.ts | invalidateLayout": {
11430
11445
  "message": "Invalidate Layout"
11431
11446
  },
@@ -1709,6 +1709,9 @@
1709
1709
  "models/timeline_model/TimelineModel.ts | unknownWorkletS": {
1710
1710
  "message": "Âúĉt́îón̂ Ẃôŕk̂ĺêt́ — {PH1}"
1711
1711
  },
1712
+ "models/timeline_model/TimelineModel.ts | userInteractions": {
1713
+ "message": "Ûśêŕ Îńt̂ér̂áĉt́îón̂ś"
1714
+ },
1712
1715
  "models/timeline_model/TimelineModel.ts | workerS": {
1713
1716
  "message": "Worker — {PH1}"
1714
1717
  },
@@ -4842,19 +4845,19 @@
4842
4845
  "message": "Îńâćt̂ív̂é p̂ŕôṕêŕt̂ý"
4843
4846
  },
4844
4847
  "panels/elements/CSSRuleValidator.ts | ruleViolatedByParentElementRuleFix": {
4845
- "message": "P̂ĺêáŝé ĉh́âńĝé t̂h́ê ṕâŕêńt̂ él̂ém̂én̂t́'ŝ ṕr̂óp̂ér̂t́ŷ d́êćl̂ár̂át̂íôń f̂ŕô {EXISTING_PARENT_ELEMENT_RULE} t̂ó {TARGET_PARENT_ELEMENT_RULE} t̂ó f̂íx̂ t́ĥíŝ íŝśûé."
4848
+ "message": "T̂ŕŷ ćĥán̂ǵîńĝ t́ĥé {EXISTING_PARENT_ELEMENT_RULE} p̂ŕôṕêŕt̂ý ôń t̂h́ê ṕâŕêńt̂ t́ô {TARGET_PARENT_ELEMENT_RULE}."
4846
4849
  },
4847
4850
  "panels/elements/CSSRuleValidator.ts | ruleViolatedByParentElementRuleReason": {
4848
- "message": "T̂h́ê ṕŕêńt̂ l̂ém̂én̂ ĥáŝ t́ĥé {REASON_PROPERTY_DECLARATION_CODE} ŕôṕêŕt̂ý âńd̂ t́ĥér̂éf̂ór̂é, t̂h́îś êĺêḿêńt̂'ś p̂ŕôṕêŕt̂ý {AFFECTED_PROPERTY_DECLARATION_CODE} ĥáńô éf̂f́êćt̂."
4851
+ "message": "T̂h́ê {REASON_PROPERTY_DECLARATION_CODE} ṕr̂óp̂ér̂t́ŷ ón̂ t́ĥé p̂ár̂én̂t́ êĺêḿêńt̂ b́ŷṕâśŝéŝ t́ĥ êf́f̂éĉt́ ôf́ {AFFECTED_PROPERTY_DECLARATION_CODE}."
4849
4852
  },
4850
4853
  "panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleChangeSuggestion": {
4851
- "message": "F̂r̂ t́ĥíŝ ṕr̂óp̂ér̂t́t́ô ẃôŕk̂, ṕl̂éâśê ćĥán̂ǵê t́ĥé {EXISTING_PROPERTY_DECLARATION} r̂úl̂é t̂ó {TARGET_PROPERTY_DECLARATION}."
4854
+ "message": "T̂ŕŷ ćĥán̂ǵîńĝ t́ĥé {EXISTING_PROPERTY_DECLARATION} ŕôṕêŕt̂ý t̂ó {TARGET_PROPERTY_DECLARATION}."
4852
4855
  },
4853
4856
  "panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleFix": {
4854
- "message": "F̂r̂ t́ĥíŝ ṕr̂óp̂ér̂t́t́ô ẃôk̂, ṕl̂éâśê ŕêḿôv́ê ór̂ ćĥán̂ǵê t́ĥé v̂ál̂úê óf̂ {REASON_PROPERTY_DECLARATION_CODE}."
4857
+ "message": "T̂ŕŷ ŕêḿôv́îńĝ {REASON_PROPERTY_DECLARATION_CODE} ór̂ ćĥán̂ǵîńĝ ś v̂ál̂úê."
4855
4858
  },
4856
4859
  "panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleReason": {
4857
- "message": "T̂h́îś ĺêḿêńt̂ h́âś t̂h́ê {REASON_PROPERTY_DECLARATION_CODE} ṕr̂óp̂ér̂t́ŷ án̂h́êŕêf́ôŕê, {AFFECTED_PROPERTY_DECLARATION_CODE} h́âś n̂ó êf́f̂éĉt́."
4860
+ "message": "T̂h́ê {REASON_PROPERTY_DECLARATION_CODE} ṕr̂óp̂ér̂t́ŷ ón̂ t́ĥé ŝám̂é êĺêḿêń b́ŷṕâśŝéŝ t́ĥé êf́f̂éĉt́ ôf́ {AFFECTED_PROPERTY_DECLARATION_CODE}."
4858
4861
  },
4859
4862
  "panels/elements/DOMLinkifier.ts | node": {
4860
4863
  "message": "<n̂ód̂é>"
@@ -9785,6 +9788,9 @@
9785
9788
  "panels/sources/BreakpointEditDialog.ts | pauseOnlyWhenTheConditionIsTrue": {
9786
9789
  "message": "P̂áûśê ón̂ĺŷ ẃĥén̂ t́ĥé ĉón̂d́ît́îón̂ íŝ t́r̂úê"
9787
9790
  },
9791
+ "panels/sources/BreakpointsSidebarPane.ts | noBreakpoints": {
9792
+ "message": "N̂ó b̂ŕêák̂ṕôín̂t́ŝ"
9793
+ },
9788
9794
  "panels/sources/CallStackSidebarPane.ts | addAllContentScriptsToIgnoreList": {
9789
9795
  "message": "Âd́d̂ ál̂ĺ ĉón̂t́êńt̂ śĉŕîṕt̂ś t̂ó îǵn̂ór̂é l̂íŝt́"
9790
9796
  },
@@ -10853,6 +10859,9 @@
10853
10859
  "panels/timeline/TimelineFlameChartDataProvider.ts | timings": {
10854
10860
  "message": "T̂ím̂ín̂ǵŝ"
10855
10861
  },
10862
+ "panels/timeline/TimelineFlameChartDataProvider.ts | userInteractions": {
10863
+ "message": "Îńt̂ér̂áĉt́îón̂ś"
10864
+ },
10856
10865
  "panels/timeline/TimelineFlameChartNetworkDataProvider.ts | network": {
10857
10866
  "message": "N̂ét̂ẃôŕk̂"
10858
10867
  },
@@ -11315,6 +11324,9 @@
11315
11324
  "panels/timeline/TimelineUIUtils.ts | event": {
11316
11325
  "message": "Êv́êńt̂"
11317
11326
  },
11327
+ "panels/timeline/TimelineUIUtils.ts | eventTiming": {
11328
+ "message": "Êv́êńt̂ T́îḿîńĝ"
11329
+ },
11318
11330
  "panels/timeline/TimelineUIUtils.ts | evolvedClsLink": {
11319
11331
  "message": "êv́ôĺv̂éd̂"
11320
11332
  },
@@ -11426,6 +11438,9 @@
11426
11438
  "panels/timeline/TimelineUIUtils.ts | installTimer": {
11427
11439
  "message": "Îńŝt́âĺl̂ T́îḿêŕ"
11428
11440
  },
11441
+ "panels/timeline/TimelineUIUtils.ts | interactionEvent": {
11442
+ "message": "Îńt̂ér̂áĉt́îón̂ t́ŷṕê:{PH1} íd̂:{PH2}"
11443
+ },
11429
11444
  "panels/timeline/TimelineUIUtils.ts | invalidateLayout": {
11430
11445
  "message": "Îńv̂ál̂íd̂át̂é L̂áŷóût́"
11431
11446
  },
@@ -295,6 +295,7 @@ export enum ExperimentName {
295
295
  AUTHORED_DEPLOYED_GROUPING = 'authoredDeployedGrouping',
296
296
  IMPORTANT_DOM_PROPERTIES = 'importantDOMProperties',
297
297
  JUST_MY_CODE = 'justMyCode',
298
+ BREAKPOINT_VIEW = 'breakpointView',
298
299
  }
299
300
 
300
301
  // TODO(crbug.com/1167717): Make this a const enum again
@@ -322,6 +322,9 @@ export class MainImpl {
322
322
  'evaluateExpressionsWithSourceMaps', 'Console: Resolve variable names in expressions using source maps',
323
323
  undefined);
324
324
  Root.Runtime.experiments.register('instrumentationBreakpoints', 'Enable instrumentation breakpoints', true);
325
+ Root.Runtime.experiments.register(
326
+ Root.Runtime.ExperimentName.BREAKPOINT_VIEW, 'Enable re-designed Breakpoint Sidebar Pane in the Sources Panel',
327
+ true);
325
328
 
326
329
  // Dual-screen
327
330
  Root.Runtime.experiments.register(
@@ -52,8 +52,8 @@ inspectorBackend.registerCommand("Animation.setPlaybackRate", [{"name": "playbac
52
52
  inspectorBackend.registerCommand("Animation.setTiming", [{"name": "animationId", "type": "string", "optional": false}, {"name": "duration", "type": "number", "optional": false}, {"name": "delay", "type": "number", "optional": false}], []);
53
53
 
54
54
  // Audits.
55
- inspectorBackend.registerEnum("Audits.CookieExclusionReason", {ExcludeSameSiteUnspecifiedTreatedAsLax: "ExcludeSameSiteUnspecifiedTreatedAsLax", ExcludeSameSiteNoneInsecure: "ExcludeSameSiteNoneInsecure", ExcludeSameSiteLax: "ExcludeSameSiteLax", ExcludeSameSiteStrict: "ExcludeSameSiteStrict", ExcludeInvalidSameParty: "ExcludeInvalidSameParty", ExcludeSamePartyCrossPartyContext: "ExcludeSamePartyCrossPartyContext"});
56
- inspectorBackend.registerEnum("Audits.CookieWarningReason", {WarnSameSiteUnspecifiedCrossSiteContext: "WarnSameSiteUnspecifiedCrossSiteContext", WarnSameSiteNoneInsecure: "WarnSameSiteNoneInsecure", WarnSameSiteUnspecifiedLaxAllowUnsafe: "WarnSameSiteUnspecifiedLaxAllowUnsafe", WarnSameSiteStrictLaxDowngradeStrict: "WarnSameSiteStrictLaxDowngradeStrict", WarnSameSiteStrictCrossDowngradeStrict: "WarnSameSiteStrictCrossDowngradeStrict", WarnSameSiteStrictCrossDowngradeLax: "WarnSameSiteStrictCrossDowngradeLax", WarnSameSiteLaxCrossDowngradeStrict: "WarnSameSiteLaxCrossDowngradeStrict", WarnSameSiteLaxCrossDowngradeLax: "WarnSameSiteLaxCrossDowngradeLax", WarnAttributeValueExceedsMaxSize: "WarnAttributeValueExceedsMaxSize"});
55
+ inspectorBackend.registerEnum("Audits.CookieExclusionReason", {ExcludeSameSiteUnspecifiedTreatedAsLax: "ExcludeSameSiteUnspecifiedTreatedAsLax", ExcludeSameSiteNoneInsecure: "ExcludeSameSiteNoneInsecure", ExcludeSameSiteLax: "ExcludeSameSiteLax", ExcludeSameSiteStrict: "ExcludeSameSiteStrict", ExcludeInvalidSameParty: "ExcludeInvalidSameParty", ExcludeSamePartyCrossPartyContext: "ExcludeSamePartyCrossPartyContext", ExcludeDomainNonASCII: "ExcludeDomainNonASCII"});
56
+ inspectorBackend.registerEnum("Audits.CookieWarningReason", {WarnSameSiteUnspecifiedCrossSiteContext: "WarnSameSiteUnspecifiedCrossSiteContext", WarnSameSiteNoneInsecure: "WarnSameSiteNoneInsecure", WarnSameSiteUnspecifiedLaxAllowUnsafe: "WarnSameSiteUnspecifiedLaxAllowUnsafe", WarnSameSiteStrictLaxDowngradeStrict: "WarnSameSiteStrictLaxDowngradeStrict", WarnSameSiteStrictCrossDowngradeStrict: "WarnSameSiteStrictCrossDowngradeStrict", WarnSameSiteStrictCrossDowngradeLax: "WarnSameSiteStrictCrossDowngradeLax", WarnSameSiteLaxCrossDowngradeStrict: "WarnSameSiteLaxCrossDowngradeStrict", WarnSameSiteLaxCrossDowngradeLax: "WarnSameSiteLaxCrossDowngradeLax", WarnAttributeValueExceedsMaxSize: "WarnAttributeValueExceedsMaxSize", WarnDomainNonASCII: "WarnDomainNonASCII"});
57
57
  inspectorBackend.registerEnum("Audits.CookieOperation", {SetCookie: "SetCookie", ReadCookie: "ReadCookie"});
58
58
  inspectorBackend.registerEnum("Audits.MixedContentResolutionStatus", {MixedContentBlocked: "MixedContentBlocked", MixedContentAutomaticallyUpgraded: "MixedContentAutomaticallyUpgraded", MixedContentWarning: "MixedContentWarning"});
59
59
  inspectorBackend.registerEnum("Audits.MixedContentResourceType", {AttributionSrc: "AttributionSrc", Audio: "Audio", Beacon: "Beacon", CSPReport: "CSPReport", Download: "Download", EventSource: "EventSource", Favicon: "Favicon", Font: "Font", Form: "Form", Frame: "Frame", Image: "Image", Import: "Import", Manifest: "Manifest", Ping: "Ping", PluginData: "PluginData", PluginResource: "PluginResource", Prefetch: "Prefetch", Resource: "Resource", Script: "Script", ServiceWorker: "ServiceWorker", SharedWorker: "SharedWorker", Stylesheet: "Stylesheet", Track: "Track", Video: "Video", Worker: "Worker", XMLHttpRequest: "XMLHttpRequest", XSLT: "XSLT"});
@@ -67,7 +67,7 @@ inspectorBackend.registerEnum("Audits.AttributionReportingIssueType", {Permissio
67
67
  inspectorBackend.registerEnum("Audits.GenericIssueErrorType", {CrossOriginPortalPostMessageError: "CrossOriginPortalPostMessageError"});
68
68
  inspectorBackend.registerEnum("Audits.DeprecationIssueType", {AuthorizationCoveredByWildcard: "AuthorizationCoveredByWildcard", CanRequestURLHTTPContainingNewline: "CanRequestURLHTTPContainingNewline", ChromeLoadTimesConnectionInfo: "ChromeLoadTimesConnectionInfo", ChromeLoadTimesFirstPaintAfterLoadTime: "ChromeLoadTimesFirstPaintAfterLoadTime", ChromeLoadTimesWasAlternateProtocolAvailable: "ChromeLoadTimesWasAlternateProtocolAvailable", CookieWithTruncatingChar: "CookieWithTruncatingChar", CrossOriginAccessBasedOnDocumentDomain: "CrossOriginAccessBasedOnDocumentDomain", CrossOriginWindowAlert: "CrossOriginWindowAlert", CrossOriginWindowConfirm: "CrossOriginWindowConfirm", CSSSelectorInternalMediaControlsOverlayCastButton: "CSSSelectorInternalMediaControlsOverlayCastButton", DeprecationExample: "DeprecationExample", DocumentDomainSettingWithoutOriginAgentClusterHeader: "DocumentDomainSettingWithoutOriginAgentClusterHeader", EventPath: "EventPath", ExpectCTHeader: "ExpectCTHeader", GeolocationInsecureOrigin: "GeolocationInsecureOrigin", GeolocationInsecureOriginDeprecatedNotRemoved: "GeolocationInsecureOriginDeprecatedNotRemoved", GetUserMediaInsecureOrigin: "GetUserMediaInsecureOrigin", HostCandidateAttributeGetter: "HostCandidateAttributeGetter", IdentityInCanMakePaymentEvent: "IdentityInCanMakePaymentEvent", InsecurePrivateNetworkSubresourceRequest: "InsecurePrivateNetworkSubresourceRequest", LegacyConstraintGoogIPv6: "LegacyConstraintGoogIPv6", LocalCSSFileExtensionRejected: "LocalCSSFileExtensionRejected", MediaSourceAbortRemove: "MediaSourceAbortRemove", MediaSourceDurationTruncatingBuffered: "MediaSourceDurationTruncatingBuffered", NavigateEventRestoreScroll: "NavigateEventRestoreScroll", NavigateEventTransitionWhile: "NavigateEventTransitionWhile", NoSysexWebMIDIWithoutPermission: "NoSysexWebMIDIWithoutPermission", NotificationInsecureOrigin: "NotificationInsecureOrigin", NotificationPermissionRequestedIframe: "NotificationPermissionRequestedIframe", ObsoleteWebRtcCipherSuite: "ObsoleteWebRtcCipherSuite", OpenWebDatabaseInsecureContext: "OpenWebDatabaseInsecureContext", OverflowVisibleOnReplacedElement: "OverflowVisibleOnReplacedElement", PersistentQuotaType: "PersistentQuotaType", PictureSourceSrc: "PictureSourceSrc", PrefixedCancelAnimationFrame: "PrefixedCancelAnimationFrame", PrefixedRequestAnimationFrame: "PrefixedRequestAnimationFrame", PrefixedStorageInfo: "PrefixedStorageInfo", PrefixedVideoDisplayingFullscreen: "PrefixedVideoDisplayingFullscreen", PrefixedVideoEnterFullscreen: "PrefixedVideoEnterFullscreen", PrefixedVideoEnterFullScreen: "PrefixedVideoEnterFullScreen", PrefixedVideoExitFullscreen: "PrefixedVideoExitFullscreen", PrefixedVideoExitFullScreen: "PrefixedVideoExitFullScreen", PrefixedVideoSupportsFullscreen: "PrefixedVideoSupportsFullscreen", RangeExpand: "RangeExpand", RequestedSubresourceWithEmbeddedCredentials: "RequestedSubresourceWithEmbeddedCredentials", RTCConstraintEnableDtlsSrtpFalse: "RTCConstraintEnableDtlsSrtpFalse", RTCConstraintEnableDtlsSrtpTrue: "RTCConstraintEnableDtlsSrtpTrue", RTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics: "RTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics", RTCPeerConnectionSdpSemanticsPlanB: "RTCPeerConnectionSdpSemanticsPlanB", RtcpMuxPolicyNegotiate: "RtcpMuxPolicyNegotiate", SharedArrayBufferConstructedWithoutIsolation: "SharedArrayBufferConstructedWithoutIsolation", TextToSpeech_DisallowedByAutoplay: "TextToSpeech_DisallowedByAutoplay", V8SharedArrayBufferConstructedInExtensionWithoutIsolation: "V8SharedArrayBufferConstructedInExtensionWithoutIsolation", XHRJSONEncodingDetection: "XHRJSONEncodingDetection", XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload: "XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload", XRSupportsSession: "XRSupportsSession"});
69
69
  inspectorBackend.registerEnum("Audits.ClientHintIssueReason", {MetaTagAllowListInvalidOrigin: "MetaTagAllowListInvalidOrigin", MetaTagModifiedHTML: "MetaTagModifiedHTML"});
70
- inspectorBackend.registerEnum("Audits.FederatedAuthRequestIssueReason", {ApprovalDeclined: "ApprovalDeclined", TooManyRequests: "TooManyRequests", ManifestListHttpNotFound: "ManifestListHttpNotFound", ManifestListNoResponse: "ManifestListNoResponse", ManifestListInvalidResponse: "ManifestListInvalidResponse", ManifestNotInManifestList: "ManifestNotInManifestList", ManifestListTooBig: "ManifestListTooBig", ManifestHttpNotFound: "ManifestHttpNotFound", ManifestNoResponse: "ManifestNoResponse", ManifestInvalidResponse: "ManifestInvalidResponse", ClientMetadataHttpNotFound: "ClientMetadataHttpNotFound", ClientMetadataNoResponse: "ClientMetadataNoResponse", ClientMetadataInvalidResponse: "ClientMetadataInvalidResponse", ClientMetadataMissingPrivacyPolicyUrl: "ClientMetadataMissingPrivacyPolicyUrl", DisabledInSettings: "DisabledInSettings", ErrorFetchingSignin: "ErrorFetchingSignin", InvalidSigninResponse: "InvalidSigninResponse", AccountsHttpNotFound: "AccountsHttpNotFound", AccountsNoResponse: "AccountsNoResponse", AccountsInvalidResponse: "AccountsInvalidResponse", IdTokenHttpNotFound: "IdTokenHttpNotFound", IdTokenNoResponse: "IdTokenNoResponse", IdTokenInvalidResponse: "IdTokenInvalidResponse", IdTokenInvalidRequest: "IdTokenInvalidRequest", ErrorIdToken: "ErrorIdToken", Canceled: "Canceled"});
70
+ inspectorBackend.registerEnum("Audits.FederatedAuthRequestIssueReason", {ApprovalDeclined: "ApprovalDeclined", TooManyRequests: "TooManyRequests", ManifestListHttpNotFound: "ManifestListHttpNotFound", ManifestListNoResponse: "ManifestListNoResponse", ManifestListInvalidResponse: "ManifestListInvalidResponse", ManifestNotInManifestList: "ManifestNotInManifestList", ManifestListTooBig: "ManifestListTooBig", ManifestHttpNotFound: "ManifestHttpNotFound", ManifestNoResponse: "ManifestNoResponse", ManifestInvalidResponse: "ManifestInvalidResponse", ClientMetadataHttpNotFound: "ClientMetadataHttpNotFound", ClientMetadataNoResponse: "ClientMetadataNoResponse", ClientMetadataInvalidResponse: "ClientMetadataInvalidResponse", DisabledInSettings: "DisabledInSettings", ErrorFetchingSignin: "ErrorFetchingSignin", InvalidSigninResponse: "InvalidSigninResponse", AccountsHttpNotFound: "AccountsHttpNotFound", AccountsNoResponse: "AccountsNoResponse", AccountsInvalidResponse: "AccountsInvalidResponse", IdTokenHttpNotFound: "IdTokenHttpNotFound", IdTokenNoResponse: "IdTokenNoResponse", IdTokenInvalidResponse: "IdTokenInvalidResponse", IdTokenInvalidRequest: "IdTokenInvalidRequest", ErrorIdToken: "ErrorIdToken", Canceled: "Canceled"});
71
71
  inspectorBackend.registerEnum("Audits.InspectorIssueCode", {CookieIssue: "CookieIssue", MixedContentIssue: "MixedContentIssue", BlockedByResponseIssue: "BlockedByResponseIssue", HeavyAdIssue: "HeavyAdIssue", ContentSecurityPolicyIssue: "ContentSecurityPolicyIssue", SharedArrayBufferIssue: "SharedArrayBufferIssue", TrustedWebActivityIssue: "TrustedWebActivityIssue", LowTextContrastIssue: "LowTextContrastIssue", CorsIssue: "CorsIssue", AttributionReportingIssue: "AttributionReportingIssue", QuirksModeIssue: "QuirksModeIssue", NavigatorUserAgentIssue: "NavigatorUserAgentIssue", GenericIssue: "GenericIssue", DeprecationIssue: "DeprecationIssue", ClientHintIssue: "ClientHintIssue", FederatedAuthRequestIssue: "FederatedAuthRequestIssue"});
72
72
  inspectorBackend.registerEvent("Audits.issueAdded", ["issue"]);
73
73
  inspectorBackend.registerEnum("Audits.GetEncodedResponseRequestEncoding", {Webp: "webp", Jpeg: "jpeg", Png: "png"});
@@ -1290,8 +1290,7 @@ export const generatedProperties = [
1290
1290
  "keywords": [
1291
1291
  "normal",
1292
1292
  "inline-size",
1293
- "size",
1294
- "style"
1293
+ "size"
1295
1294
  ],
1296
1295
  "name": "container-type"
1297
1296
  },
@@ -4073,8 +4072,7 @@ export const generatedPropertyValues = {
4073
4072
  "values": [
4074
4073
  "normal",
4075
4074
  "inline-size",
4076
- "size",
4077
- "style"
4075
+ "size"
4078
4076
  ]
4079
4077
  },
4080
4078
  "content-visibility": {
@@ -703,6 +703,7 @@ export namespace Audits {
703
703
  ExcludeSameSiteStrict = 'ExcludeSameSiteStrict',
704
704
  ExcludeInvalidSameParty = 'ExcludeInvalidSameParty',
705
705
  ExcludeSamePartyCrossPartyContext = 'ExcludeSamePartyCrossPartyContext',
706
+ ExcludeDomainNonASCII = 'ExcludeDomainNonASCII',
706
707
  }
707
708
 
708
709
  export const enum CookieWarningReason {
@@ -715,6 +716,7 @@ export namespace Audits {
715
716
  WarnSameSiteLaxCrossDowngradeStrict = 'WarnSameSiteLaxCrossDowngradeStrict',
716
717
  WarnSameSiteLaxCrossDowngradeLax = 'WarnSameSiteLaxCrossDowngradeLax',
717
718
  WarnAttributeValueExceedsMaxSize = 'WarnAttributeValueExceedsMaxSize',
719
+ WarnDomainNonASCII = 'WarnDomainNonASCII',
718
720
  }
719
721
 
720
722
  export const enum CookieOperation {
@@ -1116,7 +1118,6 @@ export namespace Audits {
1116
1118
  ClientMetadataHttpNotFound = 'ClientMetadataHttpNotFound',
1117
1119
  ClientMetadataNoResponse = 'ClientMetadataNoResponse',
1118
1120
  ClientMetadataInvalidResponse = 'ClientMetadataInvalidResponse',
1119
- ClientMetadataMissingPrivacyPolicyUrl = 'ClientMetadataMissingPrivacyPolicyUrl',
1120
1121
  DisabledInSettings = 'DisabledInSettings',
1121
1122
  ErrorFetchingSignin = 'ErrorFetchingSignin',
1122
1123
  InvalidSigninResponse = 'InvalidSigninResponse',
@@ -287,7 +287,9 @@ const UIStrings = {
287
287
  v8SharedArrayBufferConstructedInExtensionWithoutIsolation:
288
288
  'Extensions should opt into cross-origin isolation to continue using `SharedArrayBuffer`. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/.',
289
289
  /**
290
- * @description TODO(crbug.com/1318881): Description needed for translation
290
+ * @description Warning displayed to developers that they are using
291
+ * `XMLHttpRequest` API in a way that they expect an unsupported character
292
+ * encoding `UTF-16` could be used in the server reply.
291
293
  */
292
294
  xhrJSONEncodingDetection: 'UTF-16 is not supported by response json in `XMLHttpRequest`',
293
295
  /**
@@ -34,8 +34,7 @@ type Tokenizer = (line: string, callback: (value: string, style: string|null) =>
34
34
  export function createCssTokenizer(): Tokenizer {
35
35
  async function tokenize(line: string, callback: (value: string, style: string|null) => void): Promise<void> {
36
36
  const streamParser = await CodeMirror.cssStreamParser();
37
- const stream = new CodeMirror.StringStream();
38
- stream.string = line;
37
+ const stream = new CodeMirror.StringStream(line, 4, 2);
39
38
 
40
39
  const state = streamParser.startState();
41
40
  let lastPos = stream.pos;
@@ -47,6 +47,10 @@ const UIStrings = {
47
47
  */
48
48
  threadS: 'Thread {PH1}',
49
49
  /**
50
+ *@description Text shown when rendering the User Interactions track in the Performance panel
51
+ */
52
+ userInteractions: 'User Interactions',
53
+ /**
50
54
  *@description Title of a worker in the timeline flame chart of the Performance panel
51
55
  *@example {https://google.com} PH1
52
56
  */
@@ -244,6 +248,29 @@ export class TimelineModelImpl {
244
248
  isUserTimingEvent(event: SDK.TracingModel.Event): boolean {
245
249
  return event.categoriesString === TimelineModelImpl.Category.UserTiming;
246
250
  }
251
+
252
+ isEventTimingInteractionEvent(event: SDK.TracingModel.Event): boolean {
253
+ if (event.name !== RecordType.EventTiming) {
254
+ return false;
255
+ }
256
+ type InteractionEventData = {
257
+ duration?: number, interactionId: number,
258
+ };
259
+ const data = event.args.data as InteractionEventData;
260
+ // Filter out:
261
+ // 1. events without a duration, or a duration of 0
262
+ // 2. events without an interactionId, or with an interactionId of 0,
263
+ // which indicates that it's not a "top level" interaction event and
264
+ // we can therefore ignore it. This can happen with "mousedown" for
265
+ // example; an interaction ID is assigned to the "pointerdown" event
266
+ // as it's the "first" event to be triggered when the user clicks,
267
+ // but the browser doesn't attempt to assign IDs to all subsequent
268
+ // events, as that's a hard heuristic to get right.
269
+ const duration = data.duration || 0;
270
+ const interactionId = data.interactionId || 0;
271
+ return (duration > 0 && interactionId > 0);
272
+ }
273
+
247
274
  isParseHTMLEvent(event: SDK.TracingModel.Event): boolean {
248
275
  return event.name === RecordType.ParseHTML;
249
276
  }
@@ -362,9 +389,32 @@ export class TimelineModelImpl {
362
389
  this.processAsyncBrowserEvents(tracingModel);
363
390
  this.buildGPUEvents(tracingModel);
364
391
  this.buildLoadingEvents(tracingModel, layoutShiftEvents);
392
+ this.collectInteractionEvents(tracingModel);
365
393
  this.resetProcessingState();
366
394
  }
367
395
 
396
+ private collectInteractionEvents(tracingModel: SDK.TracingModel.TracingModel): void {
397
+ const mainRendererThread = tracingModel.getThreadByName('Renderer', 'CrRendererMain');
398
+ if (!mainRendererThread) {
399
+ return;
400
+ }
401
+
402
+ const interactionEvents: SDK.TracingModel.AsyncEvent[] = [];
403
+
404
+ const track = this.ensureNamedTrack(TrackType.UserInteractions);
405
+ track.thread = mainRendererThread;
406
+ track.name = UIStrings.userInteractions;
407
+ track.forMainFrame = true;
408
+
409
+ for (const event of mainRendererThread.asyncEvents()) {
410
+ if (!this.isEventTimingInteractionEvent(event)) {
411
+ continue;
412
+ }
413
+ interactionEvents.push(event);
414
+ }
415
+ track.asyncEvents = interactionEvents;
416
+ }
417
+
368
418
  private processGenericTrace(tracingModel: SDK.TracingModel.TracingModel): void {
369
419
  let browserMainThread = SDK.TracingModel.TracingModel.browserMainThread(tracingModel);
370
420
  if (!browserMainThread && tracingModel.sortedProcesses().length) {
@@ -1610,6 +1660,7 @@ export enum RecordType {
1610
1660
  TimeStamp = 'TimeStamp',
1611
1661
  ConsoleTime = 'ConsoleTime',
1612
1662
  UserTiming = 'UserTiming',
1663
+ EventTiming = 'EventTiming',
1613
1664
 
1614
1665
  ResourceWillSendRequest = 'ResourceWillSendRequest',
1615
1666
  ResourceSendRequest = 'ResourceSendRequest',
@@ -1822,6 +1873,7 @@ export enum TrackType {
1822
1873
  GPU = 'GPU',
1823
1874
  Experience = 'Experience',
1824
1875
  Other = 'Other',
1876
+ UserInteractions = 'UserInteractions',
1825
1877
  }
1826
1878
 
1827
1879
  const enum WorkletType {
@@ -14,47 +14,46 @@ import {
14
14
 
15
15
  const UIStrings = {
16
16
  /**
17
- *@description The type of the CSS rule validation message that is shown in the Style panel. "Deprecated property" means that the property in the declaration is deprecated and should not be used.
17
+ *@description The type of the CSS rule validation message shown in the Style pane. "Deprecated property" means that a property in the declaration is deprecated and should not be used.
18
18
  */
19
19
  deprecatedPropertyHintPrefix: 'Deprecated property',
20
20
  /**
21
- *@description The type of the CSS rule validation message that is shown in the Style panel. "Inactive property" means that a property declaration was valid syntactially but didn't have expected effect.
21
+ *@description The type of the CSS rule validation message shown in the Style pane. "Inactive property" means that a property declaration was valid syntactially but didn't have expected effect.
22
22
  */
23
23
  inactivePropertyHintPrefix: 'Inactive property',
24
24
  /**
25
- *@description The message that is shown in the Style panel when the user hovers over a property that has not effect due to some other property.
25
+ *@description The message shown in the Style pane when the user hovers over a property that has no effect due to some other property.
26
26
  *@example {flex-wrap: nowrap} REASON_PROPERTY_DECLARATION_CODE
27
27
  *@example {align-content} AFFECTED_PROPERTY_DECLARATION_CODE
28
28
  */
29
29
  ruleViolatedBySameElementRuleReason:
30
- 'This element has the {REASON_PROPERTY_DECLARATION_CODE} property and therefore, {AFFECTED_PROPERTY_DECLARATION_CODE} has no effect.',
30
+ 'The {REASON_PROPERTY_DECLARATION_CODE} property on the same element bypasses the effect of {AFFECTED_PROPERTY_DECLARATION_CODE}.',
31
31
  /**
32
- *@description The message that is shown in the Style panel when the user hovers over a property declaration that has not effect due to some other property.
32
+ *@description The message shown in the Style pane when the user hovers over a property declaration that has no effect due to some other property.
33
33
  *@example {flex-wrap: nowrap} REASON_PROPERTY_DECLARATION_CODE
34
34
  */
35
- ruleViolatedBySameElementRuleFix:
36
- 'For this property to work, please remove or change the value of {REASON_PROPERTY_DECLARATION_CODE}.',
35
+ ruleViolatedBySameElementRuleFix: 'Try removing {REASON_PROPERTY_DECLARATION_CODE} or changing its value.',
37
36
  /**
38
- *@description The message that is shown in the Style panel when the user hovers over a property declaration that has not effect due to the current property value.
37
+ *@description The message shown in the Style pane when the user hovers over a property declaration that has no effect due to the current property value.
39
38
  *@example {display: block} EXISTING_PROPERTY_DECLARATION
40
39
  *@example {display: flex} TARGET_PROPERTY_DECLARATION
41
40
  */
42
41
  ruleViolatedBySameElementRuleChangeSuggestion:
43
- 'For this property to work, please change the {EXISTING_PROPERTY_DECLARATION} rule to {TARGET_PROPERTY_DECLARATION}.',
42
+ 'Try changing the {EXISTING_PROPERTY_DECLARATION} property to {TARGET_PROPERTY_DECLARATION}.',
44
43
  /**
45
- *@description The message that is shown in the Style panel when the user hovers over a property declaration that has not effect due to properties of the parent element.
44
+ *@description The message shown in the Style pane when the user hovers over a property declaration that has no effect due to properties of the parent element.
46
45
  *@example {display: block} REASON_PROPERTY_DECLARATION_CODE
47
46
  *@example {flex} AFFECTED_PROPERTY_DECLARATION_CODE
48
47
  */
49
48
  ruleViolatedByParentElementRuleReason:
50
- 'The parent element has the {REASON_PROPERTY_DECLARATION_CODE} property and therefore, this element\'s property {AFFECTED_PROPERTY_DECLARATION_CODE} has no effect.',
49
+ 'The {REASON_PROPERTY_DECLARATION_CODE} property on the parent element bypasses the effect of {AFFECTED_PROPERTY_DECLARATION_CODE}.',
51
50
  /**
52
- *@description The message that is shown in the Style panel when the user hovers over a property declaration that has not effect due to the properties of the parent element.
51
+ *@description The message shown in the Style pane when the user hovers over a property declaration that has no effect due to the properties of the parent element.
53
52
  *@example {display: block} EXISTING_PARENT_ELEMENT_RULE
54
53
  *@example {display: flex} TARGET_PARENT_ELEMENT_RULE
55
54
  */
56
55
  ruleViolatedByParentElementRuleFix:
57
- 'Please change the parent element\'s property declaration from {EXISTING_PARENT_ELEMENT_RULE} to {TARGET_PARENT_ELEMENT_RULE} to fix this issue.',
56
+ 'Try changing the {EXISTING_PARENT_ELEMENT_RULE} property on the parent to {TARGET_PARENT_ELEMENT_RULE}.',
58
57
  };
59
58
  const str_ = i18n.i18n.registerUIStrings('panels/elements/CSSRuleValidator.ts', UIStrings);
60
59
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -311,7 +311,20 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
311
311
  }
312
312
 
313
313
  revealHeader(section: NetworkForward.UIRequestLocation.UIHeaderSection, header: string|undefined): void {
314
- this.selectTabInternal(NetworkForward.UIRequestLocation.UIRequestTabs.Headers);
315
- this.headersView.revealHeader(section, header);
314
+ if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.HEADER_OVERRIDES)) {
315
+ this.selectTabInternal(NetworkForward.UIRequestLocation.UIRequestTabs.HeadersComponent);
316
+ this.headersViewComponent.revealHeader(section, header);
317
+ } else {
318
+ this.selectTabInternal(NetworkForward.UIRequestLocation.UIRequestTabs.Headers);
319
+ this.headersView.revealHeader(section, header);
320
+ }
321
+ }
322
+
323
+ getHeadersView(): RequestHeadersView {
324
+ return this.headersView;
325
+ }
326
+
327
+ getHeadersViewComponent(): NetworkComponents.RequestHeadersView.RequestHeadersView {
328
+ return this.headersViewComponent;
316
329
  }
317
330
  }
@@ -4,6 +4,15 @@
4
4
  * found in the LICENSE file.
5
5
  */
6
6
 
7
+ devtools-request-headers-category {
8
+ --override-header-highlight-background-color: #ffff78;
9
+ }
10
+
11
+ .-theme-with-dark-background devtools-request-headers-category,
12
+ :host-context(.-theme-with-dark-background) devtools-request-headers-category {
13
+ --override-header-highlight-background-color: #4c4c33;
14
+ }
15
+
7
16
  .header {
8
17
  background-color: var(--color-background-elevation-1);
9
18
  border-bottom: var(--legacy-divider-border);
@@ -208,3 +217,7 @@ summary label {
208
217
  summary label:hover {
209
218
  color: var(--color-text-primary);
210
219
  }
220
+
221
+ .header-highlight {
222
+ background-color: var(--override-header-highlight-background-color);
223
+ }