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
@@ -1,14 +1,13 @@
1
1
  // Copyright 2017 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 */
5
4
 
6
5
  import * as Common from '../../core/common/common.js';
7
6
  import * as i18n from '../../core/i18n/i18n.js';
8
7
  import * as Workspace from '../../models/workspace/workspace.js';
9
8
  import * as WorkspaceDiff from '../../models/workspace_diff/workspace_diff.js';
10
- import * as IconButton from '../../ui/components/icon_button/icon_button.js';
11
9
  import * as UI from '../../ui/legacy/legacy.js';
10
+ import * as Lit from '../../ui/lit/lit.js';
12
11
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
13
12
  import * as Snippets from '../snippets/snippets.js';
14
13
 
@@ -23,75 +22,122 @@ const UIStrings = {
23
22
  } as const;
24
23
  const str_ = i18n.i18n.registerUIStrings('panels/changes/ChangesSidebar.ts', UIStrings);
25
24
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
25
+ const {render, html, Directives: {ref}} = Lit;
26
+ interface ViewInput {
27
+ selectedSourceCode: Workspace.UISourceCode.UISourceCode|null;
28
+ onSelect: (uiSourceCode: Workspace.UISourceCode.UISourceCode|null) => void;
29
+ sourceCodes: Set<Workspace.UISourceCode.UISourceCode>;
30
+ }
31
+ type View = (input: ViewInput, output: object, target: HTMLElement) => void;
32
+ export const DEFAULT_VIEW: View = (input, output, target) => {
33
+ const tooltip = (uiSourceCode: Workspace.UISourceCode.UISourceCode): string =>
34
+ uiSourceCode.contentType().isFromSourceMap() ?
35
+ i18nString(UIStrings.sFromSourceMap, {PH1: uiSourceCode.displayName()}) :
36
+ uiSourceCode.url();
37
+ const icon = (uiSourceCode: Workspace.UISourceCode.UISourceCode): string =>
38
+ Snippets.ScriptSnippetFileSystem.isSnippetsUISourceCode(uiSourceCode) ? 'snippet' : 'document';
39
+ const configElements = new WeakMap<HTMLLIElement, Workspace.UISourceCode.UISourceCode>();
40
+ const onSelect = (e: UI.TreeOutline.TreeViewElement.SelectEvent): void =>
41
+ input.onSelect(configElements.get(e.detail) ?? null);
42
+ render(
43
+ // clang-format off
44
+ html`<devtools-tree
45
+ @selected=${onSelect}
46
+ navigation-variant
47
+ hide-overflow .template=${html`
48
+ <ul role="tree">
49
+ ${input.sourceCodes.values().map(uiSourceCode => html`
50
+ <li
51
+ role="treeitem"
52
+ ${ref(e => e instanceof HTMLLIElement && configElements.set(e, uiSourceCode))}
53
+ ?selected=${uiSourceCode === input.selectedSourceCode}>
54
+ <style>${changesSidebarStyles}</style>
55
+ <div class=${'navigator-' + uiSourceCode.contentType().name() + '-tree-item'}>
56
+ <devtools-icon name=${icon(uiSourceCode)}></devtools-icon>
57
+ <span title=${tooltip(uiSourceCode)}>
58
+ <span ?hidden=${!uiSourceCode.isDirty()}>*</span>
59
+ ${uiSourceCode.displayName()}
60
+ </span>
61
+ </div>
62
+ </li>`)}
63
+ </ul>`}></devtools-tree>`,
64
+ // clang-format on
65
+ target);
66
+ };
26
67
 
27
68
  export class ChangesSidebar extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.Widget>(
28
69
  UI.Widget.Widget) {
29
- private treeoutline: UI.TreeOutline.TreeOutlineInShadow;
30
- private readonly treeElements: Map<Workspace.UISourceCode.UISourceCode, UISourceCodeTreeElement>;
31
- private readonly workspaceDiff: WorkspaceDiff.WorkspaceDiff.WorkspaceDiffImpl;
32
- constructor(workspaceDiff: WorkspaceDiff.WorkspaceDiff.WorkspaceDiffImpl) {
70
+ readonly #workspaceDiff: WorkspaceDiff.WorkspaceDiff.WorkspaceDiffImpl;
71
+ readonly #view: View;
72
+ readonly #sourceCodes = new Set<Workspace.UISourceCode.UISourceCode>();
73
+ #selectedUISourceCode: Workspace.UISourceCode.UISourceCode|null = null;
74
+ constructor(workspaceDiff: WorkspaceDiff.WorkspaceDiff.WorkspaceDiffImpl, target?: HTMLElement, view = DEFAULT_VIEW) {
33
75
  super({jslog: `${VisualLogging.pane('sidebar').track({resize: true})}`});
76
+ this.#view = view;
34
77
 
35
- this.treeoutline = new UI.TreeOutline.TreeOutlineInShadow(UI.TreeOutline.TreeVariant.NAVIGATION_TREE);
36
- this.treeoutline.registerRequiredCSS(changesSidebarStyles);
37
- this.treeoutline.setFocusable(false);
38
- this.treeoutline.setHideOverflow(true);
39
- this.treeoutline.addEventListener(UI.TreeOutline.Events.ElementSelected, this.selectionChanged, this);
40
- UI.ARIAUtils.markAsTablist(this.treeoutline.contentElement);
41
-
42
- this.element.appendChild(this.treeoutline.element);
43
-
44
- this.treeElements = new Map();
45
- this.workspaceDiff = workspaceDiff;
46
- this.workspaceDiff.modifiedUISourceCodes().forEach(this.addUISourceCode.bind(this));
47
- this.workspaceDiff.addEventListener(
78
+ this.#workspaceDiff = workspaceDiff;
79
+ this.#workspaceDiff.modifiedUISourceCodes().forEach(this.#addUISourceCode.bind(this));
80
+ this.#workspaceDiff.addEventListener(
48
81
  WorkspaceDiff.WorkspaceDiff.Events.MODIFIED_STATUS_CHANGED, this.uiSourceCodeModifiedStatusChanged, this);
82
+ this.requestUpdate();
49
83
  }
50
84
 
51
85
  selectedUISourceCode(): Workspace.UISourceCode.UISourceCode|null {
52
- // @ts-expect-error uiSourceCode seems to be dynamically attached.
53
- return this.treeoutline.selectedTreeElement ? this.treeoutline.selectedTreeElement.uiSourceCode : null;
86
+ return this.#selectedUISourceCode;
87
+ }
88
+
89
+ override performUpdate(): void {
90
+ const input: ViewInput = {
91
+ onSelect: uiSourceCode => this.#selectionChanged(uiSourceCode),
92
+ sourceCodes: this.#sourceCodes,
93
+ selectedSourceCode: this.#selectedUISourceCode
94
+ };
95
+ this.#view(input, {}, this.contentElement);
54
96
  }
55
97
 
56
- private selectionChanged(): void {
98
+ #selectionChanged(selectedUISourceCode: Workspace.UISourceCode.UISourceCode|null): void {
99
+ this.#selectedUISourceCode = selectedUISourceCode;
57
100
  this.dispatchEventToListeners(Events.SELECTED_UI_SOURCE_CODE_CHANGED);
101
+ this.requestUpdate();
58
102
  }
59
103
 
60
- private uiSourceCodeModifiedStatusChanged(
61
- event: Common.EventTarget.EventTargetEvent<WorkspaceDiff.WorkspaceDiff.ModifiedStatusChangedEvent>): void {
62
- if (event.data.isModified) {
63
- this.addUISourceCode(event.data.uiSourceCode);
64
- } else {
65
- this.removeUISourceCode(event.data.uiSourceCode);
66
- }
104
+ #addUISourceCode(uiSourceCode: Workspace.UISourceCode.UISourceCode): void {
105
+ this.#sourceCodes.add(uiSourceCode);
106
+ uiSourceCode.addEventListener(Workspace.UISourceCode.Events.TitleChanged, this.requestUpdate, this);
107
+ uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged, this.requestUpdate, this);
108
+ uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted, this.requestUpdate, this);
109
+ this.requestUpdate();
67
110
  }
68
111
 
69
- private removeUISourceCode(uiSourceCode: Workspace.UISourceCode.UISourceCode): void {
70
- const treeElement = this.treeElements.get(uiSourceCode);
71
- this.treeElements.delete(uiSourceCode);
72
- if (this.treeoutline.selectedTreeElement === treeElement) {
73
- const nextElementToSelect = treeElement.previousSibling || treeElement.nextSibling;
74
- if (nextElementToSelect) {
75
- nextElementToSelect.select(true);
76
- } else {
77
- treeElement.deselect();
78
- this.selectionChanged();
112
+ #removeUISourceCode(uiSourceCode: Workspace.UISourceCode.UISourceCode): void {
113
+ uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.TitleChanged, this.requestUpdate, this);
114
+ uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged, this.requestUpdate, this);
115
+ uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted, this.requestUpdate, this);
116
+ if (uiSourceCode === this.#selectedUISourceCode) {
117
+ let newSelection;
118
+ for (const sourceCode of this.#sourceCodes.values()) {
119
+ if (sourceCode === uiSourceCode) {
120
+ break;
121
+ }
122
+ newSelection = sourceCode;
79
123
  }
124
+ this.#sourceCodes.delete(uiSourceCode);
125
+ this.#selectionChanged(newSelection ?? this.#sourceCodes.values().next().value ?? null);
126
+ } else {
127
+ this.#sourceCodes.delete(uiSourceCode);
80
128
  }
81
- if (treeElement) {
82
- this.treeoutline.removeChild(treeElement);
83
- treeElement.dispose();
84
- }
85
- if (this.treeoutline.rootElement().childCount() === 0) {
86
- this.treeoutline.setFocusable(false);
87
- }
129
+ this.requestUpdate();
88
130
  }
89
131
 
90
- private addUISourceCode(uiSourceCode: Workspace.UISourceCode.UISourceCode): void {
91
- const treeElement = new UISourceCodeTreeElement(uiSourceCode);
92
- this.treeElements.set(uiSourceCode, treeElement);
93
- this.treeoutline.setFocusable(true);
94
- this.treeoutline.appendChild(treeElement);
132
+ private uiSourceCodeModifiedStatusChanged(
133
+ event: Common.EventTarget.EventTargetEvent<WorkspaceDiff.WorkspaceDiff.ModifiedStatusChangedEvent>): void {
134
+ const {isModified, uiSourceCode} = event.data;
135
+ if (isModified) {
136
+ this.#addUISourceCode(uiSourceCode);
137
+ } else {
138
+ this.#removeUISourceCode(uiSourceCode);
139
+ }
140
+ this.requestUpdate();
95
141
  }
96
142
  }
97
143
 
@@ -102,47 +148,3 @@ export const enum Events {
102
148
  export interface EventTypes {
103
149
  [Events.SELECTED_UI_SOURCE_CODE_CHANGED]: void;
104
150
  }
105
-
106
- export class UISourceCodeTreeElement extends UI.TreeOutline.TreeElement {
107
- uiSourceCode: Workspace.UISourceCode.UISourceCode;
108
- private readonly eventListeners: Common.EventTarget.EventDescriptor[];
109
- constructor(uiSourceCode: Workspace.UISourceCode.UISourceCode) {
110
- super();
111
- this.uiSourceCode = uiSourceCode;
112
- this.listItemElement.classList.add('navigator-' + uiSourceCode.contentType().name() + '-tree-item');
113
- UI.ARIAUtils.markAsTab(this.listItemElement);
114
-
115
- let iconName: 'document'|'snippet' = 'document';
116
- if (Snippets.ScriptSnippetFileSystem.isSnippetsUISourceCode(this.uiSourceCode)) {
117
- iconName = 'snippet';
118
- }
119
- const defaultIcon = IconButton.Icon.create(iconName);
120
- this.setLeadingIcons([defaultIcon]);
121
-
122
- this.eventListeners = [
123
- uiSourceCode.addEventListener(Workspace.UISourceCode.Events.TitleChanged, this.updateTitle, this),
124
- uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged, this.updateTitle, this),
125
- uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted, this.updateTitle, this),
126
- ];
127
-
128
- this.updateTitle();
129
- }
130
-
131
- private updateTitle(): void {
132
- let titleText: string = this.uiSourceCode.displayName();
133
- if (this.uiSourceCode.isDirty()) {
134
- titleText = '*' + titleText;
135
- }
136
- this.title = titleText;
137
-
138
- let tooltip: Common.UIString.LocalizedString|string = this.uiSourceCode.url();
139
- if (this.uiSourceCode.contentType().isFromSourceMap()) {
140
- tooltip = i18nString(UIStrings.sFromSourceMap, {PH1: this.uiSourceCode.displayName()});
141
- }
142
- this.tooltip = tooltip;
143
- }
144
-
145
- dispose(): void {
146
- Common.EventTarget.removeEventListeners(this.eventListeners);
147
- }
148
- }
@@ -4,12 +4,14 @@
4
4
  * found in the LICENSE file.
5
5
  */
6
6
 
7
+ @scope to (devtools-widget > *) {
7
8
  .tree-outline li {
8
9
  min-height: 20px;
9
10
  }
10
11
 
11
12
  devtools-icon {
12
13
  color: var(--icon-file-default);
14
+ margin-right: var(--sys-size-4);
13
15
  }
14
16
 
15
17
  .navigator-sm-script-tree-item devtools-icon,
@@ -46,3 +48,4 @@ devtools-icon {
46
48
  color: ButtonText !important; /* stylelint-disable-line declaration-no-important */
47
49
  }
48
50
  }
51
+ }
@@ -976,7 +976,7 @@ export class ConsoleView extends UI.Widget.VBox implements
976
976
  this.scheduleViewportRefresh();
977
977
  this.consoleMessageAddedForTest(viewMessage);
978
978
 
979
- // Figure out whether the message should belong into this group or the parent group based on group end timestamp.
979
+ /** Figure out whether the message should belong into this group or the parent group based on group end timestamp. **/
980
980
  function addToGroup(viewMessage: ConsoleViewMessage, currentGroup: ConsoleGroupViewMessage): void {
981
981
  const currentEnd = currentGroup.groupEnd();
982
982
  if (currentEnd !== null) {
@@ -1070,7 +1070,7 @@ export class ConsoleView extends UI.Widget.VBox implements
1070
1070
 
1071
1071
  this.messageAppendedForTests();
1072
1072
 
1073
- // Show the group the message belongs to, and also show parent groups.
1073
+ /** Show the group the message belongs to, and also show parent groups. **/
1074
1074
  function showGroup(currentGroup: ConsoleGroupViewMessage|null, visibleViewMessages: ConsoleViewMessage[]): void {
1075
1075
  if (currentGroup === null) {
1076
1076
  return;
@@ -3,20 +3,19 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import '../../ui/legacy/components/data_grid/data_grid.js';
6
+ import '../../ui/components/highlighting/highlighting.js';
6
7
 
7
8
  import * as Host from '../../core/host/host.js';
8
9
  import * as i18n from '../../core/i18n/i18n.js';
9
10
  import * as Platform from '../../core/platform/platform.js';
10
11
  import * as SDK from '../../core/sdk/sdk.js';
11
12
  import type * as Protocol from '../../generated/protocol.js';
12
- import * as TextUtils from '../../models/text_utils/text_utils.js';
13
+ import type * as TextUtils from '../../models/text_utils/text_utils.js';
13
14
  import * as UI from '../../ui/legacy/legacy.js';
14
- import {Directives, html, nothing, render} from '../../ui/lit/lit.js';
15
+ import {html, nothing, render} from '../../ui/lit/lit.js';
15
16
 
16
17
  import developerResourcesListViewStyles from './developerResourcesListView.css.js';
17
18
 
18
- const {ref} = Directives;
19
-
20
19
  const UIStrings = {
21
20
  /**
22
21
  * @description Text for the status of something
@@ -87,7 +86,6 @@ const {withThousandsSeparator} = Platform.NumberUtilities;
87
86
  export interface ViewInput {
88
87
  items: SDK.PageResourceLoader.PageResource[];
89
88
  selectedItem: SDK.PageResourceLoader.PageResource|null;
90
- highlight: (element: Element|undefined, textContent: string|undefined, columnId: string) => void;
91
89
  filters: TextUtils.TextUtils.ParsedFilter[];
92
90
  onContextMenu: (e: CustomEvent<{menu: UI.ContextMenu.ContextMenu, element: HTMLElement}>) => void;
93
91
  onSelect: (e: CustomEvent<HTMLElement>) => void;
@@ -98,6 +96,20 @@ export interface ViewInput {
98
96
  export type View = (input: ViewInput, output: object, target: HTMLElement) => void;
99
97
 
100
98
  const DEFAULT_VIEW: View = (input, _output, target) => {
99
+ function highlightRange(textContent: string|undefined, columnId: string): string {
100
+ if (!textContent) {
101
+ return '';
102
+ }
103
+ const filter = input.filters.find(filter => filter.key?.split(',')?.includes(columnId));
104
+ if (!filter?.regex) {
105
+ return '';
106
+ }
107
+ const matches = filter.regex.exec(textContent ?? '');
108
+ if (!matches?.length) {
109
+ return '';
110
+ }
111
+ return `${matches.index},${matches[0].length}`;
112
+ }
101
113
  // clang-format off
102
114
  render(html`
103
115
  <style>${developerResourcesListViewStyles}</style>
@@ -135,11 +147,11 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
135
147
  item.success === false ? i18nString(UIStrings.failure) :
136
148
  i18nString(UIStrings.pending)}</td>
137
149
  <td title=${item.url} aria-label=${item.url}>
138
- <div aria-hidden="true" part="url-outer"
139
- ${ref(e => input.highlight(e, item.url, 'url'))}>
150
+ <devtools-highlight aria-hidden="true" part="url-outer"
151
+ ranges=${highlightRange(item.url, 'url')}>
140
152
  <div part="url-prefix">${splitURL ? splitURL[1] : item.url}</div>
141
153
  <div part="url-suffix">${splitURL ? splitURL[2] : ''}</div>
142
- </div>
154
+ </devtools-highlight>
143
155
  </td>
144
156
  <td title=${item.initiator.initiatorUrl || ''}
145
157
  aria-label=${item.initiator.initiatorUrl || ''}
@@ -154,9 +166,9 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
154
166
  item.duration !== null ? html`<span>${i18n.TimeUtilities.millisToString(item.duration)}</span>` : ''}</td>
155
167
  <td class="error-message">
156
168
  ${item.errorMessage ? html`
157
- <span ${ref(e => input.highlight(e, item.errorMessage, 'error-message'))}>
169
+ <devtools-highlight ranges=${highlightRange(item.errorMessage, 'error-message')}>
158
170
  ${item.errorMessage}
159
- </span>` : nothing}
171
+ </devtools-highlight>` : nothing}
160
172
  </td>
161
173
  </tr>`;
162
174
  })}
@@ -233,7 +245,6 @@ export class DeveloperResourcesListView extends UI.Widget.VBox {
233
245
  items: this.#items,
234
246
  selectedItem: this.#selectedItem,
235
247
  filters: this.#filters,
236
- highlight: this.#highlight.bind(this),
237
248
  onContextMenu: (e: CustomEvent<{menu: UI.ContextMenu.ContextMenu, element: HTMLElement}>) => {
238
249
  if (e.detail?.element) {
239
250
  this.#populateContextMenu(e.detail.menu, e.detail.element);
@@ -256,28 +267,4 @@ export class DeveloperResourcesListView extends UI.Widget.VBox {
256
267
  const output = {};
257
268
  this.#view(input, output, this.contentElement);
258
269
  }
259
-
260
- #highlight(element: Element|undefined, textContent: string|undefined, columnId: string): void {
261
- if (!element || !textContent) {
262
- return;
263
- }
264
- const highlightContainers =
265
- new Set<Element>([...element.querySelectorAll('.filter-highlight')].map(e => e.parentElement as Element));
266
- for (const container of highlightContainers) {
267
- container.textContent = container.textContent;
268
- }
269
- const filter = this.#filters.find(filter => filter.key?.split(',')?.includes(columnId));
270
- if (!filter?.regex) {
271
- return;
272
- }
273
- const matches = filter.regex.exec(element.textContent ?? '');
274
- if (!matches?.length) {
275
- return;
276
- }
277
- const range = new TextUtils.TextRange.SourceRange(matches.index, matches[0].length);
278
- UI.UIUtils.highlightRangesWithStyleClass(element, [range], 'filter-highlight');
279
- for (const el of element.querySelectorAll('.filter-highlight')) {
280
- el.setAttribute('part', 'filter-highlight');
281
- }
282
- }
283
270
  }
@@ -191,7 +191,7 @@ const createTraceElement =
191
191
  return trace;
192
192
  };
193
193
 
194
- // clang-format off
194
+ /** clang-format off **/
195
195
  class ColorRenderer extends rendererBase(SDK.CSSPropertyParserMatchers.ColorMatch) {
196
196
  // clang-format on
197
197
  override render(match: SDK.CSSPropertyParserMatchers.ColorMatch, context: RenderingContext): Node[] {
@@ -66,6 +66,7 @@ enum SpecificPseudoStates {
66
66
  PLACEHOLDER_SHOWN = 'placeholder-shown',
67
67
  AUTOFILL = 'autofill',
68
68
  OPEN = 'open',
69
+ TARGET_CURRENT = 'target-current',
69
70
  }
70
71
 
71
72
  interface ElementState {
@@ -179,6 +180,8 @@ export class ElementStatePaneWidget extends UI.Widget.Widget {
179
180
  SpecificPseudoStates.PLACEHOLDER_SHOWN, {state: SpecificPseudoStates.PLACEHOLDER_SHOWN, type: 'specific'});
180
181
  this.#states.set(SpecificPseudoStates.AUTOFILL, {state: SpecificPseudoStates.AUTOFILL, type: 'specific'});
181
182
  this.#states.set(SpecificPseudoStates.OPEN, {state: SpecificPseudoStates.OPEN, type: 'specific'});
183
+ this.#states.set(
184
+ SpecificPseudoStates.TARGET_CURRENT, {state: SpecificPseudoStates.TARGET_CURRENT, type: 'specific'});
182
185
 
183
186
  setDualStateCheckboxes(SpecificPseudoStates.VALID, SpecificPseudoStates.INVALID);
184
187
  setDualStateCheckboxes(SpecificPseudoStates.USER_VALID, SpecificPseudoStates.USER_INVALID);
@@ -268,6 +271,9 @@ export class ElementStatePaneWidget extends UI.Widget.Widget {
268
271
  const isElementOfTypes = (node: SDK.DOMModel.DOMNode, types: string[]): boolean => {
269
272
  return types.includes(node.nodeName()?.toLowerCase());
270
273
  };
274
+ const isAnchorElementWithHref = (node: SDK.DOMModel.DOMNode): boolean => {
275
+ return isElementOfTypes(node, ['a']) && node.getAttribute('href') !== undefined;
276
+ };
271
277
  const isInputWithTypeRadioOrCheckbox = (node: SDK.DOMModel.DOMNode): boolean => {
272
278
  return isElementOfTypes(node, ['input']) &&
273
279
  (node.getAttribute('type') === 'checkbox' || node.getAttribute('type') === 'radio');
@@ -385,6 +391,12 @@ export class ElementStatePaneWidget extends UI.Widget.Widget {
385
391
  } else {
386
392
  hideSpecificCheckbox(SpecificPseudoStates.OPEN, true);
387
393
  }
394
+
395
+ if (isAnchorElementWithHref(node) || node.pseudoType() === 'scroll-marker') {
396
+ hideSpecificCheckbox(SpecificPseudoStates.TARGET_CURRENT, false);
397
+ } else {
398
+ hideSpecificCheckbox(SpecificPseudoStates.TARGET_CURRENT, true);
399
+ }
388
400
  }
389
401
  }
390
402
 
@@ -2950,14 +2950,16 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
2950
2950
 
2951
2951
  export const InitialChildrenLimit = 500;
2952
2952
 
2953
- // A union of HTML4 and HTML5-Draft elements that explicitly
2954
- // or implicitly (for HTML5) forbid the closing tag.
2953
+ /**
2954
+ * A union of HTML4 and HTML5-Draft elements that explicitly
2955
+ * or implicitly (for HTML5) forbid the closing tag.
2956
+ **/
2955
2957
  export const ForbiddenClosingTagElements = new Set<string>([
2956
2958
  'area', 'base', 'basefont', 'br', 'canvas', 'col', 'command', 'embed', 'frame', 'hr',
2957
2959
  'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr',
2958
2960
  ]);
2959
2961
 
2960
- // These tags we do not allow editing their tag name.
2962
+ /** These tags we do not allow editing their tag name. **/
2961
2963
  export const EditTagBlocklist = new Set<string>(['html', 'head', 'body']);
2962
2964
 
2963
2965
  export function adornerComparator(adornerA: Adorners.Adorner.Adorner, adornerB: Adorners.Adorner.Adorner): number {
@@ -3000,8 +3002,10 @@ export interface EditorHandles {
3000
3002
  resize: () => void;
3001
3003
  }
3002
3004
 
3003
- // As a privacy measure we are logging elements tree outline as a flat list where every tree item is a
3004
- // child of a tree outline.
3005
+ /**
3006
+ * As a privacy measure we are logging elements tree outline as a flat list where every tree item is a
3007
+ * child of a tree outline.
3008
+ **/
3005
3009
  function loggingParentProvider(e: Element): Element|undefined {
3006
3010
  const treeElement = UI.TreeOutline.TreeElement.getTreeElementBylistItemNode(e);
3007
3011
  return treeElement?.treeOutline?.contentElement;
@@ -1230,11 +1230,6 @@ export class ElementsTreeOutline extends
1230
1230
  }
1231
1231
 
1232
1232
  private contextMenuEventFired(event: MouseEvent): void {
1233
- // The context menu construction may be async. In order to
1234
- // make sure that no other (default) context menu shows up, we need
1235
- // to stop propagating and prevent the default action.
1236
- event.stopPropagation();
1237
- event.preventDefault();
1238
1233
  const treeElement = this.treeElementFromEventInternal(event);
1239
1234
  if (treeElement instanceof ElementsTreeElement) {
1240
1235
  void this.showContextMenu(treeElement, event);
@@ -1246,13 +1241,21 @@ export class ElementsTreeOutline extends
1246
1241
  return;
1247
1242
  }
1248
1243
 
1249
- const contextMenu = new UI.ContextMenu.ContextMenu(event);
1250
- const isPseudoElement = Boolean(treeElement.node().pseudoType());
1251
- const isTag = treeElement.node().nodeType() === Node.ELEMENT_NODE && !isPseudoElement;
1252
1244
  const node = (event.target as Node | null);
1253
1245
  if (!node) {
1254
1246
  return;
1255
1247
  }
1248
+
1249
+ // The context menu construction may be async. In order to
1250
+ // make sure that no other (default) context menu shows up, we need
1251
+ // to stop propagating and prevent the default action.
1252
+ event.stopPropagation();
1253
+ event.preventDefault();
1254
+
1255
+ const contextMenu = new UI.ContextMenu.ContextMenu(event);
1256
+ const isPseudoElement = Boolean(treeElement.node().pseudoType());
1257
+ const isTag = treeElement.node().nodeType() === Node.ELEMENT_NODE && !isPseudoElement;
1258
+
1256
1259
  let textNode: Element|null = node.enclosingNodeOrSelfWithClass('webkit-html-text-node');
1257
1260
  if (textNode?.classList.contains('bogus')) {
1258
1261
  textNode = null;
@@ -57,8 +57,10 @@ export function rendererBase<MatchT extends SDK.CSSPropertyParser.Match>(
57
57
  return RendererBase;
58
58
  }
59
59
 
60
- // This class implements highlighting for rendered nodes in value traces. On hover, all nodes belonging to the same
61
- // Match (using object identity) are highlighted.
60
+ /**
61
+ * This class implements highlighting for rendered nodes in value traces. On hover, all nodes belonging to the same
62
+ * Match (using object identity) are highlighted.
63
+ **/
62
64
  export class Highlighting {
63
65
  static readonly REGISTRY_NAME = 'css-value-tracing';
64
66
  // This holds a stack of active ranges, the top-stack is the currently highlighted set. mouseenter and mouseleave
@@ -145,19 +147,21 @@ export class Highlighting {
145
147
  }
146
148
  }
147
149
 
148
- // This class is used to guide value tracing when passed to the Renderer. Tracing has two phases. First, substitutions
149
- // such as var() are applied step by step. In each step, all vars in the value are replaced by their definition until no
150
- // vars remain. In the second phase, we evaluate other functions such as calc() or min() or color-mix(). Which CSS
151
- // function types are actually substituted or evaluated is not relevant here, rather it is decided by an individual
152
- // MatchRenderer.
153
- //
154
- // Callers don't need to keep track of the tracing depth (i.e., the number of substitution/evaluation steps).
155
- // TracingContext is stateful and keeps track of the depth, so callers can progressively produce steps by calling
156
- // TracingContext#nextSubstitution or TracingContext#nextEvaluation. Calling Renderer with the tracing context will then
157
- // produce the next step of tracing. The tracing depth is passed to the individual MatchRenderers by way of
158
- // TracingContext#substitution or TracingContext#applyEvaluation/TracingContext#evaluation (see function-level comments
159
- // about how these two play together), which MatchRenderers call to request a fresh TracingContext for the next level of
160
- // substitution/evaluation.
150
+ /**
151
+ * This class is used to guide value tracing when passed to the Renderer. Tracing has two phases. First, substitutions
152
+ * such as var() are applied step by step. In each step, all vars in the value are replaced by their definition until no
153
+ * vars remain. In the second phase, we evaluate other functions such as calc() or min() or color-mix(). Which CSS
154
+ * function types are actually substituted or evaluated is not relevant here, rather it is decided by an individual
155
+ * MatchRenderer.
156
+ *
157
+ * Callers don't need to keep track of the tracing depth (i.e., the number of substitution/evaluation steps).
158
+ * TracingContext is stateful and keeps track of the depth, so callers can progressively produce steps by calling
159
+ * TracingContext#nextSubstitution or TracingContext#nextEvaluation. Calling Renderer with the tracing context will then
160
+ * produce the next step of tracing. The tracing depth is passed to the individual MatchRenderers by way of
161
+ * TracingContext#substitution or TracingContext#applyEvaluation/TracingContext#evaluation (see function-level comments
162
+ * about how these two play together), which MatchRenderers call to request a fresh TracingContext for the next level of
163
+ * substitution/evaluation.
164
+ **/
161
165
  export class TracingContext {
162
166
  #substitutionDepth = 0;
163
167
  #hasMoreSubstitutions: boolean;
@@ -1193,10 +1193,12 @@ type ShadowLengthProperty = ShadowProperty&{
1193
1193
  propertyType: Exclude<ShadowPropertyType, ShadowPropertyType.INSET|ShadowPropertyType.COLOR>,
1194
1194
  };
1195
1195
 
1196
- // The shadow model is an abstraction over the various shadow properties on the one hand and the order they were defined
1197
- // in on the other, so that modifications through the shadow editor can retain the property order in the authored text.
1198
- // The model also looks through var()s by keeping a mapping between individual properties and any var()s they are coming
1199
- // from, replacing the var() functions as needed with concrete values when edited.
1196
+ /**
1197
+ * The shadow model is an abstraction over the various shadow properties on the one hand and the order they were defined
1198
+ * in on the other, so that modifications through the shadow editor can retain the property order in the authored text.
1199
+ * The model also looks through var()s by keeping a mapping between individual properties and any var()s they are coming
1200
+ * from, replacing the var() functions as needed with concrete values when edited.
1201
+ **/
1200
1202
  export class ShadowModel implements InlineEditor.CSSShadowEditor.CSSShadowModel {
1201
1203
  readonly #properties: ShadowProperty[];
1202
1204
  readonly #shadowType: SDK.CSSPropertyParserMatchers.ShadowType;
@@ -135,9 +135,9 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
135
135
  const FILTER_IDLE_PERIOD = 500;
136
136
  // Minimum number of @property rules for the @property section block to be folded initially
137
137
  const MIN_FOLDED_SECTIONS_COUNT = 5;
138
- // Title of the registered properties section
138
+ /** Title of the registered properties section **/
139
139
  export const REGISTERED_PROPERTY_SECTION_NAME = '@property';
140
- // Title of the function section
140
+ /** Title of the function section **/
141
141
  export const FUNCTION_SECTION_NAME = '@function';
142
142
 
143
143
  // Highlightable properties are those that can be hovered in the sidebar to trigger a specific
@@ -21,8 +21,10 @@ const UIStrings = {
21
21
  const str_ = i18n.i18n.registerUIStrings('panels/elements/components/AccessibilityTreeNode.ts', UIStrings);
22
22
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
23
23
 
24
- // TODO(jobay) move this to Platform.StringUtilities if still needed.
25
- // This function is a variant of setTextContentTruncatedIfNeeded found in DOMExtension.
24
+ /**
25
+ * TODO(jobay) move this to Platform.StringUtilities if still needed.
26
+ * This function is a variant of setTextContentTruncatedIfNeeded found in DOMExtension.
27
+ **/
26
28
  function truncateTextIfNeeded(text: string): string {
27
29
  const maxTextContentLength = 10000;
28
30
 
@@ -38,8 +38,10 @@ export enum RegisteredAdorners {
38
38
  POPOVER = 'popover',
39
39
  }
40
40
 
41
- // This enum-like const object serves as the authoritative registry for all the
42
- // adorners available.
41
+ /**
42
+ * This enum-like const object serves as the authoritative registry for all the
43
+ * adorners available.
44
+ **/
43
45
  export function getRegisteredAdorner(which: RegisteredAdorners): RegisteredAdorner {
44
46
  switch (which) {
45
47
  case RegisteredAdorners.GRID:
@@ -215,7 +217,7 @@ const OrderedAdornerCategories = [
215
217
  AdornerCategories.DEFAULT,
216
218
  ];
217
219
 
218
- // Use idx + 1 for the order to avoid JavaScript's 0 == false issue
220
+ /** Use idx + 1 for the order to avoid JavaScript's 0 == false issue **/
219
221
  export const AdornerCategoryOrder = new Map(OrderedAdornerCategories.map((category, idx) => [category, idx + 1]));
220
222
 
221
223
  export function compareAdornerNamesByCategory(nameA: string, nameB: string): number {