chrome-devtools-frontend 1.0.1526630 → 1.0.1528866

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 (319) hide show
  1. package/docs/ui_engineering.md +159 -0
  2. package/eslint.config.mjs +6 -1
  3. package/front_end/core/i18n/i18nImpl.ts +6 -1
  4. package/front_end/core/protocol_client/protocol_client.ts +1 -1
  5. package/front_end/core/root/Runtime.ts +28 -4
  6. package/front_end/core/sdk/CSSMatchedStyles.ts +50 -7
  7. package/front_end/core/sdk/CSSRule.ts +35 -6
  8. package/front_end/core/sdk/Connections.ts +2 -1
  9. package/front_end/core/sdk/DOMModel.ts +4 -0
  10. package/front_end/core/sdk/DebuggerModel.ts +5 -1
  11. package/front_end/core/sdk/NetworkManager.ts +214 -31
  12. package/front_end/core/sdk/PreloadingModel.ts +82 -17
  13. package/front_end/core/sdk/RehydratingConnection.snapshot.txt +1 -1
  14. package/front_end/core/sdk/RehydratingConnection.ts +29 -4
  15. package/front_end/core/sdk/ScopeTreeCache.ts +8 -3
  16. package/front_end/core/sdk/SourceMap.ts +37 -11
  17. package/front_end/core/sdk/SourceMapManager.ts +13 -2
  18. package/front_end/core/sdk/SourceMapScopesInfo.ts +17 -0
  19. package/front_end/core/sdk/TargetManager.ts +0 -22
  20. package/front_end/core/sdk/TraceObject.ts +8 -7
  21. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +81 -0
  22. package/front_end/entrypoints/inspector_main/InspectorMain.ts +3 -1
  23. package/front_end/entrypoints/main/GlobalAiButton.ts +1 -0
  24. package/front_end/entrypoints/main/MainImpl.ts +20 -25
  25. package/front_end/generated/InspectorBackendCommands.js +3 -2
  26. package/front_end/generated/protocol.ts +17 -3
  27. package/front_end/models/ai_assistance/BuiltInAi.ts +111 -0
  28. package/front_end/models/ai_assistance/ai_assistance.ts +53 -24
  29. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +105 -0
  30. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +6 -1
  31. package/front_end/models/extensions/ExtensionView.ts +3 -0
  32. package/front_end/models/javascript_metadata/NativeFunctions.js +23 -27
  33. package/front_end/models/live-metrics/web-vitals-injected/web-vitals-injected.ts +31 -29
  34. package/front_end/models/persistence/EditFileSystemView.ts +1 -0
  35. package/front_end/models/source_map_scopes/NamesResolver.ts +5 -11
  36. package/front_end/models/stack_trace/Trie.ts +9 -0
  37. package/front_end/models/trace/lantern/types/Lantern.ts +1 -1
  38. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +1 -0
  39. package/front_end/panels/accessibility/AccessibilitySidebarView.ts +1 -0
  40. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +120 -113
  41. package/front_end/panels/ai_assistance/PatchWidget.ts +9 -8
  42. package/front_end/panels/ai_assistance/SelectWorkspaceDialog.ts +2 -0
  43. package/front_end/panels/ai_assistance/components/ChatView.ts +29 -29
  44. package/front_end/panels/ai_assistance/components/UserActionRow.ts +1 -0
  45. package/front_end/panels/animation/AnimationTimeline.ts +1 -0
  46. package/front_end/panels/application/CookieItemsView.ts +1 -0
  47. package/front_end/panels/application/KeyValueStorageItemsView.ts +1 -0
  48. package/front_end/panels/application/ServiceWorkerCacheViews.ts +2 -0
  49. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +11 -5
  50. package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +2 -2
  51. package/front_end/panels/application/preloading/components/PreloadingString.ts +7 -5
  52. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +22 -10
  53. package/front_end/panels/changes/CombinedDiffView.ts +1 -0
  54. package/front_end/panels/console/ConsoleInsightTeaser.ts +106 -0
  55. package/front_end/panels/console/ConsolePanel.ts +2 -0
  56. package/front_end/panels/console/ConsolePrompt.ts +12 -2
  57. package/front_end/panels/console/ConsoleSidebar.ts +1 -1
  58. package/front_end/panels/console/ConsoleView.ts +12 -0
  59. package/front_end/panels/console/ConsoleViewMessage.ts +27 -0
  60. package/front_end/panels/{explain → console}/PromptBuilder.ts +12 -7
  61. package/front_end/panels/console/console.ts +6 -0
  62. package/front_end/panels/console/consoleInsightTeaser.css +55 -0
  63. package/front_end/panels/coverage/CoverageListView.ts +29 -11
  64. package/front_end/panels/coverage/CoverageView.ts +292 -284
  65. package/front_end/panels/coverage/coverageView.css +17 -0
  66. package/front_end/panels/elements/ComputedStyleWidget.ts +1 -0
  67. package/front_end/panels/elements/LayoutPane.ts +1 -0
  68. package/front_end/panels/elements/NodeStackTraceWidget.ts +1 -0
  69. package/front_end/panels/elements/StylePropertyTreeElement.ts +5 -1
  70. package/front_end/panels/elements/stylePropertiesTreeOutline.css +17 -0
  71. package/front_end/panels/emulation/DeviceModeView.ts +2 -0
  72. package/front_end/panels/explain/ActionDelegate.ts +1 -2
  73. package/front_end/panels/explain/components/ConsoleInsight.ts +14 -12
  74. package/front_end/panels/explain/explain.ts +0 -1
  75. package/front_end/panels/js_timeline/js_timeline-meta.ts +1 -1
  76. package/front_end/panels/layer_viewer/Layers3DView.ts +2 -0
  77. package/front_end/panels/lighthouse/LighthouseReportSelector.ts +1 -0
  78. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +1 -0
  79. package/front_end/panels/media/MainView.ts +1 -0
  80. package/front_end/panels/media/TickingFlameChart.ts +2 -0
  81. package/front_end/panels/network/BlockedURLsPane.ts +111 -85
  82. package/front_end/panels/network/EventSourceMessagesView.ts +1 -0
  83. package/front_end/panels/network/NetworkItemView.ts +1 -0
  84. package/front_end/panels/network/NetworkLogView.ts +9 -7
  85. package/front_end/panels/network/NetworkOverview.ts +1 -0
  86. package/front_end/panels/network/RequestCookiesView.ts +1 -0
  87. package/front_end/panels/network/RequestHTMLView.ts +1 -0
  88. package/front_end/panels/network/RequestInitiatorView.ts +1 -0
  89. package/front_end/panels/network/RequestPayloadView.ts +1 -0
  90. package/front_end/panels/network/RequestPreviewView.ts +1 -0
  91. package/front_end/panels/network/RequestResponseView.ts +1 -0
  92. package/front_end/panels/network/RequestTimingView.ts +2 -0
  93. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +1 -0
  94. package/front_end/panels/network/ResourceWebSocketFrameView.ts +1 -0
  95. package/front_end/panels/network/components/RequestHeadersView.ts +2 -0
  96. package/front_end/panels/network/components/RequestTrustTokensView.ts +2 -0
  97. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +2 -0
  98. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +2 -0
  99. package/front_end/panels/profiler/HeapSnapshotView.ts +7 -0
  100. package/front_end/panels/profiler/IsolateSelector.ts +1 -0
  101. package/front_end/panels/profiler/LiveHeapProfileView.ts +1 -0
  102. package/front_end/panels/profiler/ProfileView.ts +1 -0
  103. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +1 -0
  104. package/front_end/panels/recorder/RecorderPanel.ts +2 -0
  105. package/front_end/panels/screencast/ScreencastView.ts +1 -0
  106. package/front_end/panels/search/SearchView.ts +1 -0
  107. package/front_end/panels/settings/AISettingsTab.ts +3 -3
  108. package/front_end/panels/settings/WorkspaceSettingsTab.ts +2 -0
  109. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +2 -2
  110. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +12 -0
  111. package/front_end/panels/sources/BreakpointsView.ts +1 -0
  112. package/front_end/panels/sources/DebuggerPlugin.ts +1 -0
  113. package/front_end/panels/sources/UISourceCodeFrame.ts +17 -2
  114. package/front_end/panels/timeline/README.md +2 -2
  115. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +1 -1
  116. package/front_end/panels/timeline/TimelineFlameChartView.ts +4 -3
  117. package/front_end/panels/timeline/TimelineLayersView.ts +1 -0
  118. package/front_end/panels/timeline/TimelinePaintProfilerView.ts +114 -37
  119. package/front_end/panels/timeline/TimelinePanel.ts +43 -62
  120. package/front_end/panels/timeline/TimelineTreeView.ts +1 -0
  121. package/front_end/panels/timeline/components/LiveMetricsView.ts +4 -8
  122. package/front_end/panels/timeline/components/Sidebar.ts +2 -0
  123. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +1 -1
  124. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +7 -7
  125. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +1 -1
  126. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +4 -4
  127. package/front_end/panels/web_audio/WebAudioView.ts +1 -0
  128. package/front_end/third_party/chromium/README.chromium +1 -1
  129. package/front_end/third_party/lighthouse/README.chromium +2 -2
  130. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +1530 -2426
  131. package/front_end/third_party/lighthouse/locales/ar-XB.json +107 -455
  132. package/front_end/third_party/lighthouse/locales/ar.json +107 -455
  133. package/front_end/third_party/lighthouse/locales/bg.json +96 -444
  134. package/front_end/third_party/lighthouse/locales/ca.json +96 -444
  135. package/front_end/third_party/lighthouse/locales/cs.json +96 -444
  136. package/front_end/third_party/lighthouse/locales/da.json +96 -444
  137. package/front_end/third_party/lighthouse/locales/de.json +96 -444
  138. package/front_end/third_party/lighthouse/locales/el.json +96 -444
  139. package/front_end/third_party/lighthouse/locales/en-GB.json +96 -444
  140. package/front_end/third_party/lighthouse/locales/en-US.json +116 -467
  141. package/front_end/third_party/lighthouse/locales/en-XA.json +93 -441
  142. package/front_end/third_party/lighthouse/locales/en-XL.json +116 -467
  143. package/front_end/third_party/lighthouse/locales/es-419.json +96 -444
  144. package/front_end/third_party/lighthouse/locales/es.json +96 -444
  145. package/front_end/third_party/lighthouse/locales/fi.json +96 -444
  146. package/front_end/third_party/lighthouse/locales/fil.json +96 -444
  147. package/front_end/third_party/lighthouse/locales/fr.json +96 -444
  148. package/front_end/third_party/lighthouse/locales/he.json +118 -466
  149. package/front_end/third_party/lighthouse/locales/hi.json +96 -444
  150. package/front_end/third_party/lighthouse/locales/hr.json +100 -448
  151. package/front_end/third_party/lighthouse/locales/hu.json +96 -444
  152. package/front_end/third_party/lighthouse/locales/id.json +96 -444
  153. package/front_end/third_party/lighthouse/locales/it.json +96 -444
  154. package/front_end/third_party/lighthouse/locales/ja.json +96 -444
  155. package/front_end/third_party/lighthouse/locales/ko.json +97 -445
  156. package/front_end/third_party/lighthouse/locales/lt.json +96 -444
  157. package/front_end/third_party/lighthouse/locales/lv.json +97 -445
  158. package/front_end/third_party/lighthouse/locales/nl.json +96 -444
  159. package/front_end/third_party/lighthouse/locales/no.json +96 -444
  160. package/front_end/third_party/lighthouse/locales/pl.json +96 -444
  161. package/front_end/third_party/lighthouse/locales/pt-PT.json +96 -444
  162. package/front_end/third_party/lighthouse/locales/pt.json +97 -445
  163. package/front_end/third_party/lighthouse/locales/ro.json +97 -445
  164. package/front_end/third_party/lighthouse/locales/ru.json +96 -444
  165. package/front_end/third_party/lighthouse/locales/sk.json +96 -444
  166. package/front_end/third_party/lighthouse/locales/sl.json +96 -444
  167. package/front_end/third_party/lighthouse/locales/sr-Latn.json +96 -444
  168. package/front_end/third_party/lighthouse/locales/sr.json +96 -444
  169. package/front_end/third_party/lighthouse/locales/sv.json +96 -444
  170. package/front_end/third_party/lighthouse/locales/ta.json +96 -444
  171. package/front_end/third_party/lighthouse/locales/te.json +97 -445
  172. package/front_end/third_party/lighthouse/locales/th.json +96 -444
  173. package/front_end/third_party/lighthouse/locales/tr.json +96 -444
  174. package/front_end/third_party/lighthouse/locales/uk.json +96 -444
  175. package/front_end/third_party/lighthouse/locales/vi.json +96 -444
  176. package/front_end/third_party/lighthouse/locales/zh-HK.json +96 -444
  177. package/front_end/third_party/lighthouse/locales/zh-TW.json +97 -445
  178. package/front_end/third_party/lighthouse/locales/zh.json +96 -444
  179. package/front_end/third_party/lighthouse/report/bundle.d.ts +8 -14
  180. package/front_end/third_party/lighthouse/report/bundle.js +10 -49
  181. package/front_end/third_party/lighthouse/report-assets/report-generator.mjs +1 -1
  182. package/front_end/third_party/web-vitals/README.chromium +5 -8
  183. package/front_end/third_party/web-vitals/package/README.md +191 -152
  184. package/front_end/third_party/web-vitals/package/dist/modules/attribution/index.d.ts +0 -1
  185. package/front_end/third_party/web-vitals/package/dist/modules/attribution/index.js +0 -1
  186. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onCLS.d.ts +2 -2
  187. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onCLS.js +45 -26
  188. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onFCP.d.ts +2 -2
  189. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onFCP.js +3 -3
  190. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.d.ts +10 -10
  191. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.js +307 -206
  192. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.d.ts +2 -2
  193. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.js +69 -49
  194. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onTTFB.d.ts +2 -2
  195. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onTTFB.js +2 -2
  196. package/front_end/third_party/web-vitals/package/dist/modules/index.d.ts +0 -1
  197. package/front_end/third_party/web-vitals/package/dist/modules/index.js +0 -1
  198. package/front_end/third_party/web-vitals/package/dist/modules/lib/InteractionManager.d.ts +33 -0
  199. package/front_end/third_party/web-vitals/package/dist/modules/lib/InteractionManager.js +111 -0
  200. package/front_end/third_party/web-vitals/package/dist/modules/lib/LCPEntryManager.d.ts +4 -0
  201. package/front_end/third_party/web-vitals/package/dist/modules/{attribution/deprecated.js → lib/LCPEntryManager.js} +6 -7
  202. package/front_end/third_party/web-vitals/package/dist/modules/lib/LayoutShiftManager.d.ts +6 -0
  203. package/front_end/third_party/web-vitals/package/dist/modules/lib/LayoutShiftManager.js +44 -0
  204. package/front_end/third_party/web-vitals/package/dist/modules/lib/bindReporter.js +1 -1
  205. package/front_end/third_party/web-vitals/package/dist/modules/lib/generateUniqueID.js +1 -1
  206. package/front_end/third_party/web-vitals/package/dist/modules/lib/getActivationStart.js +1 -1
  207. package/front_end/third_party/web-vitals/package/dist/modules/lib/getNavigationEntry.js +5 -7
  208. package/front_end/third_party/web-vitals/package/dist/modules/lib/getSelector.d.ts +1 -1
  209. package/front_end/third_party/web-vitals/package/dist/modules/lib/getSelector.js +9 -12
  210. package/front_end/third_party/web-vitals/package/dist/modules/lib/getVisibilityWatcher.d.ts +1 -0
  211. package/front_end/third_party/web-vitals/package/dist/modules/lib/getVisibilityWatcher.js +52 -33
  212. package/front_end/third_party/web-vitals/package/dist/modules/lib/initMetric.d.ts +0 -2
  213. package/front_end/third_party/web-vitals/package/dist/modules/lib/initMetric.js +2 -2
  214. package/front_end/third_party/web-vitals/package/dist/modules/lib/initUnique.d.ts +6 -0
  215. package/front_end/third_party/web-vitals/package/dist/modules/{deprecated.js → lib/initUnique.js} +11 -4
  216. package/front_end/third_party/web-vitals/package/dist/modules/lib/observe.js +3 -6
  217. package/front_end/third_party/web-vitals/package/dist/modules/lib/polyfills/interactionCountPolyfill.js +6 -6
  218. package/front_end/third_party/web-vitals/package/dist/modules/lib/{whenIdle.d.ts → whenIdleOrHidden.d.ts} +1 -1
  219. package/front_end/third_party/web-vitals/package/dist/modules/lib/{whenIdle.js → whenIdleOrHidden.js} +10 -8
  220. package/front_end/third_party/web-vitals/package/dist/modules/onCLS.js +17 -35
  221. package/front_end/third_party/web-vitals/package/dist/modules/onFCP.js +3 -5
  222. package/front_end/third_party/web-vitals/package/dist/modules/onINP.d.ts +9 -7
  223. package/front_end/third_party/web-vitals/package/dist/modules/onINP.js +27 -19
  224. package/front_end/third_party/web-vitals/package/dist/modules/onLCP.js +33 -26
  225. package/front_end/third_party/web-vitals/package/dist/modules/onTTFB.js +2 -4
  226. package/front_end/third_party/web-vitals/package/dist/modules/types/base.d.ts +6 -5
  227. package/front_end/third_party/web-vitals/package/dist/modules/types/cls.d.ts +5 -3
  228. package/front_end/third_party/web-vitals/package/dist/modules/types/inp.d.ts +80 -33
  229. package/front_end/third_party/web-vitals/package/dist/modules/types/lcp.d.ts +6 -2
  230. package/front_end/third_party/web-vitals/package/dist/modules/types.d.ts +28 -4
  231. package/front_end/third_party/web-vitals/package/dist/modules/types.js +0 -1
  232. package/front_end/third_party/web-vitals/package/package.json +4 -10
  233. package/front_end/third_party/web-vitals/package/src/attribution/index.ts +0 -1
  234. package/front_end/third_party/web-vitals/package/src/attribution/onCLS.ts +58 -33
  235. package/front_end/third_party/web-vitals/package/src/attribution/onFCP.ts +4 -4
  236. package/front_end/third_party/web-vitals/package/src/attribution/onINP.ts +382 -258
  237. package/front_end/third_party/web-vitals/package/src/attribution/onLCP.ts +96 -69
  238. package/front_end/third_party/web-vitals/package/src/attribution/onTTFB.ts +3 -3
  239. package/front_end/third_party/web-vitals/package/src/index.ts +0 -1
  240. package/front_end/third_party/web-vitals/package/src/lib/InteractionManager.ts +146 -0
  241. package/front_end/third_party/web-vitals/package/src/{attribution/deprecated.ts → lib/LCPEntryManager.ts} +6 -9
  242. package/front_end/third_party/web-vitals/package/src/lib/LayoutShiftManager.ts +50 -0
  243. package/front_end/third_party/web-vitals/package/src/lib/bindReporter.ts +1 -1
  244. package/front_end/third_party/web-vitals/package/src/lib/generateUniqueID.ts +1 -1
  245. package/front_end/third_party/web-vitals/package/src/lib/getActivationStart.ts +1 -1
  246. package/front_end/third_party/web-vitals/package/src/lib/getNavigationEntry.ts +5 -8
  247. package/front_end/third_party/web-vitals/package/src/lib/getSelector.ts +12 -12
  248. package/front_end/third_party/web-vitals/package/src/lib/getVisibilityWatcher.ts +57 -35
  249. package/front_end/third_party/web-vitals/package/src/lib/initMetric.ts +2 -2
  250. package/front_end/third_party/web-vitals/package/src/{deprecated.ts → lib/initUnique.ts} +14 -8
  251. package/front_end/third_party/web-vitals/package/src/lib/observe.ts +3 -11
  252. package/front_end/third_party/web-vitals/package/src/lib/polyfills/interactionCountPolyfill.ts +12 -6
  253. package/front_end/third_party/web-vitals/package/src/lib/{whenIdle.ts → whenIdleOrHidden.ts} +10 -8
  254. package/front_end/third_party/web-vitals/package/src/onCLS.ts +17 -38
  255. package/front_end/third_party/web-vitals/package/src/onFCP.ts +3 -6
  256. package/front_end/third_party/web-vitals/package/src/onINP.ts +33 -28
  257. package/front_end/third_party/web-vitals/package/src/onLCP.ts +36 -29
  258. package/front_end/third_party/web-vitals/package/src/onTTFB.ts +2 -5
  259. package/front_end/third_party/web-vitals/package/src/types/base.ts +5 -5
  260. package/front_end/third_party/web-vitals/package/src/types/cls.ts +5 -3
  261. package/front_end/third_party/web-vitals/package/src/types/inp.ts +88 -33
  262. package/front_end/third_party/web-vitals/package/src/types/lcp.ts +6 -2
  263. package/front_end/third_party/web-vitals/package/src/types.ts +47 -4
  264. package/front_end/third_party/web-vitals/patches/0001-Add-onEachInteraction-to-onINP-options.patch +75 -0
  265. package/front_end/third_party/web-vitals/rebuild.sh +32 -18
  266. package/front_end/third_party/web-vitals/web-vitals-tsconfig.json +5 -10
  267. package/front_end/third_party/web-vitals/web-vitals.ts +0 -2
  268. package/front_end/ui/components/docs/console_insight/basic.ts +3 -2
  269. package/front_end/ui/components/legacy_wrapper/LegacyWrapper.ts +2 -0
  270. package/front_end/ui/components/text_editor/TextEditor.ts +0 -2
  271. package/front_end/ui/legacy/InspectorView.ts +2 -0
  272. package/front_end/ui/legacy/SplitWidget.ts +2 -0
  273. package/front_end/ui/legacy/TabbedPane.ts +1 -0
  274. package/front_end/ui/legacy/TargetCrashedScreen.ts +1 -0
  275. package/front_end/ui/legacy/UIUtils.ts +8 -19
  276. package/front_end/ui/legacy/ViewManager.ts +1 -0
  277. package/front_end/ui/legacy/components/color_picker/FormatPickerContextMenu.ts +7 -20
  278. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +2 -0
  279. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +1 -0
  280. package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +1 -0
  281. package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +1 -0
  282. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -0
  283. package/front_end/ui/legacy/components/source_frame/FontView.ts +1 -0
  284. package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -0
  285. package/front_end/ui/legacy/components/source_frame/JSONView.ts +1 -0
  286. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +1 -0
  287. package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +2 -0
  288. package/front_end/ui/visual_logging/KnownContextValues.ts +17 -0
  289. package/mcp/README.md +7 -0
  290. package/mcp/mcp.ts +8 -0
  291. package/package.json +1 -1
  292. package/front_end/models/live-metrics/web-vitals-injected/OnEachInteraction.ts +0 -34
  293. package/front_end/third_party/web-vitals/package/attribution.d.ts +0 -16
  294. package/front_end/third_party/web-vitals/package/attribution.js +0 -18
  295. package/front_end/third_party/web-vitals/package/dist/modules/attribution/deprecated.d.ts +0 -7
  296. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onFID.d.ts +0 -11
  297. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onFID.js +0 -46
  298. package/front_end/third_party/web-vitals/package/dist/modules/deprecated.d.ts +0 -5
  299. package/front_end/third_party/web-vitals/package/dist/modules/lib/interactions.d.ts +0 -31
  300. package/front_end/third_party/web-vitals/package/dist/modules/lib/interactions.js +0 -107
  301. package/front_end/third_party/web-vitals/package/dist/modules/lib/onHidden.d.ts +0 -1
  302. package/front_end/third_party/web-vitals/package/dist/modules/lib/onHidden.js +0 -22
  303. package/front_end/third_party/web-vitals/package/dist/modules/lib/polyfills/firstInputPolyfill.d.ts +0 -7
  304. package/front_end/third_party/web-vitals/package/dist/modules/lib/polyfills/firstInputPolyfill.js +0 -147
  305. package/front_end/third_party/web-vitals/package/dist/modules/lib/polyfills/getFirstHiddenTimePolyfill.d.ts +0 -1
  306. package/front_end/third_party/web-vitals/package/dist/modules/lib/polyfills/getFirstHiddenTimePolyfill.js +0 -25
  307. package/front_end/third_party/web-vitals/package/dist/modules/onFID.d.ts +0 -13
  308. package/front_end/third_party/web-vitals/package/dist/modules/onFID.js +0 -70
  309. package/front_end/third_party/web-vitals/package/dist/modules/types/fid.d.ts +0 -46
  310. package/front_end/third_party/web-vitals/package/dist/modules/types/fid.js +0 -16
  311. package/front_end/third_party/web-vitals/package/src/attribution/onFID.ts +0 -62
  312. package/front_end/third_party/web-vitals/package/src/lib/interactions.ts +0 -139
  313. package/front_end/third_party/web-vitals/package/src/lib/onHidden.ts +0 -23
  314. package/front_end/third_party/web-vitals/package/src/lib/polyfills/firstInputPolyfill.ts +0 -174
  315. package/front_end/third_party/web-vitals/package/src/onFID.ts +0 -105
  316. package/front_end/third_party/web-vitals/package/src/types/fid.ts +0 -65
  317. package/front_end/ui/components/text_editor/textEditor.css +0 -18
  318. package/front_end/ui/legacy/inlineButton.css +0 -22
  319. /package/front_end/entrypoints/{rehydrated_devtools_app/rehydrated_devtools_app.ts → trace_app/trace_app.ts} +0 -0
@@ -53,3 +53,20 @@
53
53
  white-space: pre-line;
54
54
  text-align: center;
55
55
  }
56
+
57
+ .inline-button {
58
+ display: inline-flex;
59
+ border: 1px solid var(--sys-color-neutral-outline);
60
+ border-radius: 4px;
61
+ position: relative;
62
+ vertical-align: sub;
63
+ margin: 2px;
64
+ background-color: var(--sys-color-cdt-base-container);
65
+ justify-content: center;
66
+ width: 28px;
67
+ }
68
+
69
+ .inline-button:hover {
70
+ border-color: transparent;
71
+ background-color: var(--sys-color-state-hover-on-subtle);
72
+ }
@@ -330,6 +330,7 @@ export class ComputedStyleWidget extends UI.ThrottledWidget.ThrottledWidget {
330
330
  }
331
331
 
332
332
  override willHide(): void {
333
+ super.willHide();
333
334
  UI.Context.Context.instance().setFlavor(ComputedStyleWidget, null);
334
335
  }
335
336
 
@@ -501,6 +501,7 @@ export class LayoutPane extends UI.Widget.Widget {
501
501
  }
502
502
 
503
503
  override willHide(): void {
504
+ super.willHide();
504
505
  for (const setting of this.#settings) {
505
506
  Common.Settings.Settings.instance().moduleSetting(setting.name).removeChangeListener(this.requestUpdate, this);
506
507
  }
@@ -58,6 +58,7 @@ export class NodeStackTraceWidget extends UI.ThrottledWidget.ThrottledWidget {
58
58
  }
59
59
 
60
60
  override willHide(): void {
61
+ super.willHide();
61
62
  UI.Context.Context.instance().removeFlavorChangeListener(SDK.DOMModel.DOMNode, this.update, this);
62
63
  }
63
64
 
@@ -1136,7 +1136,11 @@ export class BezierRenderer extends rendererBase(SDK.CSSPropertyParserMatchers.B
1136
1136
  const bezierText = document.createElement('span');
1137
1137
  bezierText.append(...nodes);
1138
1138
  new BezierPopoverIcon({treeElement: this.#treeElement, swatchPopoverHelper, swatch: icon, bezierText});
1139
- return [icon, bezierText];
1139
+ const iconAndTextContainer = document.createElement('span');
1140
+ iconAndTextContainer.classList.add('bezier-icon-and-text');
1141
+ iconAndTextContainer.append(icon);
1142
+ iconAndTextContainer.append(bezierText);
1143
+ return [iconAndTextContainer];
1140
1144
  }
1141
1145
  }
1142
1146
 
@@ -303,3 +303,20 @@ devtools-icon.open-in-animations-panel {
303
303
  .tracing-anchor {
304
304
  text-decoration: underline dotted var(--sys-color-token-meta);
305
305
  }
306
+
307
+ devtools-icon.bezier-swatch-icon {
308
+ position: relative;
309
+ transform: scale(0.7);
310
+ margin: -5px -2px -3px -4px;
311
+ user-select: none;
312
+ color: var(--icon-css);
313
+ cursor: default;
314
+
315
+ &:hover {
316
+ color: var(--icon-css-hover);
317
+ }
318
+ }
319
+
320
+ span.bezier-icon-and-text {
321
+ white-space: nowrap;
322
+ }
@@ -442,11 +442,13 @@ export class DeviceModeView extends UI.Widget.VBox {
442
442
  }
443
443
 
444
444
  override wasShown(): void {
445
+ super.wasShown();
445
446
  this.measureHandles();
446
447
  this.toolbar.restore();
447
448
  }
448
449
 
449
450
  override willHide(): void {
451
+ super.willHide();
450
452
  this.model.emulate(EmulationModel.DeviceModeModel.Type.None, null, null);
451
453
  }
452
454
 
@@ -7,7 +7,6 @@ import type * as UI from '../../ui/legacy/legacy.js';
7
7
  import * as Console from '../console/console.js';
8
8
 
9
9
  import {ConsoleInsight} from './components/ConsoleInsight.js';
10
- import {PromptBuilder} from './PromptBuilder.js';
11
10
 
12
11
  export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
13
12
  handleAction(context: UI.Context.Context, actionId: string): boolean {
@@ -24,7 +23,7 @@ export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
24
23
  } else if (actionId === 'explain.console-message.hover') {
25
24
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.InsightRequestedViaHoverButton);
26
25
  }
27
- const promptBuilder = new PromptBuilder(consoleViewMessage);
26
+ const promptBuilder = new Console.PromptBuilder.PromptBuilder(consoleViewMessage);
28
27
  const aidaClient = new Host.AidaClient.AidaClient();
29
28
  void ConsoleInsight.create(promptBuilder, aidaClient).then(insight => {
30
29
  consoleViewMessage.setInsight(insight);
@@ -17,7 +17,7 @@ import * as MarkdownView from '../../../ui/components/markdown_view/markdown_vie
17
17
  import * as UI from '../../../ui/legacy/legacy.js';
18
18
  import * as Lit from '../../../ui/lit/lit.js';
19
19
  import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
20
- import {type PromptBuilder, type Source, SourceType} from '../PromptBuilder.js';
20
+ import * as Console from '../../console/console.js';
21
21
 
22
22
  import styles from './consoleInsight.css.js';
23
23
  import listStyles from './consoleInsightSourcesList.css.js';
@@ -163,18 +163,18 @@ export class CloseEvent extends Event {
163
163
  }
164
164
  }
165
165
 
166
- type PublicPromptBuilder = Pick<PromptBuilder, 'buildPrompt'|'getSearchQuery'>;
166
+ type PublicPromptBuilder = Pick<Console.PromptBuilder.PromptBuilder, 'buildPrompt'|'getSearchQuery'>;
167
167
  type PublicAidaClient = Pick<Host.AidaClient.AidaClient, 'doConversation'|'registerClientEvent'>;
168
168
 
169
- function localizeType(sourceType: SourceType): string {
169
+ function localizeType(sourceType: Console.PromptBuilder.SourceType): string {
170
170
  switch (sourceType) {
171
- case SourceType.MESSAGE:
171
+ case Console.PromptBuilder.SourceType.MESSAGE:
172
172
  return i18nString(UIStrings.consoleMessage);
173
- case SourceType.STACKTRACE:
173
+ case Console.PromptBuilder.SourceType.STACKTRACE:
174
174
  return i18nString(UIStrings.stackTrace);
175
- case SourceType.NETWORK_REQUEST:
175
+ case Console.PromptBuilder.SourceType.NETWORK_REQUEST:
176
176
  return i18nString(UIStrings.networkRequest);
177
- case SourceType.RELATED_CODE:
177
+ case Console.PromptBuilder.SourceType.RELATED_CODE:
178
178
  return i18nString(UIStrings.relatedCode);
179
179
  }
180
180
  }
@@ -205,7 +205,7 @@ type StateData = {
205
205
  type: State.INSIGHT,
206
206
  tokens: MarkdownView.MarkdownView.MarkdownViewData['tokens'],
207
207
  validMarkdown: boolean,
208
- sources: Source[],
208
+ sources: Console.PromptBuilder.Source[],
209
209
  isPageReloadRecommended: boolean,
210
210
  completed: boolean,
211
211
  directCitationUrls: string[],
@@ -215,7 +215,7 @@ type StateData = {
215
215
  error: string,
216
216
  }|{
217
217
  type: State.CONSENT_REMINDER,
218
- sources: Source[],
218
+ sources: Console.PromptBuilder.Source[],
219
219
  isPageReloadRecommended: boolean,
220
220
  }|{
221
221
  type: State.SETTING_IS_NOT_TRUE,
@@ -631,7 +631,9 @@ export class ConsoleInsight extends HTMLElement {
631
631
 
632
632
  async *
633
633
  #getInsight(): AsyncGenerator<
634
- {sources: Source[], isPageReloadRecommended: boolean}&Host.AidaClient.DoConversationResponse, void, void> {
634
+ {sources: Console.PromptBuilder.Source[], isPageReloadRecommended: boolean}&
635
+ Host.AidaClient.DoConversationResponse,
636
+ void, void> {
635
637
  const {prompt, sources, isPageReloadRecommended} = await this.#promptBuilder.buildPrompt();
636
638
  try {
637
639
  for await (const response of this.#aidaClient.doConversation(
@@ -1142,7 +1144,7 @@ export class ConsoleInsight extends HTMLElement {
1142
1144
 
1143
1145
  class ConsoleInsightSourcesList extends HTMLElement {
1144
1146
  readonly #shadow = this.attachShadow({mode: 'open'});
1145
- #sources: Source[] = [];
1147
+ #sources: Console.PromptBuilder.Source[] = [];
1146
1148
  #isPageReloadRecommended = false;
1147
1149
 
1148
1150
  #render(): void {
@@ -1167,7 +1169,7 @@ class ConsoleInsightSourcesList extends HTMLElement {
1167
1169
  // clang-format on
1168
1170
  }
1169
1171
 
1170
- set sources(values: Source[]) {
1172
+ set sources(values: Console.PromptBuilder.Source[]) {
1171
1173
  this.#sources = values;
1172
1174
  this.#render();
1173
1175
  }
@@ -4,4 +4,3 @@
4
4
 
5
5
  export * from './components/ConsoleInsight.js';
6
6
  export * from './ActionDelegate.js';
7
- export * from './PromptBuilder.js';
@@ -63,7 +63,7 @@ UI.ViewManager.registerViewExtension({
63
63
  isPreviewFeature: true,
64
64
  async loadView() {
65
65
  const Timeline = await loadTimelineModule();
66
- return Timeline.TimelinePanel.TimelinePanel.instance({forceNew: null, isNode: true});
66
+ return Timeline.TimelinePanel.TimelinePanel.instance({forceNew: null});
67
67
  },
68
68
  });
69
69
 
@@ -193,10 +193,12 @@ export class Layers3DView extends Common.ObjectWrapper.eventMixin<EventTypes, ty
193
193
  }
194
194
 
195
195
  override willHide(): void {
196
+ super.willHide();
196
197
  this.textureManager.suspend();
197
198
  }
198
199
 
199
200
  override wasShown(): void {
201
+ super.wasShown();
200
202
  this.textureManager.resume();
201
203
  if (!this.needsUpdate) {
202
204
  return;
@@ -1,6 +1,7 @@
1
1
  // Copyright 2018 The Chromium Authors
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
+ /* eslint-disable rulesdir/no-imperative-dom-api */
4
5
 
5
6
  import * as Common from '../../core/common/common.js';
6
7
  import * as i18n from '../../core/i18n/i18n.js';
@@ -183,6 +183,7 @@ export class LinearMemoryInspectorView extends UI.Widget.VBox {
183
183
  }
184
184
 
185
185
  override wasShown(): void {
186
+ super.wasShown();
186
187
  this.refreshData();
187
188
  }
188
189
 
@@ -215,6 +215,7 @@ export class MainView extends UI.Panel.PanelWithSidebar implements SDK.TargetMan
215
215
  }
216
216
 
217
217
  override willHide(): void {
218
+ super.willHide();
218
219
  for (const model of SDK.TargetManager.TargetManager.instance().models(MediaModel, {scoped: true})) {
219
220
  this.removeEventListeners(model);
220
221
  }
@@ -281,6 +281,7 @@ export class TickingFlameChart extends UI.Widget.VBox {
281
281
  }
282
282
 
283
283
  override willHide(): void {
284
+ super.willHide();
284
285
  this.isShown = false;
285
286
  if (this.ticking) {
286
287
  this.stop();
@@ -288,6 +289,7 @@ export class TickingFlameChart extends UI.Widget.VBox {
288
289
  }
289
290
 
290
291
  override wasShown(): void {
292
+ super.wasShown();
291
293
  this.isShown = true;
292
294
  if (this.#canTick && !this.ticking) {
293
295
  this.start();
@@ -1,6 +1,7 @@
1
1
  // Copyright 2015 The Chromium Authors
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
+ /* eslint-disable rulesdir/no-lit-render-outside-of-view */
4
5
  /* eslint-disable rulesdir/no-imperative-dom-api */
5
6
 
6
7
  import '../../ui/legacy/legacy.js';
@@ -12,10 +13,13 @@ import * as SDK from '../../core/sdk/sdk.js';
12
13
  import * as Logs from '../../models/logs/logs.js';
13
14
  import * as Buttons from '../../ui/components/buttons/buttons.js';
14
15
  import * as UI from '../../ui/legacy/legacy.js';
16
+ import {Directives, html, render} from '../../ui/lit/lit.js';
15
17
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
16
18
 
17
19
  import blockedURLsPaneStyles from './blockedURLsPane.css.js';
18
20
 
21
+ const {ref} = Directives;
22
+
19
23
  const UIStrings = {
20
24
  /**
21
25
  * @description Text to enable blocking of network requests
@@ -70,45 +74,81 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
70
74
  const NETWORK_REQUEST_BLOCKING_EXPLANATION_URL =
71
75
  'https://developer.chrome.com/docs/devtools/network-request-blocking' as Platform.DevToolsPath.UrlString;
72
76
 
77
+ const {bindToAction} = UI.UIUtils;
78
+
79
+ interface ViewInput {
80
+ list: UI.ListWidget.ListWidget<SDK.NetworkManager.RequestCondition>;
81
+ enabled: boolean;
82
+ toggleEnabled: () => void;
83
+ addPattern: () => void;
84
+ }
85
+ type View = (input: ViewInput, output: object, target: HTMLElement) => void;
86
+ export const DEFAULT_VIEW: View = (input, output, target) => {
87
+ render(
88
+ // clang-format off
89
+ html`
90
+ <style>${blockedURLsPaneStyles}</style>
91
+ <devtools-toolbar jslog=${VisualLogging.toolbar()}>
92
+ <devtools-checkbox
93
+ ?checked=${input.enabled}
94
+ @click=${input.toggleEnabled}
95
+ .jslogContext=${'network.enable-request-blocking'}>
96
+ ${i18nString(UIStrings.enableNetworkRequestBlocking)}
97
+ </devtools-checkbox>
98
+ <div class="toolbar-divider"></div>
99
+ <devtools-button ${bindToAction('network.add-network-request-blocking-pattern')}></devtools-button>
100
+ <devtools-button ${bindToAction('network.remove-all-network-request-blocking-patterns')}></devtools-button>
101
+ </devtools-toolbar>
102
+ <div class=empty-state ${ref(e => input.list.setEmptyPlaceholder(e ?? null))}>
103
+ <span class=empty-state-header>${i18nString(UIStrings.noNetworkRequestsBlocked)}</span>
104
+ <div class=empty-state-description>
105
+ <span>${i18nString(UIStrings.addPatternToBlock, {PH1: i18nString(UIStrings.addPattern)})}</span>
106
+ <x-link
107
+ href=${NETWORK_REQUEST_BLOCKING_EXPLANATION_URL}
108
+ tabindex=0
109
+ class=devtools-link
110
+ jslog=${VisualLogging.link().track({click: true, keydown:'Enter|Space'}).context('learn-more')}>
111
+ ${i18nString(UIStrings.learnMore)}
112
+ </x-link>
113
+ </div>
114
+ <devtools-button
115
+ @click=${input.addPattern}
116
+ class=add-button
117
+ .jslogContext=${'network.add-network-request-blocking-pattern'}
118
+ aria-label=${i18nString(UIStrings.addNetworkRequestBlockingPattern)}
119
+ .variant=${Buttons.Button.Variant.TONAL}>
120
+ ${i18nString(UIStrings.addPattern)}
121
+ </devtools-button>
122
+ </div>
123
+ <devtools-widget .widgetConfig=${UI.Widget.widgetConfig(UI.Widget.VBox)}>${input.list.element}</devtools-widget>
124
+ `,
125
+ // clang-format on
126
+ target);
127
+ };
128
+
73
129
  export class BlockedURLsPane extends UI.Widget.VBox implements
74
- UI.ListWidget.Delegate<SDK.NetworkManager.BlockedPattern> {
130
+ UI.ListWidget.Delegate<SDK.NetworkManager.RequestCondition> {
75
131
  private manager: SDK.NetworkManager.MultitargetNetworkManager;
76
- private readonly toolbar: UI.Toolbar.Toolbar;
77
- private readonly enabledCheckbox: UI.Toolbar.ToolbarCheckbox;
78
- private readonly list: UI.ListWidget.ListWidget<SDK.NetworkManager.BlockedPattern>;
79
- private editor: UI.ListWidget.Editor<SDK.NetworkManager.BlockedPattern>|null;
132
+ private readonly list: UI.ListWidget.ListWidget<SDK.NetworkManager.RequestCondition>;
133
+ private editor: UI.ListWidget.Editor<SDK.NetworkManager.RequestCondition>|null;
80
134
  private blockedCountForUrl: Map<string, number>;
135
+ #view: View;
81
136
 
82
- constructor() {
83
- super({
137
+ constructor(target?: HTMLElement, view = DEFAULT_VIEW) {
138
+ super(target, {
84
139
  jslog: `${VisualLogging.panel('network.blocked-urls').track({resize: true})}`,
85
140
  useShadowDom: true,
86
141
  });
87
- this.registerRequiredCSS(blockedURLsPaneStyles);
142
+ this.#view = view;
88
143
 
89
144
  this.manager = SDK.NetworkManager.MultitargetNetworkManager.instance();
90
145
  this.manager.addEventListener(
91
146
  SDK.NetworkManager.MultitargetNetworkManager.Events.BLOCKED_PATTERNS_CHANGED, this.update, this);
92
147
 
93
- this.toolbar = this.contentElement.createChild('devtools-toolbar');
94
- this.enabledCheckbox = new UI.Toolbar.ToolbarCheckbox(
95
- i18nString(UIStrings.enableNetworkRequestBlocking), undefined, this.toggleEnabled.bind(this),
96
- 'network.enable-request-blocking');
97
- this.toolbar.appendToolbarItem(this.enabledCheckbox);
98
- this.toolbar.appendSeparator();
99
- this.toolbar.appendToolbarItem(
100
- UI.Toolbar.Toolbar.createActionButton('network.add-network-request-blocking-pattern'));
101
- this.toolbar.appendToolbarItem(
102
- UI.Toolbar.Toolbar.createActionButton('network.remove-all-network-request-blocking-patterns'));
103
- this.toolbar.setAttribute('jslog', `${VisualLogging.toolbar()}`);
104
-
105
148
  this.list = new UI.ListWidget.ListWidget(this);
106
149
  this.list.registerRequiredCSS(blockedURLsPaneStyles);
107
150
  this.list.element.classList.add('blocked-urls');
108
151
 
109
- this.list.setEmptyPlaceholder(this.createEmptyPlaceholder());
110
- this.list.show(this.contentElement);
111
-
112
152
  this.editor = null;
113
153
 
114
154
  this.blockedCountForUrl = new Map();
@@ -120,104 +160,92 @@ export class BlockedURLsPane extends UI.Widget.VBox implements
120
160
  Logs.NetworkLog.NetworkLog.instance().addEventListener(Logs.NetworkLog.Events.Reset, this.onNetworkLogReset, this);
121
161
  }
122
162
 
123
- private createEmptyPlaceholder(): Element {
124
- const placeholder = this.contentElement.createChild('div', 'empty-state');
125
- placeholder.createChild('span', 'empty-state-header').textContent = i18nString(UIStrings.noNetworkRequestsBlocked);
126
-
127
- const description = placeholder.createChild('div', 'empty-state-description');
128
- description.createChild('span').textContent =
129
- i18nString(UIStrings.addPatternToBlock, {PH1: i18nString(UIStrings.addPattern)});
130
- const link = UI.XLink.XLink.create(
131
- NETWORK_REQUEST_BLOCKING_EXPLANATION_URL, i18nString(UIStrings.learnMore), undefined, undefined, 'learn-more');
132
- description.appendChild(link);
133
-
134
- const addButton = UI.UIUtils.createTextButton(i18nString(UIStrings.addPattern), this.addPattern.bind(this), {
135
- className: 'add-button',
136
- jslogContext: 'network.add-network-request-blocking-pattern',
137
- variant: Buttons.Button.Variant.TONAL,
138
- });
139
- UI.ARIAUtils.setLabel(addButton, i18nString(UIStrings.addNetworkRequestBlockingPattern));
140
- placeholder.appendChild(addButton);
141
- return placeholder;
163
+ override performUpdate(): void {
164
+ const enabled = this.manager.blockingEnabled();
165
+ this.list.element.classList.toggle('blocking-disabled', !enabled && Boolean(this.manager.requestConditions.count));
166
+
167
+ const input: ViewInput = {
168
+ addPattern: this.addPattern.bind(this),
169
+ toggleEnabled: this.toggleEnabled.bind(this),
170
+ enabled,
171
+ list: this.list,
172
+ };
173
+ this.#view(input, {}, this.contentElement);
142
174
  }
143
175
 
144
176
  addPattern(): void {
145
177
  this.manager.setBlockingEnabled(true);
146
- this.list.addNewItem(0, {url: Platform.DevToolsPath.EmptyUrlString, enabled: true});
178
+ this.list.addNewItem(
179
+ 0, new SDK.NetworkManager.RequestCondition({url: Platform.DevToolsPath.EmptyUrlString, enabled: true}));
147
180
  }
148
181
 
149
182
  removeAllPatterns(): void {
150
- this.manager.setBlockedPatterns([]);
183
+ this.manager.requestConditions.clear();
151
184
  }
152
185
 
153
- renderItem(pattern: SDK.NetworkManager.BlockedPattern, editable: boolean): Element {
154
- const count = this.blockedRequestsCount(pattern.url);
186
+ renderItem(condition: SDK.NetworkManager.RequestCondition, editable: boolean): Element {
187
+ const count = this.blockedRequestsCount(condition.url);
155
188
  const element = document.createElement('div');
156
189
  element.classList.add('blocked-url');
157
- const checkbox = element.createChild('input', 'blocked-url-checkbox');
158
- checkbox.type = 'checkbox';
159
- checkbox.checked = pattern.enabled;
160
- checkbox.disabled = !editable;
161
- checkbox.setAttribute('jslog', `${VisualLogging.toggle().track({change: true})}`);
162
- element.createChild('div', 'blocked-url-label').textContent = pattern.url;
163
- element.createChild('div', 'blocked-url-count').textContent = i18nString(UIStrings.dBlocked, {PH1: count});
164
- if (editable) {
165
- element.addEventListener('click', event => this.togglePattern(pattern, event));
166
- checkbox.addEventListener('click', event => this.togglePattern(pattern, event));
167
- }
190
+ const toggle = (e: Event): void => {
191
+ if (editable) {
192
+ e.consume(true);
193
+ condition.enabled = !condition.enabled;
194
+ }
195
+ };
196
+ render(
197
+ // clang-format off
198
+ html`
199
+ <input class=blocked-url-checkbox
200
+ @click=${toggle}
201
+ type=checkbox
202
+ ?checked=${condition.enabled}
203
+ ?disabled=${!editable}
204
+ .jslog=${VisualLogging.toggle().track({ change: true })}>
205
+ <div @click=${toggle} class=blocked-url-label>${condition.url}</div>
206
+ <div class=blocked-url-count>${i18nString(UIStrings.dBlocked, {PH1: count})}</div>`,
207
+ // clang-format off
208
+ element);
168
209
  return element;
169
210
  }
170
211
 
171
- private togglePattern(pattern: SDK.NetworkManager.BlockedPattern, event: Event): void {
172
- event.consume(true);
173
- const patterns = this.manager.blockedPatterns();
174
- patterns.splice(patterns.indexOf(pattern), 1, {enabled: !pattern.enabled, url: pattern.url});
175
- this.manager.setBlockedPatterns(patterns);
176
- }
177
-
178
212
  private toggleEnabled(): void {
179
213
  this.manager.setBlockingEnabled(!this.manager.blockingEnabled());
180
214
  this.update();
181
215
  }
182
216
 
183
- removeItemRequested(_pattern: SDK.NetworkManager.BlockedPattern, index: number): void {
184
- const patterns = this.manager.blockedPatterns();
185
- patterns.splice(index, 1);
186
- this.manager.setBlockedPatterns(patterns);
217
+ removeItemRequested(condition: SDK.NetworkManager.RequestCondition): void {
218
+ this.manager.requestConditions.delete(condition);
187
219
  UI.ARIAUtils.LiveAnnouncer.alert(UIStrings.itemDeleted);
188
220
  }
189
221
 
190
- beginEdit(pattern: SDK.NetworkManager.BlockedPattern): UI.ListWidget.Editor<SDK.NetworkManager.BlockedPattern> {
222
+ beginEdit(pattern: SDK.NetworkManager.RequestCondition): UI.ListWidget.Editor<SDK.NetworkManager.RequestCondition> {
191
223
  this.editor = this.createEditor();
192
224
  this.editor.control('url').value = pattern.url;
193
225
  return this.editor;
194
226
  }
195
227
 
196
228
  commitEdit(
197
- item: SDK.NetworkManager.BlockedPattern, editor: UI.ListWidget.Editor<SDK.NetworkManager.BlockedPattern>,
229
+ item: SDK.NetworkManager.RequestCondition, editor: UI.ListWidget.Editor<SDK.NetworkManager.RequestCondition>,
198
230
  isNew: boolean): void {
199
- const url = editor.control('url').value as Platform.DevToolsPath.UrlString;
200
- const patterns = this.manager.blockedPatterns();
231
+ item.url =
232
+ editor.control('url').value as Platform.DevToolsPath.UrlString;
201
233
  if (isNew) {
202
- patterns.push({enabled: true, url});
203
- } else {
204
- patterns.splice(patterns.indexOf(item), 1, {enabled: true, url});
234
+ this.manager.requestConditions.add(item);
205
235
  }
206
-
207
- this.manager.setBlockedPatterns(patterns);
208
236
  }
209
237
 
210
- private createEditor(): UI.ListWidget.Editor<SDK.NetworkManager.BlockedPattern> {
238
+ private createEditor(): UI.ListWidget.Editor<SDK.NetworkManager.RequestCondition> {
211
239
  if (this.editor) {
212
240
  return this.editor;
213
241
  }
214
242
 
215
- const editor = new UI.ListWidget.Editor<SDK.NetworkManager.BlockedPattern>();
243
+ const editor = new UI.ListWidget.Editor<SDK.NetworkManager.RequestCondition>();
216
244
  const content = editor.contentElement();
217
245
  const titles = content.createChild('div', 'blocked-url-edit-row');
218
246
  titles.createChild('div').textContent = i18nString(UIStrings.textPatternToBlockMatching);
219
247
  const fields = content.createChild('div', 'blocked-url-edit-row');
220
- const validator = (_item: SDK.NetworkManager.BlockedPattern, _index: number, input: UI.ListWidget.EditorControl): {
248
+ const validator = (_item: SDK.NetworkManager.RequestCondition, _index: number, input: UI.ListWidget.EditorControl): {
221
249
  valid: boolean,
222
250
  errorMessage: Common.UIString.LocalizedString|undefined,
223
251
  } => {
@@ -226,7 +254,7 @@ export class BlockedURLsPane extends UI.Widget.VBox implements
226
254
  if (!input.value) {
227
255
  errorMessage = i18nString(UIStrings.patternInputCannotBeEmpty);
228
256
  valid = false;
229
- } else if (this.manager.blockedPatterns().find(pattern => pattern.url === input.value)) {
257
+ } else if (this.manager.requestConditions.has(input.value)) {
230
258
  errorMessage = i18nString(UIStrings.patternAlreadyExists);
231
259
  valid = false;
232
260
  }
@@ -239,13 +267,11 @@ export class BlockedURLsPane extends UI.Widget.VBox implements
239
267
 
240
268
  update(): void {
241
269
  const enabled = this.manager.blockingEnabled();
242
- this.list.element.classList.toggle('blocking-disabled', !enabled && Boolean(this.manager.blockedPatterns().length));
243
-
244
- this.enabledCheckbox.setChecked(enabled);
245
270
  this.list.clear();
246
- for (const pattern of this.manager.blockedPatterns()) {
271
+ for (const pattern of this.manager.requestConditions.conditions) {
247
272
  this.list.appendItem(pattern, enabled);
248
273
  }
274
+ this.requestUpdate();
249
275
  }
250
276
 
251
277
  private blockedRequestsCount(url: string): number {
@@ -117,6 +117,7 @@ export class EventSourceMessagesView extends UI.Widget.VBox {
117
117
  }
118
118
 
119
119
  override willHide(): void {
120
+ super.willHide();
120
121
  this.request.removeEventListener(SDK.NetworkRequest.Events.EVENT_SOURCE_MESSAGE_ADDED, this.messageAdded, this);
121
122
  }
122
123
 
@@ -268,6 +268,7 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
268
268
  }
269
269
 
270
270
  override willHide(): void {
271
+ super.willHide();
271
272
  this.#request.removeEventListener(
272
273
  SDK.NetworkRequest.Events.REQUEST_HEADERS_CHANGED, this.requestHeadersChanged, this);
273
274
  this.#request.removeEventListener(
@@ -1390,6 +1390,7 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
1390
1390
  }
1391
1391
 
1392
1392
  override willHide(): void {
1393
+ super.willHide();
1393
1394
  this.columnsInternal.willHide();
1394
1395
  }
1395
1396
 
@@ -1847,23 +1848,24 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
1847
1848
  if (request) {
1848
1849
  const maxBlockedURLLength = 20;
1849
1850
  const manager = SDK.NetworkManager.MultitargetNetworkManager.instance();
1850
- let patterns = manager.blockedPatterns();
1851
1851
 
1852
1852
  function addBlockedURL(url: string): void {
1853
- patterns.push({enabled: true, url: url as Platform.DevToolsPath.UrlString});
1854
- manager.setBlockedPatterns(patterns);
1853
+ manager.requestConditions.add(
1854
+ new SDK.NetworkManager.RequestCondition({enabled: true, url: url as Platform.DevToolsPath.UrlString}));
1855
1855
  manager.setBlockingEnabled(true);
1856
1856
  void UI.ViewManager.ViewManager.instance().showView('network.blocked-urls');
1857
1857
  }
1858
1858
 
1859
1859
  function removeBlockedURL(url: string): void {
1860
- patterns = patterns.filter(pattern => pattern.url !== url);
1861
- manager.setBlockedPatterns(patterns);
1860
+ const entry = manager.requestConditions.conditions.find(condition => condition.url === url);
1861
+ if (entry) {
1862
+ manager.requestConditions.delete(entry);
1863
+ }
1862
1864
  void UI.ViewManager.ViewManager.instance().showView('network.blocked-urls');
1863
1865
  }
1864
1866
 
1865
1867
  const urlWithoutScheme = request.parsedURL.urlWithoutScheme();
1866
- if (urlWithoutScheme && !patterns.find(pattern => pattern.url === urlWithoutScheme)) {
1868
+ if (urlWithoutScheme && !manager.requestConditions.has(urlWithoutScheme)) {
1867
1869
  contextMenu.debugSection().appendItem(
1868
1870
  i18nString(UIStrings.blockRequestUrl), addBlockedURL.bind(null, urlWithoutScheme),
1869
1871
  {jslogContext: 'block-request-url'});
@@ -1875,7 +1877,7 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
1875
1877
  }
1876
1878
 
1877
1879
  const domain = request.parsedURL.domain();
1878
- if (domain && !patterns.find(pattern => pattern.url === domain)) {
1880
+ if (domain && !manager.requestConditions.has(domain)) {
1879
1881
  contextMenu.debugSection().appendItem(
1880
1882
  i18nString(UIStrings.blockRequestDomain), addBlockedURL.bind(null, domain),
1881
1883
  {jslogContext: 'block-request-domain'});
@@ -98,6 +98,7 @@ export class NetworkOverview extends PerfUI.TimelineOverviewPane.TimelineOvervie
98
98
  }
99
99
 
100
100
  override wasShown(): void {
101
+ super.wasShown();
101
102
  this.onResize();
102
103
  }
103
104
 
@@ -317,6 +317,7 @@ export class RequestCookiesView extends UI.Widget.Widget {
317
317
  }
318
318
 
319
319
  override willHide(): void {
320
+ super.willHide();
320
321
  this.request.removeEventListener(
321
322
  SDK.NetworkRequest.Events.REQUEST_HEADERS_CHANGED, this.refreshRequestCookiesView, this);
322
323
  this.request.removeEventListener(