chrome-devtools-frontend 1.0.1522585 → 1.0.1524741

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 (341) hide show
  1. package/AUTHORS +1 -0
  2. package/docs/README.md +1 -0
  3. package/docs/policy/README.md +1 -0
  4. package/docs/policy/console-policy.md +144 -0
  5. package/docs/policy/images/console-policy1.png +0 -0
  6. package/docs/policy/images/console-policy2.png +0 -0
  7. package/docs/policy/images/console-policy3.png +0 -0
  8. package/docs/ui_engineering.md +22 -0
  9. package/front_end/Tests.js +1 -1
  10. package/front_end/core/common/Color.ts +13 -9
  11. package/front_end/core/common/ColorConverter.ts +9 -7
  12. package/front_end/core/common/Gzip.ts +1 -1
  13. package/front_end/core/common/MapWithDefault.ts +5 -3
  14. package/front_end/core/common/ResourceType.ts +0 -12
  15. package/front_end/core/common/ReturnToPanel.ts +6 -4
  16. package/front_end/core/common/Trie.ts +4 -2
  17. package/front_end/core/host/AidaClient.ts +3 -3
  18. package/front_end/core/host/GdpClient.ts +7 -5
  19. package/front_end/core/host/InspectorFrontendHostAPI.ts +7 -5
  20. package/front_end/core/host/Platform.ts +5 -3
  21. package/front_end/core/host/UserMetrics.ts +6 -4
  22. package/front_end/core/platform/ArrayUtilities.ts +1 -1
  23. package/front_end/core/platform/StringUtilities.ts +34 -31
  24. package/front_end/core/root/Runtime.ts +1 -1
  25. package/front_end/core/sdk/CSSMetadata.ts +6 -4
  26. package/front_end/core/sdk/CSSPropertyParser.ts +17 -13
  27. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +19 -13
  28. package/front_end/core/sdk/ChildTargetManager.ts +35 -0
  29. package/front_end/core/sdk/DOMModel.ts +1 -1
  30. package/front_end/core/sdk/EventBreakpointsModel.ts +4 -2
  31. package/front_end/core/sdk/HttpReasonPhraseStrings.ts +4 -2
  32. package/front_end/core/sdk/NetworkManager.ts +8 -48
  33. package/front_end/core/sdk/NetworkRequest.ts +0 -28
  34. package/front_end/core/sdk/PageResourceLoader.ts +1 -1
  35. package/front_end/core/sdk/PreloadingModel.ts +22 -18
  36. package/front_end/core/sdk/RehydratingConnection.ts +1 -1
  37. package/front_end/core/sdk/RehydratingObject.ts +1 -1
  38. package/front_end/core/sdk/RemoteObject.ts +1 -1
  39. package/front_end/core/sdk/ResourceTreeModel.ts +2 -0
  40. package/front_end/core/sdk/ScreenCaptureModel.ts +24 -20
  41. package/front_end/core/sdk/Target.ts +7 -1
  42. package/front_end/core/sdk/TraceObject.ts +2 -2
  43. package/front_end/entrypoints/formatter_worker/Substitute.ts +6 -4
  44. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +24 -16
  45. package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +2 -1
  46. package/front_end/entrypoints/main/MainImpl.ts +6 -4
  47. package/front_end/generated/InspectorBackendCommands.js +2 -2
  48. package/front_end/generated/protocol-mapping.d.ts +3 -2
  49. package/front_end/generated/protocol-proxy-api.d.ts +3 -1
  50. package/front_end/generated/protocol.ts +7 -1
  51. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +55 -14
  52. package/front_end/models/ai_assistance/agents/StylingAgent.ts +83 -222
  53. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +23 -0
  54. package/front_end/models/ai_assistance/performance/AIContext.ts +19 -4
  55. package/front_end/models/ai_code_completion/AiCodeCompletion.ts +4 -2
  56. package/front_end/models/autofill_manager/AutofillManager.ts +4 -2
  57. package/front_end/models/cpu_profile/CPUProfileDataModel.ts +1 -1
  58. package/front_end/models/crux-manager/CrUXManager.ts +1 -1
  59. package/front_end/models/extensions/HostUrlPattern.ts +13 -5
  60. package/front_end/models/issues_manager/CookieDeprecationMetadataIssue.ts +1 -1
  61. package/front_end/models/issues_manager/CookieIssue.ts +2 -2
  62. package/front_end/models/issues_manager/MarkdownIssueDescription.ts +1 -1
  63. package/front_end/models/issues_manager/SharedDictionaryIssue.ts +20 -0
  64. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidTTLField.md +1 -0
  65. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonIntegerTTLField.md +1 -0
  66. package/front_end/models/javascript_metadata/NativeFunctions.js +8 -0
  67. package/front_end/models/network_time_calculator/Calculator.ts +4 -2
  68. package/front_end/models/network_time_calculator/RequestTimeRanges.ts +6 -4
  69. package/front_end/models/source_map_scopes/NamesResolver.ts +7 -5
  70. package/front_end/models/text_utils/ContentProvider.ts +6 -4
  71. package/front_end/models/trace/extras/TraceTree.ts +1 -1
  72. package/front_end/models/trace/handlers/FramesHandler.ts +7 -5
  73. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +13 -7
  74. package/front_end/models/trace/handlers/MetaHandler.ts +16 -14
  75. package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +20 -8
  76. package/front_end/models/trace/handlers/helpers.ts +1 -1
  77. package/front_end/models/trace/handlers/types.ts +23 -19
  78. package/front_end/models/trace/helpers/Timing.ts +4 -2
  79. package/front_end/models/trace/helpers/Trace.ts +8 -4
  80. package/front_end/models/trace/insights/DocumentLatency.ts +1 -1
  81. package/front_end/models/trace/insights/INPBreakdown.ts +13 -2
  82. package/front_end/models/trace/insights/LCPBreakdown.ts +14 -2
  83. package/front_end/models/trace/insights/NetworkDependencyTree.ts +2 -2
  84. package/front_end/models/trace/types/File.ts +12 -8
  85. package/front_end/models/trace/types/Timing.ts +1 -1
  86. package/front_end/models/trace/types/TraceEvents.ts +37 -23
  87. package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +1 -1
  88. package/front_end/panels/ai_assistance/components/MarkdownRendererWithCodeBlock.ts +12 -10
  89. package/front_end/panels/application/KeyValueStorageItemsView.ts +31 -33
  90. package/front_end/panels/application/components/InterestGroupAccessGrid.ts +6 -11
  91. package/front_end/panels/application/components/OriginTrialTreeView.ts +7 -5
  92. package/front_end/panels/application/components/PermissionsPolicySection.ts +1 -0
  93. package/front_end/panels/application/components/ReportsGrid.ts +4 -10
  94. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +5 -13
  95. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +1 -1
  96. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +3 -7
  97. package/front_end/panels/application/preloading/components/PreloadingString.ts +2 -2
  98. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +3 -10
  99. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +4 -2
  100. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +7 -5
  101. package/front_end/panels/changes/ChangesSidebar.ts +97 -95
  102. package/front_end/panels/changes/changesSidebar.css +3 -0
  103. package/front_end/panels/console/ConsoleView.ts +2 -2
  104. package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +22 -35
  105. package/front_end/panels/elements/ComputedStyleWidget.ts +1 -1
  106. package/front_end/panels/elements/ElementStatePaneWidget.ts +12 -0
  107. package/front_end/panels/elements/ElementsTreeElement.ts +9 -5
  108. package/front_end/panels/elements/ElementsTreeOutline.ts +11 -8
  109. package/front_end/panels/elements/PropertyRenderer.ts +19 -15
  110. package/front_end/panels/elements/StylePropertyTreeElement.ts +6 -4
  111. package/front_end/panels/elements/StylesSidebarPane.ts +2 -2
  112. package/front_end/panels/elements/components/AccessibilityTreeNode.ts +4 -2
  113. package/front_end/panels/elements/components/AdornerManager.ts +5 -3
  114. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +6 -4
  115. package/front_end/panels/media/PlayerPropertiesView.ts +1 -1
  116. package/front_end/panels/network/NetworkDataGridNode.ts +2 -44
  117. package/front_end/panels/network/NetworkLogView.ts +6 -4
  118. package/front_end/panels/network/RequestPreviewView.ts +0 -7
  119. package/front_end/panels/network/components/RequestHeadersView.ts +0 -6
  120. package/front_end/panels/network/components/components.ts +0 -2
  121. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +1 -1
  122. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +4 -2
  123. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +12 -19
  124. package/front_end/panels/search/SearchResultsPane.ts +2 -3
  125. package/front_end/panels/security/IPProtectionView.ts +1 -1
  126. package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +4 -0
  127. package/front_end/panels/settings/emulation/utils/StructuredHeaders.ts +45 -37
  128. package/front_end/panels/sources/BreakpointsViewUtils.ts +11 -9
  129. package/front_end/panels/sources/DebuggerPlugin.ts +8 -4
  130. package/front_end/panels/sources/SourcesPanel.ts +1 -1
  131. package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
  132. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +4 -2
  133. package/front_end/panels/timeline/CountersGraph.ts +12 -5
  134. package/front_end/panels/timeline/EasterEgg.d.ts +5 -3
  135. package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +8 -6
  136. package/front_end/panels/timeline/ModificationsManager.ts +5 -3
  137. package/front_end/panels/timeline/ThreadAppender.ts +7 -5
  138. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +10 -8
  139. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +1 -1
  140. package/front_end/panels/timeline/TimelinePanel.ts +10 -8
  141. package/front_end/panels/timeline/TimelineSelection.ts +4 -2
  142. package/front_end/panels/timeline/TimelineUIUtils.ts +5 -3
  143. package/front_end/panels/timeline/components/BreadcrumbsUI.ts +6 -4
  144. package/front_end/panels/timeline/components/Utils.ts +1 -1
  145. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +5 -3
  146. package/front_end/panels/timeline/utils/Helpers.ts +1 -1
  147. package/front_end/panels/utils/utils.ts +1 -7
  148. package/front_end/services/trace_bounds/TraceBounds.ts +4 -2
  149. package/front_end/services/tracing/PerformanceTracing.ts +1 -1
  150. package/front_end/third_party/chromium/README.chromium +1 -1
  151. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  152. package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
  153. package/front_end/third_party/codemirror.next/chunk/php.js +1 -1
  154. package/front_end/third_party/codemirror.next/chunk/php.js.map +1 -1
  155. package/front_end/third_party/codemirror.next/package.json +3 -2
  156. package/front_end/third_party/puppeteer/README.chromium +2 -2
  157. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Dialog.d.ts +8 -10
  158. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Dialog.d.ts.map +1 -1
  159. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Dialog.js +8 -10
  160. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Dialog.js.map +1 -1
  161. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts +28 -30
  162. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js +27 -29
  164. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts +34 -38
  166. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts.map +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js +34 -38
  168. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js.map +1 -1
  169. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.d.ts +8 -1
  170. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.d.ts.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.js +12 -14
  172. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.js.map +1 -1
  173. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +92 -108
  174. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  175. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js +33 -39
  176. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  177. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +5 -3
  179. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  180. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  181. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +1 -1
  182. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  183. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts +4 -2
  184. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  185. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js +14 -5
  186. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js.map +1 -1
  187. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +1 -0
  188. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  189. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +12 -6
  190. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  191. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  192. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js +24 -2
  193. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js.map +1 -1
  194. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.d.ts +2 -2
  195. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts +1 -0
  196. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  197. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js +3 -0
  198. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js.map +1 -1
  199. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/PredefinedNetworkConditions.d.ts +13 -22
  200. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/PredefinedNetworkConditions.d.ts.map +1 -1
  201. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/PredefinedNetworkConditions.js +13 -22
  202. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/PredefinedNetworkConditions.js.map +1 -1
  203. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Device.d.ts +6 -8
  204. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Device.d.ts.map +1 -1
  205. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Device.js +6 -8
  206. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Device.js.map +1 -1
  207. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  208. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
  209. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  210. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts +1 -1
  211. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  212. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +6 -3
  213. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
  214. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.d.ts +5 -7
  215. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
  216. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js +5 -7
  217. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js.map +1 -1
  218. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  219. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  220. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  221. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  222. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +188 -224
  223. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +140 -166
  224. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Dialog.d.ts +8 -10
  225. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Dialog.d.ts.map +1 -1
  226. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Dialog.js +8 -10
  227. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Dialog.js.map +1 -1
  228. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts +28 -30
  229. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  230. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js +27 -29
  231. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  232. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts +34 -38
  233. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts.map +1 -1
  234. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js +34 -38
  235. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js.map +1 -1
  236. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.d.ts +8 -1
  237. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.d.ts.map +1 -1
  238. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.js +12 -14
  239. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.js.map +1 -1
  240. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +92 -108
  241. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  242. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js +33 -39
  243. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  244. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  245. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +5 -3
  246. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  247. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  248. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +1 -1
  249. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  250. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts +4 -2
  251. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  252. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js +15 -6
  253. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js.map +1 -1
  254. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +1 -0
  255. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  256. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +12 -6
  257. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  258. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  259. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js +24 -2
  260. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js.map +1 -1
  261. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts +1 -0
  262. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  263. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js +3 -0
  264. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js.map +1 -1
  265. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/PredefinedNetworkConditions.d.ts +13 -22
  266. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/PredefinedNetworkConditions.d.ts.map +1 -1
  267. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/PredefinedNetworkConditions.js +13 -22
  268. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/PredefinedNetworkConditions.js.map +1 -1
  269. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Device.d.ts +6 -8
  270. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Device.d.ts.map +1 -1
  271. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Device.js +6 -8
  272. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Device.js.map +1 -1
  273. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  274. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
  275. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts +1 -1
  276. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  277. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +6 -3
  278. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
  279. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.d.ts +5 -7
  280. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
  281. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js +5 -7
  282. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js.map +1 -1
  283. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  284. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  285. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  286. package/front_end/third_party/puppeteer/package/lib/types.d.ts +188 -224
  287. package/front_end/third_party/puppeteer/package/package.json +3 -3
  288. package/front_end/third_party/puppeteer/package/src/api/Dialog.ts +8 -10
  289. package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +27 -29
  290. package/front_end/third_party/puppeteer/package/src/api/Frame.ts +34 -38
  291. package/front_end/third_party/puppeteer/package/src/api/HTTPRequest.ts +17 -14
  292. package/front_end/third_party/puppeteer/package/src/api/Page.ts +92 -108
  293. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +5 -3
  294. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +5 -1
  295. package/front_end/third_party/puppeteer/package/src/bidi/HTTPRequest.ts +28 -3
  296. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +16 -7
  297. package/front_end/third_party/puppeteer/package/src/bidi/core/Browser.ts +28 -2
  298. package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +4 -0
  299. package/front_end/third_party/puppeteer/package/src/cdp/PredefinedNetworkConditions.ts +13 -22
  300. package/front_end/third_party/puppeteer/package/src/common/Device.ts +6 -8
  301. package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
  302. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +6 -3
  303. package/front_end/third_party/puppeteer/package/src/node/PuppeteerNode.ts +5 -7
  304. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  305. package/front_end/ui/components/chrome_link/ChromeLink.ts +4 -2
  306. package/front_end/ui/components/dialogs/Dialog.ts +13 -9
  307. package/front_end/ui/components/highlighting/HighlightElement.ts +77 -0
  308. package/front_end/ui/components/highlighting/HighlightManager.ts +37 -0
  309. package/front_end/ui/components/highlighting/highlighting.ts +2 -0
  310. package/front_end/ui/components/markdown_view/MarkdownImagesMap.ts +5 -3
  311. package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +5 -3
  312. package/front_end/ui/components/menus/SelectMenu.ts +6 -4
  313. package/front_end/ui/components/survey_link/SurveyLink.ts +4 -2
  314. package/front_end/ui/components/text_editor/config.ts +10 -6
  315. package/front_end/ui/components/text_editor/javascript.ts +8 -4
  316. package/front_end/ui/legacy/ForwardedInputEventHandler.ts +4 -2
  317. package/front_end/ui/legacy/GlassPane.ts +1 -1
  318. package/front_end/ui/legacy/SettingsUI.ts +1 -5
  319. package/front_end/ui/legacy/Treeoutline.ts +12 -33
  320. package/front_end/ui/legacy/UIUtils.ts +19 -1
  321. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +12 -10
  322. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +30 -32
  323. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -1
  324. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +25 -25
  325. package/front_end/ui/legacy/components/data_grid/dataGrid.css +5 -0
  326. package/front_end/ui/legacy/components/inline_editor/AnimationTimingModel.ts +4 -2
  327. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +4 -2
  328. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +8 -6
  329. package/front_end/ui/legacy/components/perf_ui/PieChart.ts +6 -4
  330. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +3 -3
  331. package/front_end/ui/legacy/components/source_frame/XMLView.ts +22 -16
  332. package/front_end/ui/legacy/components/source_frame/xmlView.css +0 -2
  333. package/front_end/ui/legacy/components/utils/Linkifier.ts +6 -4
  334. package/front_end/ui/visual_logging/Debugging.ts +10 -6
  335. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -3
  336. package/inspector_overlay/common.ts +5 -3
  337. package/inspector_overlay/highlight_grid_common.ts +1 -1
  338. package/package.json +1 -1
  339. package/front_end/Images/src/bundle.svg +0 -3
  340. package/front_end/panels/network/components/WebBundleInfoView.css +0 -27
  341. package/front_end/panels/network/components/WebBundleInfoView.ts +0 -95
@@ -1458,8 +1458,17 @@ export class TreeSearch < NodeT extends TreeNode<NodeT>,
1458
1458
  static highlight(ranges: TextUtils.TextRange.SourceRange[], selectedRange: TextUtils.TextRange.SourceRange|undefined):
1459
1459
  ReturnType<typeof Lit.Directives.ref> {
1460
1460
  return Lit.Directives.ref(element => {
1461
- if (element instanceof HTMLLIElement) {
1462
- TreeViewTreeElement.get(element)?.highlight(ranges, selectedRange);
1461
+ if (!(element instanceof HTMLElement)) {
1462
+ return;
1463
+ }
1464
+ const configListItem = element.closest<HTMLLIElement>('li[role="treeitem"]');
1465
+ const titleElement = configListItem ? TreeViewTreeElement.get(configListItem)?.titleElement : undefined;
1466
+ if (configListItem && titleElement) {
1467
+ const targetElement = HTMLElementWithLightDOMTemplate.findCorrespondingElement(
1468
+ element, configListItem, titleElement as HTMLElement);
1469
+ if (targetElement) {
1470
+ Highlighting.HighlightManager.HighlightManager.instance().set(targetElement, ranges, selectedRange);
1471
+ }
1463
1472
  }
1464
1473
  });
1465
1474
  }
@@ -1524,31 +1533,7 @@ export class TreeSearch < NodeT extends TreeNode<NodeT>,
1524
1533
  }
1525
1534
  }
1526
1535
 
1527
- class ActiveHighlights {
1528
- #activeRanges: Range[] = [];
1529
- #highlights: TextUtils.TextRange.SourceRange[] = [];
1530
- #selectedSearchResult: TextUtils.TextRange.SourceRange|undefined = undefined;
1531
-
1532
- apply(node: Node): void {
1533
- Highlighting.HighlightManager.HighlightManager.instance().removeHighlights(this.#activeRanges);
1534
- this.#activeRanges =
1535
- Highlighting.HighlightManager.HighlightManager.instance().highlightOrderedTextRanges(node, this.#highlights);
1536
- if (this.#selectedSearchResult) {
1537
- this.#activeRanges.push(...Highlighting.HighlightManager.HighlightManager.instance().highlightOrderedTextRanges(
1538
- node, [this.#selectedSearchResult], /* isSelected=*/ true));
1539
- }
1540
- }
1541
-
1542
- set(element: Node, highlights: TextUtils.TextRange.SourceRange[],
1543
- selectedSearchResult: TextUtils.TextRange.SourceRange|undefined): void {
1544
- this.#highlights = highlights;
1545
- this.#selectedSearchResult = selectedSearchResult;
1546
- this.apply(element);
1547
- }
1548
- }
1549
-
1550
1536
  class TreeViewTreeElement extends TreeElement {
1551
- #activeHighlights = new ActiveHighlights();
1552
1537
  #clonedAttributes = new Set<string>();
1553
1538
  #clonedClasses = new Set<string>();
1554
1539
 
@@ -1562,12 +1547,6 @@ class TreeViewTreeElement extends TreeElement {
1562
1547
  this.refresh();
1563
1548
  }
1564
1549
 
1565
- highlight(
1566
- highlights: TextUtils.TextRange.SourceRange[],
1567
- selectedSearchResult: TextUtils.TextRange.SourceRange|undefined): void {
1568
- this.#activeHighlights.set(this.titleElement, highlights, selectedSearchResult);
1569
- }
1570
-
1571
1550
  refresh(): void {
1572
1551
  this.titleElement.textContent = '';
1573
1552
  this.#clonedAttributes.forEach(attr => this.listItemElement.attributes.removeNamedItem(attr));
@@ -1594,7 +1573,7 @@ class TreeViewTreeElement extends TreeElement {
1594
1573
  this.titleElement.appendChild(HTMLElementWithLightDOMTemplate.cloneNode(child));
1595
1574
  }
1596
1575
 
1597
- this.#activeHighlights.apply(this.titleElement);
1576
+ Highlighting.HighlightManager.HighlightManager.instance().apply(this.titleElement);
1598
1577
  }
1599
1578
 
1600
1579
  static get(configElement: Node|undefined): TreeViewTreeElement|undefined {
@@ -857,7 +857,7 @@ export function highlightRangesWithStyleClass(
857
857
  return highlightNodes;
858
858
  }
859
859
 
860
- // Used in chromium/src/third_party/blink/web_tests/http/tests/devtools/components/utilities-highlight-results.js
860
+ /** Used in chromium/src/third_party/blink/web_tests/http/tests/devtools/components/utilities-highlight-results.js **/
861
861
  export function applyDomChanges(domChanges: HighlightChange[]): void {
862
862
  for (let i = 0, size = domChanges.length; i < size; ++i) {
863
863
  const entry = domChanges[i];
@@ -2302,4 +2302,22 @@ export class HTMLElementWithLightDOMTemplate extends HTMLElement {
2302
2302
 
2303
2303
  protected removeNodes(_nodes: NodeList): void {
2304
2304
  }
2305
+
2306
+ static findCorrespondingElement(
2307
+ sourceElement: HTMLElement, sourceRootElement: HTMLElement, targetRootElement: Element): Element|null {
2308
+ let currentElement = sourceElement;
2309
+ const childIndexesOnPathToRoot: number[] = [];
2310
+ while (currentElement?.parentElement && currentElement !== sourceRootElement) {
2311
+ childIndexesOnPathToRoot.push([...currentElement.parentElement.children].indexOf(currentElement));
2312
+ currentElement = currentElement.parentElement;
2313
+ }
2314
+ if (!currentElement) {
2315
+ return null;
2316
+ }
2317
+ let targetElement = targetRootElement;
2318
+ for (const index of childIndexesOnPathToRoot.reverse()) {
2319
+ targetElement = targetElement.children[index];
2320
+ }
2321
+ return targetElement;
2322
+ }
2305
2323
  }
@@ -168,15 +168,17 @@ function convertColorFormat(colorFormat: Common.Color.Format): SpectrumColorForm
168
168
  return colorFormat;
169
169
  }
170
170
 
171
- // HSV by itself, without a color space, doesn't map to a color and
172
- // it is usually interpreted as an sRGB color. However, it can also
173
- // represent colors in other color spaces since `HSV` -> `RGB` mapping
174
- // is not color space dependent. For example, color(display-p3 1 1 1) and rgb(1 1 1)
175
- // map to the same HSV values. The tricky thing is, `hsl()` syntax is interpreted
176
- // as it is in sRGB in CSS. So, when you convert those two colors and use as `hsl()`, it will
177
- // show an sRGB color. Though, if there was a function `color-hsl(<color-space> h s l)`
178
- // it was going to show the color in the color-space represented with `hsl`.
179
- // This function, gets the HSV values by interpreting them in the given gamut.
171
+ /**
172
+ * HSV by itself, without a color space, doesn't map to a color and
173
+ * it is usually interpreted as an sRGB color. However, it can also
174
+ * represent colors in other color spaces since `HSV` -> `RGB` mapping
175
+ * is not color space dependent. For example, color(display-p3 1 1 1) and rgb(1 1 1)
176
+ * map to the same HSV values. The tricky thing is, `hsl()` syntax is interpreted
177
+ * as it is in sRGB in CSS. So, when you convert those two colors and use as `hsl()`, it will
178
+ * show an sRGB color. Though, if there was a function `color-hsl(<color-space> h s l)`
179
+ * it was going to show the color in the color-space represented with `hsl`.
180
+ * This function, gets the HSV values by interpreting them in the given gamut.
181
+ **/
180
182
  function getHsvFromColor(gamut: SpectrumGamut, color: Common.Color.Color): Common.ColorUtils.Color4D {
181
183
  switch (gamut) {
182
184
  case SpectrumGamut.DISPLAY_P3: {
@@ -192,7 +194,7 @@ function getHsvFromColor(gamut: SpectrumGamut, color: Common.Color.Color): Commo
192
194
  }
193
195
  }
194
196
 
195
- // Interprets the given `hsva` values in the given gamut and returns the concrete `Color` object.
197
+ /** Interprets the given `hsva` values in the given gamut and returns the concrete `Color` object. **/
196
198
  function getColorFromHsva(gamut: SpectrumGamut, hsva: Common.ColorUtils.Color4D): Common.Color.Color {
197
199
  const color: Common.Color.Legacy = Common.Color.Legacy.fromHSVA(hsva);
198
200
  switch (gamut) {
@@ -55,13 +55,12 @@ interface ViewInput {
55
55
  renderInline?: boolean;
56
56
  portBindingEnabled?: boolean;
57
57
  schemeBindingEnabled?: boolean;
58
- onEdit:
59
- (event: CustomEvent<{node: HTMLElement, columnId: string, valueBeforeEditing: string, newText: string}>) => void;
60
- onCreate: (event: CustomEvent<CookieData>) => void;
58
+ onEdit: (data: CookieData, columnId: string, valueBeforeEditing: string, newText: string) => void;
59
+ onCreate: (data: CookieData) => void;
61
60
  onRefresh: () => void;
62
- onDelete: (event: CustomEvent<HTMLElement>) => void;
63
- onContextMenu: (event: CustomEvent<{menu: UI.ContextMenu.ContextMenu, element: HTMLElement}>) => void;
64
- onSelect: (event: CustomEvent<HTMLElement|null>) => void;
61
+ onDelete: (data: CookieData) => void;
62
+ onContextMenu: (data: CookieData, menu: UI.ContextMenu.ContextMenu) => void;
63
+ onSelect: (key: string|undefined) => void;
65
64
  }
66
65
  type ViewFunction = (input: ViewInput, output: object, target: HTMLElement) => void;
67
66
  type AttributeWithIcon = SDK.Cookie.Attribute.NAME|SDK.Cookie.Attribute.VALUE|SDK.Cookie.Attribute.DOMAIN|
@@ -183,12 +182,9 @@ export class CookiesTable extends UI.Widget.VBox {
183
182
  id="cookies-table"
184
183
  striped
185
184
  ?inline=${input.renderInline}
186
- @edit=${input.onEdit}
187
185
  @create=${input.onCreate}
188
186
  @refresh=${input.onRefresh}
189
- @delete=${input.onDelete}
190
- @contextmenu=${input.onContextMenu}
191
- @select=${input.onSelect}
187
+ @deselect=${() => input.onSelect(undefined)}
192
188
  >
193
189
  <table>
194
190
  <tr>
@@ -237,12 +233,16 @@ export class CookiesTable extends UI.Widget.VBox {
237
233
  SourcePort
238
234
  </th>` : ''}
239
235
  </tr>
240
- ${repeat(this.data,
241
- cookie => cookie.key, cookie => html`<tr data-key=${ifDefined(cookie.key)}
242
- ?selected=${cookie.key === input.selectedKey}
236
+ ${repeat(this.data, cookie => cookie.key, cookie => html`
237
+ <tr ?selected=${cookie.key === input.selectedKey}
243
238
  ?inactive=${cookie.inactive}
244
239
  ?dirty=${cookie.dirty}
245
- ?highlighted=${cookie.flagged}>
240
+ ?highlighted=${cookie.flagged}
241
+ @edit=${(e: CustomEvent<{columnId: string, valueBeforeEditing: string, newText: string}>) =>
242
+ input.onEdit(cookie, e.detail.columnId, e.detail.valueBeforeEditing, e.detail.newText)}
243
+ @delete=${()=> input.onDelete(cookie)}
244
+ @contextmenu=${(e: CustomEvent<UI.ContextMenu.ContextMenu>) => input.onContextMenu(cookie, e.detail)}
245
+ @select=${() => input.onSelect(cookie.key)}>
246
246
  <td>${cookie.icons?.name}${cookie.name}</td>
247
247
  <td>${cookie.value}</td>
248
248
  <td>${cookie.icons?.domain}${cookie.domain}</td>
@@ -336,37 +336,35 @@ export class CookiesTable extends UI.Widget.VBox {
336
336
  renderInline: this.renderInline,
337
337
  schemeBindingEnabled: this.schemeBindingEnabled,
338
338
  portBindingEnabled: this.portBindingEnabled,
339
- onEdit: event => this.onUpdateCookie(
340
- event.detail.node, event.detail.columnId, event.detail.valueBeforeEditing, event.detail.newText),
341
- onCreate: event => this.onCreateCookie(event.detail),
342
- onRefresh: () => this.refresh(),
343
- onDelete: event => this.onDeleteCookie(event.detail),
344
- onSelect: event => this.onSelect(event.detail),
345
- onContextMenu: event => this.populateContextMenu(event.detail.menu, event.detail.element),
339
+ onEdit: this.onUpdateCookie.bind(this),
340
+ onCreate: this.onCreateCookie.bind(this),
341
+ onRefresh: this.refresh.bind(this),
342
+ onDelete: this.onDeleteCookie.bind(this),
343
+ onSelect: this.onSelect.bind(this),
344
+ onContextMenu: this.populateContextMenu.bind(this),
346
345
  };
347
346
  const output = {};
348
347
  this.view(input, output, this.element);
349
348
  }
350
349
 
351
- private onSelect(node: HTMLElement|null): void {
352
- this.selectedKey = node?.dataset?.key;
350
+ private onSelect(key: string|undefined): void {
351
+ this.selectedKey = key;
353
352
  this.selectedCallback?.();
354
353
  }
355
354
 
356
- private onDeleteCookie(node: HTMLElement): void {
357
- const cookie = this.cookies.find(cookie => cookie.key() === node.dataset.key);
355
+ private onDeleteCookie(data: CookieData): void {
356
+ const cookie = this.cookies.find(cookie => cookie.key() === data.key);
358
357
  if (cookie && this.deleteCallback) {
359
358
  this.deleteCallback(cookie, () => this.refresh());
360
359
  }
361
360
  }
362
361
 
363
- private onUpdateCookie(editingNode: HTMLElement, columnIdentifier: string, _oldText: string, newText: string): void {
364
- const oldCookie = this.cookies.find(cookie => cookie.key() === editingNode.dataset.key);
365
- const oldData = this.data.find(data => data.key === editingNode.dataset.key);
366
- if (!oldData || !oldCookie) {
362
+ private onUpdateCookie(oldData: CookieData, columnIdentifier: string, _oldText: string, newText: string): void {
363
+ const oldCookie = this.cookies.find(cookie => cookie.key() === oldData.key);
364
+ if (!oldCookie) {
367
365
  return;
368
366
  }
369
- const newCookieData = {...oldData, [columnIdentifier]: newText}; // as CookieData;
367
+ const newCookieData = {...oldData, [columnIdentifier]: newText};
370
368
  if (!this.isValidCookieData(newCookieData)) {
371
369
  newCookieData.dirty = true;
372
370
  this.requestUpdate();
@@ -556,8 +554,8 @@ export class CookiesTable extends UI.Widget.VBox {
556
554
  }
557
555
  }
558
556
 
559
- private populateContextMenu(contextMenu: UI.ContextMenu.ContextMenu, gridNode: HTMLElement): void {
560
- const maybeCookie = this.cookies.find(cookie => cookie.key() === gridNode.dataset.key);
557
+ private populateContextMenu(data: CookieData, contextMenu: UI.ContextMenu.ContextMenu): void {
558
+ const maybeCookie = this.cookies.find(cookie => cookie.key() === data.key);
561
559
  if (!maybeCookie) {
562
560
  return;
563
561
  }
@@ -1669,7 +1669,7 @@ export class DataGridImpl<T> extends Common.ObjectWrapper.ObjectWrapper<EventTyp
1669
1669
  }
1670
1670
  }
1671
1671
 
1672
- // Keep in sync with .data-grid col.corner style rule.
1672
+ /** Keep in sync with .data-grid col.corner style rule. **/
1673
1673
  export const CornerWidth = 14;
1674
1674
 
1675
1675
  export const enum Events {
@@ -66,15 +66,14 @@ class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate {
66
66
 
67
67
  this.#dataGrid.addEventListener(
68
68
  DataGridEvents.SELECTED_NODE,
69
- e => this.dispatchEvent(new CustomEvent('select', {detail: (e.data as DataGridElementNode).configElement})));
69
+ e => (e.data as DataGridElementNode).configElement.dispatchEvent(new CustomEvent('select')));
70
70
  this.#dataGrid.addEventListener(
71
- DataGridEvents.DESELECTED_NODE, () => this.dispatchEvent(new CustomEvent('select', {detail: null})));
71
+ DataGridEvents.DESELECTED_NODE, () => this.dispatchEvent(new CustomEvent('deselect')));
72
72
  this.#dataGrid.addEventListener(DataGridEvents.SORTING_CHANGED, () => this.dispatchEvent(new CustomEvent('sort', {
73
73
  detail: {columnId: this.#dataGrid.sortColumnId(), ascending: this.#dataGrid.isSortOrderAscending()}
74
74
  })));
75
75
  this.#dataGrid.setRowContextMenuCallback((menu, node) => {
76
- this.dispatchEvent(
77
- new CustomEvent('contextmenu', {detail: {menu, element: (node as DataGridElementNode).configElement}}));
76
+ (node as DataGridElementNode).configElement.dispatchEvent(new CustomEvent('contextmenu', {detail: menu}));
78
77
  });
79
78
  this.#dataGrid.setHeaderContextMenuCallback(menu => {
80
79
  for (const column of this.#columns) {
@@ -226,10 +225,10 @@ class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate {
226
225
  return [...nodes]
227
226
  .flatMap(node => {
228
227
  if (node instanceof HTMLTableRowElement) {
229
- return [node];
228
+ return [node, ...node.querySelectorAll<HTMLTableRowElement>('table tr')];
230
229
  }
231
230
  if (node instanceof HTMLElement) {
232
- return [...node.querySelectorAll('tr')];
231
+ return [...node.querySelectorAll<HTMLTableRowElement>('tr')];
233
232
  }
234
233
  return [] as HTMLElement[];
235
234
  })
@@ -248,10 +247,15 @@ class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate {
248
247
 
249
248
  override addNodes(nodes: NodeList): void {
250
249
  for (const element of this.#getDataRows(nodes)) {
251
- const parentNode = this.#dataGrid.rootNode(); // TODO(dsv): support nested nodes
250
+ const parentRow = element.parentElement?.closest('td')?.closest('tr');
251
+ const parentDataGridNode = parentRow ? DataGridElementNode.get(parentRow) : undefined;
252
+ const parentNode = parentDataGridNode || this.#dataGrid.rootNode();
252
253
  const nextNode = this.#findNextExistingNode(element);
253
254
  const index = nextNode ? parentNode.children.indexOf(nextNode) : parentNode.children.length;
254
255
  const node = new DataGridElementNode(element, this);
256
+ if ((parentRow || node.hasChildren()) && !this.#dataGrid.disclosureColumnId) {
257
+ this.#dataGrid.disclosureColumnId = this.#columns[0].id;
258
+ }
255
259
  parentNode.insertChild(node, index);
256
260
  if (hasBooleanAttribute(element, 'selected')) {
257
261
  node.select();
@@ -345,12 +349,11 @@ class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate {
345
349
  return;
346
350
  }
347
351
 
348
- this.dispatchEvent(
349
- new CustomEvent('edit', {detail: {node: node.configElement, columnId, valueBeforeEditing, newText}}));
352
+ node.configElement.dispatchEvent(new CustomEvent('edit', {detail: {columnId, valueBeforeEditing, newText}}));
350
353
  }
351
354
 
352
355
  #deleteCallback(node: DataGridElementNode): void {
353
- this.dispatchEvent(new CustomEvent('delete', {detail: node.configElement}));
356
+ node.configElement.dispatchEvent(new CustomEvent('delete'));
354
357
  }
355
358
 
356
359
  override addEventListener<K extends keyof HTMLElementEventMap>(
@@ -394,9 +397,12 @@ class DataGridElementNode extends SortableDataGridNode<DataGridElementNode> {
394
397
  }
395
398
 
396
399
  #updateData(): void {
397
- const cells = this.#configElement.querySelectorAll('td');
398
- for (let i = 0; i < cells.length; ++i) {
399
- const cell = cells[i];
400
+ const cells = [...this.#configElement.children].filter(c => c.tagName === 'TD');
401
+ for (let i = 0; i < this.#dataGridElement.columns.length; ++i) {
402
+ const cell = cells[i] as HTMLElement;
403
+ if (!cell) {
404
+ continue;
405
+ }
400
406
  const column = this.#dataGridElement.columns[i];
401
407
  if (column.dataType === DataType.BOOLEAN) {
402
408
  this.data[column.id] = hasBooleanAttribute(cell, 'data-value') || cell.textContent === 'true';
@@ -439,19 +445,12 @@ class DataGridElementNode extends SortableDataGridNode<DataGridElementNode> {
439
445
  }
440
446
 
441
447
  #onRowMouseEvent(event: MouseEvent): void {
442
- let currentElement = event.target as HTMLElement;
443
- const childIndexesOnPathToRoot: number[] = [];
444
- while (currentElement?.parentElement && currentElement !== event.currentTarget) {
445
- childIndexesOnPathToRoot.push([...currentElement.parentElement.children].indexOf(currentElement));
446
- currentElement = currentElement.parentElement;
447
- }
448
- if (!currentElement) {
448
+ const targetInConfigRow = UI.UIUtils.HTMLElementWithLightDOMTemplate.findCorrespondingElement(
449
+ event.target as HTMLElement, event.currentTarget as HTMLElement, this.#configElement);
450
+ if (!targetInConfigRow) {
449
451
  throw new Error('Cell click event target not found in the data grid');
450
452
  }
451
- let targetInConfigRow = this.#configElement;
452
- for (const index of childIndexesOnPathToRoot.reverse()) {
453
- targetInConfigRow = targetInConfigRow.children[index];
454
- }
453
+
455
454
  if (targetInConfigRow instanceof HTMLElement) {
456
455
  targetInConfigRow?.dispatchEvent(new MouseEvent(event.type, {bubbles: true, composed: true}));
457
456
  }
@@ -481,7 +480,8 @@ class DataGridElementNode extends SortableDataGridNode<DataGridElementNode> {
481
480
  if (this.isCreationNode) {
482
481
  return cell;
483
482
  }
484
- const configCell = this.#configElement.querySelectorAll('td')[index];
483
+ const configCells = [...this.#configElement.children].filter(c => c.tagName === 'TD') as HTMLTableCellElement[];
484
+ const configCell = configCells[index];
485
485
  if (!configCell) {
486
486
  throw new Error(`Column ${columnId} not found in the data grid`);
487
487
  }
@@ -346,6 +346,11 @@
346
346
  color: ButtonText;
347
347
  }
348
348
 
349
+ .data-grid tbody tr.revealed:not(.data-grid-filler-row, .selected):hover,
350
+ .data-grid:focus-within tbody tr.revealed.selected {
351
+ background-color: Highlight;
352
+ }
353
+
349
354
  .data-grid th.sortable:hover *,
350
355
  .data-grid tr.parent.selected td.disclosure::before,
351
356
  .data-grid:focus tr.parent.selected td.disclosure::before,
@@ -6,8 +6,10 @@ import * as Geometry from '../../../../models/geometry/geometry.js';
6
6
 
7
7
  import {CSSLinearEasingModel} from './CSSLinearEasingModel.js';
8
8
 
9
- // Provides a unified interface for both linear easing and cubic bezier
10
- // models and handles the parsing for animation-timing texts.
9
+ /**
10
+ * Provides a unified interface for both linear easing and cubic bezier
11
+ * models and handles the parsing for animation-timing texts.
12
+ **/
11
13
  export abstract class AnimationTimingModel {
12
14
  abstract asCSSText(): string;
13
15
 
@@ -680,8 +680,10 @@ export class RootElement extends UI.TreeOutline.TreeElement {
680
680
  }
681
681
  }
682
682
 
683
- // Number of initially visible children in an ObjectPropertyTreeElement.
684
- // Remaining children are shown as soon as requested via a show more properties button.
683
+ /**
684
+ * Number of initially visible children in an ObjectPropertyTreeElement.
685
+ * Remaining children are shown as soon as requested via a show more properties button.
686
+ **/
685
687
  export const InitialVisibleChildrenLimit = 200;
686
688
 
687
689
  export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
@@ -103,7 +103,7 @@ const HEADER_LABEL_X_PADDING = 3;
103
103
  const HEADER_LABEL_Y_PADDING = 2;
104
104
  const PADDING_BETWEEN_TITLE_AND_SUBTITLE = 6;
105
105
 
106
- // The width of each of the edit mode icons.
106
+ /** The width of each of the edit mode icons. **/
107
107
  export const EDIT_ICON_WIDTH = 16;
108
108
  // This gap might seem quite small - but the icons themselves have some
109
109
  // whitespace either side, so we don't need a huge gap.
@@ -136,7 +136,7 @@ const hideIconPath =
136
136
  const showIconPath =
137
137
  'M10 13.5C10.972 13.5 11.7983 13.1597 12.479 12.479C13.1597 11.7983 13.5 10.972 13.5 10C13.5 9.028 13.1597 8.20167 12.479 7.521C11.7983 6.84033 10.972 6.5 10 6.5C9.028 6.5 8.20167 6.84033 7.521 7.521C6.84033 8.20167 6.5 9.028 6.5 10C6.5 10.972 6.84033 11.7983 7.521 12.479C8.20167 13.1597 9.028 13.5 10 13.5ZM10 12C9.44467 12 8.97233 11.8057 8.583 11.417C8.19433 11.0277 8 10.5553 8 10C8 9.44467 8.19433 8.97233 8.583 8.583C8.97233 8.19433 9.44467 8 10 8C10.5553 8 11.0277 8.19433 11.417 8.583C11.8057 8.97233 12 9.44467 12 10C12 10.5553 11.8057 11.0277 11.417 11.417C11.0277 11.8057 10.5553 12 10 12ZM10 16C8.014 16 6.20833 15.455 4.583 14.365C2.95833 13.2743 1.764 11.8193 1 10C1.764 8.18067 2.95833 6.72567 4.583 5.635C6.20833 4.545 8.014 4 10 4C11.986 4 13.7917 4.545 15.417 5.635C17.0417 6.72567 18.236 8.18067 19 10C18.236 11.8193 17.0417 13.2743 15.417 14.365C13.7917 15.455 11.986 16 10 16ZM10 14.5C11.5553 14.5 12.9927 14.0973 14.312 13.292C15.632 12.486 16.646 11.3887 17.354 10C16.646 8.61133 15.632 7.514 14.312 6.708C12.9927 5.90267 11.5553 5.5 10 5.5C8.44467 5.5 7.00733 5.90267 5.688 6.708C4.368 7.514 3.354 8.61133 2.646 10C3.354 11.3887 4.368 12.486 5.688 13.292C7.00733 14.0973 8.44467 14.5 10 14.5Z';
138
138
 
139
- // export for test.
139
+ /** export for test. **/
140
140
  export const enum HoverType {
141
141
  TRACK_CONFIG_UP_BUTTON = 'TRACK_CONFIG_UP_BUTTON',
142
142
  TRACK_CONFIG_DOWN_BUTTON = 'TRACK_CONFIG_DOWN_BUTTON',
@@ -216,7 +216,7 @@ export interface UserFilterAction {
216
216
  entry: Trace.Types.Events.Event;
217
217
  }
218
218
 
219
- // Object used to indicate to the Context Menu if an action is possible on the selected entry.
219
+ /** Object used to indicate to the Context Menu if an action is possible on the selected entry. **/
220
220
  export interface PossibleFilterActions {
221
221
  [FilterAction.MERGE_FUNCTION]: boolean;
222
222
  [FilterAction.COLLAPSE_FUNCTION]: boolean;
@@ -2569,9 +2569,11 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
2569
2569
  const minTextWidth = 2 * textPadding + UI.UIUtils.measureTextWidth(context, '…');
2570
2570
  const minTextWidthDuration = this.chartViewport.pixelToTimeOffset(minTextWidth);
2571
2571
 
2572
- // As we parse each event, we bucket them into batches based on the color and
2573
- // whether they should be outlined. The key of this map is an object, so the
2574
- // following helps for dedupings keys to use within a Map.
2572
+ /**
2573
+ * As we parse each event, we bucket them into batches based on the color and
2574
+ * whether they should be outlined. The key of this map is an object, so the
2575
+ * following helps for dedupings keys to use within a Map.
2576
+ **/
2575
2577
  interface BatchKey {
2576
2578
  color: string;
2577
2579
  outline: boolean;
@@ -32,10 +32,12 @@ export interface PieChartData {
32
32
  total: number;
33
33
  slices: Slice[];
34
34
  }
35
- // If the slices are not available when constructing the pie chart, set .data
36
- // immediately, with total=0 and slices=[], so that the chart is rendered with
37
- // the correct initial size. This avoids a layout shift when the slices are
38
- // later populated.
35
+ /**
36
+ * If the slices are not available when constructing the pie chart, set .data
37
+ * immediately, with total=0 and slices=[], so that the chart is rendered with
38
+ * the correct initial size. This avoids a layout shift when the slices are
39
+ * later populated.
40
+ **/
39
41
  export class PieChart extends HTMLElement {
40
42
  private readonly shadow = this.attachShadow({mode: 'open'});
41
43
  private chartName = '';
@@ -1153,7 +1153,7 @@ const nonBreakableLineMark = new (class extends CodeMirror.GutterMarker {
1153
1153
  override elementClass = 'cm-nonBreakableLine';
1154
1154
  })();
1155
1155
 
1156
- // Effect to add lines (by position) to the set of non-breakable lines.
1156
+ /** Effect to add lines (by position) to the set of non-breakable lines. **/
1157
1157
  export const addNonBreakableLines = CodeMirror.StateEffect.define<readonly number[]>();
1158
1158
 
1159
1159
  const nonBreakableLines = CodeMirror.StateField.define<CodeMirror.RangeSet<CodeMirror.GutterMarker>>({
@@ -1227,13 +1227,13 @@ const sourceFrameTheme = CodeMirror.EditorView.theme({
1227
1227
  export type RevealPosition = number|{lineNumber: number, columnNumber?: number}|
1228
1228
  {from: {lineNumber: number, columnNumber: number}, to: {lineNumber: number, columnNumber: number}};
1229
1229
 
1230
- // This is usually an Infobar but is also used for AiCodeCompletionSummaryToolbar
1230
+ /** This is usually an Infobar but is also used for AiCodeCompletionSummaryToolbar **/
1231
1231
  export interface SourceFrameInfobar {
1232
1232
  element: HTMLElement;
1233
1233
  order?: number;
1234
1234
  }
1235
1235
 
1236
- // Infobar panel state, used to show additional panels below the editor.
1236
+ /** Infobar panel state, used to show additional panels below the editor. **/
1237
1237
  export const addSourceFrameInfobar = CodeMirror.StateEffect.define<SourceFrameInfobar>();
1238
1238
  export const removeSourceFrameInfobar = CodeMirror.StateEffect.define<SourceFrameInfobar>();
1239
1239
 
@@ -2,6 +2,8 @@
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
4
 
5
+ import '../../../components/highlighting/highlighting.js';
6
+
5
7
  import * as i18n from '../../../../core/i18n/i18n.js';
6
8
  import * as TextUtils from '../../../../models/text_utils/text_utils.js';
7
9
  import * as Lit from '../../../lit/lit.js';
@@ -113,38 +115,41 @@ interface ViewInput {
113
115
  }
114
116
  export type View = (input: ViewInput, output: object, target: HTMLElement) => void;
115
117
  export const DEFAULT_VIEW: View = (input, output, target) => {
116
- function highlight(node: XMLTreeViewNode, closeTag: boolean): ReturnType<typeof Lit.Directives.ref> {
118
+ function highlight(node: XMLTreeViewNode, closeTag: boolean): {highlights: string, selected: string} {
119
+ let highlights = '';
120
+ let selected = '';
117
121
  if (!input.search) {
118
- return Lit.nothing;
122
+ return {highlights, selected};
119
123
  }
120
124
  const entries = input.search.getResults(node);
121
- const highlights = [];
122
- let selected = undefined;
123
125
  for (const entry of entries ?? []) {
124
126
  if (entry.isPostOrderMatch === closeTag) {
125
127
  const range = new TextUtils.TextRange.SourceRange(entry.match.index, entry.match[0].length);
126
128
  if (entry === input.jumpToNextSearchResult) {
127
- selected = range;
129
+ selected = `${range.offset},${range.length}`;
128
130
  } else {
129
- highlights.push(range);
131
+ highlights += `${range.offset},${range.length} `;
130
132
  }
131
133
  }
132
134
  }
133
- return UI.TreeOutline.TreeSearch.highlight(highlights, selected);
135
+ return {highlights, selected};
134
136
  }
135
137
 
136
138
  function layOutNode(node: XMLTreeViewNode, populateSubtrees = false): Lit.LitTemplate {
137
139
  const onExpand = (event: UI.TreeOutline.TreeViewElement.ExpandEvent): void =>
138
140
  input.onExpand(node, event.detail.expanded);
141
+ const {highlights, selected} = highlight(node, /* closeTag=*/ false);
139
142
 
140
143
  // clang-format off
141
144
  return html`
142
- <li ${highlight(node, /* closeTag=*/ false)} role="treeitem"
145
+ <li role="treeitem"
143
146
  ?selected=${input.jumpToNextSearchResult?.node === node}
144
147
  @expand=${onExpand}>
145
- ${htmlView(node)}
148
+ <devtools-highlight ranges=${highlights} current-range=${selected}>
149
+ ${htmlView(node)}
150
+ </devtools-highlight>
146
151
  ${node.children().length ? html`
147
- <ul role="group" ?hidden=${!node.expanded}>
152
+ <ul role="group" ?hidden=${!node.expanded && input.jumpToNextSearchResult?.node !== node}>
148
153
  ${populateSubtrees || input.search ? subtree(node) : Lit.nothing}
149
154
  </ul>` : Lit.nothing}
150
155
  </li>`;
@@ -156,15 +161,16 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
156
161
  if (children.length === 0) {
157
162
  return Lit.nothing;
158
163
  }
164
+ const {highlights, selected} = highlight(treeNode, /* closeTag=*/ true);
159
165
  // clang-format off
160
166
  return html`
161
167
  ${children.map(child => layOutNode(child, treeNode.expanded))}
162
- ${treeNode.node instanceof Element
163
- ? html`<li
164
- ${highlight(treeNode, /* closeTag=*/ true)}
165
- role="treeitem"><span part='shadow-xml-view-close-tag'>${'</' + treeNode.node.tagName + '>'}</span
166
- ></li>`
167
- : Lit.nothing}`;
168
+ ${treeNode.node instanceof Element ? html`
169
+ <li role="treeitem">
170
+ <devtools-highlight ranges=${highlights} current-range=${selected}>
171
+ <span part='shadow-xml-view-close-tag'>${'</' + treeNode.node.tagName + '>'}</span>
172
+ </devtools-highlight>
173
+ </li>` : Lit.nothing}`;
168
174
  // clang-format on
169
175
  }
170
176
 
@@ -4,10 +4,8 @@
4
4
  * found in the LICENSE file.
5
5
  */
6
6
 
7
- @scope to (devtools-widget > *) {
8
7
  .shadow-xml-view {
9
8
  user-select: text;
10
9
  overflow: auto;
11
10
  padding: 0;
12
11
  }
13
- }
@@ -1107,10 +1107,12 @@ interface LinkDisplayOptions {
1107
1107
  revealBreakpoint?: boolean;
1108
1108
  }
1109
1109
 
1110
- // The filter function for the openResourceHandlers. Returns true if the `url`
1111
- // should be considered for a particular handler. `specificSchemeHandlers`
1112
- // is the set of all schemes handled by all registered DevTools extensions
1113
- // (that specify a particular scheme).
1110
+ /**
1111
+ * The filter function for the openResourceHandlers. Returns true if the `url`
1112
+ * should be considered for a particular handler. `specificSchemeHandlers`
1113
+ * is the set of all schemes handled by all registered DevTools extensions
1114
+ * (that specify a particular scheme).
1115
+ **/
1114
1116
  export type LinkHandlerPredicate = (url: Platform.DevToolsPath.UrlString, specificSchemeHandlers: Set<string>) =>
1115
1117
  boolean;
1116
1118