chrome-devtools-frontend 1.0.1473514 → 1.0.1506453

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 (1522) hide show
  1. package/.gemini/commands/migrate-e2e-non-hosted.toml +43 -0
  2. package/.gemini/commands/review.toml +85 -0
  3. package/.geminiignore +6 -0
  4. package/.github/workflows/auto-close-prs.yml +30 -0
  5. package/.stylelintignore +0 -1
  6. package/.vscode/devtools-workspace-settings.json +2 -1
  7. package/AUTHORS +3 -0
  8. package/WATCHLISTS +0 -4
  9. package/config/gni/devtools_grd_files.gni +92 -47
  10. package/config/gni/devtools_image_files.gni +8 -0
  11. package/config/gni/i18n.gni +3 -2
  12. package/config/owner/COMMON_OWNERS +2 -0
  13. package/docs/README.md +2 -2
  14. package/docs/architecture_of_devtools.md +8 -8
  15. package/docs/committers_policy.md +2 -0
  16. package/docs/contributing/README.md +29 -5
  17. package/docs/contributing/changes.md +1 -1
  18. package/docs/contributing/images/quickstart-vscode-tsversion.png +0 -0
  19. package/docs/contributing/infrastructure.md +89 -0
  20. package/docs/cookbook/localization.md +86 -79
  21. package/docs/get_the_code.md +9 -9
  22. package/docs/styleguide/ux/components.md +190 -2
  23. package/docs/styleguide/ux/glossary.md +16 -0
  24. package/docs/styleguide/ux/images/context-menu-example.png +0 -0
  25. package/docs/ui_engineering.md +80 -19
  26. package/eslint.config.mjs +64 -23
  27. package/extension-api/ExtensionAPI.d.ts +3 -0
  28. package/extensions/cxx_debugging/CMakeLists.txt +0 -6
  29. package/extensions/cxx_debugging/e2e/MochaRootHooks.ts +3 -1
  30. package/extensions/cxx_debugging/e2e/TestDriver.ts +1 -2
  31. package/extensions/cxx_debugging/src/GlobMatch.ts +1 -1
  32. package/extensions/cxx_debugging/src/ModuleConfiguration.ts +2 -2
  33. package/extensions/cxx_debugging/third_party/llvm/README.chromium +2 -0
  34. package/extensions/cxx_debugging/tools/bootstrap.py +7 -0
  35. package/front_end/Images/generate-css-vars.js +1 -1
  36. package/front_end/Images/readme.md +1 -2
  37. package/front_end/Images/rollup.config.mjs +12 -1
  38. package/front_end/Images/src/baseline-high-availability.svg +17 -0
  39. package/front_end/Images/src/baseline-limited-availability.svg +19 -0
  40. package/front_end/Images/src/baseline-low-availability.svg +31 -0
  41. package/front_end/Images/src/bucket.svg +4 -0
  42. package/front_end/Images/src/label-auto.svg +3 -0
  43. package/front_end/Images/src/shield.svg +3 -0
  44. package/front_end/Images/src/smart-assistant.svg +3 -1
  45. package/front_end/Images/src/speculative-loads.svg +1 -0
  46. package/front_end/Images/src/text-analysis.svg +3 -0
  47. package/front_end/Tests.js +78 -230
  48. package/front_end/application_tokens.css +7 -1
  49. package/front_end/core/common/Base64.test.ts +1 -1
  50. package/front_end/core/common/Base64.ts +3 -3
  51. package/front_end/core/common/Color.ts +38 -0
  52. package/front_end/core/common/Debouncer.ts +3 -3
  53. package/front_end/core/common/EventTarget.test.ts +1 -0
  54. package/front_end/core/common/Gzip.test.ts +63 -0
  55. package/front_end/core/common/Gzip.ts +72 -0
  56. package/front_end/core/common/ResourceType.ts +29 -29
  57. package/front_end/core/common/ReturnToPanel.ts +15 -0
  58. package/front_end/core/common/Revealer.ts +10 -10
  59. package/front_end/core/common/SettingRegistration.ts +22 -22
  60. package/front_end/core/common/Settings.test.ts +151 -18
  61. package/front_end/core/common/Settings.ts +99 -8
  62. package/front_end/core/common/SimpleHistoryManager.ts +0 -17
  63. package/front_end/core/common/common.ts +4 -0
  64. package/front_end/core/host/AidaClient.test.ts +103 -2
  65. package/front_end/core/host/AidaClient.ts +161 -31
  66. package/front_end/core/host/InspectorFrontendHost.ts +57 -48
  67. package/front_end/core/host/InspectorFrontendHostAPI.ts +11 -0
  68. package/front_end/core/host/ResourceLoader.ts +15 -15
  69. package/front_end/core/host/UserMetrics.ts +27 -13
  70. package/front_end/core/i18n/NumberFormatter.test.ts +92 -0
  71. package/front_end/core/i18n/NumberFormatter.ts +9 -9
  72. package/front_end/core/i18n/collect-ui-strings.js +3 -3
  73. package/front_end/core/i18n/time-utilities.ts +3 -14
  74. package/front_end/core/platform/Brand.ts +8 -1
  75. package/front_end/core/platform/DevToolsPath.ts +1 -1
  76. package/front_end/core/platform/StringUtilities.test.ts +54 -1
  77. package/front_end/core/platform/StringUtilities.ts +34 -8
  78. package/front_end/core/protocol_client/InspectorBackend.ts +9 -9
  79. package/front_end/core/root/Runtime.ts +52 -8
  80. package/front_end/core/sdk/AnimationModel.test.ts +0 -24
  81. package/front_end/core/sdk/AnimationModel.ts +1 -95
  82. package/front_end/core/sdk/AutofillModel.ts +8 -2
  83. package/front_end/core/sdk/CPUProfilerModel.ts +2 -2
  84. package/front_end/core/sdk/CSSContainerQuery.test.ts +15 -0
  85. package/front_end/core/sdk/CSSContainerQuery.ts +3 -1
  86. package/front_end/core/sdk/CSSMatchedStyles.test.ts +2 -1
  87. package/front_end/core/sdk/CSSMatchedStyles.ts +79 -50
  88. package/front_end/core/sdk/CSSModel.ts +20 -7
  89. package/front_end/core/sdk/CSSPropertyParser.test.ts +4 -3
  90. package/front_end/core/sdk/CSSPropertyParser.ts +12 -4
  91. package/front_end/core/sdk/CSSPropertyParserMatchers.test.ts +46 -15
  92. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +131 -58
  93. package/front_end/core/sdk/CSSRule.ts +44 -44
  94. package/front_end/core/sdk/CSSStyleSheetHeader.ts +2 -6
  95. package/front_end/core/sdk/ChildTargetManager.ts +1 -1
  96. package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +3 -8
  97. package/front_end/core/sdk/Connections.ts +17 -30
  98. package/front_end/core/sdk/ConsoleModel.ts +9 -9
  99. package/front_end/core/sdk/DOMModel.ts +45 -16
  100. package/front_end/core/sdk/DebuggerModel.test.ts +7 -4
  101. package/front_end/core/sdk/DebuggerModel.ts +55 -11
  102. package/front_end/core/sdk/EmulationModel.ts +13 -0
  103. package/front_end/core/sdk/EventBreakpointsModel.ts +2 -2
  104. package/front_end/core/sdk/IOModel.ts +28 -2
  105. package/front_end/core/sdk/NetworkManager.test.ts +0 -27
  106. package/front_end/core/sdk/NetworkManager.ts +137 -105
  107. package/front_end/core/sdk/NetworkRequest.ts +747 -616
  108. package/front_end/core/sdk/OverlayModel.ts +4 -8
  109. package/front_end/core/sdk/PageResourceLoader.ts +32 -13
  110. package/front_end/core/sdk/PreloadingModel.ts +1 -0
  111. package/front_end/core/sdk/RehydratingConnection.ts +13 -14
  112. package/front_end/core/sdk/RemoteObject.test.ts +24 -2
  113. package/front_end/core/sdk/RemoteObject.ts +0 -3
  114. package/front_end/core/sdk/Resource.ts +0 -5
  115. package/front_end/core/sdk/RuntimeModel.ts +2 -1
  116. package/front_end/core/sdk/Script.ts +2 -7
  117. package/front_end/core/sdk/ServerTiming.ts +12 -12
  118. package/front_end/core/sdk/ServiceWorkerCacheModel.ts +7 -3
  119. package/front_end/core/sdk/ServiceWorkerManager.ts +14 -18
  120. package/front_end/core/sdk/SourceMap.test.ts +55 -73
  121. package/front_end/core/sdk/SourceMap.ts +14 -11
  122. package/front_end/core/sdk/SourceMapFunctionRanges.ts +15 -9
  123. package/front_end/core/sdk/SourceMapScopeChainEntry.test.ts +6 -5
  124. package/front_end/core/sdk/SourceMapScopeChainEntry.ts +14 -14
  125. package/front_end/core/sdk/SourceMapScopesInfo.test.ts +232 -317
  126. package/front_end/core/sdk/SourceMapScopesInfo.ts +26 -25
  127. package/front_end/core/sdk/StorageBucketsModel.ts +4 -0
  128. package/front_end/core/sdk/Target.ts +2 -2
  129. package/front_end/core/sdk/TargetManager.ts +1 -1
  130. package/front_end/core/sdk/sdk-meta.ts +86 -86
  131. package/front_end/core/sdk/sdk.ts +0 -2
  132. package/front_end/design_system_tokens.css +1 -1
  133. package/front_end/devtools_compatibility.js +201 -177
  134. package/front_end/entrypoints/inspector_main/InspectorMain.ts +12 -0
  135. package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +3 -3
  136. package/front_end/entrypoints/inspector_main/RenderingOptions.ts +1 -1
  137. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +1 -1
  138. package/front_end/entrypoints/js_app/js_app.ts +3 -3
  139. package/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts +1 -1
  140. package/front_end/entrypoints/main/GlobalAiButton.test.ts +132 -0
  141. package/front_end/entrypoints/main/GlobalAiButton.ts +141 -0
  142. package/front_end/entrypoints/main/MainImpl.test.ts +27 -0
  143. package/front_end/entrypoints/main/MainImpl.ts +179 -47
  144. package/front_end/entrypoints/main/globalAiButton.css +72 -0
  145. package/front_end/entrypoints/main/main-meta.ts +82 -42
  146. package/front_end/entrypoints/main/main.ts +2 -0
  147. package/front_end/entrypoints/node_app/NodeConnectionsPanel.ts +6 -6
  148. package/front_end/entrypoints/node_app/NodeMain.ts +8 -7
  149. package/front_end/entrypoints/node_app/node_app.ts +5 -5
  150. package/front_end/entrypoints/wasmparser_worker/WasmParserWorker.ts +1 -1
  151. package/front_end/entrypoints/worker_app/WorkerMain.ts +1 -1
  152. package/front_end/generated/Deprecation.ts +7 -29
  153. package/front_end/generated/InspectorBackendCommands.js +183 -167
  154. package/front_end/generated/SupportedCSSProperties.js +252 -166
  155. package/front_end/generated/protocol-mapping.d.ts +687 -608
  156. package/front_end/generated/protocol-proxy-api.d.ts +782 -672
  157. package/front_end/generated/protocol.ts +11862 -11509
  158. package/front_end/global_typings/global_defs.d.ts +5 -0
  159. package/front_end/legacy_test_runner/accessibility_test_runner/accessibility_test_runner.js +1 -1
  160. package/front_end/legacy_test_runner/application_test_runner/CacheStorageTestRunner.js +1 -1
  161. package/front_end/legacy_test_runner/application_test_runner/IndexedDBTestRunner.js +1 -1
  162. package/front_end/legacy_test_runner/application_test_runner/ResourceTreeTestRunner.js +1 -1
  163. package/front_end/legacy_test_runner/application_test_runner/ResourcesTestRunner.js +1 -1
  164. package/front_end/legacy_test_runner/application_test_runner/ServiceWorkersTestRunner.js +1 -1
  165. package/front_end/legacy_test_runner/application_test_runner/StorageTestRunner.js +1 -1
  166. package/front_end/legacy_test_runner/axe_core_test_runner/axe_core_test_runner.js +1 -1
  167. package/front_end/legacy_test_runner/bindings_test_runner/AutomappingTestRunner.js +1 -1
  168. package/front_end/legacy_test_runner/bindings_test_runner/BindingsTestRunner.js +1 -1
  169. package/front_end/legacy_test_runner/bindings_test_runner/IsolatedFilesystemTestRunner.js +1 -1
  170. package/front_end/legacy_test_runner/bindings_test_runner/OverridesTestRunner.js +1 -1
  171. package/front_end/legacy_test_runner/bindings_test_runner/PersistenceTestRunner.js +1 -1
  172. package/front_end/legacy_test_runner/console_test_runner/console_test_runner.js +20 -20
  173. package/front_end/legacy_test_runner/coverage_test_runner/coverage_test_runner.js +11 -11
  174. package/front_end/legacy_test_runner/data_grid_test_runner/data_grid_test_runner.js +1 -1
  175. package/front_end/legacy_test_runner/device_mode_test_runner/device_mode_test_runner.js +1 -1
  176. package/front_end/legacy_test_runner/elements_test_runner/EditDOMTestRunner.js +1 -1
  177. package/front_end/legacy_test_runner/elements_test_runner/ElementsPanelShadowSelectionOnRefreshTestRunner.js +1 -1
  178. package/front_end/legacy_test_runner/elements_test_runner/ElementsTestRunner.js +6 -80
  179. package/front_end/legacy_test_runner/elements_test_runner/SetOuterHTMLTestRunner.js +1 -1
  180. package/front_end/legacy_test_runner/elements_test_runner/StylesUpdateLinksTestRunner.js +1 -1
  181. package/front_end/legacy_test_runner/extensions_test_runner/ExtensionsNetworkTestRunner.js +1 -1
  182. package/front_end/legacy_test_runner/extensions_test_runner/ExtensionsTestRunner.js +1 -1
  183. package/front_end/legacy_test_runner/heap_profiler_test_runner/heap_profiler_test_runner.js +2 -2
  184. package/front_end/legacy_test_runner/layers_test_runner/layers_test_runner.js +1 -1
  185. package/front_end/legacy_test_runner/network_test_runner/network_test_runner.js +1 -1
  186. package/front_end/legacy_test_runner/performance_test_runner/TimelineDataTestRunner.js +1 -1
  187. package/front_end/legacy_test_runner/performance_test_runner/TimelineTestRunner.js +1 -10
  188. package/front_end/legacy_test_runner/sdk_test_runner/sdk_test_runner.js +1 -1
  189. package/front_end/legacy_test_runner/security_test_runner/security_test_runner.js +1 -1
  190. package/front_end/legacy_test_runner/sources_test_runner/AutocompleteTestRunner.js +1 -1
  191. package/front_end/legacy_test_runner/sources_test_runner/DebuggerTestRunner.js +4 -4
  192. package/front_end/legacy_test_runner/sources_test_runner/EditorTestRunner.js +1 -1
  193. package/front_end/legacy_test_runner/sources_test_runner/LiveEditTestRunner.js +1 -1
  194. package/front_end/legacy_test_runner/sources_test_runner/SearchTestRunner.js +1 -1
  195. package/front_end/legacy_test_runner/sources_test_runner/SourcesTestRunner.js +2 -2
  196. package/front_end/legacy_test_runner/test_runner/TestRunner.js +45 -45
  197. package/front_end/legacy_test_runner/test_runner/test_runner.js +4 -4
  198. package/front_end/models/ai_assistance/AiHistoryStorage.snapshot.txt +66 -0
  199. package/front_end/models/ai_assistance/AiHistoryStorage.test.ts +82 -3
  200. package/front_end/models/ai_assistance/AiHistoryStorage.ts +95 -6
  201. package/front_end/models/ai_assistance/AiUtils.ts +1 -1
  202. package/front_end/models/ai_assistance/ConversationHandler.test.ts +355 -0
  203. package/front_end/models/ai_assistance/ConversationHandler.ts +380 -0
  204. package/front_end/models/ai_assistance/ExtensionScope.ts +1 -4
  205. package/front_end/models/ai_assistance/README.md +79 -0
  206. package/front_end/models/ai_assistance/agents/AiAgent.test.ts +22 -1
  207. package/front_end/models/ai_assistance/agents/AiAgent.ts +76 -95
  208. package/front_end/models/ai_assistance/agents/FileAgent.test.ts +3 -2
  209. package/front_end/models/ai_assistance/agents/FileAgent.ts +1 -1
  210. package/front_end/models/ai_assistance/agents/NetworkAgent.ts +7 -7
  211. package/front_end/models/ai_assistance/agents/PerformanceAgent.test.ts +591 -62
  212. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +1111 -117
  213. package/front_end/models/ai_assistance/agents/PerformanceAnnotationsAgent.test.ts +4 -2
  214. package/front_end/models/ai_assistance/agents/PerformanceAnnotationsAgent.ts +75 -5
  215. package/front_end/models/ai_assistance/agents/StylingAgent.test.ts +166 -507
  216. package/front_end/models/ai_assistance/agents/StylingAgent.ts +125 -319
  217. package/front_end/models/ai_assistance/ai_assistance.ts +2 -1
  218. package/front_end/models/ai_assistance/data_formatters/FileFormatter.test.ts +3 -2
  219. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +725 -0
  220. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.test.ts +249 -274
  221. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +494 -83
  222. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +556 -0
  223. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.test.ts +92 -0
  224. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +359 -0
  225. package/front_end/models/ai_assistance/debug.ts +1 -1
  226. package/front_end/models/ai_assistance/injected.ts +1 -1
  227. package/front_end/models/ai_code_completion/AiCodeCompletion.test.ts +328 -0
  228. package/front_end/models/ai_code_completion/AiCodeCompletion.ts +289 -0
  229. package/front_end/models/ai_code_completion/ai_code_completion.ts +6 -0
  230. package/front_end/models/ai_code_completion/debug.ts +30 -0
  231. package/front_end/models/autofill_manager/AutofillManager.test.ts +0 -6
  232. package/front_end/models/autofill_manager/AutofillManager.ts +16 -9
  233. package/front_end/models/bindings/CSSWorkspaceBinding.ts +0 -4
  234. package/front_end/models/bindings/CompilerScriptMapping.test.ts +8 -4
  235. package/front_end/models/bindings/CompilerScriptMapping.ts +12 -5
  236. package/front_end/models/bindings/DebuggerLanguagePlugins.test.ts +7 -2
  237. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +33 -24
  238. package/front_end/models/bindings/DebuggerWorkspaceBinding.test.ts +95 -3
  239. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +94 -21
  240. package/front_end/models/bindings/DefaultScriptMapping.test.ts +3 -2
  241. package/front_end/models/bindings/FileUtils.test.ts +1 -10
  242. package/front_end/models/bindings/FileUtils.ts +6 -22
  243. package/front_end/models/bindings/LiveLocation.ts +0 -5
  244. package/front_end/models/bindings/PresentationConsoleMessageHelper.test.ts +7 -2
  245. package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +0 -4
  246. package/front_end/models/bindings/ResourceMapping.test.ts +7 -2
  247. package/front_end/models/bindings/ResourceMapping.ts +0 -4
  248. package/front_end/models/bindings/ResourceScriptMapping.test.ts +2 -1
  249. package/front_end/models/bindings/ResourceScriptMapping.ts +4 -4
  250. package/front_end/models/bindings/SASSSourceMapping.ts +1 -1
  251. package/front_end/models/bindings/StylesSourceMapping.ts +0 -5
  252. package/front_end/models/bindings/bindings.ts +0 -2
  253. package/front_end/models/breakpoints/BreakpointManager.test.ts +9 -2
  254. package/front_end/models/cpu_profile/CPUProfileDataModel.ts +4 -2
  255. package/front_end/models/elements/ElementUpdateRecord.ts +101 -0
  256. package/front_end/models/elements/elements.ts +9 -0
  257. package/front_end/models/emulation/DeviceModeModel.ts +6 -22
  258. package/front_end/models/emulation/EmulatedDevices.ts +12 -12
  259. package/front_end/models/extensions/ExtensionAPI.ts +9 -5
  260. package/front_end/models/extensions/ExtensionPanel.ts +5 -2
  261. package/front_end/models/extensions/ExtensionServer.test.ts +122 -16
  262. package/front_end/models/extensions/ExtensionServer.ts +114 -31
  263. package/front_end/models/extensions/ExtensionView.ts +1 -1
  264. package/front_end/models/extensions/LanguageExtensionEndpoint.ts +14 -7
  265. package/front_end/models/har/HARFormat.ts +1 -1
  266. package/front_end/models/har/Importer.test.ts +40 -0
  267. package/front_end/models/har/Importer.ts +35 -1
  268. package/front_end/models/har/Writer.test.ts +3 -2
  269. package/front_end/models/har/Writer.ts +2 -2
  270. package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -1
  271. package/front_end/models/issues_manager/ClientHintIssue.ts +1 -1
  272. package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +5 -5
  273. package/front_end/models/issues_manager/CookieIssue.ts +2 -2
  274. package/front_end/models/issues_manager/CorsIssue.ts +3 -3
  275. package/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.ts +2 -2
  276. package/front_end/models/issues_manager/{SelectElementAccessibilityIssue.test.ts → ElementAccessibilityIssue.test.ts} +22 -21
  277. package/front_end/models/issues_manager/{SelectElementAccessibilityIssue.ts → ElementAccessibilityIssue.ts} +29 -21
  278. package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +1 -1
  279. package/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.ts +1 -1
  280. package/front_end/models/issues_manager/GenericIssue.ts +4 -4
  281. package/front_end/models/issues_manager/HeavyAdIssue.ts +1 -1
  282. package/front_end/models/issues_manager/Issue.ts +6 -6
  283. package/front_end/models/issues_manager/IssuesManager.ts +8 -3
  284. package/front_end/models/issues_manager/LowTextContrastIssue.ts +1 -1
  285. package/front_end/models/issues_manager/MarkdownIssueDescription.ts +1 -1
  286. package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
  287. package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +2 -2
  288. package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
  289. package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +3 -3
  290. package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +1 -1
  291. package/front_end/models/issues_manager/SharedDictionaryIssue.ts +1 -1
  292. package/front_end/models/issues_manager/UnencodedDigestIssue.test.ts +49 -0
  293. package/front_end/models/issues_manager/UnencodedDigestIssue.ts +88 -0
  294. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md +1 -1
  295. package/front_end/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md +1 -3
  296. package/front_end/models/issues_manager/descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +3 -0
  297. package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestLength.md +12 -0
  298. package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestType.md +17 -0
  299. package/front_end/models/issues_manager/descriptions/unencodedDigestMalformedDictionary.md +14 -0
  300. package/front_end/models/issues_manager/descriptions/unencodedDigestUnknownAlgorithm.md +15 -0
  301. package/front_end/models/issues_manager/descriptions/userReidentificationBlocked.md +1 -1
  302. package/front_end/models/issues_manager/issues_manager.ts +4 -2
  303. package/front_end/models/javascript_metadata/NativeFunctions.js +201 -127
  304. package/front_end/models/live-metrics/web-vitals-injected/OnEachInteraction.ts +1 -1
  305. package/front_end/models/live-metrics/web-vitals-injected/rollup.config.mjs +1 -1
  306. package/front_end/models/logs/NetworkLog.ts +74 -83
  307. package/front_end/models/logs/logs-meta.ts +4 -4
  308. package/front_end/models/persistence/AutomaticFileSystemManager.test.ts +0 -39
  309. package/front_end/models/persistence/AutomaticFileSystemManager.ts +14 -21
  310. package/front_end/models/persistence/EditFileSystemView.ts +6 -6
  311. package/front_end/models/persistence/IsolatedFileSystem.ts +27 -9
  312. package/front_end/models/persistence/IsolatedFileSystemManager.ts +16 -3
  313. package/front_end/models/persistence/NetworkPersistenceManager.ts +7 -3
  314. package/front_end/models/persistence/PersistenceAction.test.ts +10 -7
  315. package/front_end/models/persistence/PersistenceActions.ts +26 -15
  316. package/front_end/models/persistence/PersistenceImpl.test.ts +2 -1
  317. package/front_end/models/persistence/PersistenceImpl.ts +7 -4
  318. package/front_end/models/persistence/PersistenceUtils.ts +10 -7
  319. package/front_end/models/persistence/PlatformFileSystem.ts +11 -2
  320. package/front_end/models/persistence/WorkspaceSettingsTab.ts +6 -6
  321. package/front_end/models/persistence/editFileSystemView.css +17 -15
  322. package/front_end/models/persistence/persistence-meta.ts +10 -10
  323. package/front_end/models/persistence/workspaceSettingsTab.css +29 -27
  324. package/front_end/models/project_settings/ProjectSettingsModel.ts +2 -2
  325. package/front_end/models/source_map_scopes/NamesResolver.test.ts +3 -2
  326. package/front_end/models/source_map_scopes/NamesResolver.ts +1 -1
  327. package/front_end/models/source_map_scopes/ScopeChainModel.test.ts +2 -1
  328. package/front_end/models/stack_trace/README.md +14 -0
  329. package/front_end/models/stack_trace/StackTrace.ts +35 -0
  330. package/front_end/models/stack_trace/StackTraceImpl.test.ts +74 -0
  331. package/front_end/models/stack_trace/StackTraceImpl.ts +82 -0
  332. package/front_end/models/stack_trace/StackTraceModel.test.ts +296 -0
  333. package/front_end/models/stack_trace/StackTraceModel.ts +127 -0
  334. package/front_end/models/stack_trace/Trie.test.ts +129 -0
  335. package/front_end/models/stack_trace/Trie.ts +154 -0
  336. package/front_end/models/stack_trace/stack_trace.ts +9 -0
  337. package/front_end/models/stack_trace/stack_trace_impl.ts +13 -0
  338. package/front_end/models/text_utils/ContentProvider.ts +1 -3
  339. package/front_end/models/text_utils/StaticContentProvider.test.ts +1 -1
  340. package/front_end/models/text_utils/StaticContentProvider.ts +1 -5
  341. package/front_end/models/text_utils/TextUtils.ts +2 -3
  342. package/front_end/models/trace/LanternComputationData.ts +1 -0
  343. package/front_end/models/trace/ModelImpl.ts +18 -7
  344. package/front_end/models/trace/Processor.test.ts +15 -14
  345. package/front_end/models/trace/Processor.ts +49 -32
  346. package/front_end/models/trace/extras/ScriptDuplication.test.ts +13 -10
  347. package/front_end/models/trace/extras/StackTraceForEvent.test.ts +10 -8
  348. package/front_end/models/trace/extras/ThirdParties.ts +2 -3
  349. package/front_end/models/trace/extras/TraceTree.ts +7 -6
  350. package/front_end/models/trace/extras/extras.ts +0 -2
  351. package/front_end/models/trace/handlers/AnimationFramesHandler.test.ts +5 -5
  352. package/front_end/models/trace/handlers/AnimationFramesHandler.ts +10 -0
  353. package/front_end/models/trace/handlers/ExtensionTraceDataHandler.test.ts +177 -85
  354. package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +28 -27
  355. package/front_end/models/trace/handlers/FramesHandler.test.ts +2 -7
  356. package/front_end/models/trace/handlers/FramesHandler.ts +46 -37
  357. package/front_end/models/trace/handlers/ImagePaintingHandler.test.ts +41 -0
  358. package/front_end/models/trace/handlers/ImagePaintingHandler.ts +44 -1
  359. package/front_end/models/trace/handlers/InitiatorsHandler.test.ts +62 -15
  360. package/front_end/models/trace/handlers/InitiatorsHandler.ts +24 -0
  361. package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +6 -18
  362. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +21 -17
  363. package/front_end/models/trace/handlers/MetaHandler.test.ts +12 -0
  364. package/front_end/models/trace/handlers/MetaHandler.ts +5 -4
  365. package/front_end/models/trace/handlers/NetworkRequestsHandler.test.ts +21 -21
  366. package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +79 -32
  367. package/front_end/models/trace/handlers/PageLoadMetricsHandler.test.ts +6 -18
  368. package/front_end/models/trace/handlers/RendererHandler.test.ts +26 -39
  369. package/front_end/models/trace/handlers/RendererHandler.ts +10 -17
  370. package/front_end/models/trace/handlers/SamplesHandler.test.ts +3 -4
  371. package/front_end/models/trace/handlers/SamplesHandler.ts +13 -12
  372. package/front_end/models/trace/handlers/ScriptsHandler.test.ts +1 -1
  373. package/front_end/models/trace/handlers/ScriptsHandler.ts +8 -4
  374. package/front_end/models/trace/handlers/SelectorStatsHandler.test.ts +1 -3
  375. package/front_end/models/trace/handlers/SelectorStatsHandler.ts +65 -0
  376. package/front_end/models/trace/handlers/UserInteractionsHandler.test.ts +4 -2
  377. package/front_end/models/trace/handlers/UserInteractionsHandler.ts +4 -2
  378. package/front_end/models/trace/handlers/UserTimingsHandler.test.ts +326 -0
  379. package/front_end/models/trace/handlers/UserTimingsHandler.ts +61 -24
  380. package/front_end/models/trace/handlers/helpers.test.ts +7 -6
  381. package/front_end/models/trace/handlers/helpers.ts +19 -14
  382. package/front_end/models/trace/handlers/types.ts +5 -1
  383. package/front_end/models/trace/helpers/SamplesIntegrator.test.ts +3 -3
  384. package/front_end/models/trace/helpers/SamplesIntegrator.ts +24 -33
  385. package/front_end/models/trace/helpers/SyntheticEvents.ts +2 -2
  386. package/front_end/models/trace/helpers/Timing.ts +66 -3
  387. package/front_end/models/trace/helpers/Trace.test.ts +6 -7
  388. package/front_end/models/trace/helpers/Trace.ts +47 -19
  389. package/front_end/models/trace/helpers/TreeHelpers.test.ts +0 -8
  390. package/front_end/models/trace/helpers/TreeHelpers.ts +1 -1
  391. package/front_end/models/trace/insights/CLSCulprits.test.ts +10 -7
  392. package/front_end/models/trace/insights/CLSCulprits.ts +85 -23
  393. package/front_end/models/trace/insights/Cache.ts +12 -0
  394. package/front_end/models/trace/insights/Common.test.ts +3 -3
  395. package/front_end/models/trace/insights/Common.ts +56 -22
  396. package/front_end/models/trace/insights/DOMSize.test.ts +4 -1
  397. package/front_end/models/trace/insights/DOMSize.ts +48 -1
  398. package/front_end/models/trace/insights/DocumentLatency.test.ts +5 -1
  399. package/front_end/models/trace/insights/DocumentLatency.ts +59 -4
  400. package/front_end/models/trace/insights/DuplicatedJavaScript.test.ts +2 -3
  401. package/front_end/models/trace/insights/DuplicatedJavaScript.ts +15 -4
  402. package/front_end/models/trace/insights/FontDisplay.test.ts +1 -1
  403. package/front_end/models/trace/insights/FontDisplay.ts +8 -0
  404. package/front_end/models/trace/insights/ForcedReflow.ts +25 -4
  405. package/front_end/models/trace/insights/{InteractionToNextPaint.test.ts → INPBreakdown.test.ts} +2 -2
  406. package/front_end/models/trace/insights/{InteractionToNextPaint.ts → INPBreakdown.ts} +63 -16
  407. package/front_end/models/trace/insights/ImageDelivery.ts +39 -7
  408. package/front_end/models/trace/insights/LCPBreakdown.test.ts +100 -0
  409. package/front_end/models/trace/insights/LCPBreakdown.ts +255 -0
  410. package/front_end/models/trace/insights/LCPDiscovery.ts +84 -8
  411. package/front_end/models/trace/insights/LegacyJavaScript.ts +14 -4
  412. package/front_end/models/trace/insights/Models.ts +2 -2
  413. package/front_end/models/trace/insights/ModernHTTP.test.ts +3 -2
  414. package/front_end/models/trace/insights/ModernHTTP.ts +35 -18
  415. package/front_end/models/trace/insights/NetworkDependencyTree.test.ts +10 -1
  416. package/front_end/models/trace/insights/NetworkDependencyTree.ts +41 -13
  417. package/front_end/models/trace/insights/RenderBlocking.test.ts +8 -12
  418. package/front_end/models/trace/insights/RenderBlocking.ts +13 -1
  419. package/front_end/models/trace/insights/SlowCSSSelector.test.ts +12 -34
  420. package/front_end/models/trace/insights/SlowCSSSelector.ts +46 -27
  421. package/front_end/models/trace/insights/ThirdParties.test.ts +1 -1
  422. package/front_end/models/trace/insights/ThirdParties.ts +36 -0
  423. package/front_end/models/trace/insights/Viewport.test.ts +16 -1
  424. package/front_end/models/trace/insights/Viewport.ts +41 -3
  425. package/front_end/models/trace/insights/types.ts +5 -2
  426. package/front_end/models/trace/lantern/core/NetworkAnalyzer.test.ts +4 -0
  427. package/front_end/models/trace/lantern/graph/BaseNode.ts +1 -1
  428. package/front_end/models/trace/lantern/simulation/SimulationTimingMap.ts +1 -1
  429. package/front_end/models/trace/trace.ts +0 -2
  430. package/front_end/models/trace/types/Configuration.ts +8 -0
  431. package/front_end/models/trace/types/Extensions.ts +24 -3
  432. package/front_end/models/trace/types/File.ts +5 -2
  433. package/front_end/models/trace/types/Overlays.ts +140 -0
  434. package/front_end/models/trace/types/Timing.ts +1 -0
  435. package/front_end/models/trace/types/TraceEvents.test.ts +2 -1
  436. package/front_end/models/trace/types/TraceEvents.ts +98 -62
  437. package/front_end/models/trace/types/types.ts +1 -0
  438. package/front_end/models/workspace/FileManager.ts +5 -3
  439. package/front_end/models/{bindings → workspace}/IgnoreListManager.test.ts +11 -7
  440. package/front_end/models/{bindings → workspace}/IgnoreListManager.ts +36 -33
  441. package/front_end/models/workspace/UISourceCode.test.ts +18 -17
  442. package/front_end/models/workspace/UISourceCode.ts +17 -7
  443. package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
  444. package/front_end/models/workspace/workspace.ts +2 -0
  445. package/front_end/models/workspace_diff/WorkspaceDiff.test.ts +2 -0
  446. package/front_end/models/workspace_diff/WorkspaceDiff.ts +7 -2
  447. package/front_end/panels/accessibility/ARIAAttributesView.test.ts +101 -0
  448. package/front_end/panels/accessibility/ARIAAttributesView.ts +16 -4
  449. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +12 -9
  450. package/front_end/panels/accessibility/AccessibilityNodeView.ts +31 -28
  451. package/front_end/panels/accessibility/AccessibilitySidebarView.ts +8 -12
  452. package/front_end/panels/accessibility/AccessibilityStrings.ts +87 -87
  453. package/front_end/panels/accessibility/AccessibilitySubPane.ts +6 -6
  454. package/front_end/panels/accessibility/SourceOrderView.ts +95 -61
  455. package/front_end/panels/accessibility/accessibilityProperties.css +5 -0
  456. package/front_end/panels/ai_assistance/AiAssistancePanel.snapshot.txt +32 -0
  457. package/front_end/panels/ai_assistance/AiAssistancePanel.test.ts +465 -377
  458. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +289 -339
  459. package/front_end/panels/ai_assistance/PatchWidget.ts +30 -29
  460. package/front_end/panels/ai_assistance/SelectWorkspaceDialog.test.ts +11 -1
  461. package/front_end/panels/ai_assistance/SelectWorkspaceDialog.ts +29 -19
  462. package/front_end/panels/ai_assistance/aiAssistancePanel.css +1 -0
  463. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +40 -20
  464. package/front_end/panels/ai_assistance/components/ChatView.test.ts +1 -0
  465. package/front_end/panels/ai_assistance/components/ChatView.ts +55 -44
  466. package/front_end/panels/ai_assistance/components/ExploreWidget.ts +10 -24
  467. package/front_end/panels/ai_assistance/components/UserActionRow.test.ts +4 -0
  468. package/front_end/panels/ai_assistance/components/UserActionRow.ts +25 -3
  469. package/front_end/panels/ai_assistance/components/chatView.css +0 -9
  470. package/front_end/panels/ai_assistance/components/exploreWidget.css +104 -102
  471. package/front_end/panels/ai_assistance/components/userActionRow.css +95 -94
  472. package/front_end/panels/ai_assistance/selectWorkspaceDialog.css +70 -69
  473. package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -10
  474. package/front_end/panels/animation/AnimationTimeline.test.ts +6 -13
  475. package/front_end/panels/animation/AnimationTimeline.ts +183 -169
  476. package/front_end/panels/animation/AnimationUI.ts +4 -4
  477. package/front_end/panels/animation/animation.ts +0 -2
  478. package/front_end/panels/animation/animationTimeline.css +0 -67
  479. package/front_end/panels/application/AppManifestView.test.ts +21 -0
  480. package/front_end/panels/application/AppManifestView.ts +158 -139
  481. package/front_end/panels/application/ApplicationPanelSidebar.test.ts +13 -8
  482. package/front_end/panels/application/ApplicationPanelSidebar.ts +53 -54
  483. package/front_end/panels/application/BackForwardCacheTreeElement.ts +1 -1
  484. package/front_end/panels/application/BackgroundServiceView.test.ts +4 -8
  485. package/front_end/panels/application/BackgroundServiceView.ts +46 -44
  486. package/front_end/panels/application/CookieItemsView.ts +13 -14
  487. package/front_end/panels/application/DOMStorageItemsView.ts +5 -5
  488. package/front_end/panels/application/ExtensionStorageItemsView.ts +3 -3
  489. package/front_end/panels/application/IndexedDBModel.test.ts +2 -2
  490. package/front_end/panels/application/IndexedDBModel.ts +3 -0
  491. package/front_end/panels/application/IndexedDBViews.ts +58 -32
  492. package/front_end/panels/application/InterestGroupStorageModel.ts +3 -0
  493. package/front_end/panels/application/InterestGroupStorageView.ts +4 -4
  494. package/front_end/panels/application/InterestGroupTreeElement.ts +1 -1
  495. package/front_end/panels/application/KeyValueStorageItemsView.ts +10 -10
  496. package/front_end/panels/application/OpenedWindowDetailsView.ts +18 -18
  497. package/front_end/panels/application/PreloadingTreeElement.ts +5 -5
  498. package/front_end/panels/application/ReportingApiTreeElement.ts +1 -1
  499. package/front_end/panels/application/ReportingApiView.test.ts +161 -30
  500. package/front_end/panels/application/ReportingApiView.ts +153 -50
  501. package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +5 -5
  502. package/front_end/panels/application/ServiceWorkerCacheViews.ts +20 -17
  503. package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +7 -7
  504. package/front_end/panels/application/ServiceWorkersView.ts +40 -76
  505. package/front_end/panels/application/SharedStorageEventsView.test.ts +2 -2
  506. package/front_end/panels/application/SharedStorageEventsView.ts +10 -20
  507. package/front_end/panels/application/SharedStorageItemsView.ts +11 -11
  508. package/front_end/panels/application/SharedStorageListTreeElement.ts +1 -1
  509. package/front_end/panels/application/SharedStorageModel.ts +3 -0
  510. package/front_end/panels/application/StorageBucketsTreeElement.test.ts +5 -4
  511. package/front_end/panels/application/StorageBucketsTreeElement.ts +4 -4
  512. package/front_end/panels/application/StorageItemsToolbar.ts +7 -7
  513. package/front_end/panels/application/StorageView.test.ts +5 -1
  514. package/front_end/panels/application/StorageView.ts +15 -13
  515. package/front_end/panels/application/application-meta.ts +7 -7
  516. package/front_end/panels/application/application.ts +0 -2
  517. package/front_end/panels/application/components/BackForwardCacheStrings.ts +5 -0
  518. package/front_end/panels/application/components/BackForwardCacheView.ts +11 -37
  519. package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +1 -0
  520. package/front_end/panels/application/components/EndpointsGrid.ts +6 -2
  521. package/front_end/panels/application/components/FrameDetailsView.test.ts +4 -2
  522. package/front_end/panels/application/components/FrameDetailsView.ts +88 -57
  523. package/front_end/panels/application/components/InterestGroupAccessGrid.ts +9 -10
  524. package/front_end/panels/application/components/OriginTrialTreeView.ts +13 -22
  525. package/front_end/panels/application/components/PermissionsPolicySection.ts +11 -16
  526. package/front_end/panels/application/components/ProtocolHandlersView.ts +10 -10
  527. package/front_end/panels/application/components/ReportsGrid.ts +10 -11
  528. package/front_end/panels/application/components/SharedStorageAccessGrid.test.ts +4 -4
  529. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +107 -101
  530. package/front_end/panels/application/components/SharedStorageMetadataView.ts +8 -8
  531. package/front_end/panels/application/components/StackTrace.ts +6 -12
  532. package/front_end/panels/application/components/StorageMetadataView.ts +22 -26
  533. package/front_end/panels/application/components/TrustTokensView.ts +3 -3
  534. package/front_end/panels/application/components/frameDetailsReportView.css +1 -1
  535. package/front_end/panels/application/components/sharedStorageAccessGrid.css +19 -17
  536. package/front_end/panels/application/preloading/PreloadingView.ts +29 -24
  537. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +9 -9
  538. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +22 -22
  539. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +28 -29
  540. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +5 -7
  541. package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.test.ts +2 -2
  542. package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +4 -4
  543. package/front_end/panels/application/preloading/components/PreloadingString.ts +34 -34
  544. package/front_end/panels/application/preloading/components/RuleSetDetailsView.test.ts +28 -1
  545. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +4 -10
  546. package/front_end/panels/application/preloading/components/RuleSetGrid.test.ts +21 -0
  547. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +10 -10
  548. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +22 -23
  549. package/front_end/panels/application/resourcesSidebar.css +0 -4
  550. package/front_end/panels/autofill/AutofillView.test.ts +188 -259
  551. package/front_end/panels/autofill/AutofillView.ts +207 -217
  552. package/front_end/panels/autofill/autofill-meta.ts +3 -4
  553. package/front_end/panels/autofill/autofillView.css +85 -82
  554. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.test.ts +179 -0
  555. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +146 -35
  556. package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +27 -27
  557. package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +3 -2
  558. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +16 -14
  559. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +17 -17
  560. package/front_end/panels/browser_debugger/browser_debugger.ts +2 -0
  561. package/front_end/panels/changes/ChangesSidebar.ts +7 -7
  562. package/front_end/panels/changes/ChangesView.ts +6 -5
  563. package/front_end/panels/changes/CombinedDiffView.test.ts +2 -0
  564. package/front_end/panels/changes/CombinedDiffView.ts +2 -2
  565. package/front_end/panels/common/AiCodeCompletionDisclaimer.test.ts +57 -0
  566. package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +186 -0
  567. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.test.ts +85 -0
  568. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +139 -0
  569. package/front_end/panels/common/AiCodeCompletionTeaser.test.ts +98 -0
  570. package/front_end/panels/common/AiCodeCompletionTeaser.ts +258 -0
  571. package/front_end/panels/common/FreDialog.ts +139 -0
  572. package/front_end/panels/common/aiCodeCompletionDisclaimer.css +57 -0
  573. package/front_end/panels/common/aiCodeCompletionSummaryToolbar.css +101 -0
  574. package/front_end/panels/common/aiCodeCompletionTeaser.css +42 -0
  575. package/front_end/panels/common/common.css +0 -83
  576. package/front_end/panels/common/common.ts +8 -107
  577. package/front_end/panels/common/freDialog.css +88 -0
  578. package/front_end/panels/console/ConsoleContextSelector.ts +5 -5
  579. package/front_end/panels/console/ConsoleFormat.test.ts +1 -1
  580. package/front_end/panels/console/ConsolePanel.ts +1 -2
  581. package/front_end/panels/console/ConsolePinPane.ts +9 -9
  582. package/front_end/panels/console/ConsolePrompt.test.ts +47 -1
  583. package/front_end/panels/console/ConsolePrompt.ts +188 -19
  584. package/front_end/panels/console/ConsoleSidebar.test.ts +130 -0
  585. package/front_end/panels/console/ConsoleSidebar.ts +170 -207
  586. package/front_end/panels/console/ConsoleView.test.ts +4 -4
  587. package/front_end/panels/console/ConsoleView.ts +146 -54
  588. package/front_end/panels/console/ConsoleViewMessage.test.ts +1 -1
  589. package/front_end/panels/console/ConsoleViewMessage.ts +66 -71
  590. package/front_end/panels/console/console-meta.ts +27 -27
  591. package/front_end/panels/console/consoleSidebar.css +2 -0
  592. package/front_end/panels/console/consoleView.css +22 -15
  593. package/front_end/panels/console_counters/WarningErrorCounter.ts +133 -100
  594. package/front_end/panels/coverage/CoverageDecorationManager.test.ts +2 -1
  595. package/front_end/panels/coverage/CoverageListView.ts +30 -30
  596. package/front_end/panels/coverage/CoverageView.test.ts +3 -2
  597. package/front_end/panels/coverage/CoverageView.ts +35 -34
  598. package/front_end/panels/coverage/coverage-meta.ts +7 -7
  599. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +49 -49
  600. package/front_end/panels/css_overview/CSSOverviewPanel.test.ts +3 -3
  601. package/front_end/panels/css_overview/CSSOverviewPanel.ts +1 -1
  602. package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +3 -3
  603. package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +3 -3
  604. package/front_end/panels/css_overview/CSSOverviewStartView.ts +8 -8
  605. package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +7 -7
  606. package/front_end/panels/css_overview/cssOverviewCompletedView.css +289 -287
  607. package/front_end/panels/css_overview/cssOverviewSidebarPanel.css +43 -42
  608. package/front_end/panels/css_overview/cssOverviewStartView.css +68 -66
  609. package/front_end/panels/css_overview/css_overview-meta.ts +2 -2
  610. package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +14 -14
  611. package/front_end/panels/developer_resources/DeveloperResourcesView.ts +5 -5
  612. package/front_end/panels/developer_resources/developerResourcesListView.css +19 -18
  613. package/front_end/panels/developer_resources/developerResourcesView.css +32 -30
  614. package/front_end/panels/elements/AccessibilityTreeView.ts +2 -1
  615. package/front_end/panels/elements/CSSRuleValidator.test.ts +39 -0
  616. package/front_end/panels/elements/CSSRuleValidator.ts +41 -37
  617. package/front_end/panels/elements/CSSRuleValidatorHelper.ts +8 -0
  618. package/front_end/panels/elements/CSSValueTraceView.test.ts +2 -1
  619. package/front_end/panels/elements/CSSValueTraceView.ts +1 -2
  620. package/front_end/panels/elements/ClassesPaneWidget.ts +5 -3
  621. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +18 -9
  622. package/front_end/panels/elements/ComputedStyleWidget.ts +4 -3
  623. package/front_end/panels/elements/DOMLinkifier.ts +6 -4
  624. package/front_end/panels/elements/DOMTreeWidget.test.ts +58 -0
  625. package/front_end/panels/elements/ElementIssueUtils.ts +14 -9
  626. package/front_end/panels/elements/ElementStatePaneWidget.ts +3 -3
  627. package/front_end/panels/elements/ElementsPanel.test.ts +69 -2
  628. package/front_end/panels/elements/ElementsPanel.ts +105 -187
  629. package/front_end/panels/elements/ElementsSidebarPane.ts +1 -1
  630. package/front_end/panels/elements/ElementsTreeElement.test.ts +401 -0
  631. package/front_end/panels/elements/ElementsTreeElement.ts +434 -82
  632. package/front_end/panels/elements/ElementsTreeOutline.test.ts +9 -6
  633. package/front_end/panels/elements/ElementsTreeOutline.ts +425 -258
  634. package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +80 -0
  635. package/front_end/panels/elements/EventListenersWidget.test.ts +129 -0
  636. package/front_end/panels/elements/EventListenersWidget.ts +112 -78
  637. package/front_end/panels/elements/ImagePreviewPopover.ts +1 -1
  638. package/front_end/panels/elements/InspectElementModeController.test.ts +77 -2
  639. package/front_end/panels/elements/InspectElementModeController.ts +13 -2
  640. package/front_end/panels/elements/LayersWidget.ts +95 -63
  641. package/front_end/panels/elements/{components/LayoutPane.test.ts → LayoutPane.test.ts} +60 -49
  642. package/front_end/panels/elements/LayoutPane.ts +593 -0
  643. package/front_end/panels/elements/MarkerDecorator.ts +2 -2
  644. package/front_end/panels/elements/MetricsSidebarPane.ts +6 -6
  645. package/front_end/panels/elements/NodeStackTraceWidget.ts +16 -14
  646. package/front_end/panels/elements/PlatformFontsWidget.ts +8 -8
  647. package/front_end/panels/elements/PropertiesWidget.ts +2 -2
  648. package/front_end/panels/elements/PropertyRenderer.test.ts +1 -1
  649. package/front_end/panels/elements/PropertyRenderer.ts +8 -11
  650. package/front_end/panels/elements/ShortcutTreeElement.ts +157 -0
  651. package/front_end/panels/elements/StyleEditorWidget.ts +1 -1
  652. package/front_end/panels/elements/StylePropertiesSection.test.ts +10 -10
  653. package/front_end/panels/elements/StylePropertiesSection.ts +42 -44
  654. package/front_end/panels/elements/StylePropertyHighlighter.test.ts +32 -21
  655. package/front_end/panels/elements/StylePropertyHighlighter.ts +9 -11
  656. package/front_end/panels/elements/StylePropertyTreeElement.test.ts +111 -53
  657. package/front_end/panels/elements/StylePropertyTreeElement.ts +166 -100
  658. package/front_end/panels/elements/StylesSidebarPane.ts +47 -48
  659. package/front_end/panels/elements/TopLayerContainer.ts +8 -7
  660. package/front_end/panels/elements/WebCustomData.test.ts +2 -2
  661. package/front_end/panels/elements/components/AccessibilityTreeNode.ts +1 -1
  662. package/front_end/panels/elements/components/AdornerManager.ts +15 -0
  663. package/front_end/panels/elements/components/CSSHintDetailsView.ts +1 -1
  664. package/front_end/panels/elements/components/CSSPropertyDocsView.test.ts +101 -2
  665. package/front_end/panels/elements/components/CSSPropertyDocsView.ts +188 -5
  666. package/front_end/panels/elements/components/CSSPropertyIconResolver.test.ts +1 -1
  667. package/front_end/panels/elements/components/CSSPropertyIconResolver.ts +2 -2
  668. package/front_end/panels/elements/components/CSSVariableValueView.ts +5 -5
  669. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +2 -7
  670. package/front_end/panels/elements/components/ElementsTreeExpandButton.ts +1 -1
  671. package/front_end/panels/elements/components/QueryContainer.ts +1 -4
  672. package/front_end/panels/elements/components/components.ts +0 -4
  673. package/front_end/panels/elements/components/cssPropertyDocsView.css +12 -1
  674. package/front_end/panels/elements/components/cssVariableValueView.css +1 -0
  675. package/front_end/panels/elements/domLinkifier.css +36 -35
  676. package/front_end/panels/elements/elementStatePaneWidget.css +46 -45
  677. package/front_end/panels/elements/elements-meta.ts +4 -13
  678. package/front_end/panels/elements/elements.ts +4 -3
  679. package/front_end/panels/elements/elementsTreeOutline.css +2 -1
  680. package/front_end/panels/elements/layersWidget.css +2 -11
  681. package/front_end/panels/elements/layoutPane.css +145 -0
  682. package/front_end/panels/elements/metricsSidebarPane.css +1 -1
  683. package/front_end/panels/elements/nodeStackTraceWidget.css +5 -4
  684. package/front_end/panels/elements/platformFontsWidget.css +32 -31
  685. package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -2
  686. package/front_end/panels/elements/stylesSidebarPane.css +1 -0
  687. package/front_end/panels/emulation/DeviceModeToolbar.ts +13 -50
  688. package/front_end/panels/emulation/DeviceModeView.ts +3 -4
  689. package/front_end/panels/emulation/InspectedPagePlaceholder.ts +1 -1
  690. package/front_end/panels/emulation/MediaQueryInspector.ts +4 -2
  691. package/front_end/panels/emulation/emulation-meta.ts +7 -7
  692. package/front_end/panels/event_listeners/EventListenersView.test.ts +4 -4
  693. package/front_end/panels/event_listeners/EventListenersView.ts +34 -31
  694. package/front_end/panels/explain/PromptBuilder.test.ts +7 -2
  695. package/front_end/panels/explain/PromptBuilder.ts +3 -1
  696. package/front_end/panels/explain/components/ConsoleInsight.test.ts +14 -10
  697. package/front_end/panels/explain/components/ConsoleInsight.ts +13 -34
  698. package/front_end/panels/explain/explain-meta.ts +3 -3
  699. package/front_end/panels/issues/AffectedBlockedByResponseView.ts +4 -4
  700. package/front_end/panels/issues/AffectedCookiesView.ts +6 -6
  701. package/front_end/panels/issues/AffectedDescendantsWithinSelectElementView.ts +6 -6
  702. package/front_end/panels/issues/AffectedDirectivesView.ts +9 -9
  703. package/front_end/panels/issues/AffectedDocumentsInQuirksModeView.ts +4 -4
  704. package/front_end/panels/issues/AffectedElementsView.ts +1 -1
  705. package/front_end/panels/issues/AffectedElementsWithLowContrastView.ts +6 -6
  706. package/front_end/panels/issues/AffectedHeavyAdView.ts +7 -7
  707. package/front_end/panels/issues/AffectedMetadataAllowedSitesView.ts +1 -1
  708. package/front_end/panels/issues/AffectedResourcesView.ts +6 -6
  709. package/front_end/panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts +10 -10
  710. package/front_end/panels/issues/AffectedSourcesView.ts +1 -1
  711. package/front_end/panels/issues/AffectedTrackingSitesView.ts +1 -1
  712. package/front_end/panels/issues/CorsIssueDetailsView.ts +27 -27
  713. package/front_end/panels/issues/GenericIssueDetailsView.ts +3 -3
  714. package/front_end/panels/issues/HiddenIssuesRow.ts +55 -29
  715. package/front_end/panels/issues/IssueAggregator.ts +5 -11
  716. package/front_end/panels/issues/IssueKindView.ts +2 -2
  717. package/front_end/panels/issues/IssueView.ts +13 -13
  718. package/front_end/panels/issues/IssuesPane.ts +5 -4
  719. package/front_end/panels/issues/components/HideIssuesMenu.ts +1 -1
  720. package/front_end/panels/issues/issues-meta.ts +2 -2
  721. package/front_end/panels/js_timeline/js_timeline-meta.ts +6 -6
  722. package/front_end/panels/layer_viewer/LayerDetailsView.ts +43 -41
  723. package/front_end/panels/layer_viewer/LayerTreeOutline.ts +7 -7
  724. package/front_end/panels/layer_viewer/LayerViewHost.ts +1 -1
  725. package/front_end/panels/layer_viewer/Layers3DView.ts +19 -13
  726. package/front_end/panels/layer_viewer/PaintProfilerView.ts +9 -9
  727. package/front_end/panels/layer_viewer/TransformController.ts +14 -8
  728. package/front_end/panels/layer_viewer/layer_viewer-meta.ts +9 -9
  729. package/front_end/panels/layers/LayersPanel.ts +3 -3
  730. package/front_end/panels/layers/layers-meta.ts +2 -2
  731. package/front_end/panels/lighthouse/LighthouseController.ts +27 -27
  732. package/front_end/panels/lighthouse/LighthousePanel.ts +7 -7
  733. package/front_end/panels/lighthouse/LighthouseProtocolService.ts +31 -33
  734. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +4 -2
  735. package/front_end/panels/lighthouse/LighthouseReportSelector.ts +2 -4
  736. package/front_end/panels/lighthouse/LighthouseStartView.ts +4 -3
  737. package/front_end/panels/lighthouse/LighthouseStatusView.ts +31 -31
  738. package/front_end/panels/lighthouse/lighthouse-meta.ts +1 -1
  739. package/front_end/panels/lighthouse/lighthousePanel.css +9 -0
  740. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorController.ts +2 -2
  741. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +5 -6
  742. package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +6 -10
  743. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +3 -3
  744. package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +6 -6
  745. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +2 -2
  746. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +6 -7
  747. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplayUtils.ts +1 -1
  748. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
  749. package/front_end/panels/linear_memory_inspector/linear_memory_inspector-meta.ts +2 -2
  750. package/front_end/panels/media/EventDisplayTable.ts +5 -7
  751. package/front_end/panels/media/EventTimelineView.ts +4 -4
  752. package/front_end/panels/media/MainView.test.ts +1 -1
  753. package/front_end/panels/media/MainView.ts +4 -4
  754. package/front_end/panels/media/MediaModel.ts +2 -2
  755. package/front_end/panels/media/PlayerDetailView.ts +8 -8
  756. package/front_end/panels/media/PlayerListView.ts +8 -8
  757. package/front_end/panels/media/PlayerMessagesView.ts +15 -17
  758. package/front_end/panels/media/PlayerPropertiesView.ts +66 -51
  759. package/front_end/panels/media/TickingFlameChart.ts +6 -5
  760. package/front_end/panels/media/media-meta.ts +3 -3
  761. package/front_end/panels/mobile_throttling/CalibrationController.ts +3 -4
  762. package/front_end/panels/mobile_throttling/MobileThrottlingSelector.ts +3 -3
  763. package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +4 -4
  764. package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +189 -51
  765. package/front_end/panels/mobile_throttling/ThrottlingManager.test.ts +37 -1
  766. package/front_end/panels/mobile_throttling/ThrottlingManager.ts +114 -126
  767. package/front_end/panels/mobile_throttling/ThrottlingPresets.ts +8 -8
  768. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.test.ts +115 -0
  769. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +178 -143
  770. package/front_end/panels/mobile_throttling/mobile_throttling-meta.ts +6 -6
  771. package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +30 -36
  772. package/front_end/panels/network/BinaryResourceView.ts +7 -7
  773. package/front_end/panels/network/BlockedURLsPane.ts +18 -17
  774. package/front_end/panels/network/EventSourceMessagesView.ts +9 -10
  775. package/front_end/panels/network/NetworkConfigView.test.ts +35 -0
  776. package/front_end/panels/network/NetworkConfigView.ts +19 -17
  777. package/front_end/panels/network/NetworkDataGridNode.test.ts +19 -8
  778. package/front_end/panels/network/NetworkDataGridNode.ts +129 -90
  779. package/front_end/panels/network/NetworkItemView.test.ts +3 -3
  780. package/front_end/panels/network/NetworkItemView.ts +79 -79
  781. package/front_end/panels/network/NetworkLogView.test.ts +61 -23
  782. package/front_end/panels/network/NetworkLogView.ts +207 -130
  783. package/front_end/panels/network/NetworkLogViewColumns.ts +60 -63
  784. package/front_end/panels/network/NetworkManageCustomHeadersView.ts +5 -5
  785. package/front_end/panels/network/NetworkPanel.test.ts +3 -3
  786. package/front_end/panels/network/NetworkPanel.ts +69 -68
  787. package/front_end/panels/network/NetworkSearchScope.ts +1 -1
  788. package/front_end/panels/network/NetworkTimeCalculator.ts +35 -40
  789. package/front_end/panels/network/NetworkWaterfallColumn.ts +2 -12
  790. package/front_end/panels/network/RequestCookiesView.ts +10 -11
  791. package/front_end/panels/network/RequestHTMLView.ts +2 -2
  792. package/front_end/panels/network/RequestInitiatorView.ts +16 -16
  793. package/front_end/panels/network/RequestPayloadView.ts +12 -13
  794. package/front_end/panels/network/RequestPreviewView.ts +3 -4
  795. package/front_end/panels/network/RequestResponseView.test.ts +36 -0
  796. package/front_end/panels/network/RequestResponseView.ts +5 -5
  797. package/front_end/panels/network/RequestTimingView.ts +54 -54
  798. package/front_end/panels/network/ResourceChunkView.ts +13 -13
  799. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +26 -17
  800. package/front_end/panels/network/ResourceWebSocketFrameView.ts +9 -9
  801. package/front_end/panels/network/SignedExchangeInfoView.ts +24 -24
  802. package/front_end/panels/network/binaryResourceView.css +1 -0
  803. package/front_end/panels/network/components/DirectSocketConnectionView.ts +18 -16
  804. package/front_end/panels/network/components/HeaderSectionRow.ts +17 -42
  805. package/front_end/panels/network/components/RequestHeaderSection.ts +6 -11
  806. package/front_end/panels/network/components/RequestHeadersView.css +2 -2
  807. package/front_end/panels/network/components/RequestHeadersView.test.ts +5 -2
  808. package/front_end/panels/network/components/RequestHeadersView.ts +24 -34
  809. package/front_end/panels/network/components/RequestTrustTokensView.ts +19 -23
  810. package/front_end/panels/network/components/ResponseHeaderSection.ts +16 -15
  811. package/front_end/panels/network/components/WebBundleInfoView.ts +4 -9
  812. package/front_end/panels/network/network-meta.ts +27 -27
  813. package/front_end/panels/network/networkConfigView.css +13 -6
  814. package/front_end/panels/network/networkLogView.css +1 -1
  815. package/front_end/panels/network/networkPanel.css +3 -2
  816. package/front_end/panels/network/requestHTMLView.css +9 -8
  817. package/front_end/panels/network/resourceChunkView.css +21 -28
  818. package/front_end/panels/performance_monitor/PerformanceMonitor.test.ts +121 -6
  819. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +252 -168
  820. package/front_end/panels/performance_monitor/performanceMonitor.css +7 -9
  821. package/front_end/panels/performance_monitor/performance_monitor-meta.ts +7 -7
  822. package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +19 -52
  823. package/front_end/panels/profiler/HeapDetachedElementsView.ts +9 -6
  824. package/front_end/panels/profiler/HeapProfileView.ts +24 -24
  825. package/front_end/panels/profiler/HeapProfilerPanel.ts +1 -1
  826. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +20 -20
  827. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +27 -27
  828. package/front_end/panels/profiler/HeapSnapshotProxy.ts +2 -6
  829. package/front_end/panels/profiler/HeapSnapshotView.ts +59 -56
  830. package/front_end/panels/profiler/HeapTimelineOverview.ts +1 -2
  831. package/front_end/panels/profiler/IsolateSelector.ts +16 -16
  832. package/front_end/panels/profiler/LiveHeapProfileView.ts +14 -14
  833. package/front_end/panels/profiler/ModuleUIStrings.ts +26 -26
  834. package/front_end/panels/profiler/ProfileDataGrid.ts +5 -5
  835. package/front_end/panels/profiler/ProfileHeader.ts +0 -9
  836. package/front_end/panels/profiler/ProfileLauncherView.ts +6 -6
  837. package/front_end/panels/profiler/ProfileSidebarTreeElement.ts +1 -1
  838. package/front_end/panels/profiler/ProfileView.ts +23 -20
  839. package/front_end/panels/profiler/ProfilesPanel.ts +9 -9
  840. package/front_end/panels/profiler/heapProfiler.css +8 -0
  841. package/front_end/panels/profiler/profiler-meta.ts +12 -12
  842. package/front_end/panels/protocol_monitor/JSONEditor.test.ts +2 -2
  843. package/front_end/panels/protocol_monitor/JSONEditor.ts +36 -19
  844. package/front_end/panels/protocol_monitor/ProtocolMonitor.test.ts +105 -103
  845. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +24 -25
  846. package/front_end/panels/protocol_monitor/protocolMonitor.css +15 -9
  847. package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +1 -1
  848. package/front_end/panels/recorder/RecorderController.test.ts +9 -2
  849. package/front_end/panels/recorder/RecorderController.ts +82 -85
  850. package/front_end/panels/recorder/components/CreateRecordingView.ts +2 -2
  851. package/front_end/panels/recorder/components/RecordingListView.test.ts +42 -53
  852. package/front_end/panels/recorder/components/RecordingListView.ts +141 -125
  853. package/front_end/panels/recorder/components/RecordingView.test.ts +73 -122
  854. package/front_end/panels/recorder/components/RecordingView.ts +912 -929
  855. package/front_end/panels/recorder/components/StepEditor.ts +13 -13
  856. package/front_end/panels/recorder/components/StepView.ts +23 -24
  857. package/front_end/panels/recorder/components/recordingListView.css +76 -75
  858. package/front_end/panels/recorder/components/recordingView.css +303 -308
  859. package/front_end/panels/recorder/components/stepView.css +197 -196
  860. package/front_end/panels/recorder/components/timelineSection.css +1 -1
  861. package/front_end/panels/recorder/injected/rollup.config.mjs +1 -1
  862. package/front_end/panels/recorder/injected/selectors/ARIASelector.ts +2 -2
  863. package/front_end/panels/recorder/injected/selectors/CSSSelector.ts +4 -4
  864. package/front_end/panels/recorder/injected/selectors/PierceSelector.ts +2 -2
  865. package/front_end/panels/recorder/injected/selectors/TextSelector.ts +2 -2
  866. package/front_end/panels/recorder/injected/selectors/XPath.ts +3 -3
  867. package/front_end/panels/recorder/models/RecorderSettings.ts +0 -1
  868. package/front_end/panels/recorder/models/RecordingPlayer.test.ts +48 -68
  869. package/front_end/panels/recorder/models/RecordingPlayer.ts +9 -9
  870. package/front_end/panels/recorder/models/RecordingSession.ts +3 -3
  871. package/front_end/panels/recorder/recorder-meta.ts +5 -5
  872. package/front_end/panels/recorder/recorderController.css +3 -3
  873. package/front_end/panels/screencast/ScreencastApp.ts +1 -1
  874. package/front_end/panels/screencast/ScreencastView.ts +13 -18
  875. package/front_end/panels/search/SearchResultsPane.ts +8 -8
  876. package/front_end/panels/search/SearchView.test.ts +2 -2
  877. package/front_end/panels/search/SearchView.ts +130 -127
  878. package/front_end/panels/search/searchResultsPane.css +2 -2
  879. package/front_end/panels/search/searchView.css +2 -2
  880. package/front_end/panels/security/CookieControlsView.ts +27 -27
  881. package/front_end/panels/security/CookieReportView.ts +40 -73
  882. package/front_end/panels/security/IPProtectionTreeElement.ts +21 -0
  883. package/front_end/panels/security/IPProtectionView.ts +179 -0
  884. package/front_end/panels/security/SecurityModel.ts +10 -10
  885. package/front_end/panels/security/SecurityPanel.test.ts +22 -0
  886. package/front_end/panels/security/SecurityPanel.ts +107 -107
  887. package/front_end/panels/security/SecurityPanelSidebar.ts +27 -11
  888. package/front_end/panels/security/ipProtectionView.css +109 -0
  889. package/front_end/panels/security/security-meta.ts +4 -4
  890. package/front_end/panels/security/security.ts +2 -0
  891. package/front_end/panels/sensors/LocationsSettingsTab.ts +32 -31
  892. package/front_end/panels/sensors/SensorsView.ts +50 -42
  893. package/front_end/panels/sensors/sensors-meta.ts +20 -20
  894. package/front_end/panels/settings/AISettingsTab.test.ts +19 -6
  895. package/front_end/panels/settings/AISettingsTab.ts +118 -72
  896. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +22 -20
  897. package/front_end/panels/settings/KeybindsSettingsTab.ts +31 -30
  898. package/front_end/panels/settings/SettingsScreen.ts +19 -20
  899. package/front_end/panels/settings/components/SyncSection.test.ts +43 -9
  900. package/front_end/panels/settings/components/SyncSection.ts +63 -29
  901. package/front_end/panels/settings/components/syncSection.css +16 -7
  902. package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +14 -16
  903. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.test.ts +61 -0
  904. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +134 -28
  905. package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +19 -0
  906. package/front_end/panels/settings/emulation/emulation-meta.ts +2 -2
  907. package/front_end/panels/settings/settings-meta.ts +12 -12
  908. package/front_end/panels/settings/settingsScreen.css +0 -1
  909. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +5 -5
  910. package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
  911. package/front_end/panels/sources/AddSourceMapURLDialog.ts +5 -5
  912. package/front_end/panels/sources/AiCodeCompletionPlugin.test.ts +119 -0
  913. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +400 -0
  914. package/front_end/panels/sources/AiWarningInfobarPlugin.ts +3 -3
  915. package/front_end/panels/sources/BreakpointEditDialog.ts +13 -11
  916. package/front_end/panels/sources/{components/BreakpointsView.test.ts → BreakpointsView.test.ts} +237 -225
  917. package/front_end/panels/sources/{components/BreakpointsView.ts → BreakpointsView.ts} +336 -301
  918. package/front_end/panels/sources/{components/BreakpointsViewUtils.test.ts → BreakpointsViewUtils.test.ts} +29 -29
  919. package/front_end/panels/sources/{components/BreakpointsViewUtils.ts → BreakpointsViewUtils.ts} +3 -3
  920. package/front_end/panels/sources/CSSPlugin.ts +26 -17
  921. package/front_end/panels/sources/CallStackSidebarPane.ts +34 -58
  922. package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -18
  923. package/front_end/panels/sources/CoveragePlugin.test.ts +2 -0
  924. package/front_end/panels/sources/CoveragePlugin.ts +5 -5
  925. package/front_end/panels/sources/DebuggerPausedMessage.test.ts +2 -0
  926. package/front_end/panels/sources/DebuggerPausedMessage.ts +33 -39
  927. package/front_end/panels/sources/DebuggerPlugin.test.ts +4 -3
  928. package/front_end/panels/sources/DebuggerPlugin.ts +68 -49
  929. package/front_end/panels/sources/FilteredUISourceCodeListProvider.test.ts +3 -4
  930. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +7 -7
  931. package/front_end/panels/sources/GoToLineQuickOpen.ts +15 -15
  932. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +9 -6
  933. package/front_end/panels/sources/NavigatorView.test.ts +2 -1
  934. package/front_end/panels/sources/NavigatorView.ts +39 -35
  935. package/front_end/panels/sources/OpenFileQuickOpen.ts +6 -6
  936. package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
  937. package/front_end/panels/sources/ProfilePlugin.ts +3 -3
  938. package/front_end/panels/sources/ResourceOriginPlugin.ts +1 -1
  939. package/front_end/panels/sources/ScopeChainSidebarPane.ts +11 -9
  940. package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
  941. package/front_end/panels/sources/SourcesNavigator.test.ts +3 -2
  942. package/front_end/panels/sources/SourcesNavigator.ts +32 -20
  943. package/front_end/panels/sources/SourcesPanel.test.ts +90 -0
  944. package/front_end/panels/sources/SourcesPanel.ts +71 -28
  945. package/front_end/panels/sources/SourcesSearchScope.ts +1 -1
  946. package/front_end/panels/sources/SourcesView.test.ts +5 -2
  947. package/front_end/panels/sources/SourcesView.ts +7 -8
  948. package/front_end/panels/sources/TabbedEditorContainer.ts +11 -8
  949. package/front_end/panels/sources/ThreadsSidebarPane.ts +7 -10
  950. package/front_end/panels/sources/UISourceCodeFrame.test.ts +104 -0
  951. package/front_end/panels/sources/UISourceCodeFrame.ts +40 -17
  952. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +14 -9
  953. package/front_end/panels/sources/breakpointsView.css +276 -0
  954. package/front_end/panels/sources/components/HeadersView.ts +17 -13
  955. package/front_end/panels/sources/components/components.ts +0 -4
  956. package/front_end/panels/sources/scopeChainSidebarPane.css +1 -1
  957. package/front_end/panels/sources/sources-meta.ts +103 -112
  958. package/front_end/panels/sources/sources.ts +6 -0
  959. package/front_end/panels/timeline/ActiveFilters.ts +2 -1
  960. package/front_end/panels/timeline/AnimationsTrackAppender.ts +1 -1
  961. package/front_end/panels/timeline/AnnotationHelpers.test.ts +14 -8
  962. package/front_end/panels/timeline/AnnotationHelpers.ts +28 -23
  963. package/front_end/panels/timeline/AppenderUtils.ts +2 -2
  964. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +1 -14
  965. package/front_end/panels/timeline/CountersGraph.test.ts +80 -0
  966. package/front_end/panels/timeline/CountersGraph.ts +27 -18
  967. package/front_end/panels/timeline/EntriesFilter.test.ts +22 -15
  968. package/front_end/panels/timeline/EventsTimelineTreeView.ts +4 -25
  969. package/front_end/panels/timeline/ExtensionTrackAppender.ts +4 -9
  970. package/front_end/panels/timeline/GPUTrackAppender.ts +3 -3
  971. package/front_end/panels/timeline/Initiators.test.ts +22 -19
  972. package/front_end/panels/timeline/Initiators.ts +19 -6
  973. package/front_end/panels/timeline/InteractionsTrackAppender.ts +6 -6
  974. package/front_end/panels/timeline/IsolateSelector.ts +2 -2
  975. package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +6 -5
  976. package/front_end/panels/timeline/ModificationsManager.test.ts +98 -188
  977. package/front_end/panels/timeline/ModificationsManager.ts +51 -48
  978. package/front_end/panels/timeline/NetworkTrackAppender.ts +3 -3
  979. package/front_end/panels/timeline/README.md +5 -13
  980. package/front_end/{models/trace/extras/Metadata.test.ts → panels/timeline/RecordingMetadata.test.ts} +61 -29
  981. package/front_end/panels/timeline/RecordingMetadata.ts +79 -0
  982. package/front_end/panels/timeline/SaveFileFormatter.test.ts +1 -3
  983. package/front_end/panels/timeline/SaveFileFormatter.ts +0 -8
  984. package/front_end/panels/timeline/StatusDialog.ts +12 -8
  985. package/front_end/panels/timeline/ThirdPartyTreeView.ts +5 -5
  986. package/front_end/panels/timeline/ThreadAppender.ts +29 -29
  987. package/front_end/panels/timeline/TimelineController.ts +14 -18
  988. package/front_end/panels/timeline/TimelineDetailsView.test.ts +49 -15
  989. package/front_end/panels/timeline/TimelineDetailsView.ts +213 -105
  990. package/front_end/panels/timeline/TimelineEventOverview.ts +6 -6
  991. package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +56 -95
  992. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +94 -65
  993. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.test.ts +3 -62
  994. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +10 -30
  995. package/front_end/panels/timeline/TimelineFlameChartView.test.ts +105 -80
  996. package/front_end/panels/timeline/TimelineFlameChartView.ts +107 -102
  997. package/front_end/panels/timeline/TimelineHistoryManager.test.ts +0 -5
  998. package/front_end/panels/timeline/TimelineHistoryManager.ts +8 -8
  999. package/front_end/panels/timeline/TimelineLoader.test.ts +4 -7
  1000. package/front_end/panels/timeline/TimelineLoader.ts +22 -3
  1001. package/front_end/panels/timeline/TimelineMiniMap.ts +13 -5
  1002. package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
  1003. package/front_end/panels/timeline/TimelinePanel.test.ts +381 -117
  1004. package/front_end/panels/timeline/TimelinePanel.ts +576 -345
  1005. package/front_end/panels/timeline/TimelineSelectorStatsView.ts +195 -80
  1006. package/front_end/panels/timeline/TimelineTreeView.test.ts +5 -5
  1007. package/front_end/panels/timeline/TimelineTreeView.ts +25 -25
  1008. package/front_end/panels/timeline/TimelineUIUtils.test.ts +58 -55
  1009. package/front_end/panels/timeline/TimelineUIUtils.ts +159 -345
  1010. package/front_end/panels/timeline/TimingsTrackAppender.ts +12 -7
  1011. package/front_end/panels/timeline/TrackConfigBanner.test.ts +68 -0
  1012. package/front_end/panels/timeline/TrackConfigBanner.ts +97 -0
  1013. package/front_end/panels/timeline/TrackConfiguration.test.ts +3 -3
  1014. package/front_end/panels/timeline/TrackConfiguration.ts +1 -0
  1015. package/front_end/panels/timeline/UIDevtoolsUtils.ts +15 -15
  1016. package/front_end/panels/timeline/components/BreadcrumbsUI.ts +4 -9
  1017. package/front_end/panels/timeline/components/DetailsView.ts +13 -13
  1018. package/front_end/panels/timeline/components/ExportTraceOptions.test.ts +281 -0
  1019. package/front_end/panels/timeline/components/ExportTraceOptions.ts +262 -0
  1020. package/front_end/panels/timeline/components/FieldSettingsDialog.test.ts +1 -1
  1021. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +2 -1
  1022. package/front_end/panels/timeline/components/IgnoreListSetting.test.ts +5 -4
  1023. package/front_end/panels/timeline/components/IgnoreListSetting.ts +7 -7
  1024. package/front_end/panels/timeline/components/InteractionBreakdown.ts +3 -3
  1025. package/front_end/panels/timeline/components/Invalidations.test.ts +2 -1
  1026. package/front_end/panels/timeline/components/LayoutShiftDetails.test.ts +21 -11
  1027. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +325 -307
  1028. package/front_end/panels/timeline/components/LiveMetricsView.test.ts +14 -22
  1029. package/front_end/panels/timeline/components/LiveMetricsView.ts +1 -1
  1030. package/front_end/panels/timeline/components/MetricCard.test.ts +2 -2
  1031. package/front_end/panels/timeline/components/NetworkRequestDetails.test.ts +38 -44
  1032. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +318 -278
  1033. package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +8 -8
  1034. package/front_end/panels/timeline/components/NetworkThrottlingSelector.test.ts +3 -0
  1035. package/front_end/panels/timeline/components/OriginMap.ts +1 -1
  1036. package/front_end/panels/timeline/components/RelatedInsightChips.test.ts +17 -31
  1037. package/front_end/panels/timeline/components/RelatedInsightChips.ts +87 -66
  1038. package/front_end/panels/timeline/components/Sidebar.test.ts +43 -4
  1039. package/front_end/panels/timeline/components/Sidebar.ts +47 -20
  1040. package/front_end/panels/timeline/components/SidebarAnnotationsTab.test.ts +47 -72
  1041. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +228 -218
  1042. package/front_end/panels/timeline/components/SidebarInsightsTab.test.ts +1 -0
  1043. package/front_end/panels/timeline/components/SidebarInsightsTab.ts +18 -54
  1044. package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +7 -53
  1045. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +61 -44
  1046. package/front_end/panels/timeline/components/TimelineSummary.ts +4 -4
  1047. package/front_end/panels/timeline/components/Utils.ts +9 -9
  1048. package/front_end/panels/timeline/components/components.ts +2 -0
  1049. package/front_end/panels/timeline/components/exportTraceOptions.css +26 -0
  1050. package/front_end/panels/timeline/components/insights/BaseInsightComponent.test.ts +40 -16
  1051. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +28 -34
  1052. package/front_end/panels/timeline/components/insights/CLSCulprits.test.ts +5 -5
  1053. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +32 -23
  1054. package/front_end/panels/timeline/components/insights/Cache.ts +4 -22
  1055. package/front_end/panels/timeline/components/insights/Checklist.ts +6 -7
  1056. package/front_end/panels/timeline/components/insights/DOMSize.ts +35 -15
  1057. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +1 -61
  1058. package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +5 -17
  1059. package/front_end/panels/timeline/components/insights/EventRef.ts +7 -9
  1060. package/front_end/panels/timeline/components/insights/FontDisplay.ts +20 -21
  1061. package/front_end/panels/timeline/components/insights/ForcedReflow.ts +5 -28
  1062. package/front_end/panels/timeline/components/insights/{InteractionToNextPaint.test.ts → INPBreakdown.test.ts} +8 -5
  1063. package/front_end/panels/timeline/components/insights/INPBreakdown.ts +70 -0
  1064. package/front_end/panels/timeline/components/insights/ImageDelivery.ts +7 -21
  1065. package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +146 -0
  1066. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +28 -80
  1067. package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +3 -15
  1068. package/front_end/panels/timeline/components/insights/ModernHTTP.ts +18 -23
  1069. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.test.ts +76 -0
  1070. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +35 -29
  1071. package/front_end/panels/timeline/components/insights/NodeLink.test.ts +113 -0
  1072. package/front_end/panels/timeline/components/insights/NodeLink.ts +50 -10
  1073. package/front_end/panels/timeline/components/insights/README.md +1 -1
  1074. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +4 -22
  1075. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +1 -2
  1076. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +16 -28
  1077. package/front_end/panels/timeline/components/insights/Table.ts +2 -3
  1078. package/front_end/panels/timeline/components/insights/ThirdParties.ts +7 -47
  1079. package/front_end/panels/timeline/components/insights/Viewport.ts +0 -6
  1080. package/front_end/panels/timeline/components/insights/insights.ts +4 -4
  1081. package/front_end/panels/timeline/components/insights/table.css +18 -0
  1082. package/front_end/panels/timeline/components/insights/types.ts +2 -2
  1083. package/front_end/panels/timeline/components/layoutShiftDetails.css +99 -92
  1084. package/front_end/panels/timeline/components/networkRequestDetails.css +110 -104
  1085. package/front_end/panels/timeline/components/networkRequestTooltip.css +88 -83
  1086. package/front_end/panels/timeline/components/relatedInsightChips.css +60 -58
  1087. package/front_end/panels/timeline/components/sidebarAnnotationsTab.css +80 -78
  1088. package/front_end/panels/timeline/components/sidebarInsightsTab.css +0 -25
  1089. package/front_end/panels/timeline/components/sidebarSingleInsightSet.css +1 -1
  1090. package/front_end/panels/timeline/docs/flame_chart_migration.md +2 -2
  1091. package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +149 -42
  1092. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +218 -283
  1093. package/front_end/panels/timeline/overlays/components/EntriesLinkOverlay.ts +1 -1
  1094. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +69 -104
  1095. package/front_end/panels/timeline/overlays/components/TimeRangeOverlay.ts +1 -1
  1096. package/front_end/panels/timeline/overlays/components/entryLabelOverlay.css +13 -0
  1097. package/front_end/panels/timeline/overlays/components/timeRangeOverlay.css +2 -1
  1098. package/front_end/panels/timeline/timeline-meta.ts +14 -14
  1099. package/front_end/panels/timeline/timeline.ts +4 -4
  1100. package/front_end/panels/timeline/timelineDetailsView.css +118 -0
  1101. package/front_end/panels/timeline/timelineFlameChartView.css +18 -117
  1102. package/front_end/panels/timeline/timelineMiniMap.css +5 -0
  1103. package/front_end/panels/timeline/timelinePanel.css +2 -10
  1104. package/front_end/panels/timeline/timelineTreeView.css +0 -4
  1105. package/front_end/panels/timeline/track_appenders/CompatibilityTracksAppender.test.ts +16 -15
  1106. package/front_end/panels/timeline/track_appenders/ExtensionTrackAppender.test.ts +6 -4
  1107. package/front_end/panels/timeline/track_appenders/InteractionsTrackAppender.test.ts +0 -1
  1108. package/front_end/panels/timeline/track_appenders/ThreadAppender.test.ts +34 -49
  1109. package/front_end/panels/timeline/utils/AICallTree.test.ts +54 -120
  1110. package/front_end/panels/timeline/utils/AICallTree.ts +31 -74
  1111. package/front_end/panels/timeline/utils/AIContext.ts +67 -0
  1112. package/front_end/panels/timeline/utils/EntityMapper.test.ts +5 -4
  1113. package/front_end/panels/timeline/utils/EntityMapper.ts +3 -3
  1114. package/front_end/panels/timeline/utils/EntryName.test.ts +3 -3
  1115. package/front_end/panels/timeline/utils/EntryName.ts +10 -10
  1116. package/front_end/panels/timeline/utils/EntryNodes.test.ts +137 -0
  1117. package/front_end/panels/timeline/utils/EntryNodes.ts +107 -0
  1118. package/front_end/panels/timeline/utils/EntryStyles.ts +110 -110
  1119. package/front_end/panels/timeline/{EventsSerializer.test.ts → utils/EventsSerializer.test.ts} +7 -7
  1120. package/front_end/panels/timeline/{EventsSerializer.ts → utils/EventsSerializer.ts} +1 -1
  1121. package/front_end/panels/timeline/{FreshRecording.test.ts → utils/FreshRecording.test.ts} +5 -5
  1122. package/front_end/panels/timeline/{FreshRecording.ts → utils/FreshRecording.ts} +1 -1
  1123. package/front_end/panels/timeline/utils/Helpers.ts +6 -0
  1124. package/front_end/panels/timeline/utils/IgnoreList.test.ts +7 -6
  1125. package/front_end/panels/timeline/utils/IgnoreList.ts +6 -6
  1126. package/front_end/panels/timeline/utils/InsightAIContext.test.ts +61 -25
  1127. package/front_end/panels/timeline/utils/InsightAIContext.ts +102 -81
  1128. package/front_end/panels/timeline/utils/SourceMapsResolver.test.ts +5 -4
  1129. package/front_end/panels/timeline/utils/Treemap.ts +5 -20
  1130. package/front_end/panels/timeline/utils/utils.ts +8 -0
  1131. package/front_end/panels/utils/utils.test.ts +1 -7
  1132. package/front_end/panels/utils/utils.ts +17 -21
  1133. package/front_end/panels/web_audio/WebAudioView.test.ts +224 -11
  1134. package/front_end/panels/web_audio/WebAudioView.ts +219 -267
  1135. package/front_end/panels/web_audio/web_audio-meta.ts +3 -3
  1136. package/front_end/panels/web_audio/web_audio.ts +0 -12
  1137. package/front_end/panels/webauthn/WebauthnPane.test.ts +75 -72
  1138. package/front_end/panels/webauthn/WebauthnPane.ts +517 -578
  1139. package/front_end/panels/webauthn/webauthn-meta.ts +2 -2
  1140. package/front_end/panels/webauthn/webauthnPane.css +157 -155
  1141. package/front_end/panels/whats_new/ReleaseNoteText.ts +11 -11
  1142. package/front_end/panels/whats_new/ReleaseNoteView.ts +2 -2
  1143. package/front_end/panels/whats_new/releaseNoteView.css +92 -91
  1144. package/front_end/panels/whats_new/resources/WNDT.md +6 -10
  1145. package/front_end/panels/whats_new/whats_new-meta.ts +7 -7
  1146. package/front_end/services/trace_bounds/TraceBounds.ts +1 -1
  1147. package/front_end/services/tracing/ExternalRequests.test.ts +39 -0
  1148. package/front_end/services/tracing/ExternalRequests.ts +74 -0
  1149. package/front_end/services/tracing/PerformanceTracing.ts +5 -4
  1150. package/front_end/{models/trace → services/tracing}/TracingManager.test.ts +9 -7
  1151. package/front_end/{models/trace → services/tracing}/TracingManager.ts +3 -4
  1152. package/front_end/services/tracing/tracing.ts +4 -0
  1153. package/front_end/testing/AiAssistanceHelpers.ts +10 -8
  1154. package/front_end/testing/DOMHelpers.ts +8 -6
  1155. package/front_end/testing/EnvironmentHelpers.ts +21 -6
  1156. package/front_end/testing/ExpectStubCall.ts +2 -1
  1157. package/front_end/testing/InsightHelpers.ts +11 -4
  1158. package/front_end/testing/MockConnection.ts +3 -2
  1159. package/front_end/testing/MockSettingStorage.ts +23 -0
  1160. package/front_end/testing/MutationHelpers.test.ts +1 -3
  1161. package/front_end/testing/OverridesHelpers.ts +9 -3
  1162. package/front_end/testing/PropertyParser.ts +1 -1
  1163. package/front_end/testing/README.md +34 -0
  1164. package/front_end/testing/SnapshotTester.snapshot.txt +9 -0
  1165. package/front_end/testing/SnapshotTester.test.ts +32 -0
  1166. package/front_end/testing/SnapshotTester.ts +150 -0
  1167. package/front_end/testing/SourceMapEncoder.ts +1 -237
  1168. package/front_end/testing/SourceMapHelpers.ts +3 -5
  1169. package/front_end/testing/StackTraceHelpers.ts +47 -0
  1170. package/front_end/testing/StyleHelpers.ts +43 -22
  1171. package/front_end/testing/TraceHelpers.ts +135 -122
  1172. package/front_end/testing/TraceLoader.ts +23 -65
  1173. package/front_end/testing/test_setup.ts +31 -4
  1174. package/front_end/ui/components/buttons/Button.ts +1 -1
  1175. package/front_end/ui/components/buttons/FloatingButton.ts +37 -6
  1176. package/front_end/ui/components/cards/Card.ts +2 -2
  1177. package/front_end/ui/components/copy_to_clipboard/copyToClipboard.ts +1 -1
  1178. package/front_end/ui/components/dialogs/ButtonDialog.test.ts +2 -6
  1179. package/front_end/ui/components/dialogs/ButtonDialog.ts +15 -0
  1180. package/front_end/ui/components/dialogs/Dialog.ts +68 -8
  1181. package/front_end/ui/components/dialogs/ShortcutDialog.test.ts +1 -3
  1182. package/front_end/ui/components/diff_view/DiffView.ts +6 -6
  1183. package/front_end/ui/components/docs/console_insight/basic.ts +1 -1
  1184. package/front_end/ui/components/docs/console_insight/error.ts +1 -1
  1185. package/front_end/ui/components/docs/console_insight/loading.ts +1 -1
  1186. package/front_end/ui/components/docs/context_menu/basic.html +45 -0
  1187. package/front_end/ui/components/docs/context_menu/basic.ts +102 -0
  1188. package/front_end/ui/components/docs/icon_component/basic.html +1 -3
  1189. package/front_end/ui/components/docs/icon_component/basic.ts +1 -1
  1190. package/front_end/ui/components/docs/recorder_recording_list_view/basic.ts +4 -1
  1191. package/front_end/ui/components/docs/select_menu/basic.html +1 -27
  1192. package/front_end/ui/components/docs/select_menu/basic.ts +86 -194
  1193. package/front_end/ui/components/icon_button/Icon.ts +16 -10
  1194. package/front_end/ui/components/icon_button/IconButton.ts +1 -3
  1195. package/front_end/ui/components/icon_button/icon.css +73 -0
  1196. package/front_end/ui/components/issue_counter/IssueCounter.ts +13 -14
  1197. package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +3 -3
  1198. package/front_end/ui/components/markdown_view/MarkdownImagesMap.ts +4 -4
  1199. package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +9 -6
  1200. package/front_end/ui/components/markdown_view/MarkdownView.test.ts +73 -0
  1201. package/front_end/ui/components/panel_feedback/PanelFeedback.ts +5 -11
  1202. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +4 -9
  1203. package/front_end/ui/components/settings/SettingCheckbox.ts +3 -3
  1204. package/front_end/ui/components/settings/SettingDeprecationWarning.ts +2 -4
  1205. package/front_end/ui/components/snackbars/Snackbar.ts +32 -17
  1206. package/front_end/ui/components/snackbars/snackbar.css +1 -1
  1207. package/front_end/ui/components/spinners/Spinner.ts +50 -2
  1208. package/front_end/ui/components/spinners/spinner.css +10 -1
  1209. package/front_end/ui/components/srgb_overlay/SrgbOverlay.ts +0 -1
  1210. package/front_end/ui/components/survey_link/SurveyLink.ts +4 -8
  1211. package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.test.ts +84 -0
  1212. package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.ts +83 -0
  1213. package/front_end/ui/components/text_editor/ExecutionPositionHighlighter.ts +0 -1
  1214. package/front_end/ui/components/text_editor/TextEditor.test.ts +72 -12
  1215. package/front_end/ui/components/text_editor/TextEditor.ts +2 -0
  1216. package/front_end/ui/components/text_editor/config.ts +120 -12
  1217. package/front_end/ui/{legacy/components/inline_editor/bezierSwatch.css → components/text_editor/textEditor.css} +2 -6
  1218. package/front_end/ui/components/text_editor/text_editor.ts +1 -0
  1219. package/front_end/ui/components/tooltips/Tooltip.test.ts +70 -40
  1220. package/front_end/ui/components/tooltips/Tooltip.ts +208 -33
  1221. package/front_end/ui/components/tooltips/tooltip.css +13 -77
  1222. package/front_end/ui/components/tree_outline/TreeOutline.ts +11 -0
  1223. package/front_end/ui/legacy/ARIAUtils.test.ts +101 -20
  1224. package/front_end/ui/legacy/ARIAUtils.ts +77 -49
  1225. package/front_end/ui/legacy/ActionRegistration.test.ts +0 -2
  1226. package/front_end/ui/legacy/ActionRegistration.ts +24 -24
  1227. package/front_end/ui/legacy/ContextMenu.test.ts +60 -1
  1228. package/front_end/ui/legacy/ContextMenu.ts +349 -29
  1229. package/front_end/ui/legacy/DockController.ts +13 -7
  1230. package/front_end/ui/legacy/EmptyWidget.ts +62 -32
  1231. package/front_end/ui/legacy/FilterBar.ts +14 -9
  1232. package/front_end/ui/legacy/GlassPane.ts +10 -4
  1233. package/front_end/ui/legacy/Infobar.ts +2 -2
  1234. package/front_end/ui/legacy/InspectorView.test.ts +99 -0
  1235. package/front_end/ui/legacy/InspectorView.ts +71 -25
  1236. package/front_end/ui/legacy/ListWidget.ts +9 -9
  1237. package/front_end/ui/legacy/Panel.ts +1 -1
  1238. package/front_end/ui/legacy/ProgressIndicator.ts +44 -41
  1239. package/front_end/ui/legacy/RemoteDebuggingTerminatedScreen.ts +4 -4
  1240. package/front_end/ui/legacy/ReportView.ts +1 -1
  1241. package/front_end/ui/legacy/SearchableView.ts +24 -24
  1242. package/front_end/ui/legacy/SettingsUI.ts +2 -2
  1243. package/front_end/ui/legacy/ShortcutRegistry.ts +2 -1
  1244. package/front_end/ui/legacy/SoftContextMenu.ts +23 -9
  1245. package/front_end/ui/legacy/SoftDropDown.ts +1 -1
  1246. package/front_end/ui/legacy/SplitWidget.test.ts +8 -0
  1247. package/front_end/ui/legacy/SplitWidget.ts +3 -3
  1248. package/front_end/ui/legacy/SuggestBox.ts +15 -15
  1249. package/front_end/ui/legacy/TabbedPane.ts +27 -31
  1250. package/front_end/ui/legacy/TargetCrashedScreen.ts +4 -4
  1251. package/front_end/ui/legacy/TextPrompt.ts +4 -2
  1252. package/front_end/ui/legacy/ThrottledWidget.ts +1 -1
  1253. package/front_end/ui/legacy/Toolbar.test.ts +13 -0
  1254. package/front_end/ui/legacy/Toolbar.ts +39 -19
  1255. package/front_end/ui/legacy/Treeoutline.test.ts +140 -0
  1256. package/front_end/ui/legacy/Treeoutline.ts +244 -8
  1257. package/front_end/ui/legacy/UIUtils.test.ts +59 -0
  1258. package/front_end/ui/legacy/UIUtils.ts +235 -25
  1259. package/front_end/ui/legacy/View.test.ts +14 -1
  1260. package/front_end/ui/legacy/View.ts +33 -9
  1261. package/front_end/ui/legacy/ViewManager.test.ts +235 -0
  1262. package/front_end/ui/legacy/ViewManager.ts +109 -15
  1263. package/front_end/ui/legacy/ViewRegistration.ts +17 -7
  1264. package/front_end/ui/legacy/Widget.test.ts +35 -3
  1265. package/front_end/ui/legacy/Widget.ts +127 -16
  1266. package/front_end/ui/legacy/XLink.ts +1 -1
  1267. package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +36 -26
  1268. package/front_end/ui/legacy/components/color_picker/FormatPickerContextMenu.ts +4 -8
  1269. package/front_end/ui/legacy/components/color_picker/Spectrum.test.ts +36 -1
  1270. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +72 -49
  1271. package/front_end/ui/legacy/components/color_picker/spectrum.css +1 -1
  1272. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +14 -19
  1273. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +31 -30
  1274. package/front_end/ui/legacy/components/data_grid/DataGridElement.test.ts +19 -15
  1275. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +15 -3
  1276. package/front_end/ui/legacy/components/data_grid/ShowMoreDataGridNode.ts +2 -2
  1277. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +6 -3
  1278. package/front_end/ui/legacy/components/data_grid/dataGrid.css +9 -3
  1279. package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +1 -1
  1280. package/front_end/ui/legacy/components/inline_editor/BezierUI.ts +1 -1
  1281. package/front_end/ui/legacy/components/inline_editor/CSSAngle.test.ts +25 -25
  1282. package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +11 -5
  1283. package/front_end/ui/legacy/components/inline_editor/CSSShadowEditor.ts +5 -5
  1284. package/front_end/ui/legacy/components/inline_editor/ColorSwatch.test.ts +1 -9
  1285. package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +35 -20
  1286. package/front_end/ui/legacy/components/inline_editor/FontEditor.ts +32 -31
  1287. package/front_end/ui/legacy/components/inline_editor/FontEditorUnitConverter.ts +1 -1
  1288. package/front_end/ui/legacy/components/inline_editor/Swatches.ts +3 -47
  1289. package/front_end/ui/legacy/components/inline_editor/cssAngle.css +4 -5
  1290. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +2 -2
  1291. package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
  1292. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.test.ts +19 -1
  1293. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +31 -28
  1294. package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +2 -0
  1295. package/front_end/ui/legacy/components/perf_ui/BrickBreaker.ts +2 -2
  1296. package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +7 -3
  1297. package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +7 -7
  1298. package/front_end/ui/legacy/components/perf_ui/FlameChart.test.ts +162 -1
  1299. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +153 -99
  1300. package/front_end/ui/legacy/components/perf_ui/NetworkPriorities.ts +5 -5
  1301. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +3 -3
  1302. package/front_end/ui/legacy/components/perf_ui/PieChart.ts +1 -1
  1303. package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +0 -4
  1304. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +54 -6
  1305. package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +6 -6
  1306. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +29 -3
  1307. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +14 -5
  1308. package/front_end/ui/legacy/components/quick_open/HelpQuickOpen.ts +2 -5
  1309. package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +2 -0
  1310. package/front_end/ui/legacy/components/quick_open/quick_open-meta.ts +2 -2
  1311. package/front_end/ui/legacy/components/source_frame/FontView.ts +8 -5
  1312. package/front_end/ui/legacy/components/source_frame/ImageView.ts +17 -29
  1313. package/front_end/ui/legacy/components/source_frame/JSONView.ts +3 -3
  1314. package/front_end/ui/legacy/components/source_frame/PreviewFactory.ts +2 -2
  1315. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.test.ts +0 -4
  1316. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +2 -2
  1317. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +41 -31
  1318. package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +1 -1
  1319. package/front_end/ui/legacy/components/source_frame/XMLView.ts +2 -2
  1320. package/front_end/ui/legacy/components/source_frame/fontView.css +1 -1
  1321. package/front_end/ui/legacy/components/source_frame/source_frame-meta.ts +9 -9
  1322. package/front_end/ui/legacy/components/utils/ImagePreview.ts +4 -4
  1323. package/front_end/ui/legacy/components/utils/JSPresentationUtils.test.ts +6 -5
  1324. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +76 -34
  1325. package/front_end/ui/legacy/components/utils/Linkifier.test.ts +154 -2
  1326. package/front_end/ui/legacy/components/utils/Linkifier.ts +108 -50
  1327. package/front_end/ui/legacy/components/utils/TargetDetachedDialog.ts +2 -1
  1328. package/front_end/ui/legacy/confirmDialog.css +1 -1
  1329. package/front_end/ui/legacy/filter.css +12 -4
  1330. package/front_end/ui/legacy/inspectorCommon.css +25 -20
  1331. package/front_end/ui/legacy/remoteDebuggingTerminatedScreen.css +18 -17
  1332. package/front_end/ui/legacy/softContextMenu.css +4 -0
  1333. package/front_end/ui/legacy/tabbedPane.css +5 -1
  1334. package/front_end/ui/legacy/targetCrashedScreen.css +9 -8
  1335. package/front_end/ui/legacy/viewContainers.css +8 -0
  1336. package/front_end/ui/visual_logging/Debugging.ts +122 -26
  1337. package/front_end/ui/visual_logging/KnownContextValues.ts +139 -1
  1338. package/front_end/ui/visual_logging/LoggingConfig.ts +1 -1
  1339. package/front_end/ui/visual_logging/LoggingDriver.test.ts +74 -44
  1340. package/front_end/ui/visual_logging/LoggingDriver.ts +3 -2
  1341. package/front_end/ui/visual_logging/LoggingState.ts +6 -4
  1342. package/front_end/ui/visual_logging/README.md +1 -3
  1343. package/front_end/ui/visual_logging/visual_logging.ts +9 -0
  1344. package/front_end/ui/visual_logging/visual_logging_debugging.png +0 -0
  1345. package/inspector_overlay/css_grid_label_helpers.ts +4 -4
  1346. package/inspector_overlay/highlight_flex_common.ts +2 -2
  1347. package/inspector_overlay/loadCSS.rollup.js +2 -2
  1348. package/inspector_overlay/main.ts +0 -4
  1349. package/inspector_overlay/tool_highlight.css +1 -1
  1350. package/inspector_overlay/tool_highlight.ts +7 -7
  1351. package/package.json +32 -36
  1352. package/scripts/add_icon_paths.py +1 -1
  1353. package/scripts/ai_assistance/README.md +1 -0
  1354. package/scripts/ai_assistance/auto-run/auto-run.ts +46 -6
  1355. package/scripts/ai_assistance/auto-run/shared/comment-parsers.test.ts +2 -2
  1356. package/scripts/ai_assistance/auto-run/shared/comment-parsers.ts +2 -2
  1357. package/scripts/ai_assistance/auto-run/shared/puppeteer-helpers.ts +18 -15
  1358. package/scripts/ai_assistance/auto-run/targets/elements-executor.ts +2 -0
  1359. package/scripts/ai_assistance/auto-run/targets/elements-multimodal-executor.ts +2 -0
  1360. package/scripts/ai_assistance/auto-run/targets/interface.ts +1 -0
  1361. package/scripts/ai_assistance/auto-run/targets/patching-executor.ts +1 -0
  1362. package/scripts/ai_assistance/auto-run/targets/performance-insights-executor.ts +2 -0
  1363. package/scripts/ai_assistance/auto-run/targets/performance-main-thread-executor.ts +2 -0
  1364. package/scripts/ai_assistance/eval/index.js +5 -1
  1365. package/scripts/ai_assistance/package.json +2 -1
  1366. package/scripts/ai_assistance/suite/README.md +57 -0
  1367. package/scripts/ai_assistance/suite/helpers/evaluators.ts +183 -0
  1368. package/scripts/ai_assistance/suite/helpers/gemini.ts +122 -0
  1369. package/scripts/ai_assistance/suite/helpers/outputs.ts +112 -0
  1370. package/scripts/ai_assistance/suite/instructions/lcp-breakdown.md +12 -0
  1371. package/scripts/ai_assistance/suite/instructions/load.ts +13 -0
  1372. package/scripts/ai_assistance/suite/instructions/scoring.md +27 -0
  1373. package/scripts/ai_assistance/suite/performance.eval.ts +18 -0
  1374. package/scripts/ai_assistance/suite/to_eval_output.ts +166 -0
  1375. package/scripts/ai_assistance/suite/types.d.ts +40 -0
  1376. package/scripts/ai_assistance/suite/upload_to_gcp.ts +104 -0
  1377. package/scripts/ai_assistance/tsconfig.json +1 -1
  1378. package/scripts/ai_assistance/types.d.ts +8 -3
  1379. package/scripts/build/assert_grd.py +1 -1
  1380. package/scripts/build/compress_files.js +9 -4
  1381. package/scripts/build/cross_reference_ninja_and_tsc.js +5 -5
  1382. package/scripts/build/devtools_plugin.js +9 -2
  1383. package/scripts/build/esbuild.js +4 -1
  1384. package/scripts/build/generate_html_entrypoint.js +5 -4
  1385. package/scripts/build/ninja/README.md +2 -3
  1386. package/scripts/build/ninja/bundle.gni +7 -30
  1387. package/scripts/build/ninja/devtools_entrypoint.gni +4 -4
  1388. package/scripts/build/ninja/devtools_pre_built.gni +2 -1
  1389. package/scripts/build/ninja/generate_css.gni +4 -2
  1390. package/scripts/build/ninja/vars.gni +5 -1
  1391. package/scripts/build/ninja/write-if-changed.js +2 -2
  1392. package/scripts/build/typescript/ts_library.py +7 -1
  1393. package/scripts/build/typescript/typescript.gni +2 -1
  1394. package/scripts/component_server/server.js +8 -7
  1395. package/scripts/devtools_build.mjs +93 -26
  1396. package/scripts/devtools_build.test.mjs +48 -48
  1397. package/scripts/devtools_paths.py +0 -5
  1398. package/scripts/eslint_rules/README.md +4 -2
  1399. package/scripts/eslint_rules/lib/canvas-context-tracking.ts +1 -1
  1400. package/scripts/eslint_rules/lib/check-css-import.ts +2 -2
  1401. package/scripts/eslint_rules/lib/check-license-header.ts +3 -3
  1402. package/scripts/eslint_rules/lib/check-test-definitions.ts +2 -2
  1403. package/scripts/eslint_rules/lib/enforce-custom-element-definitions-location.ts +1 -1
  1404. package/scripts/eslint_rules/lib/enforce-optional-properties-last.ts +1 -1
  1405. package/scripts/eslint_rules/lib/enforce-ui-strings-as-const.ts +1 -1
  1406. package/scripts/eslint_rules/lib/es-modules-import.ts +3 -2
  1407. package/scripts/eslint_rules/lib/html-tagged-template.ts +2 -2
  1408. package/scripts/eslint_rules/lib/inject-checkbox-styles.ts +36 -24
  1409. package/scripts/eslint_rules/lib/inline-type-imports.ts +1 -1
  1410. package/scripts/eslint_rules/lib/jslog-context-list.ts +32 -7
  1411. package/scripts/eslint_rules/lib/no-adopted-style-sheets.ts +2 -2
  1412. package/scripts/eslint_rules/lib/no-assert-deep-strict-equal.ts +17 -16
  1413. package/scripts/eslint_rules/lib/no-assert-equal-boolean-null-undefined.ts +1 -1
  1414. package/scripts/eslint_rules/lib/no-assert-equal.ts +1 -1
  1415. package/scripts/eslint_rules/lib/no-assert-strict-equal-for-arrays-and-objects.ts +1 -1
  1416. package/scripts/eslint_rules/lib/no-commented-out-console.ts +4 -2
  1417. package/scripts/eslint_rules/lib/no-customized-builtin-elements.ts +1 -4
  1418. package/scripts/eslint_rules/lib/no-imperative-dom-api/adorner.ts +5 -9
  1419. package/scripts/eslint_rules/lib/no-imperative-dom-api/aria-utils.ts +5 -8
  1420. package/scripts/eslint_rules/lib/no-imperative-dom-api/ast.ts +24 -1
  1421. package/scripts/eslint_rules/lib/no-imperative-dom-api/button.ts +5 -4
  1422. package/scripts/eslint_rules/lib/no-imperative-dom-api/class-member.ts +1 -1
  1423. package/scripts/eslint_rules/lib/no-imperative-dom-api/data-grid.ts +23 -25
  1424. package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-api-devtools-extensions.ts +5 -9
  1425. package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-api.ts +11 -16
  1426. package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-fragment.ts +2 -2
  1427. package/scripts/eslint_rules/lib/no-imperative-dom-api/split-widget.ts +14 -18
  1428. package/scripts/eslint_rules/lib/no-imperative-dom-api/toolbar.ts +17 -18
  1429. package/scripts/eslint_rules/lib/no-imperative-dom-api/ui-fragment.ts +7 -12
  1430. package/scripts/eslint_rules/lib/no-imperative-dom-api/ui-utils.ts +7 -7
  1431. package/scripts/eslint_rules/lib/no-imperative-dom-api/widget.ts +8 -13
  1432. package/scripts/eslint_rules/lib/no-imperative-dom-api.ts +3 -22
  1433. package/scripts/eslint_rules/lib/no-importing-images-from-src.ts +1 -1
  1434. package/scripts/eslint_rules/lib/no-imports-in-directory.ts +18 -7
  1435. package/scripts/eslint_rules/lib/no-lit-render-outside-of-view.ts +48 -37
  1436. package/scripts/eslint_rules/lib/no-new-lit-element-components.ts +5 -2
  1437. package/scripts/eslint_rules/lib/no-underscored-properties.ts +36 -28
  1438. package/scripts/eslint_rules/lib/prefer-assert-instance-of.ts +24 -20
  1439. package/scripts/eslint_rules/lib/prefer-assert-is-ok.ts +54 -45
  1440. package/scripts/eslint_rules/lib/prefer-assert-length-of.ts +24 -17
  1441. package/scripts/eslint_rules/lib/prefer-assert-strict-equal.ts +22 -16
  1442. package/scripts/eslint_rules/lib/prefer-private-class-members.ts +11 -4
  1443. package/scripts/eslint_rules/lib/prefer-sinon-assert.ts +37 -29
  1444. package/scripts/eslint_rules/lib/prefer-url-string.ts +1 -1
  1445. package/scripts/eslint_rules/lib/utils/lit.ts +26 -9
  1446. package/scripts/eslint_rules/lib/validate-timing-types.ts +330 -0
  1447. package/scripts/eslint_rules/rules-dir.mjs +4 -1
  1448. package/scripts/eslint_rules/tests/check-license-header.test.ts +8 -8
  1449. package/scripts/eslint_rules/tests/check-test-definitions.test.ts +0 -10
  1450. package/scripts/eslint_rules/tests/enforce-optional-properties-last.test.ts +1 -1
  1451. package/scripts/eslint_rules/tests/inject-checkbox-styles.test.ts +49 -0
  1452. package/scripts/eslint_rules/tests/no-imports-in-directory.test.ts +20 -5
  1453. package/scripts/eslint_rules/tests/no-lit-render-outside-of-view.test.ts +60 -10
  1454. package/scripts/eslint_rules/tests/no-new-lit-element-components.test.ts +4 -0
  1455. package/scripts/eslint_rules/tests/prefer-private-class-members.test.ts +2 -2
  1456. package/scripts/eslint_rules/tests/utils/RuleTester.ts +19 -1
  1457. package/scripts/eslint_rules/tests/utils.test.ts +1 -1
  1458. package/scripts/eslint_rules/tests/validate-timing-types.test.ts +289 -0
  1459. package/scripts/eslint_rules/tsconfig.json +3 -2
  1460. package/scripts/extract_bugs.ts +2 -3
  1461. package/scripts/javascript_natives/helpers.js +9 -9
  1462. package/scripts/migration/e2e_non_hosted_gemini.mjs +102 -0
  1463. package/scripts/migration/web-tests-esm/rename-legacy-global.mjs +1 -1
  1464. package/scripts/npm_test.js +1 -1
  1465. package/scripts/protocol_typescript/protocol_dts_generator.ts +27 -16
  1466. package/scripts/protocol_typescript/protocol_schema.d.ts +9 -4
  1467. package/scripts/reformat-clang-js-ts.js +1 -1
  1468. package/scripts/run_build.mjs +14 -2
  1469. package/scripts/run_start.mjs +6 -3
  1470. package/scripts/scaffold/scaffold-widget.js +7 -7
  1471. package/scripts/scaffold/templates/WidgetTemplate.ts.txt +1 -1
  1472. package/scripts/tools/update_goldens.py +143 -168
  1473. package/scripts/tsconfig.json +2 -1
  1474. package/scripts/whitespaces.txt +1 -1
  1475. package/front_end/core/sdk/SourceMapScopes.test.ts +0 -507
  1476. package/front_end/core/sdk/SourceMapScopes.ts +0 -472
  1477. package/front_end/models/ai_assistance/agents/PerformanceInsightsAgent.test.ts +0 -448
  1478. package/front_end/models/ai_assistance/agents/PerformanceInsightsAgent.ts +0 -498
  1479. package/front_end/models/trace/extras/FetchNodes.test.ts +0 -261
  1480. package/front_end/models/trace/extras/FetchNodes.ts +0 -254
  1481. package/front_end/models/trace/extras/Metadata.ts +0 -79
  1482. package/front_end/models/trace/insights/LCPPhases.test.ts +0 -71
  1483. package/front_end/models/trace/insights/LCPPhases.ts +0 -222
  1484. package/front_end/panels/animation/AnimationScreenshotPopover.ts +0 -65
  1485. package/front_end/panels/animation/animationScreenshotPopover.css +0 -18
  1486. package/front_end/panels/application/ReportingApiReportsView.test.ts +0 -117
  1487. package/front_end/panels/application/ReportingApiReportsView.ts +0 -88
  1488. package/front_end/panels/elements/ElementsTreeElementHighlighter.test.ts +0 -51
  1489. package/front_end/panels/elements/ElementsTreeElementHighlighter.ts +0 -107
  1490. package/front_end/panels/elements/components/LayoutPane.ts +0 -515
  1491. package/front_end/panels/elements/components/LayoutPaneUtils.ts +0 -41
  1492. package/front_end/panels/elements/components/layoutPane.css +0 -168
  1493. package/front_end/panels/sources/components/breakpointsView.css +0 -275
  1494. package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +0 -118
  1495. package/front_end/panels/timeline/components/insights/LCPPhases.ts +0 -256
  1496. package/front_end/panels/web_audio/AudioContextContentBuilder.ts +0 -113
  1497. package/front_end/panels/web_audio/AudioContextSelector.ts +0 -140
  1498. package/front_end/panels/web_audio/audioContextSelector.css +0 -20
  1499. package/front_end/panels/web_audio/graph_visualizer/EdgeView.ts +0 -80
  1500. package/front_end/panels/web_audio/graph_visualizer/GraphManager.ts +0 -46
  1501. package/front_end/panels/web_audio/graph_visualizer/GraphStyle.ts +0 -96
  1502. package/front_end/panels/web_audio/graph_visualizer/GraphView.ts +0 -197
  1503. package/front_end/panels/web_audio/graph_visualizer/NodeRendererUtility.ts +0 -43
  1504. package/front_end/panels/web_audio/graph_visualizer/NodeView.ts +0 -258
  1505. package/front_end/panels/web_audio/graph_visualizer/graph_visualizer.ts +0 -19
  1506. package/front_end/ui/components/docs/recorder_recording_view/basic.html +0 -20
  1507. package/front_end/ui/components/docs/recorder_recording_view/basic.ts +0 -99
  1508. package/front_end/ui/legacy/inspectorViewTabbedPane.css +0 -13
  1509. package/inspector_overlay/debug/tool_distances.html +0 -25
  1510. package/inspector_overlay/tool_distances.ts +0 -125
  1511. package/scripts/eslint_rules/lib/no-it-screenshot-only-or-repeat.ts +0 -47
  1512. package/scripts/eslint_rules/lib/no-screenshot-test-outside-perf-panel.ts +0 -77
  1513. package/scripts/eslint_rules/lib/screenshot-assertion-in-it-screenshot.ts +0 -110
  1514. package/scripts/eslint_rules/lib/single-screenshot-assertion-per-test.ts +0 -85
  1515. package/scripts/eslint_rules/tests/no-it-screenshot-only-or-repeat.test.ts +0 -34
  1516. package/scripts/eslint_rules/tests/no-screenshot-test-outside-perf-panel.test.ts +0 -99
  1517. package/scripts/eslint_rules/tests/screenshot-assertion-in-it-screenshot.test.ts +0 -79
  1518. package/scripts/eslint_rules/tests/single-screenshot-assertion-per-test.test.ts +0 -97
  1519. package/scripts/tools/update_goldens_unittest.py +0 -88
  1520. package/scripts/tools/update_goldens_v2.py +0 -68
  1521. package/scripts/watch_build.js +0 -230
  1522. /package/front_end/panels/recorder/models/{RecorderShorcutHelper.test.ts → RecorderShortcutHelper.test.ts} +0 -0
@@ -43,13 +43,16 @@ import * as Platform from '../../core/platform/platform.js';
43
43
  import * as Root from '../../core/root/root.js';
44
44
  import * as SDK from '../../core/sdk/sdk.js';
45
45
  import type * as Protocol from '../../generated/protocol.js';
46
+ import * as AiAssistanceModel from '../../models/ai_assistance/ai_assistance.js';
46
47
  import * as CrUXManager from '../../models/crux-manager/crux-manager.js';
48
+ import * as TextUtils from '../../models/text_utils/text_utils.js';
47
49
  import * as Trace from '../../models/trace/trace.js';
48
50
  import * as Workspace from '../../models/workspace/workspace.js';
49
51
  import * as TraceBounds from '../../services/trace_bounds/trace_bounds.js';
50
52
  import * as Adorners from '../../ui/components/adorners/adorners.js';
51
53
  import * as Dialogs from '../../ui/components/dialogs/dialogs.js';
52
54
  import * as LegacyWrapper from '../../ui/components/legacy_wrapper/legacy_wrapper.js';
55
+ import * as Snackbars from '../../ui/components/snackbars/snackbars.js';
53
56
  import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
54
57
  import * as UI from '../../ui/legacy/legacy.js';
55
58
  import * as ThemeSupport from '../../ui/legacy/theme_support/theme_support.js';
@@ -61,11 +64,10 @@ import * as AnnotationHelpers from './AnnotationHelpers.js';
61
64
  import {TraceLoadEvent} from './BenchmarkEvents.js';
62
65
  import * as TimelineComponents from './components/components.js';
63
66
  import * as TimelineInsights from './components/insights/insights.js';
64
- import {Tracker} from './FreshRecording.js';
65
67
  import {IsolateSelector} from './IsolateSelector.js';
66
68
  import {AnnotationModifiedEvent, ModificationsManager} from './ModificationsManager.js';
67
69
  import * as Overlays from './overlays/overlays.js';
68
- import {cpuprofileJsonGenerator, traceJsonGenerator} from './SaveFileFormatter.js';
70
+ import {traceJsonGenerator} from './SaveFileFormatter.js';
69
71
  import {StatusDialog} from './StatusDialog.js';
70
72
  import {type Client, TimelineController} from './TimelineController.js';
71
73
  import {Tab} from './TimelineDetailsView.js';
@@ -83,164 +85,155 @@ import {
83
85
  type TimelineSelection,
84
86
  } from './TimelineSelection.js';
85
87
  import {TimelineUIUtils} from './TimelineUIUtils.js';
88
+ import {createHiddenTracksOverlay} from './TrackConfigBanner.js';
86
89
  import {UIDevtoolsController} from './UIDevtoolsController.js';
87
90
  import {UIDevtoolsUtils} from './UIDevtoolsUtils.js';
88
91
  import * as Utils from './utils/utils.js';
89
92
 
90
93
  const UIStrings = {
91
94
  /**
92
- *@description Text that appears when user drag and drop something (for example, a file) in Timeline Panel of the Performance panel
95
+ * @description Text that appears when user drag and drop something (for example, a file) in Timeline Panel of the Performance panel
93
96
  */
94
- dropTimelineFileOrUrlHere: 'Drop timeline file or URL here',
97
+ dropTimelineFileOrUrlHere: 'Drop trace file or URL here',
98
+ /**
99
+ * @description Title of disable capture jsprofile setting in timeline panel of the performance panel
100
+ */
101
+ disableJavascriptSamples: 'Disable JavaScript samples',
95
102
  /**
96
103
  *@description Title of capture layers and pictures setting in timeline panel of the performance panel
97
104
  */
98
105
  enableAdvancedPaint: 'Enable advanced paint instrumentation (slow)',
99
106
  /**
100
- *@description Title of CSS selector stats setting in timeline panel of the performance panel
107
+ * @description Title of CSS selector stats setting in timeline panel of the performance panel
101
108
  */
102
109
  enableSelectorStats: 'Enable CSS selector stats (slow)',
103
110
  /**
104
- *@description Title of show screenshots setting in timeline panel of the performance panel
111
+ * @description Title of show screenshots setting in timeline panel of the performance panel
105
112
  */
106
113
  screenshots: 'Screenshots',
107
114
  /**
108
- *@description Text for the memory of the page
115
+ * @description Text for the memory of the page
109
116
  */
110
117
  memory: 'Memory',
111
118
  /**
112
- *@description Text to clear content
119
+ * @description Text to clear content
113
120
  */
114
121
  clear: 'Clear',
115
122
  /**
116
- *@description A label for a button that fixes something.
123
+ * @description A label for a button that fixes something.
117
124
  */
118
125
  fixMe: 'Fix me',
119
126
  /**
120
- *@description Tooltip text that appears when hovering over the largeicon load button
121
- */
122
- loadProfile: 'Load profile…',
123
- /**
124
- *@description Tooltip text that appears when hovering over the largeicon download button
125
- */
126
- saveProfile: 'Save profile…',
127
- /**
128
- *@description An option to save trace with annotations that appears in the menu of the toolbar download button. This is the expected default option, therefore it does not mention annotations.
129
- */
130
- saveTraceWithAnnotationsMenuOption: 'Save trace',
131
- /**
132
- *@description An option to save trace without annotations that appears in the menu of the toolbar download button
127
+ * @description Tooltip text that appears when hovering over the largeicon load button
133
128
  */
134
- saveTraceWithoutAnnotationsMenuOption: 'Save trace without annotations',
129
+ loadTrace: 'Load trace',
135
130
  /**
136
- *@description Text to take screenshots
131
+ * @description Text to take screenshots
137
132
  */
138
133
  captureScreenshots: 'Capture screenshots',
139
134
  /**
140
- *@description Text in Timeline Panel of the Performance panel
135
+ * @description Text in Timeline Panel of the Performance panel
141
136
  */
142
137
  showMemoryTimeline: 'Show memory timeline',
143
138
  /**
144
- *@description Tooltip text that appears when hovering over the largeicon settings gear in show settings pane setting in timeline panel of the performance panel
139
+ * @description Tooltip text that appears when hovering over the largeicon settings gear in show settings pane setting in timeline panel of the performance panel
145
140
  */
146
141
  captureSettings: 'Capture settings',
142
+ /**
143
+ * @description Text in Timeline Panel of the Performance panel
144
+ */
145
+ disablesJavascriptSampling: 'Disables JavaScript sampling, reduces overhead when running against mobile devices',
147
146
  /**
148
147
  *@description Text in Timeline Panel of the Performance panel
149
148
  */
150
149
  capturesAdvancedPaint: 'Captures advanced paint instrumentation, introduces significant performance overhead',
151
150
  /**
152
- *@description Text in Timeline Panel of the Performance panel
151
+ * @description Text in Timeline Panel of the Performance panel
153
152
  */
154
153
  capturesSelectorStats: 'Captures CSS selector statistics',
155
154
  /**
156
- *@description Text in Timeline Panel of the Performance panel
155
+ * @description Text in Timeline Panel of the Performance panel
157
156
  */
158
157
  network: 'Network:',
159
158
  /**
160
- *@description Text in Timeline Panel of the Performance panel
159
+ * @description Text in Timeline Panel of the Performance panel
161
160
  */
162
161
  cpu: 'CPU:',
163
162
  /**
164
- *@description Title of the 'Network conditions' tool in the bottom drawer
163
+ * @description Title of the 'Network conditions' tool in the bottom drawer
165
164
  */
166
165
  networkConditions: 'Network conditions',
167
166
  /**
168
- *@description Text in Timeline Panel of the Performance panel
167
+ * @description Text in Timeline Panel of the Performance panel
169
168
  */
170
169
  CpuThrottlingIsEnabled: '- CPU throttling is enabled',
171
170
  /**
172
- *@description Text in Timeline Panel of the Performance panel
171
+ * @description Text in Timeline Panel of the Performance panel
173
172
  */
174
173
  NetworkThrottlingIsEnabled: '- Network throttling is enabled',
175
174
  /**
176
- *@description Text in Timeline Panel of the Performance panel
175
+ * @description Text in Timeline Panel of the Performance panel
177
176
  */
178
177
  SignificantOverheadDueToPaint: '- Significant overhead due to paint instrumentation',
179
178
  /**
180
- *@description Text in Timeline Panel of the Performance panel
179
+ * @description Text in Timeline Panel of the Performance panel
181
180
  */
182
181
  SelectorStatsEnabled: '- Selector stats is enabled',
182
+ /**
183
+ * @description Text in Timeline Panel of the Performance panel
184
+ */
185
+ JavascriptSamplingIsDisabled: '- JavaScript sampling is disabled',
183
186
  /**
184
187
  *@description Text in Timeline Panel of the Performance panel
185
188
  */
186
189
  stoppingTimeline: 'Stopping timeline…',
187
190
  /**
188
- *@description Text in Timeline Panel of the Performance panel
191
+ * @description Text in Timeline Panel of the Performance panel
189
192
  */
190
193
  received: 'Received',
191
194
  /**
192
- *@description Text in Timeline Panel of the Performance panel
195
+ * @description Text in Timeline Panel of the Performance panel
193
196
  */
194
197
  processed: 'Processed',
195
198
  /**
196
- *@description Text to close something
199
+ * @description Text to close something
197
200
  */
198
201
  close: 'Close',
199
202
  /**
200
- *@description Status text to indicate the recording has failed in the Performance panel
203
+ * @description Status text to indicate the recording has failed in the Performance panel
201
204
  */
202
205
  recordingFailed: 'Recording failed',
203
206
  /**
204
- *@description Status text to indicate that exporting the trace has failed
207
+ * @description Status text to indicate that exporting the trace has failed
205
208
  */
206
209
  exportingFailed: 'Exporting the trace failed',
207
210
  /**
208
- * @description Text to indicate the progress of a profile. Informs the user that we are currently
209
- * creating a peformance profile.
211
+ * @description Text to indicate the progress of a trace. Informs the user that we are currently
212
+ * creating a performance trace.
210
213
  */
211
- profiling: 'Profiling…',
214
+ tracing: 'Tracing…',
212
215
  /**
213
- *@description Text in Timeline Panel of the Performance panel
216
+ * @description Text in Timeline Panel of the Performance panel
214
217
  */
215
218
  bufferUsage: 'Buffer usage',
216
219
  /**
217
- *@description Text in Timeline Panel of the Performance panel
218
- */
219
- loadingProfile: 'Loading profile…',
220
- /**
221
- *@description Text in Timeline Panel of the Performance panel
222
- */
223
- processingProfile: 'Processing profile…',
224
- /**
225
- *@description Text in Timeline Panel of the Performance panel
220
+ * @description Text in Timeline Panel of the Performance panel
226
221
  */
227
- initializingProfiler: 'Initializing profiler…',
222
+ loadingTrace: 'Loading trace…',
228
223
  /**
229
- *
230
- * @description Text for exporting basic traces
224
+ * @description Text in Timeline Panel of the Performance panel
231
225
  */
232
- exportNormalTraces: 'Basic performance traces',
226
+ processingTrace: 'Processing trace…',
233
227
  /**
234
- *
235
- * @description Text for exporting enhanced traces
228
+ * @description Text in Timeline Panel of the Performance panel
236
229
  */
237
- exportEnhancedTraces: 'Enhanced performance traces',
230
+ initializingTracing: 'Initializing tracing…',
238
231
  /**
239
- *@description Tooltip description for a checkbox that toggles the visibility of data added by extensions of this panel (Performance).
232
+ * @description Tooltip description for a checkbox that toggles the visibility of data added by extensions of this panel (Performance).
240
233
  */
241
234
  showDataAddedByExtensions: 'Show data added by extensions of the Performance panel',
242
235
  /**
243
- Label for a checkbox that toggles the visibility of data added by extensions of this panel (Performance).
236
+ * Label for a checkbox that toggles the visibility of data added by extensions of this panel (Performance).
244
237
  */
245
238
  showCustomtracks: 'Show custom tracks',
246
239
 
@@ -274,7 +267,7 @@ const UIStrings = {
274
267
  */
275
268
  eventSelected: 'Event {PH1} selected',
276
269
  /**
277
- *@description Text of a hyperlink to documentation.
270
+ * @description Text of a hyperlink to documentation.
278
271
  */
279
272
  learnMore: 'Learn more',
280
273
  /**
@@ -300,7 +293,11 @@ const UIStrings = {
300
293
  /**
301
294
  * @description Title of the shortcuts dialog shown to the user that lists keyboard shortcuts.
302
295
  */
303
- shortcutsDialogTitle: 'Keyboard shortcuts for flamechart'
296
+ shortcutsDialogTitle: 'Keyboard shortcuts for flamechart',
297
+ /**
298
+ * @description Notification shown to the user whenever DevTools receives an external request.
299
+ */
300
+ externalRequestReceived: '`DevTools` received an external request',
304
301
  } as const;
305
302
  const str_ = i18n.i18n.registerUIStrings('panels/timeline/TimelinePanel.ts', UIStrings);
306
303
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -322,6 +319,7 @@ type ViewMode = {
322
319
  }|{
323
320
  mode: 'VIEWING_TRACE',
324
321
  traceIndex: number,
322
+ forceOpenSidebar: boolean,
325
323
  }|{
326
324
  mode: 'STATUS_PANE_OVERLAY',
327
325
  };
@@ -336,6 +334,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
336
334
  private readonly toggleRecordAction: UI.ActionRegistration.Action;
337
335
  private readonly recordReloadAction: UI.ActionRegistration.Action;
338
336
  readonly #historyManager: TimelineHistoryManager;
337
+ private disableCaptureJSProfileSetting: Common.Settings.Setting<boolean>;
339
338
  private readonly captureLayersAndPicturesSetting: Common.Settings.Setting<boolean>;
340
339
  private readonly captureSelectorStatsSetting: Common.Settings.Setting<boolean>;
341
340
  readonly #thirdPartyTracksSetting: Common.Settings.Setting<boolean>;
@@ -349,6 +348,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
349
348
  readonly #dimThirdPartiesSetting: Common.Settings.Setting<boolean>|null = null;
350
349
  #thirdPartyCheckbox: UI.Toolbar.ToolbarSettingCheckbox|null = null;
351
350
 
351
+ #onAnnotationModifiedEventBound = this.#onAnnotationModifiedEvent.bind(this);
352
+
352
353
  /**
353
354
  * We get given any filters for a new trace when it is recorded/imported.
354
355
  * Because the user can then use the dropdown to navigate to another trace,
@@ -376,14 +377,15 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
376
377
  private cpuProfiler!: SDK.CPUProfilerModel.CPUProfilerModel|null;
377
378
  private clearButton!: UI.Toolbar.ToolbarButton;
378
379
  private loadButton!: UI.Toolbar.ToolbarButton;
379
- private saveButton!: UI.Toolbar.ToolbarButton|UI.Toolbar.ToolbarMenuButton;
380
+ private saveButton!: UI.Toolbar.ToolbarButton|UI.Toolbar.ToolbarMenuButton|UI.Toolbar.ToolbarItem;
380
381
  private homeButton?: UI.Toolbar.ToolbarButton;
382
+ private askAiButton?: UI.Toolbar.ToolbarButton;
381
383
  private statusDialog: StatusDialog|null = null;
382
384
  private landingPage!: UI.Widget.Widget;
383
385
  private loader?: TimelineLoader;
384
386
  private showScreenshotsToolbarCheckbox?: UI.Toolbar.ToolbarItem;
385
387
  private showMemoryToolbarCheckbox?: UI.Toolbar.ToolbarItem;
386
- private networkThrottlingSelect?: MobileThrottling.ThrottlingManager.NetworkThrottlingSelectorWrapper;
388
+ private networkThrottlingSelect?: MobileThrottling.NetworkThrottlingSelector.NetworkThrottlingSelect;
387
389
  private cpuThrottlingSelect?: MobileThrottling.ThrottlingManager.CPUThrottlingSelectorWrapper;
388
390
  private fileSelectorElement?: HTMLInputElement;
389
391
  private selection: TimelineSelection|null = null;
@@ -403,27 +405,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
403
405
  );
404
406
 
405
407
  #sideBar = new TimelineComponents.Sidebar.SidebarWidget();
406
- /**
407
- * Rather than auto-pop the sidebar every time the user records a trace,
408
- * which could get annoying, we instead persist the state of the sidebar
409
- * visibility to a setting so it's restored across sessions.
410
- * However, sometimes we have to automatically hide the sidebar, like when a
411
- * trace recording is happening, or the user is on the landing page. In those
412
- * times, we toggle this flag to true. Then, when we enter the VIEWING_TRACE
413
- * mode, we check this flag and pop the sidebar open if it's set to true.
414
- * Longer term a better fix here would be to divide the 3 UI screens
415
- * (status pane, landing page, trace view) into distinct components /
416
- * widgets, to avoid this complexity.
417
- */
418
- #restoreSidebarVisibilityOnTraceLoad = false;
419
-
420
- /**
421
- * Used to track an aria announcement that we need to alert for
422
- * screen-readers. We track these because we debounce announcements to not
423
- * overwhelm.
424
- */
425
- #pendingAriaMessage: string|null = null;
426
-
427
408
  #eventToRelatedInsights: TimelineComponents.RelatedInsightChips.EventToRelatedInsightsMap = new Map();
428
409
  #shortcutsDialog: Dialogs.ShortcutDialog.ShortcutDialog = new Dialogs.ShortcutDialog.ShortcutDialog();
429
410
  /**
@@ -443,6 +424,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
443
424
  'flamechart-selected-navigation', 'Classic - scroll to zoom', 'timeline.select-classic-navigation');
444
425
 
445
426
  #onMainEntryHovered: (event: Common.EventTarget.EventTargetEvent<number>) => void;
427
+ #hiddenTracksInfoBarPerTrace = new WeakMap<Trace.Handlers.Types.ParsedTrace, UI.Infobar.Infobar|'DISMISSED'>();
446
428
 
447
429
  constructor(traceModel?: Trace.TraceModel.Model) {
448
430
  super('timeline');
@@ -480,6 +462,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
480
462
 
481
463
  this.traceLoadStart = null;
482
464
 
465
+ this.disableCaptureJSProfileSetting = Common.Settings.Settings.instance().createSetting(
466
+ 'timeline-disable-js-sampling', false, Common.Settings.SettingStorageType.SESSION);
467
+ this.disableCaptureJSProfileSetting.setTitle(i18nString(UIStrings.disableJavascriptSamples));
483
468
  this.captureLayersAndPicturesSetting = Common.Settings.Settings.instance().createSetting(
484
469
  'timeline-capture-layers-and-pictures', false, Common.Settings.SettingStorageType.SESSION);
485
470
  this.captureLayersAndPicturesSetting.setTitle(i18nString(UIStrings.enableAdvancedPaint));
@@ -514,7 +499,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
514
499
  this.panelToolbar.wrappable = true;
515
500
  this.panelRightToolbar = timelineToolbarContainer.createChild('devtools-toolbar');
516
501
  this.panelRightToolbar.role = 'presentation';
517
- if (!isNode) {
502
+ if (!isNode && this.canRecord()) {
518
503
  this.createSettingsPane();
519
504
  this.updateShowSettingsToolbarButton();
520
505
  }
@@ -621,6 +606,14 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
621
606
  this.flameChart.revealAnnotation(event.annotation);
622
607
  });
623
608
 
609
+ this.#sideBar.element.addEventListener(TimelineComponents.Sidebar.HoverAnnotation.eventName, event => {
610
+ this.flameChart.hoverAnnotationInSidebar(event.annotation);
611
+ });
612
+
613
+ this.#sideBar.element.addEventListener(TimelineComponents.Sidebar.AnnotationHoverOut.eventName, () => {
614
+ this.flameChart.sidebarAnnotationHoverOut();
615
+ });
616
+
624
617
  this.#sideBar.element.addEventListener(TimelineInsights.SidebarInsight.InsightSetHovered.eventName, event => {
625
618
  if (event.bounds) {
626
619
  this.#minimapComponent.highlightBounds(event.bounds, /* withBracket */ true);
@@ -686,7 +679,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
686
679
 
687
680
  /**
688
681
  * This disables the 3P checkbox in the toolbar.
689
- * If the checkbox was checked, we flip it to indeterminiate to communicate it doesn't currently apply. */
682
+ * If the checkbox was checked, we flip it to indeterminiate to communicate it doesn't currently apply.
683
+ */
690
684
  set3PCheckboxDisabled(disabled: boolean): void {
691
685
  this.#thirdPartyCheckbox?.applyEnabledState(!disabled);
692
686
  if (this.#dimThirdPartiesSetting?.get()) {
@@ -759,7 +753,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
759
753
  #onFieldDataChanged(): void {
760
754
  const recs = Utils.Helpers.getThrottlingRecommendations();
761
755
  this.cpuThrottlingSelect?.updateRecommendedOption(recs.cpuOption);
762
- this.networkThrottlingSelect?.updateRecommendedConditions(recs.networkConditions);
756
+ if (this.networkThrottlingSelect) {
757
+ this.networkThrottlingSelect.recommendedConditions = recs.networkConditions;
758
+ }
763
759
  }
764
760
 
765
761
  loadFromEvents(events: Trace.Types.Events.Event[]): void {
@@ -782,10 +778,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
782
778
  return this.flameChart;
783
779
  }
784
780
 
785
- getMinimap(): TimelineMiniMap {
786
- return this.#minimapComponent;
787
- }
788
-
789
781
  /**
790
782
  * Determine if two view modes are equivalent. Useful because if {@see
791
783
  * #changeView} gets called and the new mode is identical to the current,
@@ -846,6 +838,14 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
846
838
  // Store any modifications (e.g. annotations) that the user has created
847
839
  // on the current trace before we move away to a new view.
848
840
  this.#saveModificationsForActiveTrace();
841
+
842
+ // No need to listen to annotation events, they cannot occur on non
843
+ // visible traces. When a trace is made visible, this listener is added
844
+ // back.
845
+ const manager = ModificationsManager.activeManager();
846
+ if (manager) {
847
+ manager.removeEventListener(AnnotationModifiedEvent.eventName, this.#onAnnotationModifiedEventBound);
848
+ }
849
849
  }
850
850
 
851
851
  this.#viewMode = newMode;
@@ -876,6 +876,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
876
876
  case 'LANDING_PAGE': {
877
877
  this.#removeStatusPane();
878
878
  this.#showLandingPage();
879
+ this.updateMiniMap();
879
880
  this.dispatchEventToListeners(Events.IS_VIEWING_TRACE, false);
880
881
 
881
882
  // Whilst we don't reset this, we hide it, mainly so the user cannot
@@ -888,9 +889,12 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
888
889
  this.#hideLandingPage();
889
890
  this.#setModelForActiveTrace();
890
891
  this.#removeStatusPane();
891
- this.#showSidebarIfRequired();
892
+ if (newMode.forceOpenSidebar) {
893
+ this.#showSidebar();
894
+ }
892
895
  this.flameChart.dimThirdPartiesIfRequired();
893
896
  this.dispatchEventToListeners(Events.IS_VIEWING_TRACE, true);
897
+
894
898
  return;
895
899
  }
896
900
 
@@ -918,6 +922,13 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
918
922
  return null;
919
923
  }
920
924
 
925
+ /**
926
+ * Exposed for handling external requests.
927
+ */
928
+ get model(): Trace.TraceModel.Model {
929
+ return this.#traceEngineModel;
930
+ }
931
+
921
932
  /**
922
933
  * NOTE: this method only exists to enable some layout tests to be migrated to the new engine.
923
934
  * DO NOT use this method within DevTools. It is marked as deprecated so
@@ -982,14 +993,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
982
993
  this.updateTimelineControls();
983
994
  }
984
995
 
985
- /**
986
- * This indicates that `this.#setModelForActiveTrace` has been called,
987
- * and so the main flame chart should have been populated.
988
- */
989
- hasFinishedLoadingTraceForTest(): boolean {
990
- return this.#viewMode.mode === 'VIEWING_TRACE';
991
- }
992
-
993
996
  private createSettingCheckbox(setting: Common.Settings.Setting<boolean>, tooltip: Platform.UIString.LocalizedString):
994
997
  UI.Toolbar.ToolbarSettingCheckbox {
995
998
  const checkboxItem = new UI.Toolbar.ToolbarSettingCheckbox(setting, tooltip);
@@ -1013,93 +1016,86 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1013
1016
  this.panelToolbar.removeToolbarItem(this.#sidebarToggleButton);
1014
1017
  }
1015
1018
 
1016
- #populateDownloadMenu(contextMenu: UI.ContextMenu.ContextMenu): void {
1017
- // If the current trace is annotated, add an option to save it without annotations.
1018
- const currModificationManager = ModificationsManager.activeManager();
1019
- const annotationsExist = currModificationManager && currModificationManager.getAnnotations()?.length > 0;
1020
-
1021
- contextMenu.viewSection().appendItem(i18nString(UIStrings.saveTraceWithAnnotationsMenuOption), () => {
1022
- Host.userMetrics.actionTaken(Host.UserMetrics.Action.PerfPanelTraceExported);
1023
- void this.saveToFile({savingEnhancedTrace: false, addModifications: true});
1024
- }, {
1025
- jslogContext: annotationsExist ? 'timeline.save-to-file-with-annotations' :
1026
- 'timeline.save-to-file-without-annotations',
1027
- });
1019
+ /**
1020
+ * Returns false if this was loaded in a standalone context such that recording is
1021
+ * not possible, like an enhanced trace (which opens a new devtools window) or
1022
+ * trace.cafe.
1023
+ */
1024
+ private canRecord(): boolean {
1025
+ // TODO(paulirish) Determine a more robust method as checking `primaryPageTarget()?.sessionId` isn't accurate.
1026
+ return true;
1027
+ }
1028
1028
 
1029
- if (annotationsExist) {
1030
- contextMenu.viewSection().appendItem(i18nString(UIStrings.saveTraceWithoutAnnotationsMenuOption), () => {
1031
- Host.userMetrics.actionTaken(Host.UserMetrics.Action.PerfPanelTraceExported);
1032
- void this.saveToFile({
1033
- savingEnhancedTrace: false,
1034
- addModifications: false,
1035
- });
1036
- }, {
1037
- jslogContext: 'timeline.save-to-file-without-annotations',
1038
- });
1029
+ private shouldEnableFullAskAI(): boolean {
1030
+ if (!Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_ASK_AI_FULL_BUTTON)) {
1031
+ return false;
1039
1032
  }
1033
+
1034
+ if (Root.Runtime.hostConfig.aidaAvailability?.enterprisePolicyValue ===
1035
+ Root.Runtime.GenAiEnterprisePolicyValue.DISABLE) {
1036
+ return false;
1037
+ }
1038
+
1039
+ return true;
1040
1040
  }
1041
1041
 
1042
1042
  private populateToolbar(): void {
1043
- // Record
1044
- this.panelToolbar.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton(this.toggleRecordAction));
1045
- this.panelToolbar.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton(this.recordReloadAction));
1043
+ const canRecord = this.canRecord();
1044
+
1045
+ if (canRecord || isNode) {
1046
+ this.panelToolbar.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton(this.toggleRecordAction));
1047
+ }
1048
+ if (canRecord) {
1049
+ this.panelToolbar.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton(this.recordReloadAction));
1050
+ }
1051
+
1046
1052
  this.clearButton = new UI.Toolbar.ToolbarButton(i18nString(UIStrings.clear), 'clear', undefined, 'timeline.clear');
1047
1053
  this.clearButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => this.onClearButton());
1048
1054
  this.panelToolbar.appendToolbarItem(this.clearButton);
1049
1055
 
1050
- // Load / SaveCLICK
1056
+ // Load / Save
1051
1057
  this.loadButton =
1052
- new UI.Toolbar.ToolbarButton(i18nString(UIStrings.loadProfile), 'import', undefined, 'timeline.load-from-file');
1058
+ new UI.Toolbar.ToolbarButton(i18nString(UIStrings.loadTrace), 'import', undefined, 'timeline.load-from-file');
1053
1059
  this.loadButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
1054
1060
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.PerfPanelTraceImported);
1055
1061
  this.selectFileToLoad();
1056
1062
  });
1057
1063
 
1058
- this.saveButton = new UI.Toolbar.ToolbarMenuButton(
1059
- this.#populateDownloadMenu.bind(this), true, false, 'timeline.save-to-file-more-options', 'download');
1060
- this.saveButton.setTitle(i18nString(UIStrings.saveProfile));
1061
-
1062
- if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_ENHANCED_TRACES)) {
1063
- this.saveButton.element.addEventListener('contextmenu', event => {
1064
- event.preventDefault();
1065
- event.stopPropagation();
1066
-
1067
- if (event.ctrlKey || event.button === 2) {
1068
- const contextMenu = new UI.ContextMenu.ContextMenu(event);
1069
- contextMenu.saveSection().appendItem(i18nString(UIStrings.exportNormalTraces), () => {
1070
- void this.saveToFile({savingEnhancedTrace: false, addModifications: false});
1071
- });
1072
- contextMenu.saveSection().appendItem(i18nString(UIStrings.exportEnhancedTraces), () => {
1073
- void this.saveToFile({savingEnhancedTrace: true, addModifications: false});
1074
- });
1075
-
1076
- void contextMenu.show();
1077
- } else {
1078
- void this.saveToFile({savingEnhancedTrace: false, addModifications: false});
1079
- }
1080
- });
1081
- }
1064
+ const exportTraceOptions = new TimelineComponents.ExportTraceOptions.ExportTraceOptions();
1065
+ exportTraceOptions.data = {
1066
+ onExport: this.saveToFile.bind(this),
1067
+ buttonEnabled: this.state === State.IDLE && this.#hasActiveTrace(),
1068
+ };
1069
+ this.saveButton = new UI.Toolbar.ToolbarItem(exportTraceOptions);
1082
1070
 
1083
1071
  this.panelToolbar.appendSeparator();
1084
1072
  this.panelToolbar.appendToolbarItem(this.loadButton);
1085
1073
  this.panelToolbar.appendToolbarItem(this.saveButton);
1086
1074
 
1087
- // History
1088
- this.panelToolbar.appendSeparator();
1075
+ if (canRecord) {
1076
+ this.panelToolbar.appendSeparator();
1089
1077
 
1090
- if (!isNode) {
1091
- this.homeButton = new UI.Toolbar.ToolbarButton(
1092
- i18nString(UIStrings.backToLiveMetrics), 'home', undefined, 'timeline.back-to-live-metrics');
1093
- this.homeButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
1094
- this.#changeView({mode: 'LANDING_PAGE'});
1095
- this.#historyManager.navigateToLandingPage();
1096
- });
1097
- this.panelToolbar.appendToolbarItem(this.homeButton);
1078
+ if (!isNode) {
1079
+ this.homeButton = new UI.Toolbar.ToolbarButton(
1080
+ i18nString(UIStrings.backToLiveMetrics), 'home', undefined, 'timeline.back-to-live-metrics');
1081
+ this.homeButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
1082
+ this.#changeView({mode: 'LANDING_PAGE'});
1083
+ this.#historyManager.navigateToLandingPage();
1084
+ });
1085
+ this.panelToolbar.appendToolbarItem(this.homeButton);
1086
+ this.panelToolbar.appendSeparator();
1087
+ }
1088
+ }
1089
+
1090
+ if (this.shouldEnableFullAskAI()) {
1091
+ this.askAiButton = new UI.Toolbar.ToolbarButton('Ask AI', 'button-magic', undefined, 'timeline.ask-ai');
1092
+ this.askAiButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, this.#onClickAskAIButton.bind(this));
1093
+ this.panelToolbar.appendToolbarItem(this.askAiButton);
1098
1094
  this.panelToolbar.appendSeparator();
1099
1095
  }
1100
1096
 
1097
+ // TODO(crbug.com/337909145): need to hide "Live metrics" option if !canRecord.
1101
1098
  this.panelToolbar.appendToolbarItem(this.#historyManager.button());
1102
- this.panelToolbar.appendSeparator();
1103
1099
 
1104
1100
  // View
1105
1101
  this.panelToolbar.appendSeparator();
@@ -1111,10 +1107,12 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1111
1107
 
1112
1108
  this.showMemoryToolbarCheckbox =
1113
1109
  this.createSettingCheckbox(this.showMemorySetting, i18nString(UIStrings.showMemoryTimeline));
1114
- this.panelToolbar.appendToolbarItem(this.showMemoryToolbarCheckbox);
1115
1110
 
1116
- // GC
1117
- this.panelToolbar.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton('components.collect-garbage'));
1111
+ if (canRecord) {
1112
+ // GC
1113
+ this.panelToolbar.appendToolbarItem(this.showMemoryToolbarCheckbox);
1114
+ this.panelToolbar.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton('components.collect-garbage'));
1115
+ }
1118
1116
 
1119
1117
  // Ignore list setting
1120
1118
  this.panelToolbar.appendSeparator();
@@ -1136,12 +1134,49 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1136
1134
  }
1137
1135
 
1138
1136
  // Settings
1139
- if (!isNode) {
1137
+ if (!isNode && canRecord) {
1140
1138
  this.panelRightToolbar.appendSeparator();
1141
1139
  this.panelRightToolbar.appendToolbarItem(this.showSettingsPaneButton);
1142
1140
  }
1143
1141
  }
1144
1142
 
1143
+ // Currently for debugging purposes only.
1144
+ #onClickAskAIButton(): void {
1145
+ const traceIndex = this.#activeTraceIndex();
1146
+ if (traceIndex === null) {
1147
+ return;
1148
+ }
1149
+
1150
+ const parsedTrace = this.#traceEngineModel.parsedTrace(traceIndex);
1151
+ if (parsedTrace === null) {
1152
+ return;
1153
+ }
1154
+
1155
+ const insights = this.#traceEngineModel.traceInsights(traceIndex);
1156
+ if (insights === null) {
1157
+ return;
1158
+ }
1159
+
1160
+ const traceMetadata = this.#traceEngineModel.metadata(traceIndex);
1161
+ if (traceMetadata === null) {
1162
+ return;
1163
+ }
1164
+
1165
+ const actionId = 'drjones.performance-panel-full-context';
1166
+ if (!UI.ActionRegistry.ActionRegistry.instance().hasAction(actionId)) {
1167
+ return;
1168
+ }
1169
+
1170
+ // Currently only support a single insight set.
1171
+ const insightSet = [...insights.values()].at(0) ?? null;
1172
+ const context = Utils.AIContext.AgentFocus.full(parsedTrace, insightSet, traceMetadata);
1173
+ UI.Context.Context.instance().setFlavor(Utils.AIContext.AgentFocus, context);
1174
+
1175
+ // Trigger the AI Assistance panel to open.
1176
+ const action = UI.ActionRegistry.ActionRegistry.instance().getAction(actionId);
1177
+ void action.execute();
1178
+ }
1179
+
1145
1180
  #setupNavigationSetting(): HTMLElement {
1146
1181
  const currentNavSetting = Common.Settings.moduleSetting('flamechart-selected-navigation').get();
1147
1182
  const hideTheDialogForTests: string|null = localStorage.getItem('hide-shortcuts-dialog-for-test');
@@ -1260,6 +1295,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1260
1295
  this);
1261
1296
  SDK.CPUThrottlingManager.CPUThrottlingManager.instance().addEventListener(
1262
1297
  SDK.CPUThrottlingManager.Events.RATE_CHANGED, this.updateShowSettingsToolbarButton, this);
1298
+ this.disableCaptureJSProfileSetting.addChangeListener(this.updateShowSettingsToolbarButton, this);
1263
1299
  this.captureLayersAndPicturesSetting.addChangeListener(this.updateShowSettingsToolbarButton, this);
1264
1300
  this.captureSelectorStatsSetting.addChangeListener(this.updateShowSettingsToolbarButton, this);
1265
1301
 
@@ -1272,16 +1308,20 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1272
1308
  cpuThrottlingPane.append(this.cpuThrottlingSelect.control.element);
1273
1309
 
1274
1310
  this.settingsPane.append(UI.SettingsUI.createSettingCheckbox(
1275
- this.captureLayersAndPicturesSetting.title(), this.captureLayersAndPicturesSetting,
1276
- i18nString(UIStrings.capturesAdvancedPaint)));
1311
+ this.captureSelectorStatsSetting.title(), this.captureSelectorStatsSetting,
1312
+ i18nString(UIStrings.capturesSelectorStats)));
1277
1313
 
1278
1314
  const networkThrottlingPane = this.settingsPane.createChild('div');
1279
1315
  networkThrottlingPane.append(i18nString(UIStrings.network));
1280
1316
  networkThrottlingPane.append(this.createNetworkConditionsSelectToolbarItem().element);
1281
1317
 
1282
1318
  this.settingsPane.append(UI.SettingsUI.createSettingCheckbox(
1283
- this.captureSelectorStatsSetting.title(), this.captureSelectorStatsSetting,
1284
- i18nString(UIStrings.capturesSelectorStats)));
1319
+ this.captureLayersAndPicturesSetting.title(), this.captureLayersAndPicturesSetting,
1320
+ i18nString(UIStrings.capturesAdvancedPaint)));
1321
+
1322
+ this.settingsPane.append(UI.SettingsUI.createSettingCheckbox(
1323
+ this.disableCaptureJSProfileSetting.title(), this.disableCaptureJSProfileSetting,
1324
+ i18nString(UIStrings.disablesJavascriptSampling)));
1285
1325
 
1286
1326
  const thirdPartyCheckbox =
1287
1327
  this.createSettingCheckbox(this.#thirdPartyTracksSetting, i18nString(UIStrings.showDataAddedByExtensions));
@@ -1299,10 +1339,11 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1299
1339
  this.updateSettingsPaneVisibility();
1300
1340
  }
1301
1341
 
1302
- private createNetworkConditionsSelectToolbarItem(): UI.Toolbar.ToolbarComboBox {
1303
- const toolbarItem = new UI.Toolbar.ToolbarComboBox(null, i18nString(UIStrings.networkConditions));
1342
+ private createNetworkConditionsSelectToolbarItem(): UI.Toolbar.ToolbarItem {
1343
+ const toolbarItem = new UI.Toolbar.ToolbarItem(document.createElement('div'));
1304
1344
  this.networkThrottlingSelect =
1305
- MobileThrottling.ThrottlingManager.throttlingManager().createNetworkThrottlingSelector(toolbarItem.element);
1345
+ MobileThrottling.NetworkThrottlingSelector.NetworkThrottlingSelect.createForGlobalConditions(
1346
+ toolbarItem.element, i18nString(UIStrings.networkConditions));
1306
1347
  return toolbarItem;
1307
1348
  }
1308
1349
 
@@ -1348,7 +1389,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1348
1389
  * 3. Visual track configuration (re-ordering or hiding tracks).
1349
1390
  */
1350
1391
  async saveToFile(config: {
1351
- savingEnhancedTrace: boolean,
1392
+ includeScriptContent: boolean,
1393
+ includeSourceMaps: boolean,
1352
1394
  addModifications: boolean,
1353
1395
  }): Promise<void> {
1354
1396
  if (this.state !== State.IDLE) {
@@ -1366,17 +1408,29 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1366
1408
  return;
1367
1409
  }
1368
1410
 
1411
+ // Grab the script mapping to be able to filter out by url.
1412
+ const mappedScriptsWithData = Trace.Handlers.ModelHandlers.Scripts.data().scripts;
1413
+ const scriptByIdMap = new Map<string, Trace.Handlers.ModelHandlers.Scripts.Script>();
1414
+
1415
+ for (const mapScript of mappedScriptsWithData) {
1416
+ scriptByIdMap.set(`${mapScript.isolate}.${mapScript.scriptId}`, mapScript);
1417
+ }
1418
+
1369
1419
  const metadata = this.#traceEngineModel.metadata(this.#viewMode.traceIndex) ?? {};
1370
1420
 
1371
- const shouldRetainScriptSources = config.savingEnhancedTrace &&
1372
- Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_COMPILED_SOURCES);
1373
- if (!shouldRetainScriptSources) {
1374
- traceEvents = traceEvents.map(event => {
1375
- if (Trace.Types.Events.isAnyScriptCatchupEvent(event) && event.name !== 'StubScriptCatchup') {
1421
+ traceEvents = traceEvents.map(event => {
1422
+ if (Trace.Types.Events.isAnyScriptCatchupEvent(event) && event.name !== 'StubScriptCatchup') {
1423
+ const mappedScript = scriptByIdMap.get(`${event.args.data.isolate}.${event.args.data.scriptId}`);
1424
+
1425
+ // If the checkbox to include script content is not checked or if it comes from and
1426
+ // extension we dont include the script content.
1427
+ if (!config.includeScriptContent ||
1428
+ (mappedScript?.url && Trace.Helpers.Trace.isExtensionUrl(mappedScript.url))) {
1376
1429
  return {
1377
1430
  cat: event.cat,
1378
1431
  name: 'StubScriptCatchup',
1379
1432
  ts: event.ts,
1433
+ dur: event.dur,
1380
1434
  ph: event.ph,
1381
1435
  pid: event.pid,
1382
1436
  tid: event.tid,
@@ -1385,66 +1439,27 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1385
1439
  },
1386
1440
  } as Trace.Types.Events.V8SourceRundownSourcesStubScriptCatchupEvent;
1387
1441
  }
1442
+ }
1388
1443
 
1389
- return event;
1390
- });
1391
- }
1444
+ return event;
1445
+ });
1392
1446
 
1393
1447
  metadata.modifications = config.addModifications ? ModificationsManager.activeManager()?.toJSON() : undefined;
1394
- if (config.addModifications) {
1395
- // Get any visual track config
1396
- const visualConfig = this.flameChart.getPersistedConfigMetadata(trace);
1397
- // If both these values are null then the user has not made any visual
1398
- // changes, so we don't need to store it into the saved file.
1399
- if (visualConfig.main !== null || visualConfig.network !== null) {
1400
- metadata.visualTrackConfig = visualConfig;
1401
- }
1402
- }
1403
- metadata.enhancedTraceVersion =
1404
- config.savingEnhancedTrace ? SDK.EnhancedTracesParser.EnhancedTracesParser.enhancedTraceVersion : undefined;
1405
-
1406
- const traceStart = Platform.DateUtilities.toISO8601Compact(new Date());
1407
- let fileName: Platform.DevToolsPath.RawPathString;
1408
- if (metadata?.dataOrigin === Trace.Types.File.DataOrigin.CPU_PROFILE) {
1409
- fileName = `CPU-${traceStart}.cpuprofile` as Platform.DevToolsPath.RawPathString;
1410
- } else if (metadata?.enhancedTraceVersion) {
1411
- fileName = `EnhancedTraces-${traceStart}.json` as Platform.DevToolsPath.RawPathString;
1412
- } else {
1413
- fileName = `Trace-${traceStart}.json` as Platform.DevToolsPath.RawPathString;
1414
- }
1448
+
1449
+ // NOTE: we used to export the track configuration changes into the trace
1450
+ // file here.
1451
+ // We don't do this now because as of August 2025 (M141) track
1452
+ // configuration is persisted globally (not per trace). When a user imports
1453
+ // a trace, we don't look for any configuration (as we treat the user's
1454
+ // DevTools config as the canonical config), so it doesn't make sense to
1455
+ // export the config.
1415
1456
 
1416
1457
  try {
1417
- // TODO(crbug.com/1456818): Extract this logic and add more tests.
1418
- let traceAsString;
1419
- if (metadata?.dataOrigin === Trace.Types.File.DataOrigin.CPU_PROFILE) {
1420
- const profileEvent = traceEvents.find(e => e.name === 'CpuProfile');
1421
- if (!profileEvent?.args?.data) {
1422
- return;
1423
- }
1424
- const profileEventData = profileEvent.args?.data;
1425
- if (profileEventData.hasOwnProperty('cpuProfile')) {
1426
- // TODO(crbug.com/1456799): Currently use a hack way because we can't differentiate
1427
- // cpuprofile from trace events when loading a file.
1428
- // The loader will directly add the fake trace created from CpuProfile to the tracingModel.
1429
- // And there is where the old saving logic saves the cpuprofile.
1430
- // This will be solved when the CPUProfileHandler is done. Then we can directly get it
1431
- // from the new traceEngine
1432
- const profile = (profileEventData as {cpuProfile: Protocol.Profiler.Profile}).cpuProfile;
1433
- traceAsString = cpuprofileJsonGenerator(profile);
1434
- }
1435
- } else {
1436
- const formattedTraceIter = traceJsonGenerator(traceEvents, {
1437
- ...metadata,
1438
- sourceMaps: config.savingEnhancedTrace ? metadata?.sourceMaps : undefined,
1439
- });
1440
- traceAsString = Array.from(formattedTraceIter).join('');
1441
- }
1442
- if (!traceAsString) {
1443
- throw new Error('Trace content empty');
1444
- }
1445
- await Workspace.FileManager.FileManager.instance().save(
1446
- fileName, traceAsString, true /* forceSaveAs */, false /* isBase64 */);
1447
- Workspace.FileManager.FileManager.instance().close(fileName);
1458
+ await this.innerSaveToFile(traceEvents, metadata, {
1459
+ includeScriptContent: config.includeScriptContent,
1460
+ includeSourceMaps: config.includeSourceMaps,
1461
+ addModifications: config.addModifications
1462
+ });
1448
1463
  } catch (e) {
1449
1464
  // We expect the error to be an Error class, but this deals with any weird case where it's not.
1450
1465
  const error = e instanceof Error ? e : new Error(e);
@@ -1459,6 +1474,92 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1459
1474
  }
1460
1475
  }
1461
1476
 
1477
+ async innerSaveToFile(traceEvents: readonly Trace.Types.Events.Event[], metadata: Trace.Types.File.MetaData, config: {
1478
+ includeScriptContent: boolean,
1479
+ includeSourceMaps: boolean,
1480
+ addModifications: boolean,
1481
+ }): Promise<void> {
1482
+ // Base the filename on the trace's time of recording
1483
+ const isoDate =
1484
+ Platform.DateUtilities.toISO8601Compact(metadata.startTime ? new Date(metadata.startTime) : new Date());
1485
+
1486
+ const isCpuProfile = metadata.dataOrigin === Trace.Types.File.DataOrigin.CPU_PROFILE;
1487
+ const {includeScriptContent, includeSourceMaps} = config;
1488
+ metadata.enhancedTraceVersion =
1489
+ includeScriptContent ? SDK.EnhancedTracesParser.EnhancedTracesParser.enhancedTraceVersion : undefined;
1490
+
1491
+ let fileName = (isCpuProfile ? `CPU-${isoDate}.cpuprofile` :
1492
+ includeScriptContent ? `EnhancedTrace-${isoDate}.json` :
1493
+ `Trace-${isoDate}.json`) as Platform.DevToolsPath.RawPathString;
1494
+
1495
+ let blobParts: string[] = [];
1496
+ if (isCpuProfile) {
1497
+ const profile = Trace.Helpers.SamplesIntegrator.SamplesIntegrator.extractCpuProfileFromFakeTrace(traceEvents);
1498
+ blobParts = [JSON.stringify(profile)];
1499
+ } else {
1500
+ const filteredMetadataSourceMaps =
1501
+ includeScriptContent && includeSourceMaps ? this.#filterMetadataSourceMaps(metadata) : undefined;
1502
+ const formattedTraceIter = traceJsonGenerator(traceEvents, {
1503
+ ...metadata,
1504
+ sourceMaps: filteredMetadataSourceMaps,
1505
+ });
1506
+ blobParts = Array.from(formattedTraceIter);
1507
+ }
1508
+
1509
+ if (!blobParts.length) {
1510
+ throw new Error('Trace content empty');
1511
+ }
1512
+
1513
+ let blob = new Blob(blobParts, {type: 'application/json'});
1514
+
1515
+ // TODO: Enable by default and connect with upcoming SaveDialog
1516
+ if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_SAVE_AS_GZ)) {
1517
+ fileName = `${fileName}.gz` as Platform.DevToolsPath.RawPathString;
1518
+ const gzStream = Common.Gzip.compressStream(blob.stream());
1519
+ blob = await new Response(gzStream, {
1520
+ headers: {'Content-Type': 'application/gzip'},
1521
+ }).blob();
1522
+
1523
+ // At this point this should be true:
1524
+ // blobParts.join('') === (await gzBlob.arrayBuffer().then(bytes => Common.Gzip.arrayBufferToString(bytes)))
1525
+ }
1526
+
1527
+ // In some cases Base64.encode() can return undefined; see crbug.com/436482118 for details.
1528
+ // TODO(crbug.com/436482118): understand this edge case and fix the Base64.encode method to not just return undefined.
1529
+ let bytesAsB64: string|null = null;
1530
+ try {
1531
+ // The maximum string length in v8 is `2 ** 29 - 23`, aka 538 MB.
1532
+ // If the gzipped&base64-encoded trace is larger than that, this'll throw a RangeError.
1533
+ bytesAsB64 = await Common.Base64.encode(blob);
1534
+ } catch {
1535
+ }
1536
+ if (bytesAsB64?.length) {
1537
+ const contentData = new TextUtils.ContentData.ContentData(bytesAsB64, /* isBase64=*/ true, blob.type);
1538
+ await Workspace.FileManager.FileManager.instance().save(fileName, contentData, /* forceSaveAs=*/ true);
1539
+ Workspace.FileManager.FileManager.instance().close(fileName);
1540
+ } else {
1541
+ // Fallback scenario used in edge case where trace.gz.base64 is larger than 538 MB.
1542
+ const url = URL.createObjectURL(blob);
1543
+ const a = document.createElement('a');
1544
+ a.href = url;
1545
+ a.download = fileName;
1546
+ a.click();
1547
+ URL.revokeObjectURL(url);
1548
+ }
1549
+ }
1550
+
1551
+ #filterMetadataSourceMaps(metadata: Trace.Types.File.MetaData): Trace.Types.File.MetadataSourceMap[]|undefined {
1552
+ if (!metadata.sourceMaps) {
1553
+ return undefined;
1554
+ }
1555
+
1556
+ // extensions sourcemaps provide little to no-value for the exported trace
1557
+ // debugging, so they are filtered out.
1558
+ return metadata.sourceMaps.filter(value => {
1559
+ return value.url && Trace.Helpers.Trace.isExtensionUrl(value.url);
1560
+ });
1561
+ }
1562
+
1462
1563
  #showExportTraceErrorDialog(error: Error): void {
1463
1564
  if (this.statusDialog) {
1464
1565
  this.statusDialog.remove();
@@ -1489,6 +1590,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1489
1590
  this.#changeView({
1490
1591
  mode: 'VIEWING_TRACE',
1491
1592
  traceIndex: recordingData.parsedTraceIndex,
1593
+ forceOpenSidebar: false,
1492
1594
  });
1493
1595
  }
1494
1596
  }
@@ -1502,6 +1604,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1502
1604
  this.#changeView({
1503
1605
  mode: 'VIEWING_TRACE',
1504
1606
  traceIndex: recordingData.parsedTraceIndex,
1607
+ forceOpenSidebar: false,
1505
1608
  });
1506
1609
  }
1507
1610
  return true;
@@ -1527,25 +1630,20 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1527
1630
  if (this.state !== State.IDLE) {
1528
1631
  return;
1529
1632
  }
1530
- const maximumTraceFileLengthToDetermineEnhancedTraces = 5000;
1531
- // We are expecting to locate the enhanced traces version within the first 5000
1532
- // characters of the trace file if the given trace file is enhanced traces.
1533
- // Doing so can avoid serializing the whole trace while needing to serialize
1534
- // it again in rehydrated session for enhanced traces.
1535
- const blob = file.slice(0, maximumTraceFileLengthToDetermineEnhancedTraces);
1536
- const content = await blob.text();
1633
+
1634
+ const content = await Common.Gzip.fileToString(file);
1537
1635
  if (content.includes('enhancedTraceVersion')) {
1538
1636
  await window.scheduler.postTask(() => {
1539
- this.#launchRehydratedSession(file);
1637
+ this.#launchRehydratedSession(content);
1540
1638
  }, {priority: 'background'});
1541
1639
  } else {
1542
- this.loader = await TimelineLoader.loadFromFile(file, this);
1640
+ this.loader = TimelineLoader.loadFromParsedJsonFile(JSON.parse(content), this);
1543
1641
  this.prepareToLoadTimeline();
1544
1642
  }
1545
1643
  this.createFileSelector();
1546
1644
  }
1547
1645
 
1548
- #launchRehydratedSession(file: File): void {
1646
+ #launchRehydratedSession(traceJson: string): void {
1549
1647
  let rehydratingWindow: Window|null = null;
1550
1648
  let pathToLaunch: string|null = null;
1551
1649
  const url = new URL(window.location.href);
@@ -1557,7 +1655,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1557
1655
  const hostWindow = window;
1558
1656
  function onMessageHandler(ev: MessageEvent): void {
1559
1657
  if (url && ev.data && ev.data.type === 'REHYDRATING_WINDOW_READY') {
1560
- rehydratingWindow?.postMessage({type: 'REHYDRATING_TRACE_FILE', traceFile: file}, url.origin);
1658
+ rehydratingWindow?.postMessage({type: 'REHYDRATING_TRACE_FILE', traceJson}, url.origin);
1561
1659
  }
1562
1660
  hostWindow.removeEventListener('message', onMessageHandler);
1563
1661
  }
@@ -1575,6 +1673,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1575
1673
 
1576
1674
  private updateMiniMap(): void {
1577
1675
  if (this.#viewMode.mode !== 'VIEWING_TRACE') {
1676
+ this.#minimapComponent.setData(null);
1578
1677
  return;
1579
1678
  }
1580
1679
 
@@ -1610,11 +1709,11 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1610
1709
  }
1611
1710
 
1612
1711
  #extensionDataVisibilityChanged(): void {
1613
- this.flameChart.rebuildDataForTrace();
1712
+ this.flameChart.rebuildDataForTrace({updateType: 'REDRAW_EXISTING_TRACE'});
1614
1713
  }
1615
1714
 
1616
1715
  private updateSettingsPaneVisibility(): void {
1617
- if (isNode) {
1716
+ if (isNode || !this.canRecord()) {
1618
1717
  return;
1619
1718
  }
1620
1719
  if (this.showSettingsPaneSetting.get()) {
@@ -1640,6 +1739,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1640
1739
  if (this.captureSelectorStatsSetting.get()) {
1641
1740
  messages.push(i18nString(UIStrings.SelectorStatsEnabled));
1642
1741
  }
1742
+ if (this.disableCaptureJSProfileSetting.get()) {
1743
+ messages.push(i18nString(UIStrings.JavascriptSamplingIsDisabled));
1744
+ }
1643
1745
 
1644
1746
  this.showSettingsPaneButton.setChecked(messages.length > 0);
1645
1747
  this.showSettingsPaneButton.element.style.setProperty('--dot-toggle-top', '16px');
@@ -1782,7 +1884,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1782
1884
  await this.#navigateToAboutBlank();
1783
1885
  }
1784
1886
  const recordingOptions = {
1785
- enableJSSampling: true,
1887
+ enableJSSampling: !this.disableCaptureJSProfileSetting.get(),
1786
1888
  capturePictures: this.captureLayersAndPicturesSetting.get(),
1787
1889
  captureFilmStrip: this.showScreenshotsSetting.get(),
1788
1890
  captureSelectorStats: this.captureSelectorStatsSetting.get(),
@@ -1888,20 +1990,33 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1888
1990
  }
1889
1991
 
1890
1992
  private updateTimelineControls(): void {
1993
+ if (this.#viewMode.mode === 'VIEWING_TRACE') {
1994
+ this.#addSidebarIconToToolbar();
1995
+ }
1996
+
1997
+ const exportTraceOptionsElement =
1998
+ this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions;
1999
+ exportTraceOptionsElement.data = {
2000
+ onExport: this.saveToFile.bind(this),
2001
+ buttonEnabled: this.state === State.IDLE && this.#hasActiveTrace(),
2002
+ };
2003
+
2004
+ this.#historyManager.setEnabled(this.state === State.IDLE);
2005
+ this.clearButton.setEnabled(this.state === State.IDLE);
2006
+ this.dropTarget.setEnabled(this.state === State.IDLE);
2007
+ this.loadButton.setEnabled(this.state === State.IDLE);
1891
2008
  this.toggleRecordAction.setToggled(this.state === State.RECORDING);
1892
2009
  this.toggleRecordAction.setEnabled(this.state === State.RECORDING || this.state === State.IDLE);
2010
+ this.askAiButton?.setEnabled(this.state === State.IDLE && this.#hasActiveTrace());
2011
+
2012
+ if (!this.canRecord()) {
2013
+ return;
2014
+ }
2015
+
1893
2016
  this.recordReloadAction.setEnabled(isNode ? false : this.state === State.IDLE);
1894
- this.#historyManager.setEnabled(this.state === State.IDLE);
1895
- this.clearButton.setEnabled(this.state === State.IDLE);
1896
2017
  this.panelToolbar.setEnabled(this.state !== State.LOADING);
1897
2018
  this.panelRightToolbar.setEnabled(this.state !== State.LOADING);
1898
- this.dropTarget.setEnabled(this.state === State.IDLE);
1899
- this.loadButton.setEnabled(this.state === State.IDLE);
1900
- this.saveButton.setEnabled(this.state === State.IDLE && this.#hasActiveTrace());
1901
2019
  this.homeButton?.setEnabled(this.state === State.IDLE && this.#hasActiveTrace());
1902
- if (this.#viewMode.mode === 'VIEWING_TRACE') {
1903
- this.#addSidebarIconToToolbar();
1904
- }
1905
2020
  }
1906
2021
 
1907
2022
  async toggleRecording(): Promise<void> {
@@ -1932,8 +2047,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1932
2047
  this.flameChart.getNetworkDataProvider().reset();
1933
2048
  this.flameChart.reset();
1934
2049
  this.#changeView({mode: 'LANDING_PAGE'});
1935
- UI.Context.Context.instance().setFlavor(Utils.AICallTree.AICallTree, null);
1936
- UI.Context.Context.instance().setFlavor(Utils.InsightAIContext.ActiveInsight, null);
2050
+ UI.Context.Context.instance().setFlavor(Utils.AIContext.AgentFocus, null);
1937
2051
  }
1938
2052
 
1939
2053
  #hasActiveTrace(): boolean {
@@ -1953,32 +2067,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1953
2067
  ActiveFilters.instance().setFilters(newActiveFilters);
1954
2068
  }
1955
2069
 
1956
- /**
1957
- * If we generate a lot of the same aria announcements very quickly, we don't
1958
- * want to send them all to the user.
1959
- */
1960
- #ariaDebouncer = Common.Debouncer.debounce(() => {
1961
- if (this.#pendingAriaMessage) {
1962
- UI.ARIAUtils.alert(this.#pendingAriaMessage);
1963
- this.#pendingAriaMessage = null;
1964
- }
1965
- }, 1_000);
1966
-
1967
- #makeAriaAnnouncement(message: string): void {
1968
- // If we already have one pending, don't queue this one.
1969
- if (message === this.#pendingAriaMessage) {
1970
- return;
1971
- }
1972
-
1973
- // If the pending message is different, immediately announce the pending
1974
- // message + then update the pending message to the new one.
1975
- if (this.#pendingAriaMessage) {
1976
- UI.ARIAUtils.alert(this.#pendingAriaMessage);
1977
- }
1978
- this.#pendingAriaMessage = message;
1979
- this.#ariaDebouncer();
1980
- }
1981
-
1982
2070
  /**
1983
2071
  * Called when we update the active trace that is being shown to the user.
1984
2072
  * This is called from {@see changeView} when we change the UI to show a
@@ -2043,36 +2131,12 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2043
2131
 
2044
2132
  const exclusiveFilter = this.#exclusiveFilterPerTrace.get(traceIndex) ?? null;
2045
2133
  this.#applyActiveFilters(parsedTrace.Meta.traceIsGeneric, exclusiveFilter);
2134
+ (this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions)
2135
+ .updateContentVisibility(currentManager ? currentManager.getAnnotations()?.length > 0 : false);
2046
2136
 
2047
- // Add ModificationsManager listeners for annotations change to update the Annotation Overlays.
2048
- currentManager?.addEventListener(AnnotationModifiedEvent.eventName, event => {
2049
- // Update screen readers.
2050
- const announcementText = AnnotationHelpers.ariaAnnouncementForModifiedEvent(event as AnnotationModifiedEvent);
2051
- if (announcementText) {
2052
- this.#makeAriaAnnouncement(announcementText);
2053
- }
2054
-
2055
- const {overlay, action} = (event as AnnotationModifiedEvent);
2056
- if (action === 'Add') {
2057
- this.flameChart.addOverlay(overlay);
2058
- } else if (action === 'Remove') {
2059
- this.flameChart.removeOverlay(overlay);
2060
- } else if (action === 'UpdateTimeRange' && AnnotationHelpers.isTimeRangeLabel(overlay)) {
2061
- this.flameChart.updateExistingOverlay(overlay, {
2062
- bounds: overlay.bounds,
2063
- });
2064
- } else if (action === 'UpdateLinkToEntry' && AnnotationHelpers.isEntriesLink(overlay)) {
2065
- this.flameChart.updateExistingOverlay(overlay, {
2066
- entryTo: overlay.entryTo,
2067
- });
2068
- } else if (action === 'EnterLabelEditState' && AnnotationHelpers.isEntryLabel(overlay)) {
2069
- this.flameChart.enterLabelEditMode(overlay);
2070
- }
2071
-
2072
- const annotations = currentManager.getAnnotations();
2073
- const annotationEntryToColorMap = this.buildColorsAnnotationsMap(annotations);
2074
- this.#sideBar.setAnnotations(annotations, annotationEntryToColorMap);
2075
- });
2137
+ // Add ModificationsManager listeners for annotations change to update the
2138
+ // Annotation Overlays.
2139
+ currentManager?.addEventListener(AnnotationModifiedEvent.eventName, this.#onAnnotationModifiedEventBound);
2076
2140
 
2077
2141
  // To calculate the activity we might want to zoom in, we use the top-most main-thread track
2078
2142
  const topMostMainThreadAppender =
@@ -2126,9 +2190,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2126
2190
  this.updateMiniMap();
2127
2191
  this.statusDialog?.updateProgressBar(i18nString(UIStrings.processed), 90);
2128
2192
  this.updateTimelineControls();
2193
+ this.#maybeCreateHiddenTracksBanner(parsedTrace);
2129
2194
 
2130
2195
  this.#setActiveInsight(null);
2131
-
2132
2196
  this.#sideBar.setInsights(traceInsightsSets);
2133
2197
 
2134
2198
  this.#eventToRelatedInsights.clear();
@@ -2157,8 +2221,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2157
2221
  }
2158
2222
  }
2159
2223
 
2160
- this.#showSidebarIfRequired();
2161
-
2162
2224
  // When the timeline is loaded for the first time, setup the shortcuts dialog and log what navigation setting is selected.
2163
2225
  // Logging the setting on the first timeline load will allow us to get an estimate number of people using each option.
2164
2226
  if (this.#traceEngineModel.size() === 1) {
@@ -2173,25 +2235,53 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2173
2235
  }
2174
2236
  }
2175
2237
 
2238
+ #onAnnotationModifiedEvent(e: Event): void {
2239
+ const event = e as AnnotationModifiedEvent;
2240
+ const announcementText = AnnotationHelpers.ariaAnnouncementForModifiedEvent(event);
2241
+ if (announcementText) {
2242
+ UI.ARIAUtils.LiveAnnouncer.alert(announcementText);
2243
+ }
2244
+
2245
+ const {overlay, action} = event;
2246
+ if (action === 'Add') {
2247
+ this.flameChart.addOverlay(overlay);
2248
+ } else if (action === 'Remove') {
2249
+ this.flameChart.removeOverlay(overlay);
2250
+ } else if (action === 'UpdateTimeRange' && AnnotationHelpers.isTimeRangeLabel(overlay)) {
2251
+ this.flameChart.updateExistingOverlay(overlay, {
2252
+ bounds: overlay.bounds,
2253
+ });
2254
+ } else if (action === 'UpdateLinkToEntry' && AnnotationHelpers.isEntriesLink(overlay)) {
2255
+ this.flameChart.updateExistingOverlay(overlay, {
2256
+ entryTo: overlay.entryTo,
2257
+ });
2258
+ } else if (action === 'EnterLabelEditState' && AnnotationHelpers.isEntryLabel(overlay)) {
2259
+ this.flameChart.enterLabelEditMode(overlay);
2260
+ } else if (action === 'LabelBringForward' && AnnotationHelpers.isEntryLabel(overlay)) {
2261
+ this.flameChart.bringLabelForward(overlay);
2262
+ }
2263
+
2264
+ const currentManager = ModificationsManager.activeManager();
2265
+ const annotations = currentManager?.getAnnotations() ?? [];
2266
+ const annotationEntryToColorMap = this.buildColorsAnnotationsMap(annotations);
2267
+ this.#sideBar.setAnnotations(annotations, annotationEntryToColorMap);
2268
+ (this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions)
2269
+ .updateContentVisibility(currentManager ? currentManager.getAnnotations()?.length > 0 : false);
2270
+ }
2271
+
2176
2272
  /**
2177
- * We automatically show the sidebar in only 2 scenarios:
2178
- * 1. The user has never seen it before, so we show it once to aid discovery
2179
- * 2. The user had it open, and we hid it (for example, during recording), so now we need to bring it back.
2273
+ * After the user imports / records a trace, we auto-show the sidebar.
2180
2274
  */
2181
- #showSidebarIfRequired(): void {
2182
- const disabledByLocalStorage = window.localStorage.getItem('disable-auto-show-rpp-sidebar-for-test') === 'true';
2183
-
2184
- if (Root.Runtime.Runtime.queryParam('disable-auto-performance-sidebar-reveal') !== null || disabledByLocalStorage) {
2185
- // Used in interaction tests & screenshot tests.
2275
+ #showSidebar(): void {
2276
+ const disabledByLocalStorageForTests =
2277
+ window.localStorage.getItem('disable-auto-show-rpp-sidebar-for-test') === 'true';
2278
+ if (disabledByLocalStorageForTests) {
2186
2279
  return;
2187
2280
  }
2188
- const needToRestore = this.#restoreSidebarVisibilityOnTraceLoad;
2189
- const userHasSeenSidebar = this.#sideBar.userHasOpenedSidebarOnce();
2190
2281
 
2191
- if (!userHasSeenSidebar || needToRestore) {
2282
+ if (!this.#splitWidget.sidebarIsShowing()) {
2192
2283
  this.#splitWidget.showBoth();
2193
2284
  }
2194
- this.#restoreSidebarVisibilityOnTraceLoad = false;
2195
2285
  }
2196
2286
 
2197
2287
  // Build a map mapping annotated entries to the colours that are used to display them in the FlameChart.
@@ -2213,6 +2303,34 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2213
2303
  return annotationEntryToColorMap;
2214
2304
  }
2215
2305
 
2306
+ /**
2307
+ * If the user imports or records a trace and we have any hidden tracks, we
2308
+ * show a warning banner at the bottom. This can be dismissed by the user and
2309
+ * if that happens we do not want to bring it back again.
2310
+ */
2311
+ #maybeCreateHiddenTracksBanner(trace: Trace.Handlers.Types.ParsedTrace): void {
2312
+ const hasHiddenTracks = this.flameChart.hasHiddenTracks();
2313
+ if (!hasHiddenTracks) {
2314
+ return;
2315
+ }
2316
+
2317
+ const maybeOverlay = createHiddenTracksOverlay(trace, {
2318
+ onClose: () => {
2319
+ this.flameChart.overlays().removeOverlaysOfType('BOTTOM_INFO_BAR');
2320
+ this.#hiddenTracksInfoBarPerTrace.set(trace, 'DISMISSED');
2321
+ },
2322
+ onShowAllTracks: () => {
2323
+ this.flameChart.showAllMainChartTracks();
2324
+ },
2325
+ onShowTrackConfigurationMode: () => {
2326
+ this.flameChart.enterMainChartTrackConfigurationMode();
2327
+ }
2328
+ });
2329
+ if (maybeOverlay) {
2330
+ this.flameChart.addOverlay(maybeOverlay);
2331
+ }
2332
+ }
2333
+
2216
2334
  private getEntryColorByEntry(entry: Trace.Types.Events.Event): string {
2217
2335
  const mainIndex = this.flameChart.getMainDataProvider().indexForEvent(entry);
2218
2336
  const networkIndex = this.flameChart.getNetworkDataProvider().indexForEvent(entry);
@@ -2256,7 +2374,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2256
2374
  this.showRecordingStarted();
2257
2375
  if (this.statusDialog) {
2258
2376
  this.statusDialog.enableAndFocusButton();
2259
- this.statusDialog.updateStatus(i18nString(UIStrings.profiling));
2377
+ this.statusDialog.updateStatus(i18nString(UIStrings.tracing));
2260
2378
  this.statusDialog.updateProgressBar(i18nString(UIStrings.bufferUsage), 0);
2261
2379
  this.statusDialog.startTimer();
2262
2380
  }
@@ -2274,7 +2392,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2274
2392
  */
2275
2393
  #hideSidebar(): void {
2276
2394
  if (this.#splitWidget.sidebarIsShowing()) {
2277
- this.#restoreSidebarVisibilityOnTraceLoad = true;
2278
2395
  this.#splitWidget.hideSidebar();
2279
2396
  }
2280
2397
  }
@@ -2321,7 +2438,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2321
2438
  },
2322
2439
  () => this.cancelLoading());
2323
2440
  this.statusDialog.showPane(this.statusPaneContainer);
2324
- this.statusDialog.updateStatus(i18nString(UIStrings.loadingProfile));
2441
+ this.statusDialog.updateStatus(i18nString(UIStrings.loadingTrace));
2325
2442
  // FIXME: make loading from backend cancelable as well.
2326
2443
  if (!this.loader) {
2327
2444
  this.statusDialog.finish();
@@ -2337,7 +2454,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2337
2454
  }
2338
2455
 
2339
2456
  async processingStarted(): Promise<void> {
2340
- this.statusDialog?.updateStatus(i18nString(UIStrings.processingProfile));
2457
+ this.statusDialog?.updateStatus(i18nString(UIStrings.processingTrace));
2341
2458
  }
2342
2459
 
2343
2460
  #listenForProcessingProgress(): void {
@@ -2371,9 +2488,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2371
2488
  * have recorded a fresh trace.
2372
2489
  *
2373
2490
  * IMPORTANT: All the code in here should be code that is only required when we have
2374
- * recorded or loaded a brand new trace. If you need the code to run when the
2375
- * user switches to an existing trace, please @see #setModelForActiveTrace and put your
2376
- * code in there.
2491
+ * recorded or imported from disk a brand new trace. If you need the code to
2492
+ * run when the user switches to an existing trace, please @see
2493
+ * #setModelForActiveTrace and put your code in there.
2377
2494
  **/
2378
2495
  async loadingComplete(
2379
2496
  collectedEvents: Trace.Types.Events.Event[], exclusiveFilter: Trace.Extras.TraceFilter.TraceFilter|null = null,
@@ -2399,6 +2516,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2399
2516
  this.#changeView({
2400
2517
  mode: 'VIEWING_TRACE',
2401
2518
  traceIndex: this.#traceEngineModel.lastTraceIndex(),
2519
+ forceOpenSidebar: false,
2402
2520
  });
2403
2521
  } else {
2404
2522
  this.#changeView({mode: 'LANDING_PAGE'});
@@ -2415,6 +2533,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2415
2533
  this.#changeView({
2416
2534
  mode: 'VIEWING_TRACE',
2417
2535
  traceIndex,
2536
+ // This is a new trace, so we want to open the insights sidebar automatically.
2537
+ forceOpenSidebar: true,
2418
2538
  });
2419
2539
 
2420
2540
  const parsedTrace = this.#traceEngineModel.parsedTrace(traceIndex);
@@ -2423,7 +2543,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2423
2543
  }
2424
2544
 
2425
2545
  if (recordingIsFresh) {
2426
- Tracker.instance().registerFreshRecording(parsedTrace);
2546
+ Utils.FreshRecording.Tracker.instance().registerFreshRecording(parsedTrace);
2427
2547
  }
2428
2548
 
2429
2549
  // We store the index of the active trace so we can load it back easily
@@ -2439,12 +2559,17 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2439
2559
  parsedTrace,
2440
2560
  metadata,
2441
2561
  });
2562
+
2563
+ this.dispatchEventToListeners(Events.RECORDING_COMPLETED, {
2564
+ traceIndex,
2565
+ });
2442
2566
  } catch (error) {
2443
2567
  // If we errored during the parsing stage, it
2444
2568
  // is useful to get access to the raw events to download the trace. This
2445
2569
  // allows us to debug crashes!
2446
2570
  void this.recordingFailed(error.message, collectedEvents);
2447
2571
  console.error(error);
2572
+ this.dispatchEventToListeners(Events.RECORDING_COMPLETED, {errorText: error.message});
2448
2573
  } finally {
2449
2574
  this.recordTraceLoadMetric();
2450
2575
  }
@@ -2662,7 +2787,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2662
2787
  },
2663
2788
  () => this.stopRecording());
2664
2789
  this.statusDialog.showPane(this.statusPaneContainer);
2665
- this.statusDialog.updateStatus(i18nString(UIStrings.initializingProfiler));
2790
+ this.statusDialog.updateStatus(i18nString(UIStrings.initializingTracing));
2666
2791
  this.statusDialog.updateProgressBar(i18nString(UIStrings.bufferUsage), 0);
2667
2792
  }
2668
2793
 
@@ -2743,7 +2868,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2743
2868
 
2744
2869
  #announceSelectionToAria(oldSelection: TimelineSelection|null, newSelection: TimelineSelection|null): void {
2745
2870
  if (oldSelection !== null && newSelection === null) {
2746
- UI.ARIAUtils.alert(i18nString(UIStrings.selectionCleared));
2871
+ UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.selectionCleared));
2747
2872
  }
2748
2873
  if (newSelection === null) {
2749
2874
  return;
@@ -2763,11 +2888,11 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2763
2888
 
2764
2889
  // Announce the type of event that was selected (special casing frames.)
2765
2890
  if (Trace.Types.Events.isLegacyTimelineFrame(newSelection.event)) {
2766
- UI.ARIAUtils.alert(i18nString(UIStrings.frameSelected));
2891
+ UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.frameSelected));
2767
2892
  return;
2768
2893
  }
2769
2894
  const name = Utils.EntryName.nameForEntry(newSelection.event);
2770
- UI.ARIAUtils.alert(i18nString(UIStrings.eventSelected, {PH1: name}));
2895
+ UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.eventSelected, {PH1: name}));
2771
2896
  }
2772
2897
 
2773
2898
  select(selection: TimelineSelection|null): void {
@@ -2869,6 +2994,110 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2869
2994
  const insightSetKey = insightModel.navigationId ?? Trace.Types.Events.NO_NAVIGATION;
2870
2995
  this.#setActiveInsight({model: insightModel, insightSetKey}, {highlightInsight: true});
2871
2996
  }
2997
+
2998
+ static async *
2999
+ handleExternalRecordRequest():
3000
+ AsyncGenerator<AiAssistanceModel.ExternalRequestResponse, AiAssistanceModel.ExternalRequestResponse> {
3001
+ yield {
3002
+ type: AiAssistanceModel.ExternalRequestResponseType.NOTIFICATION,
3003
+ message: 'Recording performance trace',
3004
+ };
3005
+ void VisualLogging.logFunctionCall('timeline.record-reload', 'external');
3006
+ Snackbars.Snackbar.Snackbar.show({message: i18nString(UIStrings.externalRequestReceived)});
3007
+
3008
+ const panelInstance = TimelinePanel.instance();
3009
+ // Given how the current UX works, it's nice to show the user the Perf
3010
+ // Panel so they see what's happening
3011
+ await UI.ViewManager.ViewManager.instance().showView('timeline');
3012
+
3013
+ function onRecordingCompleted(eventData: EventTypes[Events.RECORDING_COMPLETED]):
3014
+ AiAssistanceModel.ExternalRequestResponse {
3015
+ if ('errorText' in eventData) {
3016
+ return {
3017
+ type: AiAssistanceModel.ExternalRequestResponseType.ERROR,
3018
+ message: `Error running the trace: ${eventData.errorText}`,
3019
+ };
3020
+ }
3021
+ const parsedTrace = panelInstance.model.parsedTrace(eventData.traceIndex);
3022
+ const insights = panelInstance.model.traceInsights(eventData.traceIndex);
3023
+ if (!parsedTrace || !insights || insights.size === 0) {
3024
+ return {
3025
+ type: AiAssistanceModel.ExternalRequestResponseType.ERROR,
3026
+ message: 'The trace was loaded successfully but no Insights were detected.',
3027
+ };
3028
+ }
3029
+
3030
+ const navigationId = Array.from(insights.keys()).find(k => k !== 'NO_NAVIGATION');
3031
+ if (!navigationId) {
3032
+ return {
3033
+ type: AiAssistanceModel.ExternalRequestResponseType.ERROR,
3034
+ message: 'The trace was loaded successfully but no navigation was detected.',
3035
+ };
3036
+ }
3037
+
3038
+ const insightsForNav = insights.get(navigationId);
3039
+ if (!insightsForNav) {
3040
+ return {
3041
+ type: AiAssistanceModel.ExternalRequestResponseType.ERROR,
3042
+ message: 'The trace was loaded successfully but no Insights were detected.',
3043
+ };
3044
+ }
3045
+
3046
+ let responseTextForNonPassedInsights = '';
3047
+ // We still return info on the passed insights, but we put it at the
3048
+ // bottom of the response under a heading.
3049
+ let responseTextForPassedInsights = '';
3050
+
3051
+ for (const modelName in insightsForNav.model) {
3052
+ const model = modelName as keyof Trace.Insights.Types.InsightModelsType;
3053
+ const insight = insightsForNav.model[model];
3054
+ const formatter = new AiAssistanceModel.PerformanceInsightFormatter(parsedTrace, insight);
3055
+ if (!formatter.insightIsSupported()) {
3056
+ // Not all Insights are integrated with "Ask AI" yet, let's avoid
3057
+ // filling up the response with those ones because there will be no
3058
+ // useful information.
3059
+ continue;
3060
+ }
3061
+
3062
+ const formatted = formatter.formatInsight({headingLevel: 3});
3063
+
3064
+ if (insight.state === 'pass') {
3065
+ responseTextForPassedInsights += `${formatted}\n\n`;
3066
+ continue;
3067
+ } else {
3068
+ responseTextForNonPassedInsights += `${formatted}\n\n`;
3069
+ }
3070
+ }
3071
+
3072
+ const finalText = `# Trace recording results
3073
+
3074
+ ## Non-passing insights:
3075
+
3076
+ These insights highlight potential problems and opportunities to improve performance.
3077
+ ${responseTextForNonPassedInsights}
3078
+
3079
+ ## Passing insights:
3080
+
3081
+ These insights are passing, which means they are not considered to highlight considerable performance problems.
3082
+ ${responseTextForPassedInsights}`;
3083
+
3084
+ return {
3085
+ type: AiAssistanceModel.ExternalRequestResponseType.ANSWER,
3086
+ message: finalText,
3087
+ devToolsLogs: [],
3088
+ };
3089
+ }
3090
+
3091
+ return await new Promise(resolve => {
3092
+ function listener(e: Common.EventTarget.EventTargetEvent<EventTypes[Events.RECORDING_COMPLETED]>): void {
3093
+ resolve(onRecordingCompleted(e.data));
3094
+ panelInstance.removeEventListener(Events.RECORDING_COMPLETED, listener);
3095
+ }
3096
+ panelInstance.addEventListener(Events.RECORDING_COMPLETED, listener);
3097
+
3098
+ panelInstance.recordReload();
3099
+ });
3100
+ }
2872
3101
  }
2873
3102
 
2874
3103
  export const enum State {
@@ -2927,8 +3156,8 @@ export class EventRevealer implements Common.Revealer.Revealer<SDK.TraceObject.R
2927
3156
  }
2928
3157
  }
2929
3158
 
2930
- export class InsightRevealer implements Common.Revealer.Revealer<Utils.InsightAIContext.ActiveInsight> {
2931
- async reveal(revealable: Utils.InsightAIContext.ActiveInsight): Promise<void> {
3159
+ export class InsightRevealer implements Common.Revealer.Revealer<Utils.Helpers.RevealableInsight> {
3160
+ async reveal(revealable: Utils.Helpers.RevealableInsight): Promise<void> {
2932
3161
  await UI.ViewManager.ViewManager.instance().showView('timeline');
2933
3162
  TimelinePanel.instance().revealInsight(revealable.insight);
2934
3163
  }
@@ -2948,7 +3177,7 @@ export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
2948
3177
  panel.recordReload();
2949
3178
  return true;
2950
3179
  case 'timeline.save-to-file':
2951
- void panel.saveToFile({savingEnhancedTrace: false, addModifications: false});
3180
+ void panel.saveToFile({includeScriptContent: false, includeSourceMaps: false, addModifications: false});
2952
3181
  return true;
2953
3182
  case 'timeline.load-from-file':
2954
3183
  panel.selectFileToLoad();
@@ -2984,7 +3213,9 @@ export class SelectedInsight {
2984
3213
  }
2985
3214
  export const enum Events {
2986
3215
  IS_VIEWING_TRACE = 'IsViewingTrace',
3216
+ RECORDING_COMPLETED = 'RecordingCompleted',
2987
3217
  }
2988
3218
  export interface EventTypes {
2989
3219
  [Events.IS_VIEWING_TRACE]: boolean;
3220
+ [Events.RECORDING_COMPLETED]: {traceIndex: number}|{errorText: string};
2990
3221
  }