chrome-devtools-frontend 1.0.1695017 → 1.0.1696961

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 (247) hide show
  1. package/eslint.config.mjs +4 -1
  2. package/front_end/core/common/Base64.ts +14 -4
  3. package/front_end/core/common/Gzip.ts +1 -1
  4. package/front_end/core/common/Object.ts +0 -1
  5. package/front_end/core/platform/Size.ts +43 -0
  6. package/front_end/core/platform/api/HostRuntime.ts +14 -0
  7. package/front_end/core/platform/browser/HostRuntime.ts +66 -0
  8. package/front_end/core/platform/node/HostRuntime.ts +12 -3
  9. package/front_end/core/platform/platform.ts +1 -0
  10. package/front_end/core/sdk/AccessibilityModel.ts +2 -2
  11. package/front_end/core/sdk/CSSMatchedStyles.ts +2 -0
  12. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +29 -0
  13. package/front_end/core/sdk/CSSStyleSheetHeader.ts +2 -2
  14. package/front_end/core/sdk/ConsoleModel.ts +3 -3
  15. package/front_end/core/sdk/DOMModel.ts +10 -6
  16. package/front_end/core/sdk/DebuggerModel.ts +6 -0
  17. package/front_end/core/sdk/NetworkRequest.ts +19 -19
  18. package/front_end/core/sdk/RuntimeModel.ts +5 -0
  19. package/front_end/core/sdk/Script.ts +2 -2
  20. package/front_end/core/sdk/ServerTiming.ts +6 -6
  21. package/front_end/core/sdk/SourceMap.ts +112 -14
  22. package/front_end/core/sdk/SourceMapRangeMappings.ts +43 -0
  23. package/front_end/core/sdk/SourceMapScopeChainEntry.ts +15 -10
  24. package/front_end/core/sdk/SourceMapScopesInfo.ts +92 -10
  25. package/front_end/core/sdk/sdk.ts +2 -0
  26. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +1 -1
  27. package/front_end/entrypoints/inspector_main/RenderingOptions.ts +6 -6
  28. package/front_end/entrypoints/main/MainImpl.ts +1 -1
  29. package/front_end/generated/InspectorBackendCommands.ts +6 -3
  30. package/front_end/generated/protocol-mapping.d.ts +7 -0
  31. package/front_end/generated/protocol-proxy-api.d.ts +5 -0
  32. package/front_end/generated/protocol.ts +36 -3
  33. package/front_end/models/ai_assistance/AiAgent2.ts +27 -27
  34. package/front_end/models/ai_assistance/agents/AiAgent.ts +4 -0
  35. package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +2 -2
  36. package/front_end/models/ai_assistance/contexts/AccessibilityContext.ts +1 -0
  37. package/front_end/models/ai_assistance/contexts/DOMNodeContext.ts +5 -4
  38. package/front_end/models/ai_assistance/contexts/FileContext.ts +1 -0
  39. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +1 -0
  40. package/front_end/models/ai_assistance/contexts/RequestContext.ts +1 -0
  41. package/front_end/models/ai_assistance/contexts/StorageContext.ts +1 -0
  42. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +5 -5
  43. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +6 -6
  44. package/front_end/models/ai_assistance/tools/GetElementAccessibilityDetails.ts +5 -8
  45. package/front_end/models/ai_assistance/tools/GetNetworkRequestDetails.ts +4 -8
  46. package/front_end/models/ai_assistance/tools/GetSourceContent.ts +7 -5
  47. package/front_end/models/ai_assistance/tools/GetStyles.ts +10 -6
  48. package/front_end/models/ai_assistance/tools/ListSources.ts +26 -7
  49. package/front_end/models/ai_assistance/tools/ResolveDevtoolsNodePath.ts +5 -10
  50. package/front_end/models/ai_assistance/tools/Tool.ts +8 -1
  51. package/front_end/models/bindings/FileUtils.ts +18 -40
  52. package/front_end/models/bindings/TempFile.ts +5 -12
  53. package/front_end/models/comment_manager/CommentManager.ts +30 -6
  54. package/front_end/models/crux-manager/CrUXManager.ts +8 -5
  55. package/front_end/models/emulation/DeviceModeModel.ts +55 -105
  56. package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +1 -1
  57. package/front_end/models/issues_manager/CookieIssue.ts +1 -1
  58. package/front_end/models/issues_manager/DeprecationIssue.ts +2 -2
  59. package/front_end/models/javascript_metadata/NativeFunctions.ts +1 -5
  60. package/front_end/models/live-metrics/LiveMetrics.ts +1 -1
  61. package/front_end/models/persistence/IsolatedFileSystem.ts +16 -23
  62. package/front_end/models/trace/insights/DuplicatedJavaScript.ts +1 -1
  63. package/front_end/models/trace/insights/INPBreakdown.ts +1 -1
  64. package/front_end/models/trace/insights/ImageDelivery.ts +3 -3
  65. package/front_end/models/trace/insights/LCPDiscovery.ts +2 -2
  66. package/front_end/models/trace/insights/NetworkDependencyTree.ts +3 -3
  67. package/front_end/models/trace/insights/Viewport.ts +1 -1
  68. package/front_end/models/trace/types/Overlays.ts +2 -2
  69. package/front_end/panels/accessibility/AccessibilityNodeView.ts +2 -2
  70. package/front_end/panels/accessibility/AccessibilitySubPane.ts +0 -1
  71. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +74 -18
  72. package/front_end/panels/ai_assistance/components/AIv2MarkdownRenderer.ts +14 -3
  73. package/front_end/panels/ai_assistance/components/ChatInput.ts +1 -1
  74. package/front_end/panels/ai_assistance/components/ChatMessage.ts +1 -1
  75. package/front_end/panels/animation/AnimationUI.ts +1 -1
  76. package/front_end/panels/application/AppManifestView.ts +9 -11
  77. package/front_end/panels/application/ApplicationPanelSidebar.ts +9 -9
  78. package/front_end/panels/application/BackgroundServiceView.ts +1 -1
  79. package/front_end/panels/application/CookieItemsView.ts +1 -1
  80. package/front_end/panels/application/DOMStorageItemsView.ts +1 -1
  81. package/front_end/panels/application/DeviceBoundSessionsView.ts +2 -2
  82. package/front_end/panels/application/FrameDetailsView.ts +5 -5
  83. package/front_end/panels/application/IndexedDBViews.ts +2 -2
  84. package/front_end/panels/application/KeyValueStorageItemsView.ts +1 -2
  85. package/front_end/panels/application/ReportingApiView.ts +1 -1
  86. package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +1 -1
  87. package/front_end/panels/application/ServiceWorkersView.ts +1 -1
  88. package/front_end/panels/application/StorageBucketsTreeElement.ts +1 -1
  89. package/front_end/panels/application/WebMCPView.ts +1 -1
  90. package/front_end/panels/application/components/AdsView.ts +136 -7
  91. package/front_end/panels/application/components/BackForwardCacheStrings.ts +116 -117
  92. package/front_end/panels/application/components/BackForwardCacheView.ts +7 -7
  93. package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +2 -2
  94. package/front_end/panels/application/components/PermissionsPolicySection.ts +2 -2
  95. package/front_end/panels/application/components/ProtocolHandlersView.ts +1 -1
  96. package/front_end/panels/application/components/ReportsGrid.ts +1 -1
  97. package/front_end/panels/application/components/StorageMetadataView.ts +1 -1
  98. package/front_end/panels/application/components/TrustTokensView.ts +3 -3
  99. package/front_end/panels/application/components/adScriptsTable.css +22 -0
  100. package/front_end/panels/application/preloading/PreloadingView.ts +20 -22
  101. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +9 -9
  102. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +31 -33
  103. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +23 -23
  104. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +4 -4
  105. package/front_end/panels/application/preloading/components/PreloadingString.ts +161 -161
  106. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +2 -6
  107. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +8 -8
  108. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +32 -32
  109. package/front_end/panels/application/resourcesPanel.css +17 -17
  110. package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +1 -1
  111. package/front_end/panels/changes/ChangesView.ts +1 -1
  112. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +1 -1
  113. package/front_end/panels/common/CPUThrottlingOption.ts +0 -1
  114. package/front_end/panels/common/GdpSignUpDialog.ts +3 -4
  115. package/front_end/panels/common/GeminiRebrandPromoDialog.ts +1 -1
  116. package/front_end/panels/console/ConsoleInsightTeaser.ts +1 -1
  117. package/front_end/panels/console/ConsolePinPane.ts +0 -1
  118. package/front_end/panels/console/ConsoleView.ts +2 -3
  119. package/front_end/panels/console/ConsoleViewMessage.ts +2 -3
  120. package/front_end/panels/coverage/CoverageListView.ts +6 -6
  121. package/front_end/panels/coverage/CoverageView.ts +7 -7
  122. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +1 -1
  123. package/front_end/panels/elements/CSSRuleValidator.ts +10 -10
  124. package/front_end/panels/elements/ElementsPanel.ts +3 -3
  125. package/front_end/panels/elements/ElementsTreeElement.ts +1 -1
  126. package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
  127. package/front_end/panels/elements/LayoutPane.ts +1 -1
  128. package/front_end/panels/elements/StylePropertyTreeElement.ts +85 -2
  129. package/front_end/panels/elements/StylesSidebarPane.ts +3 -3
  130. package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -1
  131. package/front_end/panels/emulation/DeviceModeView.ts +1 -1
  132. package/front_end/panels/event_listeners/EventListenersView.ts +57 -89
  133. package/front_end/panels/explain/components/ConsoleInsight.ts +4 -4
  134. package/front_end/panels/issues/AffectedPartitioningBlobURLView.ts +3 -3
  135. package/front_end/panels/issues/IssuesPane.ts +1 -1
  136. package/front_end/panels/layer_viewer/Layers3DView.ts +4 -4
  137. package/front_end/panels/layers/LayerTreeModel.ts +1 -1
  138. package/front_end/panels/lighthouse/LighthouseController.ts +4 -4
  139. package/front_end/panels/lighthouse/LighthouseStatusView.ts +10 -10
  140. package/front_end/panels/lighthouse/LighthouseTimespanView.ts +2 -2
  141. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorController.ts +1 -1
  142. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +1 -1
  143. package/front_end/panels/media/MainView.ts +2 -2
  144. package/front_end/panels/mobile_throttling/CalibrationController.ts +4 -1
  145. package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +1 -1
  146. package/front_end/panels/mobile_throttling/ThrottlingManager.ts +10 -0
  147. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +3 -3
  148. package/front_end/panels/network/NetworkConfigView.ts +26 -16
  149. package/front_end/panels/network/NetworkItemView.ts +1 -1
  150. package/front_end/panels/network/NetworkLogView.ts +4 -5
  151. package/front_end/panels/network/NetworkPanel.ts +1 -1
  152. package/front_end/panels/network/RequestConditionsDrawer.ts +3 -3
  153. package/front_end/panels/network/RequestCookiesView.ts +2 -2
  154. package/front_end/panels/network/RequestPayloadView.ts +0 -2
  155. package/front_end/panels/network/RequestTimingView.ts +1 -1
  156. package/front_end/panels/network/ResourceChunkView.ts +1 -1
  157. package/front_end/panels/network/components/HeaderSectionRow.ts +2 -2
  158. package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
  159. package/front_end/panels/network/components/RequestTrustTokensView.ts +7 -7
  160. package/front_end/panels/network/components/ResponseHeaderSection.ts +3 -4
  161. package/front_end/panels/network/network-meta.ts +1 -1
  162. package/front_end/panels/profiler/HeapDetachedElementsView.ts +1 -1
  163. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +10 -10
  164. package/front_end/panels/profiler/HeapSnapshotView.ts +1 -1
  165. package/front_end/panels/profiler/IsolateSelector.ts +4 -4
  166. package/front_end/panels/profiler/ModuleUIStrings.ts +1 -1
  167. package/front_end/panels/profiler/ProfilesPanel.ts +2 -3
  168. package/front_end/panels/recorder/RecorderPanel.ts +1 -1
  169. package/front_end/panels/search/SearchView.ts +6 -6
  170. package/front_end/panels/security/SecurityModel.ts +4 -4
  171. package/front_end/panels/security/SecurityPanel.ts +83 -54
  172. package/front_end/panels/security/SecurityPanelSidebar.ts +41 -5
  173. package/front_end/panels/security/sidebar.css +9 -10
  174. package/front_end/panels/sensors/SensorsView.ts +1 -1
  175. package/front_end/panels/settings/AISettingsTab.ts +9 -9
  176. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +1 -1
  177. package/front_end/panels/settings/KeybindsSettingsTab.ts +2 -2
  178. package/front_end/panels/settings/SettingsScreen.ts +156 -109
  179. package/front_end/panels/settings/WorkspaceSettingsTab.ts +1 -1
  180. package/front_end/panels/settings/components/SyncSection.ts +3 -3
  181. package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +13 -13
  182. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +2 -2
  183. package/front_end/panels/snippets/SnippetsQuickOpen.ts +1 -1
  184. package/front_end/panels/sources/CSSPlugin.ts +3 -3
  185. package/front_end/panels/sources/DebuggerPlugin.ts +4 -4
  186. package/front_end/panels/sources/NavigatorView.ts +3 -3
  187. package/front_end/panels/sources/OutlineQuickOpen.ts +1 -1
  188. package/front_end/panels/sources/PersistenceActions.ts +2 -2
  189. package/front_end/panels/sources/SourcesNavigator.ts +5 -5
  190. package/front_end/panels/sources/TabbedEditorContainer.ts +1 -1
  191. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +0 -1
  192. package/front_end/panels/sources/components/HeadersView.ts +1 -1
  193. package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +1 -1
  194. package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
  195. package/front_end/panels/timeline/TimelineUIUtils.ts +0 -1
  196. package/front_end/panels/timeline/components/ExportTraceOptions.ts +2 -2
  197. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +4 -4
  198. package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
  199. package/front_end/panels/timeline/components/LiveMetricsView.ts +7 -7
  200. package/front_end/panels/timeline/components/MetricCard.ts +3 -3
  201. package/front_end/panels/timeline/components/MetricCompareStrings.ts +12 -14
  202. package/front_end/panels/timeline/components/OriginMap.ts +3 -3
  203. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +4 -4
  204. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +6 -0
  205. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +1 -1
  206. package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +3 -1
  207. package/front_end/panels/timeline/timelineMiniMap.css +9 -9
  208. package/front_end/panels/timeline/timelineStatusDialog.css +9 -9
  209. package/front_end/panels/web_audio/WebAudioView.ts +1 -1
  210. package/front_end/panels/webauthn/WebauthnPane.ts +1 -1
  211. package/front_end/third_party/chromium/README.chromium +1 -1
  212. package/front_end/ui/comments/CommentAnchorResolver.ts +114 -3
  213. package/front_end/ui/comments/CommentOverlayManager.ts +95 -16
  214. package/front_end/ui/components/dialogs/TypeToAllowDialog.ts +1 -1
  215. package/front_end/ui/components/markdown_view/codeBlock.css +3 -8
  216. package/front_end/ui/components/markdown_view/markdownView.css +2 -7
  217. package/front_end/ui/components/panel_feedback/PanelFeedback.ts +2 -2
  218. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
  219. package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +1 -1
  220. package/front_end/ui/components/text_editor/AiCodeCompletionTeaser.ts +4 -4
  221. package/front_end/ui/components/text_editor/AiCodeGenerationTeaser.ts +3 -3
  222. package/front_end/{models → ui}/geometry/GeometryImpl.ts +4 -40
  223. package/front_end/ui/legacy/GlassPane.ts +1 -1
  224. package/front_end/ui/legacy/RemoteDebuggingTerminatedScreen.ts +2 -2
  225. package/front_end/ui/legacy/SoftDropDown.ts +1 -1
  226. package/front_end/ui/legacy/SplitWidget.ts +1 -1
  227. package/front_end/ui/legacy/SuggestBox.ts +1 -1
  228. package/front_end/ui/legacy/TabbedPane.ts +1 -1
  229. package/front_end/ui/legacy/TargetCrashedScreen.ts +2 -2
  230. package/front_end/ui/legacy/Treeoutline.ts +5 -1
  231. package/front_end/ui/legacy/UIUtils.ts +1 -1
  232. package/front_end/ui/legacy/Widget.ts +1 -1
  233. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -1
  234. package/front_end/ui/legacy/components/inline_editor/AnimationTimingModel.ts +1 -1
  235. package/front_end/ui/legacy/components/inline_editor/AnimationTimingUI.ts +1 -1
  236. package/front_end/ui/legacy/components/inline_editor/BezierUI.ts +1 -1
  237. package/front_end/ui/legacy/components/inline_editor/CSSAngleUtils.ts +1 -1
  238. package/front_end/ui/legacy/components/inline_editor/CSSShadowEditor.ts +1 -1
  239. package/front_end/ui/legacy/components/inline_editor/PositionAreaEditor.ts +204 -17
  240. package/front_end/ui/legacy/components/inline_editor/positionAreaEditor.css +6 -0
  241. package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
  242. package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +1 -1
  243. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +7 -9
  244. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
  245. package/front_end/ui/visual_logging/KnownContextValues.ts +12 -0
  246. package/package.json +7 -4
  247. /package/front_end/{models → ui}/geometry/geometry.ts +0 -0
@@ -100,7 +100,8 @@ inspectorBackend.registerEnum("Audits.StyleSheetLoadingIssueReason", {LateImport
100
100
  inspectorBackend.registerEnum("Audits.PropertyRuleIssueReason", {InvalidSyntax: "InvalidSyntax", InvalidInitialValue: "InvalidInitialValue", InvalidInherits: "InvalidInherits", InvalidName: "InvalidName"});
101
101
  inspectorBackend.registerEnum("Audits.UserReidentificationIssueType", {BlockedFrameNavigation: "BlockedFrameNavigation", BlockedSubresource: "BlockedSubresource", NoisedCanvasReadback: "NoisedCanvasReadback"});
102
102
  inspectorBackend.registerEnum("Audits.PermissionElementIssueType", {InvalidType: "InvalidType", FencedFrameDisallowed: "FencedFrameDisallowed", CspFrameAncestorsMissing: "CspFrameAncestorsMissing", PermissionsPolicyBlocked: "PermissionsPolicyBlocked", PaddingRightUnsupported: "PaddingRightUnsupported", PaddingBottomUnsupported: "PaddingBottomUnsupported", InsetBoxShadowUnsupported: "InsetBoxShadowUnsupported", RequestInProgress: "RequestInProgress", UntrustedEvent: "UntrustedEvent", RegistrationFailed: "RegistrationFailed", TypeNotSupported: "TypeNotSupported", InvalidTypeActivation: "InvalidTypeActivation", SecurityChecksFailed: "SecurityChecksFailed", ActivationDisabled: "ActivationDisabled", GeolocationDeprecated: "GeolocationDeprecated", InvalidDisplayStyle: "InvalidDisplayStyle", NonOpaqueColor: "NonOpaqueColor", LowContrast: "LowContrast", FontSizeTooSmall: "FontSizeTooSmall", FontSizeTooLarge: "FontSizeTooLarge", InvalidSizeValue: "InvalidSizeValue", NonSecureContext: "NonSecureContext", MissingTransientUserActivation: "MissingTransientUserActivation"});
103
- inspectorBackend.registerEnum("Audits.InspectorIssueCode", {CookieIssue: "CookieIssue", MixedContentIssue: "MixedContentIssue", BlockedByResponseIssue: "BlockedByResponseIssue", HeavyAdIssue: "HeavyAdIssue", ContentSecurityPolicyIssue: "ContentSecurityPolicyIssue", SharedArrayBufferIssue: "SharedArrayBufferIssue", CorsIssue: "CorsIssue", QuirksModeIssue: "QuirksModeIssue", PartitioningBlobURLIssue: "PartitioningBlobURLIssue", NavigatorUserAgentIssue: "NavigatorUserAgentIssue", GenericIssue: "GenericIssue", DeprecationIssue: "DeprecationIssue", ClientHintIssue: "ClientHintIssue", FederatedAuthRequestIssue: "FederatedAuthRequestIssue", BounceTrackingIssue: "BounceTrackingIssue", CookieDeprecationMetadataIssue: "CookieDeprecationMetadataIssue", StylesheetLoadingIssue: "StylesheetLoadingIssue", FederatedAuthUserInfoRequestIssue: "FederatedAuthUserInfoRequestIssue", PropertyRuleIssue: "PropertyRuleIssue", SharedDictionaryIssue: "SharedDictionaryIssue", ElementAccessibilityIssue: "ElementAccessibilityIssue", SRIMessageSignatureIssue: "SRIMessageSignatureIssue", UnencodedDigestIssue: "UnencodedDigestIssue", ConnectionAllowlistIssue: "ConnectionAllowlistIssue", UserReidentificationIssue: "UserReidentificationIssue", PermissionElementIssue: "PermissionElementIssue", PerformanceIssue: "PerformanceIssue", SelectivePermissionsInterventionIssue: "SelectivePermissionsInterventionIssue", EmailVerificationRequestIssue: "EmailVerificationRequestIssue", LazyLoadImageIssue: "LazyLoadImageIssue"});
103
+ inspectorBackend.registerEnum("Audits.WebInstallIssueReason", {ManifestParsingOrNetworkError: "ManifestParsingOrNetworkError", StartUrlInvalid: "StartUrlInvalid", ManifestMissingNameOrShortName: "ManifestMissingNameOrShortName", ManifestMissingId: "ManifestMissingId", NoManifest: "NoManifest"});
104
+ inspectorBackend.registerEnum("Audits.InspectorIssueCode", {CookieIssue: "CookieIssue", MixedContentIssue: "MixedContentIssue", BlockedByResponseIssue: "BlockedByResponseIssue", HeavyAdIssue: "HeavyAdIssue", ContentSecurityPolicyIssue: "ContentSecurityPolicyIssue", SharedArrayBufferIssue: "SharedArrayBufferIssue", CorsIssue: "CorsIssue", QuirksModeIssue: "QuirksModeIssue", PartitioningBlobURLIssue: "PartitioningBlobURLIssue", NavigatorUserAgentIssue: "NavigatorUserAgentIssue", GenericIssue: "GenericIssue", DeprecationIssue: "DeprecationIssue", ClientHintIssue: "ClientHintIssue", FederatedAuthRequestIssue: "FederatedAuthRequestIssue", BounceTrackingIssue: "BounceTrackingIssue", CookieDeprecationMetadataIssue: "CookieDeprecationMetadataIssue", StylesheetLoadingIssue: "StylesheetLoadingIssue", FederatedAuthUserInfoRequestIssue: "FederatedAuthUserInfoRequestIssue", PropertyRuleIssue: "PropertyRuleIssue", SharedDictionaryIssue: "SharedDictionaryIssue", ElementAccessibilityIssue: "ElementAccessibilityIssue", SRIMessageSignatureIssue: "SRIMessageSignatureIssue", UnencodedDigestIssue: "UnencodedDigestIssue", ConnectionAllowlistIssue: "ConnectionAllowlistIssue", UserReidentificationIssue: "UserReidentificationIssue", PermissionElementIssue: "PermissionElementIssue", PerformanceIssue: "PerformanceIssue", SelectivePermissionsInterventionIssue: "SelectivePermissionsInterventionIssue", EmailVerificationRequestIssue: "EmailVerificationRequestIssue", LazyLoadImageIssue: "LazyLoadImageIssue", WebInstallIssue: "WebInstallIssue"});
104
105
  inspectorBackend.registerEvent("Audits.issueAdded", ["issue"]);
105
106
  inspectorBackend.registerEnum("Audits.GetEncodedResponseRequestEncoding", {Webp: "webp", Jpeg: "jpeg", Png: "png"});
106
107
  inspectorBackend.registerCommand("Audits.getEncodedResponse", [{"name": "requestId", "type": "string", "optional": false, "description": "Identifier of the network request to get content for.", "typeRef": "Network.RequestId"}, {"name": "encoding", "type": "string", "optional": false, "description": "The encoding to use.", "typeRef": "Audits.GetEncodedResponseRequestEncoding"}, {"name": "quality", "type": "number", "optional": true, "description": "The quality of the encoding (0-1). (defaults to 1)", "typeRef": null}, {"name": "sizeOnly", "type": "boolean", "optional": true, "description": "Whether to only return the size information (defaults to false).", "typeRef": null}], ["body", "originalSize", "encodedSize"], "Returns the response body and size if it were re-encoded with the specified settings. Only applies to images.");
@@ -141,9 +142,10 @@ inspectorBackend.registerType("Audits.StylesheetLoadingIssueDetails", [{"name":
141
142
  inspectorBackend.registerType("Audits.PropertyRuleIssueDetails", [{"name": "sourceCodeLocation", "type": "object", "optional": false, "description": "Source code position of the property rule.", "typeRef": "Audits.SourceCodeLocation"}, {"name": "propertyRuleIssueReason", "type": "string", "optional": false, "description": "Reason why the property rule was discarded.", "typeRef": "Audits.PropertyRuleIssueReason"}, {"name": "propertyValue", "type": "string", "optional": true, "description": "The value of the property rule property that failed to parse", "typeRef": null}]);
142
143
  inspectorBackend.registerType("Audits.UserReidentificationIssueDetails", [{"name": "type", "type": "string", "optional": false, "description": "", "typeRef": "Audits.UserReidentificationIssueType"}, {"name": "request", "type": "object", "optional": true, "description": "Applies to BlockedFrameNavigation and BlockedSubresource issue types.", "typeRef": "Audits.AffectedRequest"}, {"name": "sourceCodeLocation", "type": "object", "optional": true, "description": "Applies to NoisedCanvasReadback issue type.", "typeRef": "Audits.SourceCodeLocation"}]);
143
144
  inspectorBackend.registerType("Audits.PermissionElementIssueDetails", [{"name": "issueType", "type": "string", "optional": false, "description": "", "typeRef": "Audits.PermissionElementIssueType"}, {"name": "type", "type": "string", "optional": true, "description": "The value of the type attribute.", "typeRef": null}, {"name": "nodeId", "type": "number", "optional": true, "description": "The node ID of the <permission> element.", "typeRef": "DOM.BackendNodeId"}, {"name": "isWarning", "type": "boolean", "optional": true, "description": "True if the issue is a warning, false if it is an error.", "typeRef": null}, {"name": "permissionName", "type": "string", "optional": true, "description": "Fields for message construction: Used for messages that reference a specific permission name", "typeRef": null}, {"name": "occluderNodeInfo", "type": "string", "optional": true, "description": "Used for messages about occlusion", "typeRef": null}, {"name": "occluderParentNodeInfo", "type": "string", "optional": true, "description": "Used for messages about occluder's parent", "typeRef": null}, {"name": "disableReason", "type": "string", "optional": true, "description": "Used for messages about activation disabled reason", "typeRef": null}]);
145
+ inspectorBackend.registerType("Audits.WebInstallIssueDetails", [{"name": "manifestUrl", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "reason", "type": "string", "optional": false, "description": "", "typeRef": "Audits.WebInstallIssueReason"}]);
144
146
  inspectorBackend.registerType("Audits.SelectivePermissionsInterventionIssueDetails", [{"name": "apiName", "type": "string", "optional": false, "description": "Which API was intervened on.", "typeRef": null}, {"name": "adAncestry", "type": "object", "optional": false, "description": "Why the ad script using the API is considered an ad.", "typeRef": "Network.AdAncestry"}, {"name": "stackTrace", "type": "object", "optional": true, "description": "The stack trace at the time of the intervention.", "typeRef": "Runtime.StackTrace"}]);
145
147
  inspectorBackend.registerType("Audits.LazyLoadImageIssueDetails", [{"name": "nodeId", "type": "number", "optional": false, "description": "DOM node of the problematic HTMLImageElement.", "typeRef": "DOM.BackendNodeId"}, {"name": "url", "type": "string", "optional": false, "description": "URL or src attribute of the image.", "typeRef": null}, {"name": "frameId", "type": "string", "optional": false, "description": "Frame containing the image.", "typeRef": "Page.FrameId"}]);
146
- inspectorBackend.registerType("Audits.InspectorIssueDetails", [{"name": "cookieIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.CookieIssueDetails"}, {"name": "mixedContentIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.MixedContentIssueDetails"}, {"name": "blockedByResponseIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.BlockedByResponseIssueDetails"}, {"name": "heavyAdIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.HeavyAdIssueDetails"}, {"name": "contentSecurityPolicyIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.ContentSecurityPolicyIssueDetails"}, {"name": "sharedArrayBufferIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.SharedArrayBufferIssueDetails"}, {"name": "corsIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.CorsIssueDetails"}, {"name": "quirksModeIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.QuirksModeIssueDetails"}, {"name": "partitioningBlobURLIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.PartitioningBlobURLIssueDetails"}, {"name": "navigatorUserAgentIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.NavigatorUserAgentIssueDetails"}, {"name": "genericIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.GenericIssueDetails"}, {"name": "deprecationIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.DeprecationIssueDetails"}, {"name": "clientHintIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.ClientHintIssueDetails"}, {"name": "federatedAuthRequestIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.FederatedAuthRequestIssueDetails"}, {"name": "bounceTrackingIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.BounceTrackingIssueDetails"}, {"name": "cookieDeprecationMetadataIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.CookieDeprecationMetadataIssueDetails"}, {"name": "stylesheetLoadingIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.StylesheetLoadingIssueDetails"}, {"name": "propertyRuleIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.PropertyRuleIssueDetails"}, {"name": "federatedAuthUserInfoRequestIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.FederatedAuthUserInfoRequestIssueDetails"}, {"name": "sharedDictionaryIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.SharedDictionaryIssueDetails"}, {"name": "elementAccessibilityIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.ElementAccessibilityIssueDetails"}, {"name": "sriMessageSignatureIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.SRIMessageSignatureIssueDetails"}, {"name": "unencodedDigestIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.UnencodedDigestIssueDetails"}, {"name": "connectionAllowlistIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.ConnectionAllowlistIssueDetails"}, {"name": "userReidentificationIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.UserReidentificationIssueDetails"}, {"name": "permissionElementIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.PermissionElementIssueDetails"}, {"name": "performanceIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.PerformanceIssueDetails"}, {"name": "selectivePermissionsInterventionIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.SelectivePermissionsInterventionIssueDetails"}, {"name": "emailVerificationRequestIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.EmailVerificationRequestIssueDetails"}, {"name": "lazyLoadImageIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.LazyLoadImageIssueDetails"}]);
148
+ inspectorBackend.registerType("Audits.InspectorIssueDetails", [{"name": "cookieIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.CookieIssueDetails"}, {"name": "mixedContentIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.MixedContentIssueDetails"}, {"name": "blockedByResponseIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.BlockedByResponseIssueDetails"}, {"name": "heavyAdIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.HeavyAdIssueDetails"}, {"name": "contentSecurityPolicyIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.ContentSecurityPolicyIssueDetails"}, {"name": "sharedArrayBufferIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.SharedArrayBufferIssueDetails"}, {"name": "corsIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.CorsIssueDetails"}, {"name": "quirksModeIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.QuirksModeIssueDetails"}, {"name": "partitioningBlobURLIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.PartitioningBlobURLIssueDetails"}, {"name": "navigatorUserAgentIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.NavigatorUserAgentIssueDetails"}, {"name": "genericIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.GenericIssueDetails"}, {"name": "deprecationIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.DeprecationIssueDetails"}, {"name": "clientHintIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.ClientHintIssueDetails"}, {"name": "federatedAuthRequestIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.FederatedAuthRequestIssueDetails"}, {"name": "bounceTrackingIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.BounceTrackingIssueDetails"}, {"name": "cookieDeprecationMetadataIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.CookieDeprecationMetadataIssueDetails"}, {"name": "stylesheetLoadingIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.StylesheetLoadingIssueDetails"}, {"name": "propertyRuleIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.PropertyRuleIssueDetails"}, {"name": "federatedAuthUserInfoRequestIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.FederatedAuthUserInfoRequestIssueDetails"}, {"name": "sharedDictionaryIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.SharedDictionaryIssueDetails"}, {"name": "elementAccessibilityIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.ElementAccessibilityIssueDetails"}, {"name": "sriMessageSignatureIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.SRIMessageSignatureIssueDetails"}, {"name": "unencodedDigestIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.UnencodedDigestIssueDetails"}, {"name": "connectionAllowlistIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.ConnectionAllowlistIssueDetails"}, {"name": "userReidentificationIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.UserReidentificationIssueDetails"}, {"name": "permissionElementIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.PermissionElementIssueDetails"}, {"name": "performanceIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.PerformanceIssueDetails"}, {"name": "selectivePermissionsInterventionIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.SelectivePermissionsInterventionIssueDetails"}, {"name": "emailVerificationRequestIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.EmailVerificationRequestIssueDetails"}, {"name": "lazyLoadImageIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.LazyLoadImageIssueDetails"}, {"name": "webInstallIssueDetails", "type": "object", "optional": true, "description": "", "typeRef": "Audits.WebInstallIssueDetails"}]);
147
149
  inspectorBackend.registerType("Audits.InspectorIssue", [{"name": "code", "type": "string", "optional": false, "description": "", "typeRef": "Audits.InspectorIssueCode"}, {"name": "details", "type": "object", "optional": false, "description": "", "typeRef": "Audits.InspectorIssueDetails"}, {"name": "issueId", "type": "string", "optional": true, "description": "A unique id for this issue. May be omitted if no other entity (e.g. exception, CDP message, etc.) is referencing this issue.", "typeRef": "Audits.IssueId"}]);
148
150
 
149
151
  // Autofill.
@@ -440,6 +442,7 @@ inspectorBackend.registerCommand("DOM.getContainerForNode", [{"name": "nodeId",
440
442
  inspectorBackend.registerCommand("DOM.getQueryingDescendantsForContainer", [{"name": "nodeId", "type": "number", "optional": false, "description": "Id of the container node to find querying descendants from.", "typeRef": "DOM.NodeId"}], ["nodeIds"], "Returns the descendants of a container query container that have container queries against this container.");
441
443
  inspectorBackend.registerCommand("DOM.getAnchorElement", [{"name": "nodeId", "type": "number", "optional": false, "description": "Id of the positioned element from which to find the anchor.", "typeRef": "DOM.NodeId"}, {"name": "anchorSpecifier", "type": "string", "optional": true, "description": "An optional anchor specifier, as defined in https://www.w3.org/TR/css-anchor-position-1/#anchor-specifier. If not provided, it will return the implicit anchor element for the given positioned element.", "typeRef": null}], ["nodeId"], "Returns the target anchor element of the given anchor query according to https://www.w3.org/TR/css-anchor-position-1/#target.");
442
444
  inspectorBackend.registerCommand("DOM.forceShowPopover", [{"name": "nodeId", "type": "number", "optional": false, "description": "Id of the popover HTMLElement", "typeRef": "DOM.NodeId"}, {"name": "enable", "type": "boolean", "optional": false, "description": "If true, opens the popover and keeps it open. If false, closes the popover if it was previously force-opened.", "typeRef": null}, {"name": "invokerNodeId", "type": "number", "optional": true, "description": "Optional ID of the element invoking this popover, used to establish the implicit anchor. If not provided, it will fall back to the first invoker in the document, preferring elements with a popovertarget attribute over those with a commandfor attribute. Note that if there are multiple invokers, this is just an estimate.", "typeRef": "DOM.BackendNodeId"}], ["nodeIds"], "When enabling, this API force-opens the popover identified by nodeId and keeps it open until disabled.");
445
+ inspectorBackend.registerCommand("DOM.getImplicitAnchorCandidates", [{"name": "nodeId", "type": "number", "optional": false, "description": "Id of the popover HTMLElement.", "typeRef": "DOM.NodeId"}], ["backendNodeIds"], "Returns candidate nodes that are configured as triggers for the given popover.");
443
446
  inspectorBackend.registerCommand("DOM.forceShowInterest", [{"name": "nodeId", "type": "number", "optional": false, "description": "Id of the interest invoker HTMLElement.", "typeRef": "DOM.NodeId"}, {"name": "enable", "type": "boolean", "optional": false, "description": "If true, opens and holds interest. If false, releases forced interest.", "typeRef": null}], [], "When enabling, this API forces an element to gain interest in its target, keeping interest active until disabled.");
444
447
  inspectorBackend.registerType("DOM.BackendNode", [{"name": "nodeType", "type": "number", "optional": false, "description": "`Node`'s nodeType.", "typeRef": null}, {"name": "nodeName", "type": "string", "optional": false, "description": "`Node`'s nodeName.", "typeRef": null}, {"name": "backendNodeId", "type": "number", "optional": false, "description": "", "typeRef": "DOM.BackendNodeId"}]);
445
448
  inspectorBackend.registerType("DOM.Node", [{"name": "nodeId", "type": "number", "optional": false, "description": "Node identifier that is passed into the rest of the DOM messages as the `nodeId`. Backend will only push node with given `id` once. It is aware of all requested nodes and will only fire DOM events for nodes known to the client.", "typeRef": "DOM.NodeId"}, {"name": "parentId", "type": "number", "optional": true, "description": "The id of the parent node if any.", "typeRef": "DOM.NodeId"}, {"name": "backendNodeId", "type": "number", "optional": false, "description": "The BackendNodeId for this node.", "typeRef": "DOM.BackendNodeId"}, {"name": "nodeType", "type": "number", "optional": false, "description": "`Node`'s nodeType.", "typeRef": null}, {"name": "nodeName", "type": "string", "optional": false, "description": "`Node`'s nodeName.", "typeRef": null}, {"name": "localName", "type": "string", "optional": false, "description": "`Node`'s localName.", "typeRef": null}, {"name": "nodeValue", "type": "string", "optional": false, "description": "`Node`'s nodeValue.", "typeRef": null}, {"name": "childNodeCount", "type": "number", "optional": true, "description": "Child count for `Container` nodes.", "typeRef": null}, {"name": "children", "type": "array", "optional": true, "description": "Child nodes of this node when requested with children.", "typeRef": "DOM.Node"}, {"name": "attributes", "type": "array", "optional": true, "description": "Attributes of the `Element` node in the form of flat array `[name1, value1, name2, value2]`.", "typeRef": "string"}, {"name": "documentURL", "type": "string", "optional": true, "description": "Document URL that `Document` or `FrameOwner` node points to.", "typeRef": null}, {"name": "baseURL", "type": "string", "optional": true, "description": "Base URL that `Document` or `FrameOwner` node uses for URL completion.", "typeRef": null}, {"name": "publicId", "type": "string", "optional": true, "description": "`DocumentType`'s publicId.", "typeRef": null}, {"name": "systemId", "type": "string", "optional": true, "description": "`DocumentType`'s systemId.", "typeRef": null}, {"name": "internalSubset", "type": "string", "optional": true, "description": "`DocumentType`'s internalSubset.", "typeRef": null}, {"name": "xmlVersion", "type": "string", "optional": true, "description": "`Document`'s XML version in case of XML documents.", "typeRef": null}, {"name": "name", "type": "string", "optional": true, "description": "`Attr`'s name.", "typeRef": null}, {"name": "value", "type": "string", "optional": true, "description": "`Attr`'s value.", "typeRef": null}, {"name": "pseudoType", "type": "string", "optional": true, "description": "Pseudo element type for this node.", "typeRef": "DOM.PseudoType"}, {"name": "pseudoIdentifier", "type": "string", "optional": true, "description": "Pseudo element identifier for this node. Only present if there is a valid pseudoType.", "typeRef": null}, {"name": "shadowRootType", "type": "string", "optional": true, "description": "Shadow root type.", "typeRef": "DOM.ShadowRootType"}, {"name": "frameId", "type": "string", "optional": true, "description": "Frame ID for frame owner elements.", "typeRef": "Page.FrameId"}, {"name": "contentDocument", "type": "object", "optional": true, "description": "Content document for frame owner elements.", "typeRef": "DOM.Node"}, {"name": "shadowRoots", "type": "array", "optional": true, "description": "Shadow root list for given element host.", "typeRef": "DOM.Node"}, {"name": "templateContent", "type": "object", "optional": true, "description": "Content document fragment for template elements.", "typeRef": "DOM.Node"}, {"name": "pseudoElements", "type": "array", "optional": true, "description": "Pseudo elements associated with this node.", "typeRef": "DOM.Node"}, {"name": "importedDocument", "type": "object", "optional": true, "description": "Deprecated, as the HTML Imports API has been removed (crbug.com/937746). This property used to return the imported document for the HTMLImport links. The property is always undefined now.", "typeRef": "DOM.Node"}, {"name": "distributedNodes", "type": "array", "optional": true, "description": "Distributed nodes for given insertion point.", "typeRef": "DOM.BackendNode"}, {"name": "isSVG", "type": "boolean", "optional": true, "description": "Whether the node is SVG.", "typeRef": null}, {"name": "compatibilityMode", "type": "string", "optional": true, "description": "", "typeRef": "DOM.CompatibilityMode"}, {"name": "assignedSlot", "type": "object", "optional": true, "description": "", "typeRef": "DOM.BackendNode"}, {"name": "isScrollable", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "affectedByStartingStyles", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "adoptedStyleSheets", "type": "array", "optional": true, "description": "", "typeRef": "DOM.StyleSheetId"}, {"name": "adProvenance", "type": "object", "optional": true, "description": "", "typeRef": "Network.AdProvenance"}]);
@@ -1278,7 +1281,7 @@ inspectorBackend.registerCommand("ServiceWorker.stopWorker", [{"name": "versionI
1278
1281
  inspectorBackend.registerCommand("ServiceWorker.unregister", [{"name": "scopeURL", "type": "string", "optional": false, "description": "", "typeRef": null}], [], "");
1279
1282
  inspectorBackend.registerCommand("ServiceWorker.updateRegistration", [{"name": "scopeURL", "type": "string", "optional": false, "description": "", "typeRef": null}], [], "");
1280
1283
  inspectorBackend.registerType("ServiceWorker.ServiceWorkerRegistration", [{"name": "registrationId", "type": "string", "optional": false, "description": "", "typeRef": "ServiceWorker.RegistrationID"}, {"name": "scopeURL", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "isDeleted", "type": "boolean", "optional": false, "description": "", "typeRef": null}]);
1281
- inspectorBackend.registerType("ServiceWorker.ServiceWorkerRouterCondition", [{"name": "urlPattern", "type": "string", "optional": true, "description": "Plain text, or JSON serialization of URLPatternInit or URLPattern", "typeRef": null}, {"name": "requestMethod", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "requestMode", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "requestDestination", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "runningStatus", "type": "string", "optional": true, "description": "", "typeRef": "ServiceWorker.ServiceWorkerVersionRunningStatus"}]);
1284
+ inspectorBackend.registerType("ServiceWorker.ServiceWorkerRouterCondition", [{"name": "urlPattern", "type": "string", "optional": true, "description": "Plain text, or JSON serialization of URLPatternInit or URLPattern", "typeRef": null}, {"name": "requestMethod", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "requestMode", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "requestDestination", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "runningStatus", "type": "string", "optional": true, "description": "", "typeRef": "ServiceWorker.ServiceWorkerVersionRunningStatus"}, {"name": "or", "type": "array", "optional": true, "description": "", "typeRef": "ServiceWorker.ServiceWorkerRouterCondition"}, {"name": "not", "type": "object", "optional": true, "description": "", "typeRef": "ServiceWorker.ServiceWorkerRouterCondition"}]);
1282
1285
  inspectorBackend.registerType("ServiceWorker.ServiceWorkerRouterSourceDict", [{"name": "cacheName", "type": "string", "optional": false, "description": "", "typeRef": null}]);
1283
1286
  inspectorBackend.registerType("ServiceWorker.ServiceWorkerRouterSource", [{"name": "type", "type": "string", "optional": false, "description": "", "typeRef": "ServiceWorker.ServiceWorkerRouterSourceType"}, {"name": "sourceDict", "type": "object", "optional": true, "description": "Non-empty iff `type` equals \\\"sourceDict\\\".", "typeRef": "ServiceWorker.ServiceWorkerRouterSourceDict"}]);
1284
1287
  inspectorBackend.registerType("ServiceWorker.ServiceWorkerRouterRule", [{"name": "condition", "type": "object", "optional": false, "description": "", "typeRef": "ServiceWorker.ServiceWorkerRouterCondition"}, {"name": "source", "type": "object", "optional": false, "description": "", "typeRef": "ServiceWorker.ServiceWorkerRouterSource"}, {"name": "id", "type": "number", "optional": false, "description": "Rule ID assigned by the browser. Unique within each ServiceWorkerVersion.", "typeRef": null}]);
@@ -2297,6 +2297,13 @@ export namespace ProtocolMapping {
2297
2297
  paramsType: [Protocol.DOM.ForceShowPopoverRequest];
2298
2298
  returnType: Protocol.DOM.ForceShowPopoverResponse;
2299
2299
  };
2300
+ /**
2301
+ * Returns candidate nodes that are configured as triggers for the given popover.
2302
+ */
2303
+ 'DOM.getImplicitAnchorCandidates': {
2304
+ paramsType: [Protocol.DOM.GetImplicitAnchorCandidatesRequest];
2305
+ returnType: Protocol.DOM.GetImplicitAnchorCandidatesResponse;
2306
+ };
2300
2307
  /**
2301
2308
  * When enabling, this API forces an element to gain interest in its target,
2302
2309
  * keeping interest active until disabled.
@@ -1395,6 +1395,11 @@ declare namespace ProtocolProxyApi {
1395
1395
  */
1396
1396
  invoke_forceShowPopover(params: Protocol.DOM.ForceShowPopoverRequest): Promise<Protocol.DOM.ForceShowPopoverResponse>;
1397
1397
 
1398
+ /**
1399
+ * Returns candidate nodes that are configured as triggers for the given popover.
1400
+ */
1401
+ invoke_getImplicitAnchorCandidates(params: Protocol.DOM.GetImplicitAnchorCandidatesRequest): Promise<Protocol.DOM.GetImplicitAnchorCandidatesResponse>;
1402
+
1398
1403
  /**
1399
1404
  * When enabling, this API forces an element to gain interest in its target,
1400
1405
  * keeping interest active until disabled.
@@ -1684,6 +1684,23 @@ export namespace Audits {
1684
1684
  disableReason?: string;
1685
1685
  }
1686
1686
 
1687
+ export const enum WebInstallIssueReason {
1688
+ ManifestParsingOrNetworkError = 'ManifestParsingOrNetworkError',
1689
+ StartUrlInvalid = 'StartUrlInvalid',
1690
+ ManifestMissingNameOrShortName = 'ManifestMissingNameOrShortName',
1691
+ ManifestMissingId = 'ManifestMissingId',
1692
+ NoManifest = 'NoManifest',
1693
+ }
1694
+
1695
+ /**
1696
+ * This issue reports a failure involving a web app manifest used by a Web
1697
+ * Install operation.
1698
+ */
1699
+ export interface WebInstallIssueDetails {
1700
+ manifestUrl?: string;
1701
+ reason: WebInstallIssueReason;
1702
+ }
1703
+
1687
1704
  /**
1688
1705
  * The issue warns about blocked calls to privacy sensitive APIs via the
1689
1706
  * Selective Permissions Intervention.
@@ -1757,6 +1774,7 @@ export namespace Audits {
1757
1774
  SelectivePermissionsInterventionIssue = 'SelectivePermissionsInterventionIssue',
1758
1775
  EmailVerificationRequestIssue = 'EmailVerificationRequestIssue',
1759
1776
  LazyLoadImageIssue = 'LazyLoadImageIssue',
1777
+ WebInstallIssue = 'WebInstallIssue',
1760
1778
  }
1761
1779
 
1762
1780
  /**
@@ -1798,6 +1816,7 @@ export namespace Audits {
1798
1816
  selectivePermissionsInterventionIssueDetails?: SelectivePermissionsInterventionIssueDetails;
1799
1817
  emailVerificationRequestIssueDetails?: EmailVerificationRequestIssueDetails;
1800
1818
  lazyLoadImageIssueDetails?: LazyLoadImageIssueDetails;
1819
+ webInstallIssueDetails?: WebInstallIssueDetails;
1801
1820
  }
1802
1821
 
1803
1822
  /**
@@ -5946,6 +5965,20 @@ export namespace DOM {
5946
5965
  nodeIds: NodeId[];
5947
5966
  }
5948
5967
 
5968
+ export interface GetImplicitAnchorCandidatesRequest {
5969
+ /**
5970
+ * Id of the popover HTMLElement.
5971
+ */
5972
+ nodeId: NodeId;
5973
+ }
5974
+
5975
+ export interface GetImplicitAnchorCandidatesResponse extends ProtocolResponseWithError {
5976
+ /**
5977
+ * Candidate elements that can invoke this popover.
5978
+ */
5979
+ backendNodeIds: BackendNodeId[];
5980
+ }
5981
+
5949
5982
  export interface ForceShowInterestRequest {
5950
5983
  /**
5951
5984
  * Id of the interest invoker HTMLElement.
@@ -17763,9 +17796,7 @@ export namespace ServiceWorker {
17763
17796
 
17764
17797
  /**
17765
17798
  * Mostly corresponds to `RouterCondition` in ServiceWorker spec
17766
- * (https://www.w3.org/TR/service-workers/#dictdef-routercondition) while this
17767
- * currently lacks support for the nested conditions ("or" and "not").
17768
- * TODO(crbug.com/540469610): Support recursive conditions.
17799
+ * (https://www.w3.org/TR/service-workers/#dictdef-routercondition)
17769
17800
  */
17770
17801
  export interface ServiceWorkerRouterCondition {
17771
17802
  /**
@@ -17776,6 +17807,8 @@ export namespace ServiceWorker {
17776
17807
  requestMode?: string;
17777
17808
  requestDestination?: string;
17778
17809
  runningStatus?: ServiceWorkerVersionRunningStatus;
17810
+ or?: ServiceWorkerRouterCondition[];
17811
+ not?: ServiceWorkerRouterCondition;
17779
17812
  }
17780
17813
 
17781
17814
  export const enum ServiceWorkerRouterSourceType {
@@ -26,7 +26,7 @@ import {debugLog} from './debug.js';
26
26
  import {ExtensionScope} from './ExtensionScope.js';
27
27
  import type {Skill, SkillName} from './skills/Skill.js';
28
28
  import {SKILLS} from './skills/SkillRegistry.js';
29
- import type {AllToolsCapabilities, Tool, ToolArgs} from './tools/Tool.js';
29
+ import {type AllToolsCapabilities, isOriginAllowedByLock, type Tool, type ToolArgs} from './tools/Tool.js';
30
30
  import {ToolRegistry} from './tools/ToolRegistry.js';
31
31
 
32
32
  const SKILL_DISPLAY_NAMES: Record<SkillName, string> = {
@@ -101,8 +101,13 @@ export class AiAgent2 extends AiAgent<unknown> {
101
101
  this.disableServerSideLogging();
102
102
  }
103
103
 
104
- const target = this.#getPrimaryPageTarget();
105
- const domModel = target?.model(SDK.DOMModel.DOMModel);
104
+ const target = this.targetManager.primaryPageTarget();
105
+ const establishedOrigin = this.#getConversationOrigin();
106
+ // Avoid fetching or caching top-level documents across origins or when
107
+ // the origin lock is blocked/uninitialized.
108
+ // Note: b/559642568 tracks making the tri-state ('blocked' | 'uninitialized' | 'locked') explicit.
109
+ const isTargetAllowed = target && isOriginAllowedByLock(establishedOrigin, target.inspectedSecurityOrigin());
110
+ const domModel = isTargetAllowed ? target.model(SDK.DOMModel.DOMModel) : null;
106
111
  // Ensure the DOM document is requested and cached in DOMModel so that
107
112
  // subsequent synchronous lookups via domModel.existingDocument() (e.g.,
108
113
  // in #getDocumentBodyNode()) resolve the document and body immediately.
@@ -291,7 +296,7 @@ User query: ${enhancedQuery}`;
291
296
  createExtensionScope: this.#createExtensionScope.bind(this),
292
297
  execJs: this.#execJs,
293
298
  getExecutionContextNode: () => this.#getExecutionContextNode(),
294
- getTarget: () => this.#getPrimaryPageTarget(),
299
+ getTarget: () => this.#getTarget(),
295
300
  getEstablishedOrigin: () => this.#getConversationOrigin(),
296
301
  getLighthouseReport: () => (this.context instanceof AccessibilityContext ? this.context.getItem() : null),
297
302
  runLighthouse: async overrides => await (this.#lighthouseRecording?.(overrides) ?? null),
@@ -307,42 +312,37 @@ User query: ${enhancedQuery}`;
307
312
  }
308
313
 
309
314
  /**
310
- * Returns the primary page target only if no conversation origin is locked,
311
- * or if the primary target matches the locked conversation origin.
312
- * If origin access is explicitly blocked (e.g. cross-origin navigation occurred),
313
- * or if the conversation is locked to an origin different from the primary page target
314
- * (e.g. an iframe origin), returns null to prevent cross-origin target access.
315
+ * Returns the primary page target unless origin access is explicitly blocked
316
+ * (e.g. following cross-origin navigation).
317
+ * Tools use this target to resolve node IDs and fetch frame resources, and
318
+ * perform their own origin checks on the resolved entities.
315
319
  */
316
- #getPrimaryPageTarget(): SDK.Target.Target|null {
320
+ #getTarget(): SDK.Target.Target|null {
317
321
  const allowed = this.#allowedOrigin?.();
318
322
  if (allowed && 'blocked' in allowed) {
319
323
  return null;
320
324
  }
321
- const target = this.targetManager.primaryPageTarget();
322
- if (!target) {
323
- return null;
324
- }
325
- const establishedOrigin = this.#getConversationOrigin();
326
- if (!establishedOrigin) {
327
- return target;
328
- }
329
- const targetOrigin = target.inspectedSecurityOrigin();
330
- if (targetOrigin.isSameOriginWith(establishedOrigin)) {
331
- return target;
332
- }
333
- return null;
325
+ return this.targetManager.primaryPageTarget();
334
326
  }
335
327
 
336
328
  /**
337
329
  * For non-DOM contexts (e.g., Lighthouse accessibility reports or storage items),
338
330
  * there is no user-selected DOM node. We fall back to the document body as the
339
331
  * default execution context node so scripts have a valid `$0` target.
340
- * If the conversation is locked to an origin different from the primary page target,
341
- * returns null to prevent exposing the top-level document body across origins.
332
+ * Fails closed and returns null if the conversation origin is not established or
333
+ * does not match the primary page document's security origin.
342
334
  */
343
335
  #getDocumentBodyNode(): SDK.DOMModel.DOMNode|null {
344
- const document = this.#getPrimaryPageTarget()?.model(SDK.DOMModel.DOMModel)?.existingDocument();
345
- return document?.body ?? null;
336
+ const target = this.#getTarget();
337
+ const document = target?.model(SDK.DOMModel.DOMModel)?.existingDocument();
338
+ if (!document) {
339
+ return null;
340
+ }
341
+ const establishedOrigin = this.#getConversationOrigin();
342
+ if (!isOriginAllowedByLock(establishedOrigin, document.securityOrigin())) {
343
+ return null;
344
+ }
345
+ return document.body ?? null;
346
346
  }
347
347
 
348
348
  #getConversationOrigin(): SDK.SecurityOrigin.SecurityOrigin|undefined {
@@ -191,7 +191,11 @@ export interface ConversationSuggestion {
191
191
  /** At least one. */
192
192
  export type ConversationSuggestions = [ConversationSuggestion, ...ConversationSuggestion[]];
193
193
 
194
+ export type ConversationContextJslog = 'ai-context-dom-node'|'ai-context-network-request'|'ai-context-file'|
195
+ 'ai-context-performance-trace'|'ai-context-accessibility'|'ai-context-storage';
196
+
194
197
  export abstract class ConversationContext<T> {
198
+ abstract readonly jslogContext: ConversationContextJslog;
195
199
  abstract getItem(): T;
196
200
  abstract getTitle(): string;
197
201
 
@@ -6,7 +6,7 @@ Content:
6
6
  "details": [
7
7
  {
8
8
  "title": "Trace details",
9
- "text": "Trace summary:\nURL: https://web.dev/\nTrace bounds: {min: 465455241690µs, max: 465460435979µs}\nCPU throttling: 1x\nNetwork throttling: No throttling\n\n# Available insight sets\n\nThe following is a list of insight sets. An insight set covers a specific part of the trace, split by navigations. The insights within each insight set are specific to that part of the trace. Be sure to consider the insight set id and bounds when calling functions. If no specific insight set or navigation is mentioned, assume the user is referring to the first one.\n\n## insight set id: NO_NAVIGATION\n\nURL: https://web.dev/\nBounds: {min: 465455241690µs, max: 465456489729µs}\nMetrics (lab / observed):\n - CLS: 0.00\nMetrics (field / real users): n/a – no data for this page in CrUX\nAvailable insights:\n - insight name: ThirdParties\n description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page’s content.\n relevant trace bounds: {min: 465456492168µs, max: 465460052616µs}\n example question: Which third parties are having the largest impact on my page performance?\n\n## insight set id: NAVIGATION_1\n\nURL: https://web.dev/\nBounds: {min: 465456489730µs, max: 465460435979µs}\nMetrics (lab / observed):\n - LCP: 676 ms, event: (eventKey: r-21246, ts: 465457166052), nodeId: 1680\n - LCP breakdown:\n - TTFB: 553 ms, bounds: {min: 465456489730µs, max: 465457042737µs}\n - Render delay: 123 ms, bounds: {min: 465457042737µs, max: 465457166052µs}\n - CLS: 0.02, event: (eventKey: s-14250, ts: 465457121239)\nMetrics (field / real users): n/a – no data for this page in CrUX\nAvailable insights:\n - insight name: RenderBlocking\n description: Requests are blocking the page’s initial render, which may delay LCP. [Deferring or inlining](https://developer.chrome.com/docs/performance/insights/render-blocking) can move these network requests out of the critical path.\n relevant trace bounds: {min: 465457046567µs, max: 465457086893µs}\n estimated metric savings: FCP 118 ms, LCP 118 ms\n example question: Show me the most impactful render-blocking requests that I should focus on\n example question: How can I reduce the number of render-blocking requests?\n - insight name: LCPBreakdown\n description: Each [subpart has specific improvement strategies](https://developer.chrome.com/docs/performance/insights/lcp-breakdown). Ideally, most of the LCP time should be spent on loading the resources, not within delays.\n relevant trace bounds: {min: 465456489730µs, max: 465457166052µs}\n example question: Help me optimize my LCP score\n example question: Which LCP subpart was most problematic?\n example question: What can I do to reduce the LCP time for this page load?\n - insight name: CLSCulprits\n description: Layout shifts occur when elements move absent any user interaction. [Investigate the causes of layout shifts](https://developer.chrome.com/docs/performance/insights/cls-culprit), such as elements being added, removed, or their fonts changing as the page loads.\n relevant trace bounds: {min: 465457121239µs, max: 465459012394µs}\n example question: Help me optimize my CLS score\n example question: How can I prevent layout shifts on this page?\n - insight name: NetworkDependencyTree\n description: [Avoid chaining critical requests](https://developer.chrome.com/docs/performance/insights/network-dependency-tree) by reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load.\n relevant trace bounds: {min: 465456490723µs, max: 465458472724µs}\n example question: How do I optimize my network dependency tree?\n - insight name: DOMSize\n description: A large DOM can increase the duration of style calculations and layout reflows, impacting page responsiveness. A large DOM will also increase memory usage. [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/performance/insights/dom-size).\n relevant trace bounds: {min: 465458287196µs, max: 465458340745µs}\n example question: How can I reduce the size of my DOM?\n - insight name: ThirdParties\n description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page’s content.\n relevant trace bounds: {min: 465456492168µs, max: 465460052616µs}\n example question: Which third parties are having the largest impact on my page performance?\n - insight name: ForcedReflow\n description: A forced reflow occurs when JavaScript queries geometric properties (such as offsetWidth) after styles have been invalidated by a change to the DOM state. This can result in poor performance. Learn more about [forced reflows](https://developer.chrome.com/docs/performance/insights/forced-reflow) and possible mitigations.\n relevant trace bounds: {min: 465456489730µs, max: 465460435979µs}\n example question: How can I avoid forced reflows and layout thrashing?\n example question: What is forced reflow and why is it problematic?\n - insight name: Cache\n description: A long cache lifetime can speed up repeat visits to your page. [Learn more about caching](https://developer.chrome.com/docs/performance/insights/cache).\n relevant trace bounds: {min: 465457179567µs, max: 465459110674µs}\n estimated metric savings: FCP 0 ms, LCP 0 ms\n estimated wasted bytes: 16 kB\n example question: What caching strategies can I apply to improve my page performance?\n# Critical network requests\n\n## insight set id: NO_NAVIGATION\n\nnone\n\n## insight set id: NAVIGATION_1\n\n\nNetwork requests data:\n\n\n\nallUrls = [0: https://web.dev/, 1: https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2, 2: https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2, 3: https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2, 4: https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2, 5: https://fonts.gstatic.com/s/materialicons/v142/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2, 6: https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2, 7: https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2, 8: https://web.dev/_pwa/web/manifest.json, 9: https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap, 10: https://fonts.gstatic.com/s/googlesans/v59/4UasrENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RPjIUvbQoi-E.woff2, 11: https://fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block, 12: https://www.gstatic.com/devrel-devsite/prod/vafe2e13ca17bb026e70df42a2ead1c8192750e86a12923a88eda839025dabf95/web/css/app.css, 13: https://web.dev/extras.css]\n\n0;s-7302;1 ms;2 ms;568 ms;569 ms;568 ms;15 ms;0.5 ms;200;text/html;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[content-security-policy: base-uri 'self'; object-src 'none'; script-src 'strict-dynamic' 'unsafe-inline' https: http: 'nonce-pLl1WHuNABXXiQLLmUesvDyvzBJZdE' 'unsafe-eval'; report-uri https://csp.withgoogle.com/csp/devsite/v2|content-encoding: gzip|x-content-type-options: nosniff|date: Mon, 29 Apr 2024 11:01:15 GMT|strict-transport-security: max-age=63072000; includeSubdomains; preload|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|pragma: no-cache|last-modified: Fri, 26 Apr 2024 16:43:17 GMT|server: Google Frontend|vary: Cookie, Accept-Encoding|x-frame-options: SAMEORIGIN|content-type: text/html; charset=utf-8|x-cloud-trace-context: <redacted>|cache-control: no-cache, must-revalidate|expires: 0]\n1;s-49309;1,395 ms;1,402 ms;1,415 ms;1,423 ms;28 ms;94 μs;9 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Wed, 24 Apr 2024 15:02:33 GMT|x-content-type-options: nosniff|age: 417214|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:58 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Thu, 24 Apr 2025 15:02:33 GMT]\n2;s-46519;1,348 ms;1,355 ms;1,361 ms;1,423 ms;75 ms;73 μs;62 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Mon, 29 Apr 2024 03:50:51 GMT|x-content-type-options: nosniff|age: 25516|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:41 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Tue, 29 Apr 2025 03:50:51 GMT]\n3;s-46196;1,331 ms;1,339 ms;1,355 ms;1,420 ms;89 ms;0.1 ms;65 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Fri, 26 Apr 2024 20:29:46 GMT|x-content-type-options: nosniff|age: 224781|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:39 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Sat, 26 Apr 2025 20:29:46 GMT]\n4;s-45814;1,326 ms;1,331 ms;1,348 ms;1,419 ms;93 ms;77 μs;71 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Thu, 25 Apr 2024 13:27:47 GMT|x-content-type-options: nosniff|age: 336500|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:56 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Fri, 25 Apr 2025 13:27:47 GMT]\n5;s-44751;1,286 ms;1,307 ms;1,343 ms;1,416 ms;130 ms;1 ms;73 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Fri, 26 Apr 2024 09:49:05 GMT|x-content-type-options: nosniff|age: 263222|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Mon, 08 Apr 2024 19:04:51 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Sat, 26 Apr 2025 09:49:05 GMT]\n6;s-44728;1,285 ms;1,307 ms;1,343 ms;1,406 ms;120 ms;1 ms;62 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Sun, 28 Apr 2024 21:44:44 GMT|x-content-type-options: nosniff|age: 47483|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:53 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Mon, 28 Apr 2025 21:44:44 GMT]\n7;s-44701;1,284 ms;1,300 ms;1,339 ms;1,405 ms;120 ms;0.2 ms;65 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Thu, 25 Apr 2024 09:35:28 GMT|x-content-type-options: nosniff|age: 350439|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:50 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Fri, 25 Apr 2025 09:35:28 GMT]\n8;s-43119;1,751 ms;1,751 ms;1,771 ms;1,771 ms;20 ms;27 μs;0.2 ms;200;application/json;Medium;Medium;Medium;f;unknown;t;0;[];[date: Sun, 28 Apr 2024 14:07:49 GMT|last-modified: Wed, 24 Apr 2024 11:02:59 GMT|server: Google Frontend|age: 75208|content-type: application/json|x-cloud-trace-context: <redacted>|cache-control: public, max-age=86400|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>]\n9;s-7695;557 ms;557 ms;597 ms;597 ms;40 ms;3 ms;0.6 ms;200;text/css;VeryHigh;VeryHigh;VeryHigh;t;unknown;t;0;[];[date: Mon, 29 Apr 2024 11:01:15 GMT|content-encoding: gzip|x-content-type-options: nosniff|strict-transport-security: max-age=31536000|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|x-xss-protection: 0|last-modified: Mon, 29 Apr 2024 10:51:49 GMT|server: ESF|cross-origin-opener-policy: <redacted>|x-frame-options: SAMEORIGIN|content-type: text/css; charset=utf-8|access-control-allow-origin: *|cache-control: private, max-age=86400, stale-while-revalidate=604800|timing-allow-origin: *|link: <https://fonts.gstatic.com>; rel=preconnect; crossorigin|expires: Mon, 29 Apr 2024 11:01:15 GMT]\n7;s-34909;770 ms;770 ms;771 ms;776 ms;6 ms;40 μs;5 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[x-google-security-signals: <redacted>|x-google-gfe-service-trace: <redacted>|content-security-policy-report-only: <redacted>|x-google-scs-row-timestamp: <redacted>|x-google-gfe-response-code-details-trace: <redacted>|cross-origin-resource-policy: <redacted>|x-google-scs-row-key: <redacted>|content-type: font/woff2|access-control-allow-origin: *|x-google-data-version: <redacted>|cache-control: public, max-age=31536000|x-google-gfe-backend-request-info: <redacted>|x-google-dos-service-trace: <redacted>|x-google-backends: <redacted>|date: Thu, 26 Oct 2023 10:46:00 GMT|x-content-type-options: nosniff|expires: Fri, 25 Oct 2024 10:46:00 GMT|x-google-gfe-version: <redacted>|x-google-netmon-label: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-google-service: <redacted>|x-xss-protection: 0|x-google-gfe-handshake-trace: <redacted>|x-google-shellfish-status: <redacted>|last-modified: Wed, 11 May 2022 19:24:50 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|x-google-gfe-request-trace: <redacted>|accept-ranges: bytes|timing-allow-origin: *|x-google-scs-repo: <redacted>]\n10;s-11121;602 ms;602 ms;603 ms;611 ms;9 ms;27 μs;8 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Thu, 25 Apr 2024 15:44:03 GMT|x-content-type-options: nosniff|age: 328319|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 24 Apr 2024 23:37:14 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Fri, 25 Apr 2025 15:44:03 GMT]\n11;s-7703;557 ms;557 ms;597 ms;597 ms;40 ms;90 μs;0.1 ms;200;text/css;VeryHigh;VeryHigh;VeryHigh;t;unknown;t;0;[];[date: Mon, 29 Apr 2024 11:01:15 GMT|content-encoding: gzip|x-content-type-options: nosniff|strict-transport-security: max-age=31536000|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|x-xss-protection: 0|last-modified: Mon, 29 Apr 2024 11:01:15 GMT|server: ESF|cross-origin-opener-policy: <redacted>|x-frame-options: SAMEORIGIN|content-type: text/css; charset=utf-8|access-control-allow-origin: *|cache-control: private, max-age=86400, stale-while-revalidate=604800|timing-allow-origin: *|link: <https://fonts.gstatic.com>; rel=preconnect; crossorigin|expires: Mon, 29 Apr 2024 11:01:15 GMT]\n5;s-11334;606 ms;606 ms;607 ms;615 ms;9 ms;30 μs;8 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;11;[];[date: Fri, 26 Apr 2024 09:49:05 GMT|x-content-type-options: nosniff|age: 263217|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Mon, 08 Apr 2024 19:04:51 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Sat, 26 Apr 2025 09:49:05 GMT]\n12;s-7722;557 ms;557 ms;562 ms;568 ms;11 ms;0.5 ms;6 ms;200;text/css;VeryHigh;VeryHigh;VeryHigh;t;unknown;t;0;[];[date: Mon, 29 Apr 2024 10:56:02 GMT|content-encoding: gzip|x-content-type-options: nosniff|age: 256|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Thu, 25 Apr 2024 19:58:26 GMT|server: sffe|cross-origin-opener-policy: <redacted>|vary: Accept-Encoding|report-to: {\"group\":\"devrel-devsite\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/devrel-devsite\"}]}|content-type: text/css|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|expires: Tue, 29 Apr 2025 10:56:02 GMT]\n13;s-7737;557 ms;557 ms;561 ms;561 ms;4 ms;0.4 ms;0.2 ms;200;text/css;VeryHigh;VeryHigh;VeryHigh;t;unknown;t;0;[];[content-security-policy: base-uri 'self'; object-src 'none'; script-src 'strict-dynamic' 'unsafe-inline' https: http: 'nonce-laTwEoovJjOKcMoBUjSFaYO6rrF8dU' 'unsafe-eval'; report-uri https://csp.withgoogle.com/csp/devsite/v2|content-encoding: gzip|x-content-type-options: nosniff|date: Mon, 29 Apr 2024 11:00:18 GMT|strict-transport-security: max-age=63072000; includeSubdomains; preload|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|pragma: no-cache|last-modified: Tue, 19 Mar 2024 18:37:07 GMT|server: Google Frontend|vary: Cookie, Accept-Encoding|x-frame-options: SAMEORIGIN|content-type: text/css|x-cloud-trace-context: <redacted>|cache-control: no-cache, must-revalidate|expires: 0]\n\n# Main thread bottom-up summary\n\nThis is the bottom-up summary for the entire trace. Only the top 10 activities (sorted by self time) are shown. An activity is all the aggregated time spent on the same type of work. For example, it can be all the time spent in a specific JavaScript function, or all the time spent in a specific browser rendering stage (like layout, v8 compile, parsing html). \"Self time\" represents the aggregated time spent directly in an activity, across all occurrences. \"Total time\" represents the aggregated time spent in an activity or any of its children.\n\n## insight set id: NO_NAVIGATION\n\n- self: 12 ms, total: 12 ms, source: Profiling overhead\n- self: 4 ms, total: 28 ms, source: Task\n- self: 3 ms, total: 4 ms, source: Recalculate style (url: https://www.gstatic.com/devrel-devsite/prod/vafe2e13ca17bb026e70df42a2ead1c8192750e86a12923a88eda839025dabf95/js/devsite_app_module.js, line: 98, column: 12)\n- self: 2 ms, total: 2 ms, source: Commit\n- self: 0.9 ms, total: 2 ms, source: Function call (url: https://www.gstatic.com/devrel-devsite/prod/vafe2e13ca17bb026e70df42a2ead1c8192750e86a12923a88eda839025dabf95/js/devsite_app_module.js, line: 102, column: 35)\n- self: 0.8 ms, total: 13 ms, source: Evaluate script\n- self: 0.7 ms, total: 3 ms, source: Event: pointerover\n- self: 0.1 ms, total: 1 ms, source: Xh (url: https://www.gstatic.com/devrel-devsite/prod/vafe2e13ca17bb026e70df42a2ead1c8192750e86a12923a88eda839025dabf95/js/devsite_app_module.js, line: 104, column: 61)\n\n## insight set id: NAVIGATION_1\n\n- self: 46 ms, total: 49 ms, source: Recalculate style\n- self: 37 ms, total: 211 ms, source: Task\n- self: 21 ms, total: 22 ms, source: Layout\n- self: 17 ms, total: 19 ms, source: Compile code\n- self: 7 ms, total: 7 ms, source: Cache script code\n- self: 6 ms, total: 26 ms, source: Function call (url: https://www.gstatic.com/devrel-devsite/prod/vafe2e13ca17bb026e70df42a2ead1c8192750e86a12923a88eda839025dabf95/js/devsite_app_module.js, line: 288, column: 146)\n- self: 5 ms, total: 5 ms, source: Parse stylesheet\n- self: 5 ms, total: 5 ms, source: Pre-paint\n- self: 5 ms, total: 5 ms, source: Commit\n- self: 5 ms, total: 10 ms, source: appendChild\n\n# 3rd party summary\n\n## insight set id: NO_NAVIGATION\n\n- name: Google CDN, main thread time: 1 ms, network transfer size: 0 B\n\n## insight set id: NAVIGATION_1\n\n- name: Google CDN, main thread time: 38 ms, network transfer size: 990 B\n- name: web.dev, main thread time: 3 ms, network transfer size: 84.3 kB\n- name: Google Analytics, main thread time: 0.6 ms, network transfer size: 52.9 kB\n- name: Google Fonts, main thread time: 0 ms, network transfer size: 42.2 kB\n\n# Longest tasks\n\n## insight set id: NO_NAVIGATION\n\n- total time: 13 ms, event: (eventKey: r-96, ts: 465455241964)\n- total time: 2 ms, event: (eventKey: r-934, ts: 465455475572)\n- total time: 1 ms, event: (eventKey: r-2310, ts: 465455879141)\n\n## insight set id: NAVIGATION_1\n\n- total time: 18 ms, event: (eventKey: r-20182, ts: 465457150438)\n- total time: 14 ms, event: (eventKey: r-12184, ts: 465457104625)\n- total time: 12 ms, event: (eventKey: r-10779, ts: 465457087373)\n\nUser selected the following call tree:\n\n\n\n# Call tree:\n\n1;r-10779;Task;3;;;2;;\n2;r-11902;Layout;3;3;;;;;S\n\n\n# User query\n\ntest"
9
+ "text": "Trace summary:\nURL: https://web.dev/\nTrace bounds: {min: 465455241690µs, max: 465460435979µs}\nCPU throttling: 1x\nNetwork throttling: No throttling\n\n# Available insight sets\n\nThe following is a list of insight sets. An insight set covers a specific part of the trace, split by navigations. The insights within each insight set are specific to that part of the trace. Be sure to consider the insight set id and bounds when calling functions. If no specific insight set or navigation is mentioned, assume the user is referring to the first one.\n\n## insight set id: NO_NAVIGATION\n\nURL: https://web.dev/\nBounds: {min: 465455241690µs, max: 465456489729µs}\nMetrics (lab / observed):\n - CLS: 0.00\nMetrics (field / real users): n/a – no data for this page in CrUX\nAvailable insights:\n - insight name: ThirdParties\n description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page’s content.\n relevant trace bounds: {min: 465456492168µs, max: 465460052616µs}\n example question: Which third parties are having the largest impact on my page performance?\n\n## insight set id: NAVIGATION_1\n\nURL: https://web.dev/\nBounds: {min: 465456489730µs, max: 465460435979µs}\nMetrics (lab / observed):\n - LCP: 676 ms, event: (eventKey: r-21246, ts: 465457166052), nodeId: 1680\n - LCP breakdown:\n - TTFB: 553 ms, bounds: {min: 465456489730µs, max: 465457042737µs}\n - Render delay: 123 ms, bounds: {min: 465457042737µs, max: 465457166052µs}\n - CLS: 0.02, event: (eventKey: s-14250, ts: 465457121239)\nMetrics (field / real users): n/a – no data for this page in CrUX\nAvailable insights:\n - insight name: RenderBlocking\n description: Requests are blocking the page’s initial render, which may delay LCP. [Deferring or inlining](https://developer.chrome.com/docs/performance/insights/render-blocking) can move these network requests out of the critical path.\n relevant trace bounds: {min: 465457046567µs, max: 465457086893µs}\n estimated metric savings: FCP 118 ms, LCP 118 ms\n example question: Show me the most impactful render-blocking requests that I should focus on\n example question: How can I reduce the number of render-blocking requests?\n - insight name: LCPBreakdown\n description: Each [subpart has specific improvement strategies](https://developer.chrome.com/docs/performance/insights/lcp-breakdown). Ideally, most of the LCP time should be spent on loading the resources, not within delays.\n relevant trace bounds: {min: 465456489730µs, max: 465457166052µs}\n example question: Help me optimize my LCP score\n example question: Which LCP subpart was most problematic?\n example question: What can I do to reduce the LCP time for this page load?\n - insight name: CLSCulprits\n description: Layout shifts occur when elements move absent any user interaction. [Investigate the causes of layout shifts](https://developer.chrome.com/docs/performance/insights/cls-culprit), such as elements being added, removed, or their fonts changing as the page loads.\n relevant trace bounds: {min: 465457121239µs, max: 465459012394µs}\n example question: Help me optimize my CLS score\n example question: How can I prevent layout shifts on this page?\n - insight name: NetworkDependencyTree\n description: [Avoid chaining critical requests](https://developer.chrome.com/docs/performance/insights/network-dependency-tree) by reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load\n relevant trace bounds: {min: 465456490723µs, max: 465458472724µs}\n example question: How do I optimize my network dependency tree?\n - insight name: DOMSize\n description: A large DOM can increase the duration of style calculations and layout reflows, impacting page responsiveness. A large DOM will also increase memory usage. [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/performance/insights/dom-size).\n relevant trace bounds: {min: 465458287196µs, max: 465458340745µs}\n example question: How can I reduce the size of my DOM?\n - insight name: ThirdParties\n description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page’s content.\n relevant trace bounds: {min: 465456492168µs, max: 465460052616µs}\n example question: Which third parties are having the largest impact on my page performance?\n - insight name: ForcedReflow\n description: A forced reflow occurs when JavaScript queries geometric properties (such as offsetWidth) after styles have been invalidated by a change to the DOM state. This can result in poor performance. Learn more about [forced reflows](https://developer.chrome.com/docs/performance/insights/forced-reflow) and possible mitigations.\n relevant trace bounds: {min: 465456489730µs, max: 465460435979µs}\n example question: How can I avoid forced reflows and layout thrashing?\n example question: What is forced reflow and why is it problematic?\n - insight name: Cache\n description: A long cache lifetime can speed up repeat visits to your page. [Learn more about caching](https://developer.chrome.com/docs/performance/insights/cache).\n relevant trace bounds: {min: 465457179567µs, max: 465459110674µs}\n estimated metric savings: FCP 0 ms, LCP 0 ms\n estimated wasted bytes: 16 kB\n example question: What caching strategies can I apply to improve my page performance?\n# Critical network requests\n\n## insight set id: NO_NAVIGATION\n\nnone\n\n## insight set id: NAVIGATION_1\n\n\nNetwork requests data:\n\n\n\nallUrls = [0: https://web.dev/, 1: https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2, 2: https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2, 3: https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2, 4: https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2, 5: https://fonts.gstatic.com/s/materialicons/v142/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2, 6: https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2, 7: https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2, 8: https://web.dev/_pwa/web/manifest.json, 9: https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap, 10: https://fonts.gstatic.com/s/googlesans/v59/4UasrENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RPjIUvbQoi-E.woff2, 11: https://fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block, 12: https://www.gstatic.com/devrel-devsite/prod/vafe2e13ca17bb026e70df42a2ead1c8192750e86a12923a88eda839025dabf95/web/css/app.css, 13: https://web.dev/extras.css]\n\n0;s-7302;1 ms;2 ms;568 ms;569 ms;568 ms;15 ms;0.5 ms;200;text/html;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[content-security-policy: base-uri 'self'; object-src 'none'; script-src 'strict-dynamic' 'unsafe-inline' https: http: 'nonce-pLl1WHuNABXXiQLLmUesvDyvzBJZdE' 'unsafe-eval'; report-uri https://csp.withgoogle.com/csp/devsite/v2|content-encoding: gzip|x-content-type-options: nosniff|date: Mon, 29 Apr 2024 11:01:15 GMT|strict-transport-security: max-age=63072000; includeSubdomains; preload|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|pragma: no-cache|last-modified: Fri, 26 Apr 2024 16:43:17 GMT|server: Google Frontend|vary: Cookie, Accept-Encoding|x-frame-options: SAMEORIGIN|content-type: text/html; charset=utf-8|x-cloud-trace-context: <redacted>|cache-control: no-cache, must-revalidate|expires: 0]\n1;s-49309;1,395 ms;1,402 ms;1,415 ms;1,423 ms;28 ms;94 μs;9 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Wed, 24 Apr 2024 15:02:33 GMT|x-content-type-options: nosniff|age: 417214|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:58 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Thu, 24 Apr 2025 15:02:33 GMT]\n2;s-46519;1,348 ms;1,355 ms;1,361 ms;1,423 ms;75 ms;73 μs;62 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Mon, 29 Apr 2024 03:50:51 GMT|x-content-type-options: nosniff|age: 25516|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:41 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Tue, 29 Apr 2025 03:50:51 GMT]\n3;s-46196;1,331 ms;1,339 ms;1,355 ms;1,420 ms;89 ms;0.1 ms;65 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Fri, 26 Apr 2024 20:29:46 GMT|x-content-type-options: nosniff|age: 224781|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:39 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Sat, 26 Apr 2025 20:29:46 GMT]\n4;s-45814;1,326 ms;1,331 ms;1,348 ms;1,419 ms;93 ms;77 μs;71 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Thu, 25 Apr 2024 13:27:47 GMT|x-content-type-options: nosniff|age: 336500|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:56 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Fri, 25 Apr 2025 13:27:47 GMT]\n5;s-44751;1,286 ms;1,307 ms;1,343 ms;1,416 ms;130 ms;1 ms;73 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Fri, 26 Apr 2024 09:49:05 GMT|x-content-type-options: nosniff|age: 263222|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Mon, 08 Apr 2024 19:04:51 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Sat, 26 Apr 2025 09:49:05 GMT]\n6;s-44728;1,285 ms;1,307 ms;1,343 ms;1,406 ms;120 ms;1 ms;62 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Sun, 28 Apr 2024 21:44:44 GMT|x-content-type-options: nosniff|age: 47483|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:53 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Mon, 28 Apr 2025 21:44:44 GMT]\n7;s-44701;1,284 ms;1,300 ms;1,339 ms;1,405 ms;120 ms;0.2 ms;65 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Thu, 25 Apr 2024 09:35:28 GMT|x-content-type-options: nosniff|age: 350439|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 11 May 2022 19:24:50 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Fri, 25 Apr 2025 09:35:28 GMT]\n8;s-43119;1,751 ms;1,751 ms;1,771 ms;1,771 ms;20 ms;27 μs;0.2 ms;200;application/json;Medium;Medium;Medium;f;unknown;t;0;[];[date: Sun, 28 Apr 2024 14:07:49 GMT|last-modified: Wed, 24 Apr 2024 11:02:59 GMT|server: Google Frontend|age: 75208|content-type: application/json|x-cloud-trace-context: <redacted>|cache-control: public, max-age=86400|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>]\n9;s-7695;557 ms;557 ms;597 ms;597 ms;40 ms;3 ms;0.6 ms;200;text/css;VeryHigh;VeryHigh;VeryHigh;t;unknown;t;0;[];[date: Mon, 29 Apr 2024 11:01:15 GMT|content-encoding: gzip|x-content-type-options: nosniff|strict-transport-security: max-age=31536000|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|x-xss-protection: 0|last-modified: Mon, 29 Apr 2024 10:51:49 GMT|server: ESF|cross-origin-opener-policy: <redacted>|x-frame-options: SAMEORIGIN|content-type: text/css; charset=utf-8|access-control-allow-origin: *|cache-control: private, max-age=86400, stale-while-revalidate=604800|timing-allow-origin: *|link: <https://fonts.gstatic.com>; rel=preconnect; crossorigin|expires: Mon, 29 Apr 2024 11:01:15 GMT]\n7;s-34909;770 ms;770 ms;771 ms;776 ms;6 ms;40 μs;5 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[x-google-security-signals: <redacted>|x-google-gfe-service-trace: <redacted>|content-security-policy-report-only: <redacted>|x-google-scs-row-timestamp: <redacted>|x-google-gfe-response-code-details-trace: <redacted>|cross-origin-resource-policy: <redacted>|x-google-scs-row-key: <redacted>|content-type: font/woff2|access-control-allow-origin: *|x-google-data-version: <redacted>|cache-control: public, max-age=31536000|x-google-gfe-backend-request-info: <redacted>|x-google-dos-service-trace: <redacted>|x-google-backends: <redacted>|date: Thu, 26 Oct 2023 10:46:00 GMT|x-content-type-options: nosniff|expires: Fri, 25 Oct 2024 10:46:00 GMT|x-google-gfe-version: <redacted>|x-google-netmon-label: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-google-service: <redacted>|x-xss-protection: 0|x-google-gfe-handshake-trace: <redacted>|x-google-shellfish-status: <redacted>|last-modified: Wed, 11 May 2022 19:24:50 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|x-google-gfe-request-trace: <redacted>|accept-ranges: bytes|timing-allow-origin: *|x-google-scs-repo: <redacted>]\n10;s-11121;602 ms;602 ms;603 ms;611 ms;9 ms;27 μs;8 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;;[];[date: Thu, 25 Apr 2024 15:44:03 GMT|x-content-type-options: nosniff|age: 328319|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Wed, 24 Apr 2024 23:37:14 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Fri, 25 Apr 2025 15:44:03 GMT]\n11;s-7703;557 ms;557 ms;597 ms;597 ms;40 ms;90 μs;0.1 ms;200;text/css;VeryHigh;VeryHigh;VeryHigh;t;unknown;t;0;[];[date: Mon, 29 Apr 2024 11:01:15 GMT|content-encoding: gzip|x-content-type-options: nosniff|strict-transport-security: max-age=31536000|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|x-xss-protection: 0|last-modified: Mon, 29 Apr 2024 11:01:15 GMT|server: ESF|cross-origin-opener-policy: <redacted>|x-frame-options: SAMEORIGIN|content-type: text/css; charset=utf-8|access-control-allow-origin: *|cache-control: private, max-age=86400, stale-while-revalidate=604800|timing-allow-origin: *|link: <https://fonts.gstatic.com>; rel=preconnect; crossorigin|expires: Mon, 29 Apr 2024 11:01:15 GMT]\n5;s-11334;606 ms;606 ms;607 ms;615 ms;9 ms;30 μs;8 ms;200;font/woff2;VeryHigh;VeryHigh;VeryHigh;f;unknown;t;11;[];[date: Fri, 26 Apr 2024 09:49:05 GMT|x-content-type-options: nosniff|age: 263217|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Mon, 08 Apr 2024 19:04:51 GMT|server: sffe|cross-origin-opener-policy: <redacted>|report-to: {\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}|content-type: font/woff2|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|timing-allow-origin: *|expires: Sat, 26 Apr 2025 09:49:05 GMT]\n12;s-7722;557 ms;557 ms;562 ms;568 ms;11 ms;0.5 ms;6 ms;200;text/css;VeryHigh;VeryHigh;VeryHigh;t;unknown;t;0;[];[date: Mon, 29 Apr 2024 10:56:02 GMT|content-encoding: gzip|x-content-type-options: nosniff|age: 256|content-security-policy-report-only: <redacted>|cross-origin-resource-policy: <redacted>|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|last-modified: Thu, 25 Apr 2024 19:58:26 GMT|server: sffe|cross-origin-opener-policy: <redacted>|vary: Accept-Encoding|report-to: {\"group\":\"devrel-devsite\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/devrel-devsite\"}]}|content-type: text/css|access-control-allow-origin: *|cache-control: public, max-age=31536000|accept-ranges: bytes|expires: Tue, 29 Apr 2025 10:56:02 GMT]\n13;s-7737;557 ms;557 ms;561 ms;561 ms;4 ms;0.4 ms;0.2 ms;200;text/css;VeryHigh;VeryHigh;VeryHigh;t;unknown;t;0;[];[content-security-policy: base-uri 'self'; object-src 'none'; script-src 'strict-dynamic' 'unsafe-inline' https: http: 'nonce-laTwEoovJjOKcMoBUjSFaYO6rrF8dU' 'unsafe-eval'; report-uri https://csp.withgoogle.com/csp/devsite/v2|content-encoding: gzip|x-content-type-options: nosniff|date: Mon, 29 Apr 2024 11:00:18 GMT|strict-transport-security: max-age=63072000; includeSubdomains; preload|alt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000|content-length: <redacted>|x-xss-protection: 0|pragma: no-cache|last-modified: Tue, 19 Mar 2024 18:37:07 GMT|server: Google Frontend|vary: Cookie, Accept-Encoding|x-frame-options: SAMEORIGIN|content-type: text/css|x-cloud-trace-context: <redacted>|cache-control: no-cache, must-revalidate|expires: 0]\n\n# Main thread bottom-up summary\n\nThis is the bottom-up summary for the entire trace. Only the top 10 activities (sorted by self time) are shown. An activity is all the aggregated time spent on the same type of work. For example, it can be all the time spent in a specific JavaScript function, or all the time spent in a specific browser rendering stage (like layout, v8 compile, parsing html). \"Self time\" represents the aggregated time spent directly in an activity, across all occurrences. \"Total time\" represents the aggregated time spent in an activity or any of its children.\n\n## insight set id: NO_NAVIGATION\n\n- self: 12 ms, total: 12 ms, source: Profiling overhead\n- self: 4 ms, total: 28 ms, source: Task\n- self: 3 ms, total: 4 ms, source: Recalculate style (url: https://www.gstatic.com/devrel-devsite/prod/vafe2e13ca17bb026e70df42a2ead1c8192750e86a12923a88eda839025dabf95/js/devsite_app_module.js, line: 98, column: 12)\n- self: 2 ms, total: 2 ms, source: Commit\n- self: 0.9 ms, total: 2 ms, source: Function call (url: https://www.gstatic.com/devrel-devsite/prod/vafe2e13ca17bb026e70df42a2ead1c8192750e86a12923a88eda839025dabf95/js/devsite_app_module.js, line: 102, column: 35)\n- self: 0.8 ms, total: 13 ms, source: Evaluate script\n- self: 0.7 ms, total: 3 ms, source: Event: pointerover\n- self: 0.1 ms, total: 1 ms, source: Xh (url: https://www.gstatic.com/devrel-devsite/prod/vafe2e13ca17bb026e70df42a2ead1c8192750e86a12923a88eda839025dabf95/js/devsite_app_module.js, line: 104, column: 61)\n\n## insight set id: NAVIGATION_1\n\n- self: 46 ms, total: 49 ms, source: Recalculate style\n- self: 37 ms, total: 211 ms, source: Task\n- self: 21 ms, total: 22 ms, source: Layout\n- self: 17 ms, total: 19 ms, source: Compile code\n- self: 7 ms, total: 7 ms, source: Cache script code\n- self: 6 ms, total: 26 ms, source: Function call (url: https://www.gstatic.com/devrel-devsite/prod/vafe2e13ca17bb026e70df42a2ead1c8192750e86a12923a88eda839025dabf95/js/devsite_app_module.js, line: 288, column: 146)\n- self: 5 ms, total: 5 ms, source: Parse stylesheet\n- self: 5 ms, total: 5 ms, source: Pre-paint\n- self: 5 ms, total: 5 ms, source: Commit\n- self: 5 ms, total: 10 ms, source: appendChild\n\n# 3rd party summary\n\n## insight set id: NO_NAVIGATION\n\n- name: Google CDN, main thread time: 1 ms, network transfer size: 0 B\n\n## insight set id: NAVIGATION_1\n\n- name: Google CDN, main thread time: 38 ms, network transfer size: 990 B\n- name: web.dev, main thread time: 3 ms, network transfer size: 84.3 kB\n- name: Google Analytics, main thread time: 0.6 ms, network transfer size: 52.9 kB\n- name: Google Fonts, main thread time: 0 ms, network transfer size: 42.2 kB\n\n# Longest tasks\n\n## insight set id: NO_NAVIGATION\n\n- total time: 13 ms, event: (eventKey: r-96, ts: 465455241964)\n- total time: 2 ms, event: (eventKey: r-934, ts: 465455475572)\n- total time: 1 ms, event: (eventKey: r-2310, ts: 465455879141)\n\n## insight set id: NAVIGATION_1\n\n- total time: 18 ms, event: (eventKey: r-20182, ts: 465457150438)\n- total time: 14 ms, event: (eventKey: r-12184, ts: 465457104625)\n- total time: 12 ms, event: (eventKey: r-10779, ts: 465457087373)\n\nUser selected the following call tree:\n\n\n\n# Call tree:\n\n1;r-10779;Task;3;;;2;;\n2;r-11902;Layout;3;3;;;;;S\n\n\n# User query\n\ntest"
10
10
  }
11
11
  ],
12
12
  "widgets": [
@@ -38,7 +38,7 @@ Content:
38
38
  "details": [
39
39
  {
40
40
  "title": "Trace details",
41
- "text": "Trace summary:\nURL: https://chromedevtools.github.io/performance-stories/lcp-large-image/index.html\nTrace bounds: {min: 658799706428µs, max: 658804825864µs}\nCPU throttling: 1x\nNetwork throttling: No throttling\n\n# Available insight sets\n\nThe following is a list of insight sets. An insight set covers a specific part of the trace, split by navigations. The insights within each insight set are specific to that part of the trace. Be sure to consider the insight set id and bounds when calling functions. If no specific insight set or navigation is mentioned, assume the user is referring to the first one.\n\n## insight set id: NAVIGATION_0\n\nURL: https://chromedevtools.github.io/performance-stories/lcp-large-image/index.html\nBounds: {min: 658799738257µs, max: 658804825864µs}\nMetrics (lab / observed):\n - LCP: 110 ms, event: (eventKey: r-2399, ts: 658799847880), nodeId: 10\n - LCP breakdown:\n - TTFB: 7 ms, bounds: {min: 658799738257µs, max: 658799745193µs}\n - Load delay: 34 ms, bounds: {min: 658799745193µs, max: 658799778937µs}\n - Load duration: 12 ms, bounds: {min: 658799778937µs, max: 658799791032µs}\n - Render delay: 57 ms, bounds: {min: 658799791032µs, max: 658799847880µs}\n - CLS: 0.00\nMetrics (field / real users): n/a – no data for this page in CrUX\nAvailable insights:\n - insight name: LCPBreakdown\n description: Each [subpart has specific improvement strategies](https://developer.chrome.com/docs/performance/insights/lcp-breakdown). Ideally, most of the LCP time should be spent on loading the resources, not within delays.\n relevant trace bounds: {min: 658799738257µs, max: 658799847880µs}\n example question: Help me optimize my LCP score\n example question: Which LCP subpart was most problematic?\n example question: What can I do to reduce the LCP time for this page load?\n - insight name: LCPDiscovery\n description: [Optimize LCP](https://developer.chrome.com/docs/performance/insights/lcp-discovery) by making the LCP image discoverable from the HTML immediately, and avoiding lazy-loading.\n relevant trace bounds: {min: 658799745193µs, max: 658799793683µs}\n example question: Suggest fixes to reduce my LCP\n example question: What can I do to reduce my LCP discovery time?\n example question: Why is LCP discovery time important?\n - insight name: RenderBlocking\n description: Requests are blocking the page’s initial render, which may delay LCP. [Deferring or inlining](https://developer.chrome.com/docs/performance/insights/render-blocking) can move these network requests out of the critical path.\n relevant trace bounds: {min: 658799775876µs, max: 658799791419µs}\n example question: Show me the most impactful render-blocking requests that I should focus on\n example question: How can I reduce the number of render-blocking requests?\n - insight name: Cache\n description: A long cache lifetime can speed up repeat visits to your page. [Learn more about caching](https://developer.chrome.com/docs/performance/insights/cache).\n relevant trace bounds: {min: 658799777502µs, max: 658799791419µs}\n example question: What caching strategies can I apply to improve my page performance?\n# Critical network requests\n\nnone\n\n# Main thread bottom-up summary\n\nThis is the bottom-up summary for the entire trace. Only the top 10 activities (sorted by self time) are shown. An activity is all the aggregated time spent on the same type of work. For example, it can be all the time spent in a specific JavaScript function, or all the time spent in a specific browser rendering stage (like layout, v8 compile, parsing html). \"Self time\" represents the aggregated time spent directly in an activity, across all occurrences. \"Total time\" represents the aggregated time spent in an activity or any of its children.\n\n- self: 57 ms, total: 79 ms, source: Task\n- self: 5 ms, total: 5 ms, source: Layout\n- self: 4 ms, total: 4 ms, source: Major GC\n- self: 3 ms, total: 3 ms, source: Parse HTML\n- self: 2 ms, total: 2 ms, source: Recalculate style\n- self: 2 ms, total: 2 ms, source: Commit\n- self: 1 ms, total: 1 ms, source: C++ GC\n- self: 1 ms, total: 1 ms, source: Paint\n\n# 3rd party summary\n\n- name: GitHub, main thread time: 3 ms, network transfer size: 0 B\n\n# Longest tasks\n\n- total time: 23 ms, event: (eventKey: r-617, ts: 658799757023)\n- total time: 12 ms, event: (eventKey: r-1571, ts: 658799793885)\n- total time: 11 ms, event: (eventKey: r-1891, ts: 658799811130)\n\nUser selected the LCPBreakdown insight.\n\n\n# User query\n\ntest"
41
+ "text": "Trace summary:\nURL: https://chromedevtools.github.io/performance-stories/lcp-large-image/index.html\nTrace bounds: {min: 658799706428µs, max: 658804825864µs}\nCPU throttling: 1x\nNetwork throttling: No throttling\n\n# Available insight sets\n\nThe following is a list of insight sets. An insight set covers a specific part of the trace, split by navigations. The insights within each insight set are specific to that part of the trace. Be sure to consider the insight set id and bounds when calling functions. If no specific insight set or navigation is mentioned, assume the user is referring to the first one.\n\n## insight set id: NAVIGATION_0\n\nURL: https://chromedevtools.github.io/performance-stories/lcp-large-image/index.html\nBounds: {min: 658799738257µs, max: 658804825864µs}\nMetrics (lab / observed):\n - LCP: 110 ms, event: (eventKey: r-2399, ts: 658799847880), nodeId: 10\n - LCP breakdown:\n - TTFB: 7 ms, bounds: {min: 658799738257µs, max: 658799745193µs}\n - Load delay: 34 ms, bounds: {min: 658799745193µs, max: 658799778937µs}\n - Load duration: 12 ms, bounds: {min: 658799778937µs, max: 658799791032µs}\n - Render delay: 57 ms, bounds: {min: 658799791032µs, max: 658799847880µs}\n - CLS: 0.00\nMetrics (field / real users): n/a – no data for this page in CrUX\nAvailable insights:\n - insight name: LCPBreakdown\n description: Each [subpart has specific improvement strategies](https://developer.chrome.com/docs/performance/insights/lcp-breakdown). Ideally, most of the LCP time should be spent on loading the resources, not within delays.\n relevant trace bounds: {min: 658799738257µs, max: 658799847880µs}\n example question: Help me optimize my LCP score\n example question: Which LCP subpart was most problematic?\n example question: What can I do to reduce the LCP time for this page load?\n - insight name: LCPDiscovery\n description: [Optimize LCP](https://developer.chrome.com/docs/performance/insights/lcp-discovery) by making the LCP image discoverable from the HTML immediately, and avoiding lazy-loading\n relevant trace bounds: {min: 658799745193µs, max: 658799793683µs}\n example question: Suggest fixes to reduce my LCP\n example question: What can I do to reduce my LCP discovery time?\n example question: Why is LCP discovery time important?\n - insight name: RenderBlocking\n description: Requests are blocking the page’s initial render, which may delay LCP. [Deferring or inlining](https://developer.chrome.com/docs/performance/insights/render-blocking) can move these network requests out of the critical path.\n relevant trace bounds: {min: 658799775876µs, max: 658799791419µs}\n example question: Show me the most impactful render-blocking requests that I should focus on\n example question: How can I reduce the number of render-blocking requests?\n - insight name: Cache\n description: A long cache lifetime can speed up repeat visits to your page. [Learn more about caching](https://developer.chrome.com/docs/performance/insights/cache).\n relevant trace bounds: {min: 658799777502µs, max: 658799791419µs}\n example question: What caching strategies can I apply to improve my page performance?\n# Critical network requests\n\nnone\n\n# Main thread bottom-up summary\n\nThis is the bottom-up summary for the entire trace. Only the top 10 activities (sorted by self time) are shown. An activity is all the aggregated time spent on the same type of work. For example, it can be all the time spent in a specific JavaScript function, or all the time spent in a specific browser rendering stage (like layout, v8 compile, parsing html). \"Self time\" represents the aggregated time spent directly in an activity, across all occurrences. \"Total time\" represents the aggregated time spent in an activity or any of its children.\n\n- self: 57 ms, total: 79 ms, source: Task\n- self: 5 ms, total: 5 ms, source: Layout\n- self: 4 ms, total: 4 ms, source: Major GC\n- self: 3 ms, total: 3 ms, source: Parse HTML\n- self: 2 ms, total: 2 ms, source: Recalculate style\n- self: 2 ms, total: 2 ms, source: Commit\n- self: 1 ms, total: 1 ms, source: C++ GC\n- self: 1 ms, total: 1 ms, source: Paint\n\n# 3rd party summary\n\n- name: GitHub, main thread time: 3 ms, network transfer size: 0 B\n\n# Longest tasks\n\n- total time: 23 ms, event: (eventKey: r-617, ts: 658799757023)\n- total time: 12 ms, event: (eventKey: r-1571, ts: 658799793885)\n- total time: 11 ms, event: (eventKey: r-1891, ts: 658799811130)\n\nUser selected the LCPBreakdown insight.\n\n\n# User query\n\ntest"
42
42
  }
43
43
  ],
44
44
  "widgets": [
@@ -12,6 +12,7 @@ import {
12
12
  import {LighthouseFormatter} from '../data_formatters/LighthouseFormatter.js';
13
13
 
14
14
  export class AccessibilityContext extends ConversationContext<LHModel.ReporterTypes.ReportJSON> {
15
+ override readonly jslogContext = 'ai-context-accessibility' as const;
15
16
  readonly #lh: LHModel.ReporterTypes.ReportJSON;
16
17
  #cachedPayload: string|null = null;
17
18
 
@@ -20,6 +20,7 @@ const UIStringsNotTranslate = {
20
20
  const lockedString = i18n.i18n.lockedString;
21
21
 
22
22
  export class DOMNodeContext extends ConversationContext<SDK.DOMModel.DOMNode> {
23
+ override readonly jslogContext = 'ai-context-dom-node' as const;
23
24
  #node: SDK.DOMModel.DOMNode;
24
25
  #opaqueOrigin?: SDK.SecurityOrigin.SecurityOrigin;
25
26
 
@@ -37,15 +38,15 @@ export class DOMNodeContext extends ConversationContext<SDK.DOMModel.DOMNode> {
37
38
  * @returns The security origin of the owner document, or a unique opaque origin.
38
39
  */
39
40
  override getOrigin(): SDK.SecurityOrigin.SecurityOrigin {
40
- const ownerDocument = this.#node.ownerDocument;
41
- if (!ownerDocument) {
42
- // Detached nodes have no security document; isolate them with a unique opaque origin.
41
+ const origin = this.#node.securityOrigin();
42
+ if (!origin) {
43
+ // A node that is not attached to a document has no origin; isolate it with a unique opaque origin.
43
44
  if (!this.#opaqueOrigin) {
44
45
  this.#opaqueOrigin = SDK.SecurityOrigin.SecurityOrigin.createUniqueOpaque();
45
46
  }
46
47
  return this.#opaqueOrigin;
47
48
  }
48
- return SDK.SecurityOrigin.SecurityOrigin.create(ownerDocument.documentURL);
49
+ return origin;
49
50
  }
50
51
 
51
52
  getItem(): SDK.DOMModel.DOMNode {
@@ -9,6 +9,7 @@ import {type ContextDetail, ConversationContext} from '../agents/AiAgent.js';
9
9
  import {FileFormatter} from '../data_formatters/FileFormatter.js';
10
10
 
11
11
  export class FileContext extends ConversationContext<Workspace.UISourceCode.UISourceCode> {
12
+ override readonly jslogContext = 'ai-context-file' as const;
12
13
  #file: Workspace.UISourceCode.UISourceCode;
13
14
  #debuggerWorkspaceBinding?: Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding;
14
15
 
@@ -82,6 +82,7 @@ export class PerformanceTraceContext extends ConversationContext<AgentFocus> {
82
82
  );
83
83
  }
84
84
 
85
+ override readonly jslogContext = 'ai-context-performance-trace' as const;
85
86
  readonly #focus: AgentFocus;
86
87
  readonly #targetManager: SDK.TargetManager.TargetManager;
87
88
  readonly #freshRecordingTracker: Tracing.FreshRecording.Tracker;
@@ -24,6 +24,7 @@ const UIStringsNotTranslate = {
24
24
  const lockedString = i18n.i18n.lockedString;
25
25
 
26
26
  export class RequestContext extends ConversationContext<SDK.NetworkRequest.NetworkRequest> {
27
+ override readonly jslogContext = 'ai-context-network-request' as const;
27
28
  #request: SDK.NetworkRequest.NetworkRequest;
28
29
  #calculator: NetworkTimeCalculator.NetworkTransferTimeCalculator;
29
30
 
@@ -10,6 +10,7 @@ import {
10
10
  import {CookieItem, DOMStorageItem, type StorageItem} from '../StorageItem.js';
11
11
 
12
12
  export class StorageContext extends ConversationContext<StorageItem> {
13
+ override readonly jslogContext = 'ai-context-storage' as const;
13
14
  #item: StorageItem;
14
15
 
15
16
  constructor(item: StorageItem) {