chrome-devtools-frontend 1.0.1376716 → 1.0.1380117

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 (434) hide show
  1. package/config/gni/devtools_grd_files.gni +15 -7
  2. package/config/gni/devtools_image_files.gni +2 -0
  3. package/front_end/Images/src/animation.svg +3 -0
  4. package/front_end/Images/src/brush-2.svg +3 -0
  5. package/front_end/core/common/SettingRegistration.ts +1 -1
  6. package/front_end/core/host/AidaClient.ts +1 -0
  7. package/front_end/core/host/InspectorFrontendHost.ts +4 -0
  8. package/front_end/core/i18n/ByteUtilities.test.ts +34 -0
  9. package/front_end/core/i18n/ByteUtilities.ts +65 -0
  10. package/front_end/core/i18n/NumberFormatter.ts +75 -0
  11. package/front_end/core/i18n/i18n.ts +4 -0
  12. package/front_end/core/i18n/time-utilities.test.ts +20 -2
  13. package/front_end/core/i18n/time-utilities.ts +125 -86
  14. package/front_end/core/platform/NumberUtilities.test.ts +3 -26
  15. package/front_end/core/platform/NumberUtilities.ts +0 -20
  16. package/front_end/core/root/Runtime.ts +6 -3
  17. package/front_end/core/sdk/CPUThrottlingManager.ts +4 -0
  18. package/front_end/core/sdk/CSSContainerQuery.test.ts +10 -16
  19. package/front_end/core/sdk/CSSContainerQuery.ts +3 -15
  20. package/front_end/core/sdk/CSSMatchedStyles.test.ts +4 -0
  21. package/front_end/core/sdk/CSSMatchedStyles.ts +5 -5
  22. package/front_end/core/sdk/CSSModel.ts +18 -0
  23. package/front_end/core/sdk/CSSPropertyParser.test.ts +16 -1
  24. package/front_end/core/sdk/CSSPropertyParser.ts +2 -2
  25. package/front_end/core/sdk/sdk-meta.ts +8 -0
  26. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +3 -3
  27. package/front_end/generated/ARIAProperties.js +4 -0
  28. package/front_end/generated/InspectorBackendCommands.js +8 -6
  29. package/front_end/generated/SupportedCSSProperties.js +17 -4
  30. package/front_end/generated/protocol-mapping.d.ts +15 -1
  31. package/front_end/generated/protocol-proxy-api.d.ts +14 -1
  32. package/front_end/generated/protocol.ts +26 -2
  33. package/front_end/models/extensions/ExtensionAPI.ts +9 -1
  34. package/front_end/models/heap_snapshot_model/HeapSnapshotModel.ts +2 -0
  35. package/front_end/models/javascript_metadata/NativeFunctions.js +8 -21
  36. package/front_end/models/live-metrics/web-vitals-injected/{rollup.config.js → rollup.config.mjs} +1 -1
  37. package/front_end/models/persistence/EditFileSystemView.ts +19 -9
  38. package/front_end/models/persistence/WorkspaceSettingsTab.ts +50 -54
  39. package/front_end/models/persistence/editFileSystemView.css +35 -15
  40. package/front_end/models/persistence/workspaceSettingsTab.css +21 -87
  41. package/front_end/models/timeline_model/timeline_model.ts +0 -6
  42. package/front_end/models/trace/Processor.test.ts +18 -17
  43. package/front_end/models/trace/Processor.ts +10 -14
  44. package/front_end/models/trace/README.md +0 -1
  45. package/front_end/models/{timeline_model → trace/extras}/TimelineJSProfile.ts +19 -29
  46. package/front_end/models/{timeline_model/TimelineModelFilter.test.ts → trace/extras/TraceFilter.test.ts} +15 -17
  47. package/front_end/models/trace/extras/TraceFilter.ts +62 -0
  48. package/front_end/models/{timeline_model/TimelineProfileTree.test.ts → trace/extras/TraceTree.test.ts} +44 -43
  49. package/front_end/models/{timeline_model/TimelineProfileTree.ts → trace/extras/TraceTree.ts} +65 -59
  50. package/front_end/models/trace/extras/extras.ts +3 -0
  51. package/front_end/models/trace/handlers/AnimationHandler.ts +0 -8
  52. package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +1 -11
  53. package/front_end/models/trace/handlers/FramesHandler.test.ts +1 -6
  54. package/front_end/models/trace/handlers/FramesHandler.ts +1 -14
  55. package/front_end/models/trace/handlers/GPUHandler.test.ts +0 -2
  56. package/front_end/models/trace/handlers/GPUHandler.ts +1 -25
  57. package/front_end/models/trace/handlers/ImagePaintingHandler.ts +3 -0
  58. package/front_end/models/trace/handlers/InitiatorsHandler.test.ts +0 -1
  59. package/front_end/models/trace/handlers/InitiatorsHandler.ts +0 -20
  60. package/front_end/models/trace/handlers/InvalidationsHandler.test.ts +0 -1
  61. package/front_end/models/trace/handlers/InvalidationsHandler.ts +0 -18
  62. package/front_end/models/trace/handlers/LargestImagePaintHandler.test.ts +2 -2
  63. package/front_end/models/trace/handlers/LargestImagePaintHandler.ts +63 -3
  64. package/front_end/models/trace/handlers/LargestTextPaintHandler.ts +3 -0
  65. package/front_end/models/trace/handlers/LayerTreeHandler.test.ts +0 -2
  66. package/front_end/models/trace/handlers/LayerTreeHandler.ts +1 -18
  67. package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +0 -3
  68. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +1 -20
  69. package/front_end/models/trace/handlers/MemoryHandler.test.ts +0 -1
  70. package/front_end/models/trace/handlers/MemoryHandler.ts +3 -0
  71. package/front_end/models/trace/handlers/MetaHandler.test.ts +1 -32
  72. package/front_end/models/trace/handlers/MetaHandler.ts +2 -30
  73. package/front_end/models/trace/handlers/NetworkRequestsHandler.test.ts +0 -26
  74. package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +4 -23
  75. package/front_end/models/trace/handlers/PageFramesHandler.ts +3 -0
  76. package/front_end/models/trace/handlers/RendererHandler.test.ts +0 -4
  77. package/front_end/models/trace/handlers/RendererHandler.ts +1 -24
  78. package/front_end/models/trace/handlers/SamplesHandler.test.ts +0 -5
  79. package/front_end/models/trace/handlers/SamplesHandler.ts +0 -26
  80. package/front_end/models/trace/handlers/ScreenshotsHandler.test.ts +0 -1
  81. package/front_end/models/trace/handlers/SelectorStatsHandler.ts +3 -0
  82. package/front_end/models/trace/handlers/ServerTimingsHandler.ts +1 -16
  83. package/front_end/models/trace/handlers/Threads.test.ts +1 -2
  84. package/front_end/models/trace/handlers/UserInteractionsHandler.test.ts +4 -27
  85. package/front_end/models/trace/handlers/UserInteractionsHandler.ts +16 -25
  86. package/front_end/models/trace/handlers/UserTimingsHandler.ts +0 -17
  87. package/front_end/models/trace/handlers/WorkersHandler.test.ts +0 -1
  88. package/front_end/models/trace/handlers/WorkersHandler.ts +0 -23
  89. package/front_end/models/trace/handlers/types.ts +1 -8
  90. package/front_end/models/trace/insights/{CumulativeLayoutShift.test.ts → CLSCulprits.test.ts} +21 -21
  91. package/front_end/models/trace/insights/{CumulativeLayoutShift.ts → CLSCulprits.ts} +24 -5
  92. package/front_end/models/trace/insights/Common.ts +5 -55
  93. package/front_end/models/trace/insights/DocumentLatency.test.ts +2 -2
  94. package/front_end/models/trace/insights/DocumentLatency.ts +26 -6
  95. package/front_end/models/trace/insights/FontDisplay.ts +24 -5
  96. package/front_end/models/trace/insights/InteractionToNextPaint.test.ts +1 -1
  97. package/front_end/models/trace/insights/InteractionToNextPaint.ts +26 -6
  98. package/front_end/models/trace/insights/LCPDiscovery.test.ts +58 -0
  99. package/front_end/models/trace/insights/LCPDiscovery.ts +101 -0
  100. package/front_end/models/trace/insights/{LargestContentfulPaint.test.ts → LCPPhases.test.ts} +6 -28
  101. package/front_end/models/trace/insights/{LargestContentfulPaint.ts → LCPPhases.ts} +37 -38
  102. package/front_end/models/trace/insights/{InsightRunners.ts → Models.ts} +4 -3
  103. package/front_end/models/trace/insights/RenderBlocking.test.ts +1 -1
  104. package/front_end/models/trace/insights/RenderBlocking.ts +33 -28
  105. package/front_end/models/trace/insights/SlowCSSSelector.ts +26 -5
  106. package/front_end/models/trace/insights/{ThirdPartyWeb.test.ts → ThirdParties.test.ts} +3 -3
  107. package/front_end/models/trace/insights/{ThirdPartyWeb.ts → ThirdParties.ts} +24 -5
  108. package/front_end/models/trace/insights/Viewport.test.ts +1 -1
  109. package/front_end/models/trace/insights/Viewport.ts +27 -9
  110. package/front_end/models/trace/insights/insights.ts +1 -1
  111. package/front_end/models/trace/insights/types.ts +11 -9
  112. package/front_end/models/trace/types/TraceEvents.ts +51 -22
  113. package/front_end/panels/application/SharedStorageItemsView.test.ts +3 -3
  114. package/front_end/panels/application/SharedStorageItemsView.ts +5 -3
  115. package/front_end/panels/application/StorageView.ts +3 -3
  116. package/front_end/panels/application/components/StorageMetadataView.ts +1 -2
  117. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +34 -31
  118. package/front_end/panels/coverage/CoverageView.ts +3 -3
  119. package/front_end/panels/elements/ComputedStyleModel.ts +9 -2
  120. package/front_end/panels/elements/ComputedStyleWidget.test.ts +72 -0
  121. package/front_end/panels/elements/ComputedStyleWidget.ts +12 -0
  122. package/front_end/panels/elements/ElementStatePaneWidget.test.ts +84 -30
  123. package/front_end/panels/elements/ElementStatePaneWidget.ts +42 -24
  124. package/front_end/panels/elements/ElementsTreeElement.ts +24 -11
  125. package/front_end/panels/elements/MetricsSidebarPane.ts +12 -7
  126. package/front_end/panels/elements/PropertyMatchers.ts +3 -0
  127. package/front_end/panels/elements/StylePropertiesSection.ts +15 -6
  128. package/front_end/panels/elements/StylePropertyTreeElement.test.ts +3 -1
  129. package/front_end/panels/elements/StylePropertyTreeElement.ts +8 -3
  130. package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -2
  131. package/front_end/panels/explain/components/ConsoleInsight.ts +8 -18
  132. package/front_end/panels/freestyler/AiAgent.test.ts +58 -1
  133. package/front_end/panels/freestyler/AiAgent.ts +58 -3
  134. package/front_end/panels/freestyler/DrJonesFileAgent.test.ts +99 -23
  135. package/front_end/panels/freestyler/DrJonesFileAgent.ts +53 -20
  136. package/front_end/panels/freestyler/DrJonesNetworkAgent.test.ts +15 -7
  137. package/front_end/panels/freestyler/DrJonesNetworkAgent.ts +36 -15
  138. package/front_end/panels/freestyler/DrJonesPerformanceAgent.test.ts +6 -6
  139. package/front_end/panels/freestyler/DrJonesPerformanceAgent.ts +48 -8
  140. package/front_end/panels/freestyler/FreestylerAgent.test.ts +15 -14
  141. package/front_end/panels/freestyler/FreestylerAgent.ts +52 -8
  142. package/front_end/panels/freestyler/FreestylerPanel.test.ts +539 -39
  143. package/front_end/panels/freestyler/FreestylerPanel.ts +349 -215
  144. package/front_end/panels/freestyler/components/FreestylerChatUi.test.ts +126 -34
  145. package/front_end/panels/freestyler/components/FreestylerChatUi.ts +320 -268
  146. package/front_end/panels/freestyler/components/UserActionRow.ts +156 -47
  147. package/front_end/panels/freestyler/components/freestylerChatUi.css +69 -34
  148. package/front_end/panels/freestyler/components/userActionRow.css +40 -67
  149. package/front_end/panels/freestyler/freestyler-meta.ts +3 -11
  150. package/front_end/panels/issues/components/HideIssuesMenu.ts +2 -11
  151. package/front_end/panels/layer_viewer/LayerDetailsView.ts +1 -2
  152. package/front_end/panels/layer_viewer/PaintProfilerView.ts +5 -5
  153. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +46 -0
  154. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +26 -17
  155. package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +25 -19
  156. package/front_end/panels/network/BinaryResourceView.ts +6 -7
  157. package/front_end/panels/network/EventSourceMessagesView.ts +1 -1
  158. package/front_end/panels/network/NetworkDataGridNode.ts +3 -3
  159. package/front_end/panels/network/NetworkLogView.ts +7 -8
  160. package/front_end/panels/network/RequestTimingView.test.ts +35 -1
  161. package/front_end/panels/network/RequestTimingView.ts +96 -0
  162. package/front_end/panels/network/ResourceWebSocketFrameView.ts +2 -2
  163. package/front_end/panels/network/networkTimingTable.css +2 -1
  164. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +1 -1
  165. package/front_end/panels/profiler/HeapProfileView.ts +3 -3
  166. package/front_end/panels/profiler/HeapSnapshotView.ts +2 -2
  167. package/front_end/panels/profiler/HeapTimelineOverview.ts +12 -12
  168. package/front_end/panels/profiler/IsolateSelector.ts +3 -4
  169. package/front_end/panels/profiler/ProfileFlameChartDataProvider.ts +1 -1
  170. package/front_end/panels/profiler/ProfileSidebarTreeElement.ts +7 -6
  171. package/front_end/panels/profiler/ProfileView.ts +1 -1
  172. package/front_end/panels/recorder/components/RecordingView.ts +2 -2
  173. package/front_end/panels/recorder/injected/{rollup.config.js → rollup.config.mjs} +1 -1
  174. package/front_end/panels/recorder/recorderController.css +0 -4
  175. package/front_end/panels/security/CookieReportTreeElement.ts +1 -9
  176. package/front_end/panels/security/CookieReportView.ts +120 -0
  177. package/front_end/panels/security/SecurityPanel.ts +8 -2
  178. package/front_end/panels/security/cookieReportView.css +46 -0
  179. package/front_end/panels/security/sidebar.css +1 -2
  180. package/front_end/panels/sensors/LocationsSettingsTab.ts +26 -11
  181. package/front_end/panels/sensors/locationsSettingsTab.css +18 -18
  182. package/front_end/panels/settings/AISettingsTab.ts +6 -15
  183. package/front_end/panels/settings/KeybindsSettingsTab.ts +1 -1
  184. package/front_end/panels/settings/SettingsScreen.ts +61 -56
  185. package/front_end/panels/settings/aiSettingsTab.css +3 -14
  186. package/front_end/panels/settings/components/SyncSection.ts +1 -2
  187. package/front_end/panels/settings/components/syncSection.css +0 -10
  188. package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +3 -1
  189. package/front_end/panels/settings/keybindsSettingsTab.css +7 -10
  190. package/front_end/panels/settings/settingsScreen.css +27 -125
  191. package/front_end/panels/sources/DebuggerPlugin.ts +9 -4
  192. package/front_end/panels/sources/NavigatorView.ts +11 -13
  193. package/front_end/panels/timeline/ActiveFilters.ts +3 -4
  194. package/front_end/panels/timeline/AnimationsTrackAppender.ts +1 -2
  195. package/front_end/panels/timeline/CountersGraph.ts +2 -4
  196. package/front_end/panels/timeline/EventsTimelineTreeView.ts +7 -8
  197. package/front_end/panels/timeline/README.md +2 -1
  198. package/front_end/panels/timeline/TimelineController.ts +14 -4
  199. package/front_end/panels/timeline/TimelineEventOverview.ts +3 -4
  200. package/front_end/panels/timeline/TimelineFilters.ts +3 -4
  201. package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +1 -1
  202. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +3 -10
  203. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +1 -2
  204. package/front_end/panels/timeline/TimelineFlameChartView.ts +21 -12
  205. package/front_end/panels/timeline/TimelineLoader.test.ts +1 -2
  206. package/front_end/panels/timeline/TimelineLoader.ts +3 -4
  207. package/front_end/panels/timeline/TimelineMiniMap.ts +10 -0
  208. package/front_end/panels/timeline/TimelinePanel.ts +20 -8
  209. package/front_end/panels/timeline/TimelineTreeView.test.ts +12 -13
  210. package/front_end/panels/timeline/TimelineTreeView.ts +35 -40
  211. package/front_end/panels/timeline/TimelineUIUtils.test.ts +2 -2
  212. package/front_end/panels/timeline/TimelineUIUtils.ts +12 -14
  213. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +6 -7
  214. package/front_end/panels/timeline/components/LiveMetricsView.test.ts +3 -3
  215. package/front_end/panels/timeline/components/LiveMetricsView.ts +14 -26
  216. package/front_end/panels/timeline/components/MetricCard.test.ts +1 -1
  217. package/front_end/panels/timeline/components/MetricCard.ts +46 -0
  218. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +3 -4
  219. package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +2 -0
  220. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +41 -36
  221. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +19 -33
  222. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +29 -40
  223. package/front_end/panels/timeline/components/insights/FontDisplay.ts +17 -23
  224. package/front_end/panels/timeline/components/insights/Helpers.ts +12 -16
  225. package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +14 -26
  226. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +25 -37
  227. package/front_end/panels/timeline/components/insights/LCPPhases.ts +20 -47
  228. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +19 -28
  229. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +1 -2
  230. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +18 -31
  231. package/front_end/panels/timeline/components/insights/Table.ts +5 -3
  232. package/front_end/panels/timeline/components/insights/ThirdParties.ts +18 -25
  233. package/front_end/panels/timeline/components/insights/Viewport.ts +14 -25
  234. package/front_end/panels/timeline/components/liveMetricsView.css +5 -13
  235. package/front_end/panels/timeline/components/metricCard.css +11 -0
  236. package/front_end/panels/timeline/components/sidebarInsightsTab.css +1 -1
  237. package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +5 -5
  238. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +13 -12
  239. package/front_end/panels/timeline/timelineFlameChartView.css +1 -1
  240. package/front_end/panels/timeline/utils/AICallTree.test.ts +105 -0
  241. package/front_end/panels/timeline/utils/AICallTree.ts +25 -24
  242. package/front_end/testing/EnvironmentHelpers.ts +5 -18
  243. package/front_end/testing/InsightHelpers.ts +4 -4
  244. package/front_end/testing/TraceHelpers.ts +1 -1
  245. package/front_end/third_party/puppeteer/README.chromium +2 -2
  246. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +2 -3
  247. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  248. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  249. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts +14 -3
  250. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  251. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js +16 -2
  252. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  253. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.d.ts +34 -5
  254. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.d.ts.map +1 -1
  255. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.js +51 -2
  256. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.js.map +1 -1
  257. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  258. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js +10 -8
  259. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js.map +1 -1
  260. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  261. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +1 -1
  262. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  263. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.d.ts +14 -4
  264. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.d.ts.map +1 -1
  265. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js +57 -23
  266. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js.map +1 -1
  267. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts +1 -1
  268. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  269. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js +13 -10
  270. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js.map +1 -1
  271. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.d.ts +15 -4
  272. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.d.ts.map +1 -1
  273. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.js +55 -26
  274. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.js.map +1 -1
  275. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.d.ts +0 -8
  276. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.d.ts.map +1 -1
  277. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.js +2 -11
  278. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.js.map +1 -1
  279. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts +2 -1
  280. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
  281. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js +5 -2
  282. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js.map +1 -1
  283. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts +7 -0
  284. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
  285. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js +9 -1
  286. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js.map +1 -1
  287. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.d.ts.map +1 -1
  288. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js +5 -3
  289. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js.map +1 -1
  290. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts +1 -1
  291. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts.map +1 -1
  292. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js +0 -3
  293. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js.map +1 -1
  294. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
  295. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
  296. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  297. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
  298. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  299. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  300. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  301. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  302. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  303. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.d.ts +14 -0
  304. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.d.ts.map +1 -0
  305. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.js +18 -0
  306. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.js.map +1 -0
  307. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +51 -10
  308. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +215 -97
  309. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +2 -3
  310. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  311. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  312. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts +14 -3
  313. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  314. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js +16 -2
  315. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  316. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts +34 -5
  317. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts.map +1 -1
  318. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.js +51 -2
  319. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.js.map +1 -1
  320. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  321. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js +10 -8
  322. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js.map +1 -1
  323. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  324. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +1 -1
  325. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  326. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.d.ts +14 -4
  327. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.d.ts.map +1 -1
  328. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js +57 -23
  329. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js.map +1 -1
  330. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts +1 -1
  331. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  332. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js +13 -10
  333. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js.map +1 -1
  334. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.d.ts +15 -4
  335. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.d.ts.map +1 -1
  336. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.js +55 -26
  337. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.js.map +1 -1
  338. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.d.ts +0 -8
  339. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.d.ts.map +1 -1
  340. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.js +1 -9
  341. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.js.map +1 -1
  342. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts +2 -1
  343. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
  344. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js +5 -2
  345. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js.map +1 -1
  346. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts +7 -0
  347. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
  348. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js +7 -0
  349. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js.map +1 -1
  350. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.d.ts.map +1 -1
  351. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js +5 -3
  352. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js.map +1 -1
  353. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts +1 -1
  354. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts.map +1 -1
  355. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js +0 -3
  356. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js.map +1 -1
  357. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
  358. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
  359. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  360. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
  361. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  362. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  363. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  364. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.d.ts +14 -0
  365. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.d.ts.map +1 -0
  366. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.js +15 -0
  367. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.js.map +1 -0
  368. package/front_end/third_party/puppeteer/package/lib/types.d.ts +51 -10
  369. package/front_end/third_party/puppeteer/package/package.json +4 -4
  370. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +2 -3
  371. package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +21 -3
  372. package/front_end/third_party/puppeteer/package/src/api/Input.ts +57 -8
  373. package/front_end/third_party/puppeteer/package/src/bidi/ElementHandle.ts +9 -7
  374. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +1 -0
  375. package/front_end/third_party/puppeteer/package/src/bidi/Input.ts +72 -31
  376. package/front_end/third_party/puppeteer/package/src/cdp/ElementHandle.ts +14 -9
  377. package/front_end/third_party/puppeteer/package/src/cdp/Input.ts +71 -26
  378. package/front_end/third_party/puppeteer/package/src/common/CallbackRegistry.ts +1 -15
  379. package/front_end/third_party/puppeteer/package/src/common/ConsoleMessage.ts +8 -1
  380. package/front_end/third_party/puppeteer/package/src/common/Errors.ts +7 -0
  381. package/front_end/third_party/puppeteer/package/src/common/WaitTask.ts +9 -9
  382. package/front_end/third_party/puppeteer/package/src/environment.ts +1 -4
  383. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  384. package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
  385. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  386. package/front_end/third_party/puppeteer/package/src/util/incremental-id-generator.ts +20 -0
  387. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +1 -0
  388. package/front_end/ui/components/buttons/Button.test.ts +14 -0
  389. package/front_end/ui/components/buttons/Button.ts +27 -4
  390. package/front_end/ui/components/cards/card.css +7 -4
  391. package/front_end/ui/components/dialogs/Dialog.ts +2 -4
  392. package/front_end/ui/components/dialogs/ShortcutDialog.ts +15 -13
  393. package/front_end/ui/components/dialogs/dialog.css +2 -6
  394. package/front_end/ui/components/dialogs/shortcutDialog.css +33 -41
  395. package/front_end/ui/components/docs/freestyler/basic.ts +6 -8
  396. package/front_end/ui/components/docs/freestyler/empty_state.ts +6 -8
  397. package/front_end/ui/components/docs/performance_panel/track_example.html +1 -1
  398. package/front_end/ui/components/markdown_view/MarkdownView.test.ts +39 -17
  399. package/front_end/ui/components/markdown_view/MarkdownView.ts +77 -14
  400. package/front_end/ui/components/markdown_view/markdownView.css +15 -0
  401. package/front_end/ui/components/settings/SettingCheckbox.ts +3 -2
  402. package/front_end/ui/legacy/ContextMenu.ts +2 -2
  403. package/front_end/ui/legacy/InplaceEditor.ts +18 -14
  404. package/front_end/ui/legacy/TabbedPane.ts +0 -14
  405. package/front_end/ui/legacy/UIUtils.ts +0 -7
  406. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +7 -2
  407. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +8 -4
  408. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +20 -11
  409. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.test.ts +19 -0
  410. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.ts +1 -1
  411. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +1 -1
  412. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +5 -22
  413. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +129 -100
  414. package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +4 -2
  415. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.test.ts +9 -4
  416. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.ts +6 -6
  417. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +22 -4
  418. package/front_end/ui/legacy/components/perf_ui/flameChart.css +0 -2
  419. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.test.ts +49 -0
  420. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +23 -46
  421. package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -1
  422. package/front_end/ui/legacy/components/utils/ImagePreview.ts +1 -1
  423. package/front_end/ui/legacy/textPrompt.css +1 -1
  424. package/front_end/ui/legacy/toolbar.css +4 -5
  425. package/front_end/ui/visual_logging/KnownContextValues.ts +174 -0
  426. package/front_end/ui/visual_logging/LoggingConfig.ts +6 -2
  427. package/package.json +7 -6
  428. package/scripts/build/ninja/bundle.gni +3 -3
  429. package/scripts/build/{rollup.config.js → rollup.config.mjs} +4 -4
  430. package/scripts/devtools_paths.py +8 -4
  431. package/scripts/eslint_rules/tests/check_test_definitions_test.js +8 -3
  432. package/scripts/tools/update_goldens_v2.py +1 -1
  433. package/front_end/models/timeline_model/TimelineModelFilter.ts +0 -61
  434. /package/front_end/Images/{rollup.config.js → rollup.config.mjs} +0 -0
@@ -2,9 +2,11 @@
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 {describeWithLocale} from '../../testing/EnvironmentHelpers.js';
6
+
5
7
  import * as Platform from './platform.js';
6
8
 
7
- describe('NumberUtilities', () => {
9
+ describeWithLocale('NumberUtilities', () => {
8
10
  describe('clamp', () => {
9
11
  it('takes the lower bound if the number is smaller', () => {
10
12
  assert.strictEqual(5, Platform.NumberUtilities.clamp(1, 5, 10));
@@ -26,31 +28,6 @@ describe('NumberUtilities', () => {
26
28
  });
27
29
  });
28
30
 
29
- describe('bytesToString', () => {
30
- it('formats for < 1000 bytes', () => {
31
- assert.deepEqual(Platform.NumberUtilities.bytesToString(50), '50\xA0B');
32
- });
33
-
34
- it('formats for < 100 kilobytes', () => {
35
- assert.deepEqual(Platform.NumberUtilities.bytesToString(5 * 1000), '5.0\xA0kB');
36
- });
37
-
38
- it('formats for < 1000 kilobytes', () => {
39
- assert.deepEqual(Platform.NumberUtilities.bytesToString(500 * 1000), '500\xA0kB');
40
- });
41
-
42
- it('formats for < 100 megabytes', () => {
43
- const oneAndAHalfMegabytes = 1500 * 1000;
44
- assert.deepEqual(Platform.NumberUtilities.bytesToString(oneAndAHalfMegabytes), '1.5\xA0MB');
45
- });
46
-
47
- it('formats for > 100 megabytes', () => {
48
- const oneMegabyte = 1000 * 1000;
49
- const twoHundredAndTenMegabytes = oneMegabyte * 210;
50
- assert.deepEqual(Platform.NumberUtilities.bytesToString(twoHundredAndTenMegabytes), '210\xA0MB');
51
- });
52
- });
53
-
54
31
  describe('toFixedIfFloating', () => {
55
32
  it('converts a decimal to a fixed string with 3 decimal places', () => {
56
33
  const output = Platform.NumberUtilities.toFixedIfFloating('1.23456');
@@ -16,26 +16,6 @@ export const mod = (m: number, n: number): number => {
16
16
  return ((m % n) + n) % n;
17
17
  };
18
18
 
19
- export const bytesToString = (bytes: number): string => {
20
- if (bytes < 1000) {
21
- return `${bytes.toFixed(0)}\xA0B`;
22
- }
23
-
24
- const kilobytes = bytes / 1000;
25
- if (kilobytes < 100) {
26
- return `${kilobytes.toFixed(1)}\xA0kB`;
27
- }
28
- if (kilobytes < 1000) {
29
- return `${kilobytes.toFixed(0)}\xA0kB`;
30
- }
31
-
32
- const megabytes = kilobytes / 1000;
33
- if (megabytes < 100) {
34
- return `${megabytes.toFixed(1)}\xA0MB`;
35
- }
36
- return `${megabytes.toFixed(0)}\xA0MB`;
37
- };
38
-
39
19
  export const toFixedIfFloating = (value: string): string => {
40
20
  if (!value || Number.isNaN(Number(value))) {
41
21
  return value;
@@ -365,6 +365,11 @@ export interface HostConfigPrivacyUI {
365
365
  enabled: boolean;
366
366
  }
367
367
 
368
+ export interface HostConfigEnableOriginBoundCookies {
369
+ portBindingEnabled: boolean;
370
+ schemeBindingEnabled: boolean;
371
+ }
372
+
368
373
  // We use `RecursivePartial` here to enforce that DevTools code is able to
369
374
  // handle `HostConfig` objects of an unexpected shape. This can happen if
370
375
  // the implementation in the Chromium backend is changed without correctly
@@ -376,11 +381,8 @@ export type HostConfig = Platform.TypeScriptUtilities.RecursivePartial<{
376
381
  aidaAvailability: AidaAvailability,
377
382
  devToolsConsoleInsights: HostConfigConsoleInsights,
378
383
  devToolsFreestyler: HostConfigFreestyler,
379
- devToolsExplainThisResourceDogfood: HostConfigAiAssistanceNetworkAgent,
380
384
  devToolsAiAssistanceNetworkAgent: HostConfigAiAssistanceNetworkAgent,
381
- devToolsAiAssistancePerformanceAgentDogfood: HostConfigAiAssistancePerformanceAgent,
382
385
  devToolsAiAssistanceFileAgent: HostConfigAiAssistanceFileAgent,
383
- devToolsAiAssistanceFileAgentDogfood: HostConfigAiAssistanceFileAgent,
384
386
  devToolsAiAssistancePerformanceAgent: HostConfigAiAssistancePerformanceAgent,
385
387
  devToolsVeLogging: HostConfigVeLogging,
386
388
  devToolsPrivacyUI: HostConfigPrivacyUI,
@@ -389,6 +391,7 @@ export type HostConfig = Platform.TypeScriptUtilities.RecursivePartial<{
389
391
  * or guest mode, rather than a "normal" profile.
390
392
  */
391
393
  isOffTheRecord: boolean,
394
+ devToolsEnableOriginBoundCookies: HostConfigEnableOriginBoundCookies,
392
395
  }>;
393
396
 
394
397
  /**
@@ -35,6 +35,10 @@ export class CPUThrottlingManager extends Common.ObjectWrapper.ObjectWrapper<Eve
35
35
  }
36
36
 
37
37
  setCPUThrottlingRate(rate: number): void {
38
+ if (rate === this.#cpuThrottlingRateInternal) {
39
+ return;
40
+ }
41
+
38
42
  this.#cpuThrottlingRateInternal = rate;
39
43
  for (const emulationModel of TargetManager.instance().models(EmulationModel)) {
40
44
  void emulationModel.setCPUThrottlingRate(this.#cpuThrottlingRateInternal);
@@ -4,29 +4,23 @@
4
4
 
5
5
  import * as SDK from './sdk.js';
6
6
 
7
- const {getPhysicalAxisFromQueryAxis, getQueryAxis, PhysicalAxis, QueryAxis} = SDK.CSSContainerQuery;
7
+ const {getPhysicalAxisFromQueryAxis, getQueryAxisFromContainerType, PhysicalAxis, QueryAxis} = SDK.CSSContainerQuery;
8
8
 
9
9
  describe('CSSContainerQuery', () => {
10
- describe('getQueryAxis', () => {
11
- it('gets the query axis of no containment correctly', () => {
12
- assert.strictEqual(getQueryAxis(''), QueryAxis.NONE);
13
- assert.strictEqual(getQueryAxis('style layout'), QueryAxis.NONE);
10
+ describe('getQueryAxisFromContainerType', () => {
11
+ it('gets the query axis of no container-type correctly', () => {
12
+ assert.strictEqual(getQueryAxisFromContainerType(''), QueryAxis.NONE);
13
+ assert.strictEqual(getQueryAxisFromContainerType('normal'), QueryAxis.NONE);
14
14
  });
15
15
 
16
16
  it('gets the query axis of an inline container query correctly', () => {
17
- assert.strictEqual(getQueryAxis('inline-size layout style'), QueryAxis.INLINE);
18
- assert.strictEqual(getQueryAxis('layout inline-size style inline-size'), QueryAxis.INLINE);
17
+ assert.strictEqual(getQueryAxisFromContainerType('inline-size'), QueryAxis.INLINE);
18
+ assert.strictEqual(getQueryAxisFromContainerType('scroll-state inline-size'), QueryAxis.INLINE);
19
19
  });
20
20
 
21
- it('gets the query axis of a block container query correctly', () => {
22
- assert.strictEqual(getQueryAxis('block-size layout style'), QueryAxis.BLOCK);
23
- assert.strictEqual(getQueryAxis('layout block-size style block-size'), QueryAxis.BLOCK);
24
- });
25
-
26
- it('gets the query axis of inline-block container query correctly', () => {
27
- assert.strictEqual(getQueryAxis('inline-size layout style block-size'), QueryAxis.BOTH);
28
- assert.strictEqual(getQueryAxis('layout size style'), QueryAxis.BOTH);
29
- assert.strictEqual(getQueryAxis('size'), QueryAxis.BOTH);
21
+ it('gets the query axis of size container query correctly', () => {
22
+ assert.strictEqual(getQueryAxisFromContainerType('size'), QueryAxis.BOTH);
23
+ assert.strictEqual(getQueryAxisFromContainerType('scroll-state size'), QueryAxis.BOTH);
30
24
  });
31
25
  });
32
26
 
@@ -62,14 +62,12 @@ export class CSSContainerQueryContainer {
62
62
  return;
63
63
  }
64
64
  const containerType = styles.get('container-type');
65
- const contain = styles.get('contain');
66
65
  const writingMode = styles.get('writing-mode');
67
- if (!containerType || !contain || !writingMode) {
66
+ if (!containerType || !writingMode) {
68
67
  return;
69
68
  }
70
69
 
71
- // The final queried axes are the union of both properties.
72
- const queryAxis = getQueryAxis(`${containerType} ${contain}`);
70
+ const queryAxis = getQueryAxisFromContainerType(`${containerType}`);
73
71
  const physicalAxis = getPhysicalAxisFromQueryAxis(queryAxis, writingMode);
74
72
  let width, height;
75
73
  if (physicalAxis === PhysicalAxis.BOTH || physicalAxis === PhysicalAxis.HORIZONTAL) {
@@ -88,28 +86,18 @@ export class CSSContainerQueryContainer {
88
86
  }
89
87
  }
90
88
 
91
- export const getQueryAxis = (propertyValue: string): QueryAxis => {
89
+ export const getQueryAxisFromContainerType = (propertyValue: string): QueryAxis => {
92
90
  const segments = propertyValue.split(' ');
93
91
  let isInline = false;
94
- let isBlock = false;
95
92
  for (const segment of segments) {
96
93
  if (segment === 'size') {
97
94
  return QueryAxis.BOTH;
98
95
  }
99
96
  isInline = isInline || segment === 'inline-size';
100
- isBlock = isBlock || segment === 'block-size';
101
- }
102
-
103
- if (isInline && isBlock) {
104
- return QueryAxis.BOTH;
105
97
  }
106
98
  if (isInline) {
107
99
  return QueryAxis.INLINE;
108
100
  }
109
- if (isBlock) {
110
- return QueryAxis.BLOCK;
111
- }
112
-
113
101
  return QueryAxis.NONE;
114
102
  };
115
103
 
@@ -67,6 +67,8 @@ describe('CSSMatchedStyles', () => {
67
67
  {name: '--baz', value: 'active-baz !important', important: true},
68
68
  {name: '--baz', value: 'passive-baz'},
69
69
  {name: '--dark', value: 'darkgrey'},
70
+ {name: '--empty', value: ''},
71
+ {name: '--empty2', value: 'var(--empty)'},
70
72
  {name: '--light', value: 'lightgrey'},
71
73
  {name: '--theme', value: 'var(--dark)'},
72
74
  {name: '--shadow', value: '1px var(--theme)'},
@@ -110,6 +112,8 @@ describe('CSSMatchedStyles', () => {
110
112
  await testCssValueEquals('--shadow', '1px darkgrey');
111
113
  await testCssValueEquals('--width', '1px');
112
114
  await testCssValueEquals('--diamond', 'active-foo active-foo');
115
+ await testCssValueEquals('--empty', '');
116
+ await testCssValueEquals('--empty2', '');
113
117
  });
114
118
 
115
119
  it('correctly resolves the declaration', async () => {
@@ -1123,8 +1123,8 @@ class DOMInheritanceCascade {
1123
1123
  // The SCC record for the referenced variable may not exist if the var was already computed in a previous
1124
1124
  // iteration. That means it's in a different SCC.
1125
1125
  newChildRecord && record.updateRoot(newChildRecord);
1126
- if (cssVariableValue?.value) {
1127
- return cssVariableValue?.value;
1126
+ if (cssVariableValue?.value !== undefined) {
1127
+ return cssVariableValue.value;
1128
1128
  }
1129
1129
 
1130
1130
  // Variable reference is not resolved, use the fallback.
@@ -1136,7 +1136,7 @@ class DOMInheritanceCascade {
1136
1136
  })]);
1137
1137
 
1138
1138
  const decl = PropertyParser.ASTUtils.siblings(PropertyParser.ASTUtils.declValue(matching.ast.tree));
1139
- const computedText = matching.getComputedTextRange(decl[0], decl[decl.length - 1]);
1139
+ const computedText = decl.length > 0 ? matching.getComputedTextRange(decl[0], decl[decl.length - 1]) : '';
1140
1140
 
1141
1141
  if (record.isRootEntry) {
1142
1142
  // Variables are kept on the stack until all descendents in the same SCC have been visited. That's the case when
@@ -1144,13 +1144,13 @@ class DOMInheritanceCascade {
1144
1144
  const scc = sccRecord.finishSCC(record);
1145
1145
  if (scc.length > 1) {
1146
1146
  for (const entry of scc) {
1147
- console.assert(entry.nodeCascade !== nodeCascade, 'Circles should be within the cascade');
1147
+ console.assert(entry.nodeCascade === nodeCascade, 'Circles should be within the cascade');
1148
1148
  computedCSSVariables.set(entry.name, null);
1149
1149
  }
1150
1150
  return null;
1151
1151
  }
1152
1152
  }
1153
- if (matching.hasUnresolvedVarsRange(decl[0], decl[decl.length - 1])) {
1153
+ if (decl.length > 0 && matching.hasUnresolvedVarsRange(decl[0], decl[decl.length - 1])) {
1154
1154
  computedCSSVariables.set(variableName, null);
1155
1155
  return null;
1156
1156
  }
@@ -200,6 +200,10 @@ export class CSSModel extends SDKModel<EventTypes> {
200
200
  return this.#domModel;
201
201
  }
202
202
 
203
+ async trackComputedStyleUpdatesForNode(nodeId: Protocol.DOM.NodeId|undefined): Promise<void> {
204
+ await this.agent.invoke_trackComputedStyleUpdatesForNode({nodeId});
205
+ }
206
+
203
207
  async setStyleText(
204
208
  styleSheetId: Protocol.CSS.StyleSheetId, range: TextUtils.TextRange.TextRange, text: string,
205
209
  majorChange: boolean): Promise<boolean> {
@@ -651,6 +655,10 @@ export class CSSModel extends SDKModel<EventTypes> {
651
655
  return this.#styleSheetIdToHeader.values();
652
656
  }
653
657
 
658
+ computedStyleUpdated(nodeId: Protocol.DOM.NodeId): void {
659
+ this.dispatchEventToListeners(Events.ComputedStyleUpdated, {nodeId});
660
+ }
661
+
654
662
  styleSheetAdded(header: Protocol.CSS.CSSStyleSheetHeader): void {
655
663
  console.assert(!this.#styleSheetIdToHeader.get(header.styleSheetId));
656
664
  if (header.loadingFailed) {
@@ -900,6 +908,7 @@ export enum Events {
900
908
  StyleSheetAdded = 'StyleSheetAdded',
901
909
  StyleSheetChanged = 'StyleSheetChanged',
902
910
  StyleSheetRemoved = 'StyleSheetRemoved',
911
+ ComputedStyleUpdated = 'ComputedStyleUpdated',
903
912
  /* eslint-enable @typescript-eslint/naming-convention */
904
913
  }
905
914
 
@@ -914,6 +923,10 @@ export interface PseudoStateForcedEvent {
914
923
  enable: boolean;
915
924
  }
916
925
 
926
+ export interface ComputedStyleUpdatedEvent {
927
+ nodeId: Protocol.DOM.NodeId;
928
+ }
929
+
917
930
  export type EventTypes = {
918
931
  [Events.FontsUpdated]: void,
919
932
  [Events.MediaQueryResultChanged]: void,
@@ -923,6 +936,7 @@ export type EventTypes = {
923
936
  [Events.StyleSheetAdded]: CSSStyleSheetHeader,
924
937
  [Events.StyleSheetChanged]: StyleSheetChangedEvent,
925
938
  [Events.StyleSheetRemoved]: CSSStyleSheetHeader,
939
+ [Events.ComputedStyleUpdated]: ComputedStyleUpdatedEvent,
926
940
  };
927
941
 
928
942
  const PseudoStateMarker = 'pseudo-state-marker';
@@ -990,6 +1004,10 @@ class CSSDispatcher implements ProtocolProxyApi.CSSDispatcher {
990
1004
  styleSheetRemoved({styleSheetId}: Protocol.CSS.StyleSheetRemovedEvent): void {
991
1005
  this.#cssModel.styleSheetRemoved(styleSheetId);
992
1006
  }
1007
+
1008
+ computedStyleUpdated({nodeId}: Protocol.CSS.ComputedStyleUpdatedEvent): void {
1009
+ this.#cssModel.computedStyleUpdated(nodeId);
1010
+ }
993
1011
  }
994
1012
 
995
1013
  class ComputedStyleLoader {
@@ -206,11 +206,26 @@ describe('CSSPropertyParser', () => {
206
206
  });
207
207
 
208
208
  it('correctly tokenizes invalid text', () => {
209
- assert.isNull(SDK.CSSPropertyParser.tokenizeDeclaration('--p', ''));
210
209
  assert.isNull(SDK.CSSPropertyParser.tokenizeDeclaration('--p', '/*'));
211
210
  assert.isNull(SDK.CSSPropertyParser.tokenizeDeclaration('--p', '}'));
212
211
  });
213
212
 
213
+ it('correctly tokenizes empty text', () => {
214
+ const ast = tokenizeDeclaration('--p', '');
215
+ const topNode = ast.tree.parent?.parent?.parent;
216
+ assert.exists(topNode);
217
+ assert.strictEqual(Printer.walk(ast.subtree(topNode)).get(), ` StyleSheet: *{--p: ;}
218
+ | RuleSet: *{--p: ;}
219
+ || UniversalSelector: *
220
+ || Block: {--p: ;}
221
+ ||| {
222
+ ||| Declaration: --p:
223
+ |||| VariableName: --p
224
+ |||| :
225
+ ||| ;
226
+ ||| }`);
227
+ });
228
+
214
229
  it('correctly parses property names', () => {
215
230
  assert.strictEqual(tokenizeDeclaration('color /*comment*/', 'red')?.propertyName, 'color');
216
231
  assert.strictEqual(tokenizeDeclaration('/*comment*/color/*comment*/', 'red')?.propertyName, 'color');
@@ -609,11 +609,11 @@ export function tokenizeDeclaration(propertyName: string, propertyValue: string)
609
609
  }
610
610
 
611
611
  const childNodes = ASTUtils.children(decl);
612
- if (childNodes.length < 3) {
612
+ if (childNodes.length < 2) {
613
613
  return null;
614
614
  }
615
615
  const [varName, colon, tree] = childNodes;
616
- if (!varName || varName.type.isError || !colon || colon.type.isError || !tree || tree.type.isError) {
616
+ if (!varName || varName.type.isError || !colon || colon.type.isError || tree?.type.isError) {
617
617
  return null;
618
618
  }
619
619
 
@@ -315,6 +315,11 @@ const UIStrings = {
315
315
  */
316
316
  enableRemoteFileLoading:
317
317
  'Allow `DevTools` to load resources, such as source maps, from remote file paths. Disabled by default for security reasons.',
318
+ /**
319
+ * @description Tooltip text for a setting that controls the network cache. Disabling the network cache can simulate the network connections of users that are visiting a page for the first time.
320
+ */
321
+ networkCacheExplanation:
322
+ 'Disabling the network cache will simulate a network experience similar to a first time visitor.',
318
323
  };
319
324
  const str_ = i18n.i18n.registerUIStrings('core/sdk/sdk-meta.ts', UIStrings);
320
325
  const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
@@ -1040,6 +1045,9 @@ Common.Settings.registerSettingExtension({
1040
1045
  title: i18nLazyString(UIStrings.enableCache),
1041
1046
  },
1042
1047
  ],
1048
+ learnMore: {
1049
+ tooltip: i18nLazyString(UIStrings.networkCacheExplanation),
1050
+ },
1043
1051
  });
1044
1052
 
1045
1053
  Common.Settings.registerSettingExtension({
@@ -1333,7 +1333,7 @@ export abstract class HeapSnapshot {
1333
1333
  selfSizes[i] = node.selfSize();
1334
1334
  }
1335
1335
 
1336
- result[classKey] = {indexes, ids, selfSizes};
1336
+ result[classKey] = {name: node.className(), indexes, ids, selfSizes};
1337
1337
  }
1338
1338
 
1339
1339
  this.#aggregatesForDiffInternal = {interfaceDefinitions, aggregates: result};
@@ -2469,7 +2469,7 @@ export abstract class HeapSnapshot {
2469
2469
 
2470
2470
  private calculateDiffForClass(
2471
2471
  baseAggregate: HeapSnapshotModel.HeapSnapshotModel.AggregateForDiff,
2472
- aggregate: HeapSnapshotModel.HeapSnapshotModel.Aggregate): HeapSnapshotModel.HeapSnapshotModel.Diff|null {
2472
+ aggregate?: HeapSnapshotModel.HeapSnapshotModel.Aggregate): HeapSnapshotModel.HeapSnapshotModel.Diff|null {
2473
2473
  const baseIds = baseAggregate.ids;
2474
2474
  const baseIndexes = baseAggregate.indexes;
2475
2475
  const baseSelfSizes = baseAggregate.selfSizes;
@@ -2480,7 +2480,7 @@ export abstract class HeapSnapshot {
2480
2480
  let j = 0;
2481
2481
  const l = baseIds.length;
2482
2482
  const m = indexes.length;
2483
- const diff = new HeapSnapshotModel.HeapSnapshotModel.Diff(aggregate.name);
2483
+ const diff = new HeapSnapshotModel.HeapSnapshotModel.Diff(aggregate ? aggregate.name : baseAggregate.name);
2484
2484
 
2485
2485
  const nodeB = this.createNode(indexes[j]);
2486
2486
  while (i < l && j < m) {
@@ -4,6 +4,10 @@
4
4
 
5
5
  export const config = {
6
6
  "attributes": [
7
+ {
8
+ "name": "aria-actions",
9
+ "type": "IDREF_list"
10
+ },
7
11
  {
8
12
  "name": "aria-activedescendant",
9
13
  "type": "IDREF"
@@ -44,7 +44,7 @@ export function registerCommands(inspectorBackend) {
44
44
  inspectorBackend.registerEnum("Accessibility.AXValueType", {Boolean: "boolean", Tristate: "tristate", BooleanOrUndefined: "booleanOrUndefined", Idref: "idref", IdrefList: "idrefList", Integer: "integer", Node: "node", NodeList: "nodeList", Number: "number", String: "string", ComputedString: "computedString", Token: "token", TokenList: "tokenList", DomRelation: "domRelation", Role: "role", InternalRole: "internalRole", ValueUndefined: "valueUndefined"});
45
45
  inspectorBackend.registerEnum("Accessibility.AXValueSourceType", {Attribute: "attribute", Implicit: "implicit", Style: "style", Contents: "contents", Placeholder: "placeholder", RelatedElement: "relatedElement"});
46
46
  inspectorBackend.registerEnum("Accessibility.AXValueNativeSourceType", {Description: "description", Figcaption: "figcaption", Label: "label", Labelfor: "labelfor", Labelwrapped: "labelwrapped", Legend: "legend", Rubyannotation: "rubyannotation", Tablecaption: "tablecaption", Title: "title", Other: "other"});
47
- inspectorBackend.registerEnum("Accessibility.AXPropertyName", {Busy: "busy", Disabled: "disabled", Editable: "editable", Focusable: "focusable", Focused: "focused", Hidden: "hidden", HiddenRoot: "hiddenRoot", Invalid: "invalid", Keyshortcuts: "keyshortcuts", Settable: "settable", Roledescription: "roledescription", Live: "live", Atomic: "atomic", Relevant: "relevant", Root: "root", Autocomplete: "autocomplete", HasPopup: "hasPopup", Level: "level", Multiselectable: "multiselectable", Orientation: "orientation", Multiline: "multiline", Readonly: "readonly", Required: "required", Valuemin: "valuemin", Valuemax: "valuemax", Valuetext: "valuetext", Checked: "checked", Expanded: "expanded", Modal: "modal", Pressed: "pressed", Selected: "selected", Activedescendant: "activedescendant", Controls: "controls", Describedby: "describedby", Details: "details", Errormessage: "errormessage", Flowto: "flowto", Labelledby: "labelledby", Owns: "owns", Url: "url"});
47
+ inspectorBackend.registerEnum("Accessibility.AXPropertyName", {Actions: "actions", Busy: "busy", Disabled: "disabled", Editable: "editable", Focusable: "focusable", Focused: "focused", Hidden: "hidden", HiddenRoot: "hiddenRoot", Invalid: "invalid", Keyshortcuts: "keyshortcuts", Settable: "settable", Roledescription: "roledescription", Live: "live", Atomic: "atomic", Relevant: "relevant", Root: "root", Autocomplete: "autocomplete", HasPopup: "hasPopup", Level: "level", Multiselectable: "multiselectable", Orientation: "orientation", Multiline: "multiline", Readonly: "readonly", Required: "required", Valuemin: "valuemin", Valuemax: "valuemax", Valuetext: "valuetext", Checked: "checked", Expanded: "expanded", Modal: "modal", Pressed: "pressed", Selected: "selected", Activedescendant: "activedescendant", Controls: "controls", Describedby: "describedby", Details: "details", Errormessage: "errormessage", Flowto: "flowto", Labelledby: "labelledby", Owns: "owns", Url: "url"});
48
48
  inspectorBackend.registerEvent("Accessibility.loadComplete", ["root"]);
49
49
  inspectorBackend.registerEvent("Accessibility.nodesUpdated", ["nodes"]);
50
50
  inspectorBackend.registerCommand("Accessibility.disable", [], [], "Disables the accessibility domain.");
@@ -84,7 +84,7 @@ inspectorBackend.registerType("Animation.KeyframesRule", [{"name": "name", "type
84
84
  inspectorBackend.registerType("Animation.KeyframeStyle", [{"name": "offset", "type": "string", "optional": false, "description": "Keyframe's time offset.", "typeRef": null}, {"name": "easing", "type": "string", "optional": false, "description": "`AnimationEffect`'s timing function.", "typeRef": null}]);
85
85
 
86
86
  // Audits.
87
- inspectorBackend.registerEnum("Audits.CookieExclusionReason", {ExcludeSameSiteUnspecifiedTreatedAsLax: "ExcludeSameSiteUnspecifiedTreatedAsLax", ExcludeSameSiteNoneInsecure: "ExcludeSameSiteNoneInsecure", ExcludeSameSiteLax: "ExcludeSameSiteLax", ExcludeSameSiteStrict: "ExcludeSameSiteStrict", ExcludeInvalidSameParty: "ExcludeInvalidSameParty", ExcludeSamePartyCrossPartyContext: "ExcludeSamePartyCrossPartyContext", ExcludeDomainNonASCII: "ExcludeDomainNonASCII", ExcludeThirdPartyCookieBlockedInFirstPartySet: "ExcludeThirdPartyCookieBlockedInFirstPartySet", ExcludeThirdPartyPhaseout: "ExcludeThirdPartyPhaseout"});
87
+ inspectorBackend.registerEnum("Audits.CookieExclusionReason", {ExcludeSameSiteUnspecifiedTreatedAsLax: "ExcludeSameSiteUnspecifiedTreatedAsLax", ExcludeSameSiteNoneInsecure: "ExcludeSameSiteNoneInsecure", ExcludeSameSiteLax: "ExcludeSameSiteLax", ExcludeSameSiteStrict: "ExcludeSameSiteStrict", ExcludeInvalidSameParty: "ExcludeInvalidSameParty", ExcludeSamePartyCrossPartyContext: "ExcludeSamePartyCrossPartyContext", ExcludeDomainNonASCII: "ExcludeDomainNonASCII", ExcludeThirdPartyCookieBlockedInFirstPartySet: "ExcludeThirdPartyCookieBlockedInFirstPartySet", ExcludeThirdPartyPhaseout: "ExcludeThirdPartyPhaseout", ExcludePortMismatch: "ExcludePortMismatch", ExcludeSchemeMismatch: "ExcludeSchemeMismatch"});
88
88
  inspectorBackend.registerEnum("Audits.CookieWarningReason", {WarnSameSiteUnspecifiedCrossSiteContext: "WarnSameSiteUnspecifiedCrossSiteContext", WarnSameSiteNoneInsecure: "WarnSameSiteNoneInsecure", WarnSameSiteUnspecifiedLaxAllowUnsafe: "WarnSameSiteUnspecifiedLaxAllowUnsafe", WarnSameSiteStrictLaxDowngradeStrict: "WarnSameSiteStrictLaxDowngradeStrict", WarnSameSiteStrictCrossDowngradeStrict: "WarnSameSiteStrictCrossDowngradeStrict", WarnSameSiteStrictCrossDowngradeLax: "WarnSameSiteStrictCrossDowngradeLax", WarnSameSiteLaxCrossDowngradeStrict: "WarnSameSiteLaxCrossDowngradeStrict", WarnSameSiteLaxCrossDowngradeLax: "WarnSameSiteLaxCrossDowngradeLax", WarnAttributeValueExceedsMaxSize: "WarnAttributeValueExceedsMaxSize", WarnDomainNonASCII: "WarnDomainNonASCII", WarnThirdPartyPhaseout: "WarnThirdPartyPhaseout", WarnCrossSiteRedirectDowngradeChangesInclusion: "WarnCrossSiteRedirectDowngradeChangesInclusion", WarnDeprecationTrialMetadata: "WarnDeprecationTrialMetadata", WarnThirdPartyCookieHeuristic: "WarnThirdPartyCookieHeuristic"});
89
89
  inspectorBackend.registerEnum("Audits.CookieOperation", {SetCookie: "SetCookie", ReadCookie: "ReadCookie"});
90
90
  inspectorBackend.registerEnum("Audits.MixedContentResolutionStatus", {MixedContentBlocked: "MixedContentBlocked", MixedContentAutomaticallyUpgraded: "MixedContentAutomaticallyUpgraded", MixedContentWarning: "MixedContentWarning"});
@@ -213,6 +213,7 @@ inspectorBackend.registerEvent("CSS.mediaQueryResultChanged", []);
213
213
  inspectorBackend.registerEvent("CSS.styleSheetAdded", ["header"]);
214
214
  inspectorBackend.registerEvent("CSS.styleSheetChanged", ["styleSheetId"]);
215
215
  inspectorBackend.registerEvent("CSS.styleSheetRemoved", ["styleSheetId"]);
216
+ inspectorBackend.registerEvent("CSS.computedStyleUpdated", ["nodeId"]);
216
217
  inspectorBackend.registerCommand("CSS.addRule", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "The css style sheet identifier where a new rule should be inserted.", "typeRef": "CSS.StyleSheetId"}, {"name": "ruleText", "type": "string", "optional": false, "description": "The text of a new rule.", "typeRef": null}, {"name": "location", "type": "object", "optional": false, "description": "Text position of a new rule in the target style sheet.", "typeRef": "CSS.SourceRange"}, {"name": "nodeForPropertySyntaxValidation", "type": "number", "optional": true, "description": "NodeId for the DOM node in whose context custom property declarations for registered properties should be validated. If omitted, declarations in the new rule text can only be validated statically, which may produce incorrect results if the declaration contains a var() for example.", "typeRef": "DOM.NodeId"}], ["rule"], "Inserts a new rule with the given `ruleText` in a stylesheet with given `styleSheetId`, at the position specified by `location`.");
217
218
  inspectorBackend.registerCommand("CSS.collectClassNames", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "", "typeRef": "CSS.StyleSheetId"}], ["classNames"], "Returns all class names from specified stylesheet.");
218
219
  inspectorBackend.registerCommand("CSS.createStyleSheet", [{"name": "frameId", "type": "string", "optional": false, "description": "Identifier of the frame where \\\"via-inspector\\\" stylesheet should be created.", "typeRef": "Page.FrameId"}], ["styleSheetId"], "Creates a new special \"via-inspector\" stylesheet in the frame with given `frameId`.");
@@ -228,6 +229,7 @@ inspectorBackend.registerCommand("CSS.getPlatformFontsForNode", [{"name": "nodeI
228
229
  inspectorBackend.registerCommand("CSS.getStyleSheetText", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "", "typeRef": "CSS.StyleSheetId"}], ["text"], "Returns the current textual content for a stylesheet.");
229
230
  inspectorBackend.registerCommand("CSS.getLayersForNode", [{"name": "nodeId", "type": "number", "optional": false, "description": "", "typeRef": "DOM.NodeId"}], ["rootLayer"], "Returns all layers parsed by the rendering engine for the tree scope of a node. Given a DOM element identified by nodeId, getLayersForNode returns the root layer for the nearest ancestor document or shadow root. The layer root contains the full layer tree for the tree scope and their ordering.");
230
231
  inspectorBackend.registerCommand("CSS.getLocationForSelector", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "", "typeRef": "CSS.StyleSheetId"}, {"name": "selectorText", "type": "string", "optional": false, "description": "", "typeRef": null}], ["ranges"], "Given a CSS selector text and a style sheet ID, getLocationForSelector returns an array of locations of the CSS selector in the style sheet.");
232
+ inspectorBackend.registerCommand("CSS.trackComputedStyleUpdatesForNode", [{"name": "nodeId", "type": "number", "optional": true, "description": "", "typeRef": "DOM.NodeId"}], [], "Starts tracking the given node for the computed style updates and whenever the computed style is updated for node, it queues a `computedStyleUpdated` event with throttling. There can only be 1 node tracked for computed style updates so passing a new node id removes tracking from the previous node. Pass `undefined` to disable tracking.");
231
233
  inspectorBackend.registerCommand("CSS.trackComputedStyleUpdates", [{"name": "propertiesToTrack", "type": "array", "optional": false, "description": "", "typeRef": "CSS.CSSComputedStyleProperty"}], [], "Starts tracking the given computed styles for updates. The specified array of properties replaces the one previously specified. Pass empty array to disable tracking. Use takeComputedStyleUpdates to retrieve the list of nodes that had properties modified. The changes to computed style properties are only tracked for nodes pushed to the front-end by the DOM agent. If no changes to the tracked properties occur after the node has been pushed to the front-end, no updates will be issued for the node.");
232
234
  inspectorBackend.registerCommand("CSS.takeComputedStyleUpdates", [], ["nodeIds"], "Polls the next batch of computed style updates.");
233
235
  inspectorBackend.registerCommand("CSS.setEffectivePropertyValueForNode", [{"name": "nodeId", "type": "number", "optional": false, "description": "The element id for which to set property.", "typeRef": "DOM.NodeId"}, {"name": "propertyName", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "value", "type": "string", "optional": false, "description": "", "typeRef": null}], [], "Find a rule with the given active property for the given node and set the new value for this property");
@@ -304,7 +306,7 @@ inspectorBackend.registerCommand("Cast.stopCasting", [{"name": "sinkName", "type
304
306
  inspectorBackend.registerType("Cast.Sink", [{"name": "name", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "id", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "session", "type": "string", "optional": true, "description": "Text describing the current session. Present only if there is an active session on the sink.", "typeRef": null}]);
305
307
 
306
308
  // DOM.
307
- inspectorBackend.registerEnum("DOM.PseudoType", {FirstLine: "first-line", FirstLetter: "first-letter", Check: "check", Before: "before", After: "after", Marker: "marker", Backdrop: "backdrop", Column: "column", Selection: "selection", SearchText: "search-text", TargetText: "target-text", SpellingError: "spelling-error", GrammarError: "grammar-error", Highlight: "highlight", FirstLineInherited: "first-line-inherited", ScrollMarker: "scroll-marker", ScrollMarkerGroup: "scroll-marker-group", ScrollNextButton: "scroll-next-button", ScrollPrevButton: "scroll-prev-button", Scrollbar: "scrollbar", ScrollbarThumb: "scrollbar-thumb", ScrollbarButton: "scrollbar-button", ScrollbarTrack: "scrollbar-track", ScrollbarTrackPiece: "scrollbar-track-piece", ScrollbarCorner: "scrollbar-corner", Resizer: "resizer", InputListButton: "input-list-button", ViewTransition: "view-transition", ViewTransitionGroup: "view-transition-group", ViewTransitionImagePair: "view-transition-image-pair", ViewTransitionOld: "view-transition-old", ViewTransitionNew: "view-transition-new", Placeholder: "placeholder", FileSelectorButton: "file-selector-button", DetailsContent: "details-content", Picker: "picker"});
309
+ inspectorBackend.registerEnum("DOM.PseudoType", {FirstLine: "first-line", FirstLetter: "first-letter", Check: "check", Before: "before", After: "after", SelectArrow: "select-arrow", Marker: "marker", Backdrop: "backdrop", Column: "column", Selection: "selection", SearchText: "search-text", TargetText: "target-text", SpellingError: "spelling-error", GrammarError: "grammar-error", Highlight: "highlight", FirstLineInherited: "first-line-inherited", ScrollMarker: "scroll-marker", ScrollMarkerGroup: "scroll-marker-group", ScrollNextButton: "scroll-next-button", ScrollPrevButton: "scroll-prev-button", Scrollbar: "scrollbar", ScrollbarThumb: "scrollbar-thumb", ScrollbarButton: "scrollbar-button", ScrollbarTrack: "scrollbar-track", ScrollbarTrackPiece: "scrollbar-track-piece", ScrollbarCorner: "scrollbar-corner", Resizer: "resizer", InputListButton: "input-list-button", ViewTransition: "view-transition", ViewTransitionGroup: "view-transition-group", ViewTransitionImagePair: "view-transition-image-pair", ViewTransitionOld: "view-transition-old", ViewTransitionNew: "view-transition-new", Placeholder: "placeholder", FileSelectorButton: "file-selector-button", DetailsContent: "details-content", Picker: "picker"});
308
310
  inspectorBackend.registerEnum("DOM.ShadowRootType", {UserAgent: "user-agent", Open: "open", Closed: "closed"});
309
311
  inspectorBackend.registerEnum("DOM.CompatibilityMode", {QuirksMode: "QuirksMode", LimitedQuirksMode: "LimitedQuirksMode", NoQuirksMode: "NoQuirksMode"});
310
312
  inspectorBackend.registerEnum("DOM.PhysicalAxes", {Horizontal: "Horizontal", Vertical: "Vertical", Both: "Both"});
@@ -660,7 +662,7 @@ inspectorBackend.registerEnum("Network.AlternateProtocolUsage", {AlternativeJobW
660
662
  inspectorBackend.registerEnum("Network.ServiceWorkerRouterSource", {Network: "network", Cache: "cache", FetchEvent: "fetch-event", RaceNetworkAndFetchHandler: "race-network-and-fetch-handler"});
661
663
  inspectorBackend.registerEnum("Network.InitiatorType", {Parser: "parser", Script: "script", Preload: "preload", SignedExchange: "SignedExchange", Preflight: "preflight", Other: "other"});
662
664
  inspectorBackend.registerEnum("Network.SetCookieBlockedReason", {SecureOnly: "SecureOnly", SameSiteStrict: "SameSiteStrict", SameSiteLax: "SameSiteLax", SameSiteUnspecifiedTreatedAsLax: "SameSiteUnspecifiedTreatedAsLax", SameSiteNoneInsecure: "SameSiteNoneInsecure", UserPreferences: "UserPreferences", ThirdPartyPhaseout: "ThirdPartyPhaseout", ThirdPartyBlockedInFirstPartySet: "ThirdPartyBlockedInFirstPartySet", SyntaxError: "SyntaxError", SchemeNotSupported: "SchemeNotSupported", OverwriteSecure: "OverwriteSecure", InvalidDomain: "InvalidDomain", InvalidPrefix: "InvalidPrefix", UnknownError: "UnknownError", SchemefulSameSiteStrict: "SchemefulSameSiteStrict", SchemefulSameSiteLax: "SchemefulSameSiteLax", SchemefulSameSiteUnspecifiedTreatedAsLax: "SchemefulSameSiteUnspecifiedTreatedAsLax", SamePartyFromCrossPartyContext: "SamePartyFromCrossPartyContext", SamePartyConflictsWithOtherAttributes: "SamePartyConflictsWithOtherAttributes", NameValuePairExceedsMaxSize: "NameValuePairExceedsMaxSize", DisallowedCharacter: "DisallowedCharacter", NoCookieContent: "NoCookieContent"});
663
- inspectorBackend.registerEnum("Network.CookieBlockedReason", {SecureOnly: "SecureOnly", NotOnPath: "NotOnPath", DomainMismatch: "DomainMismatch", SameSiteStrict: "SameSiteStrict", SameSiteLax: "SameSiteLax", SameSiteUnspecifiedTreatedAsLax: "SameSiteUnspecifiedTreatedAsLax", SameSiteNoneInsecure: "SameSiteNoneInsecure", UserPreferences: "UserPreferences", ThirdPartyPhaseout: "ThirdPartyPhaseout", ThirdPartyBlockedInFirstPartySet: "ThirdPartyBlockedInFirstPartySet", UnknownError: "UnknownError", SchemefulSameSiteStrict: "SchemefulSameSiteStrict", SchemefulSameSiteLax: "SchemefulSameSiteLax", SchemefulSameSiteUnspecifiedTreatedAsLax: "SchemefulSameSiteUnspecifiedTreatedAsLax", SamePartyFromCrossPartyContext: "SamePartyFromCrossPartyContext", NameValuePairExceedsMaxSize: "NameValuePairExceedsMaxSize"});
665
+ inspectorBackend.registerEnum("Network.CookieBlockedReason", {SecureOnly: "SecureOnly", NotOnPath: "NotOnPath", DomainMismatch: "DomainMismatch", SameSiteStrict: "SameSiteStrict", SameSiteLax: "SameSiteLax", SameSiteUnspecifiedTreatedAsLax: "SameSiteUnspecifiedTreatedAsLax", SameSiteNoneInsecure: "SameSiteNoneInsecure", UserPreferences: "UserPreferences", ThirdPartyPhaseout: "ThirdPartyPhaseout", ThirdPartyBlockedInFirstPartySet: "ThirdPartyBlockedInFirstPartySet", UnknownError: "UnknownError", SchemefulSameSiteStrict: "SchemefulSameSiteStrict", SchemefulSameSiteLax: "SchemefulSameSiteLax", SchemefulSameSiteUnspecifiedTreatedAsLax: "SchemefulSameSiteUnspecifiedTreatedAsLax", SamePartyFromCrossPartyContext: "SamePartyFromCrossPartyContext", NameValuePairExceedsMaxSize: "NameValuePairExceedsMaxSize", PortMismatch: "PortMismatch", SchemeMismatch: "SchemeMismatch"});
664
666
  inspectorBackend.registerEnum("Network.CookieExemptionReason", {None: "None", UserSetting: "UserSetting", TPCDMetadata: "TPCDMetadata", TPCDDeprecationTrial: "TPCDDeprecationTrial", TopLevelTPCDDeprecationTrial: "TopLevelTPCDDeprecationTrial", TPCDHeuristics: "TPCDHeuristics", EnterprisePolicy: "EnterprisePolicy", StorageAccess: "StorageAccess", TopLevelStorageAccess: "TopLevelStorageAccess", Scheme: "Scheme"});
665
667
  inspectorBackend.registerEnum("Network.AuthChallengeSource", {Server: "Server", Proxy: "Proxy"});
666
668
  inspectorBackend.registerEnum("Network.AuthChallengeResponseResponse", {Default: "Default", CancelAuth: "CancelAuth", ProvideCredentials: "ProvideCredentials"});
@@ -753,7 +755,7 @@ inspectorBackend.registerType("Network.WebSocketRequest", [{"name": "headers", "
753
755
  inspectorBackend.registerType("Network.WebSocketResponse", [{"name": "status", "type": "number", "optional": false, "description": "HTTP response status code.", "typeRef": null}, {"name": "statusText", "type": "string", "optional": false, "description": "HTTP response status text.", "typeRef": null}, {"name": "headers", "type": "object", "optional": false, "description": "HTTP response headers.", "typeRef": "Network.Headers"}, {"name": "headersText", "type": "string", "optional": true, "description": "HTTP response headers text.", "typeRef": null}, {"name": "requestHeaders", "type": "object", "optional": true, "description": "HTTP request headers.", "typeRef": "Network.Headers"}, {"name": "requestHeadersText", "type": "string", "optional": true, "description": "HTTP request headers text.", "typeRef": null}]);
754
756
  inspectorBackend.registerType("Network.WebSocketFrame", [{"name": "opcode", "type": "number", "optional": false, "description": "WebSocket message opcode.", "typeRef": null}, {"name": "mask", "type": "boolean", "optional": false, "description": "WebSocket message mask.", "typeRef": null}, {"name": "payloadData", "type": "string", "optional": false, "description": "WebSocket message payload data. If the opcode is 1, this is a text message and payloadData is a UTF-8 string. If the opcode isn't 1, then payloadData is a base64 encoded string representing binary data.", "typeRef": null}]);
755
757
  inspectorBackend.registerType("Network.CachedResource", [{"name": "url", "type": "string", "optional": false, "description": "Resource URL. This is the url of the original network request.", "typeRef": null}, {"name": "type", "type": "string", "optional": false, "description": "Type of this resource.", "typeRef": "Network.ResourceType"}, {"name": "response", "type": "object", "optional": true, "description": "Cached response data.", "typeRef": "Network.Response"}, {"name": "bodySize", "type": "number", "optional": false, "description": "Cached response body size.", "typeRef": null}]);
756
- inspectorBackend.registerType("Network.Initiator", [{"name": "type", "type": "string", "optional": false, "description": "Type of this initiator.", "typeRef": null}, {"name": "stack", "type": "object", "optional": true, "description": "Initiator JavaScript stack trace, set for Script only.", "typeRef": "Runtime.StackTrace"}, {"name": "url", "type": "string", "optional": true, "description": "Initiator URL, set for Parser type or for Script type (when script is importing module) or for SignedExchange type.", "typeRef": null}, {"name": "lineNumber", "type": "number", "optional": true, "description": "Initiator line number, set for Parser type or for Script type (when script is importing module) (0-based).", "typeRef": null}, {"name": "columnNumber", "type": "number", "optional": true, "description": "Initiator column number, set for Parser type or for Script type (when script is importing module) (0-based).", "typeRef": null}, {"name": "requestId", "type": "string", "optional": true, "description": "Set if another request triggered this request (e.g. preflight).", "typeRef": "Network.RequestId"}]);
758
+ inspectorBackend.registerType("Network.Initiator", [{"name": "type", "type": "string", "optional": false, "description": "Type of this initiator.", "typeRef": null}, {"name": "stack", "type": "object", "optional": true, "description": "Initiator JavaScript stack trace, set for Script only. Requires the Debugger domain to be enabled.", "typeRef": "Runtime.StackTrace"}, {"name": "url", "type": "string", "optional": true, "description": "Initiator URL, set for Parser type or for Script type (when script is importing module) or for SignedExchange type.", "typeRef": null}, {"name": "lineNumber", "type": "number", "optional": true, "description": "Initiator line number, set for Parser type or for Script type (when script is importing module) (0-based).", "typeRef": null}, {"name": "columnNumber", "type": "number", "optional": true, "description": "Initiator column number, set for Parser type or for Script type (when script is importing module) (0-based).", "typeRef": null}, {"name": "requestId", "type": "string", "optional": true, "description": "Set if another request triggered this request (e.g. preflight).", "typeRef": "Network.RequestId"}]);
757
759
  inspectorBackend.registerType("Network.CookiePartitionKey", [{"name": "topLevelSite", "type": "string", "optional": false, "description": "The site of the top-level URL the browser was visiting at the start of the request to the endpoint that set the cookie.", "typeRef": null}, {"name": "hasCrossSiteAncestor", "type": "boolean", "optional": false, "description": "Indicates if the cookie has any ancestors that are cross-site to the topLevelSite.", "typeRef": null}]);
758
760
  inspectorBackend.registerType("Network.Cookie", [{"name": "name", "type": "string", "optional": false, "description": "Cookie name.", "typeRef": null}, {"name": "value", "type": "string", "optional": false, "description": "Cookie value.", "typeRef": null}, {"name": "domain", "type": "string", "optional": false, "description": "Cookie domain.", "typeRef": null}, {"name": "path", "type": "string", "optional": false, "description": "Cookie path.", "typeRef": null}, {"name": "expires", "type": "number", "optional": false, "description": "Cookie expiration date as the number of seconds since the UNIX epoch.", "typeRef": null}, {"name": "size", "type": "number", "optional": false, "description": "Cookie size.", "typeRef": null}, {"name": "httpOnly", "type": "boolean", "optional": false, "description": "True if cookie is http-only.", "typeRef": null}, {"name": "secure", "type": "boolean", "optional": false, "description": "True if cookie is secure.", "typeRef": null}, {"name": "session", "type": "boolean", "optional": false, "description": "True in case of session cookie.", "typeRef": null}, {"name": "sameSite", "type": "string", "optional": true, "description": "Cookie SameSite type.", "typeRef": "Network.CookieSameSite"}, {"name": "priority", "type": "string", "optional": false, "description": "Cookie Priority", "typeRef": "Network.CookiePriority"}, {"name": "sameParty", "type": "boolean", "optional": false, "description": "True if cookie is SameParty.", "typeRef": null}, {"name": "sourceScheme", "type": "string", "optional": false, "description": "Cookie source scheme type.", "typeRef": "Network.CookieSourceScheme"}, {"name": "sourcePort", "type": "number", "optional": false, "description": "Cookie source port. Valid values are {-1, [1, 65535]}, -1 indicates an unspecified port. An unspecified port value allows protocol clients to emulate legacy cookie scope for the port. This is a temporary ability and it will be removed in the future.", "typeRef": null}, {"name": "partitionKey", "type": "object", "optional": true, "description": "Cookie partition key.", "typeRef": "Network.CookiePartitionKey"}, {"name": "partitionKeyOpaque", "type": "boolean", "optional": true, "description": "True if cookie partition key is opaque.", "typeRef": null}]);
759
761
  inspectorBackend.registerType("Network.BlockedSetCookieWithReason", [{"name": "blockedReasons", "type": "array", "optional": false, "description": "The reason(s) this cookie was blocked.", "typeRef": "Network.SetCookieBlockedReason"}, {"name": "cookieLine", "type": "string", "optional": false, "description": "The string representing this individual cookie as it would appear in the header. This is not the entire \\\"cookie\\\" or \\\"set-cookie\\\" header which could have multiple cookies.", "typeRef": null}, {"name": "cookie", "type": "object", "optional": true, "description": "The cookie object which represents the cookie which was not stored. It is optional because sometimes complete cookie information is not available, such as in the case of parsing errors.", "typeRef": "Network.Cookie"}]);
@@ -1063,7 +1065,7 @@ inspectorBackend.registerEnum("Storage.AttributionReportingTriggerDataMatching",
1063
1065
  inspectorBackend.registerEnum("Storage.AttributionReportingSourceRegistrationResult", {Success: "success", InternalError: "internalError", InsufficientSourceCapacity: "insufficientSourceCapacity", InsufficientUniqueDestinationCapacity: "insufficientUniqueDestinationCapacity", ExcessiveReportingOrigins: "excessiveReportingOrigins", ProhibitedByBrowserPolicy: "prohibitedByBrowserPolicy", SuccessNoised: "successNoised", DestinationReportingLimitReached: "destinationReportingLimitReached", DestinationGlobalLimitReached: "destinationGlobalLimitReached", DestinationBothLimitsReached: "destinationBothLimitsReached", ReportingOriginsPerSiteLimitReached: "reportingOriginsPerSiteLimitReached", ExceedsMaxChannelCapacity: "exceedsMaxChannelCapacity", ExceedsMaxScopesChannelCapacity: "exceedsMaxScopesChannelCapacity", ExceedsMaxTriggerStateCardinality: "exceedsMaxTriggerStateCardinality", ExceedsMaxEventStatesLimit: "exceedsMaxEventStatesLimit", DestinationPerDayReportingLimitReached: "destinationPerDayReportingLimitReached"});
1064
1066
  inspectorBackend.registerEnum("Storage.AttributionReportingSourceRegistrationTimeConfig", {Include: "include", Exclude: "exclude"});
1065
1067
  inspectorBackend.registerEnum("Storage.AttributionReportingEventLevelResult", {Success: "success", SuccessDroppedLowerPriority: "successDroppedLowerPriority", InternalError: "internalError", NoCapacityForAttributionDestination: "noCapacityForAttributionDestination", NoMatchingSources: "noMatchingSources", Deduplicated: "deduplicated", ExcessiveAttributions: "excessiveAttributions", PriorityTooLow: "priorityTooLow", NeverAttributedSource: "neverAttributedSource", ExcessiveReportingOrigins: "excessiveReportingOrigins", NoMatchingSourceFilterData: "noMatchingSourceFilterData", ProhibitedByBrowserPolicy: "prohibitedByBrowserPolicy", NoMatchingConfigurations: "noMatchingConfigurations", ExcessiveReports: "excessiveReports", FalselyAttributedSource: "falselyAttributedSource", ReportWindowPassed: "reportWindowPassed", NotRegistered: "notRegistered", ReportWindowNotStarted: "reportWindowNotStarted", NoMatchingTriggerData: "noMatchingTriggerData"});
1066
- inspectorBackend.registerEnum("Storage.AttributionReportingAggregatableResult", {Success: "success", InternalError: "internalError", NoCapacityForAttributionDestination: "noCapacityForAttributionDestination", NoMatchingSources: "noMatchingSources", ExcessiveAttributions: "excessiveAttributions", ExcessiveReportingOrigins: "excessiveReportingOrigins", NoHistograms: "noHistograms", InsufficientBudget: "insufficientBudget", NoMatchingSourceFilterData: "noMatchingSourceFilterData", NotRegistered: "notRegistered", ProhibitedByBrowserPolicy: "prohibitedByBrowserPolicy", Deduplicated: "deduplicated", ReportWindowPassed: "reportWindowPassed", ExcessiveReports: "excessiveReports"});
1068
+ inspectorBackend.registerEnum("Storage.AttributionReportingAggregatableResult", {Success: "success", InternalError: "internalError", NoCapacityForAttributionDestination: "noCapacityForAttributionDestination", NoMatchingSources: "noMatchingSources", ExcessiveAttributions: "excessiveAttributions", ExcessiveReportingOrigins: "excessiveReportingOrigins", NoHistograms: "noHistograms", InsufficientBudget: "insufficientBudget", InsufficientNamedBudget: "insufficientNamedBudget", NoMatchingSourceFilterData: "noMatchingSourceFilterData", NotRegistered: "notRegistered", ProhibitedByBrowserPolicy: "prohibitedByBrowserPolicy", Deduplicated: "deduplicated", ReportWindowPassed: "reportWindowPassed", ExcessiveReports: "excessiveReports"});
1067
1069
  inspectorBackend.registerEvent("Storage.cacheStorageContentUpdated", ["origin", "storageKey", "bucketId", "cacheName"]);
1068
1070
  inspectorBackend.registerEvent("Storage.cacheStorageListUpdated", ["origin", "storageKey", "bucketId"]);
1069
1071
  inspectorBackend.registerEvent("Storage.indexedDBContentUpdated", ["origin", "storageKey", "bucketId", "databaseName", "objectStoreName"]);
@@ -519,6 +519,7 @@ export const generatedProperties = [
519
519
  "inset-block-start",
520
520
  "inset-inline-end",
521
521
  "inset-inline-start",
522
+ "interactivity",
522
523
  "interpolate-size",
523
524
  "isolation",
524
525
  "justify-content",
@@ -2528,6 +2529,14 @@ export const generatedProperties = [
2528
2529
  {
2529
2530
  "name": "inset-inline-start"
2530
2531
  },
2532
+ {
2533
+ "inherited": true,
2534
+ "keywords": [
2535
+ "auto",
2536
+ "inert"
2537
+ ],
2538
+ "name": "interactivity"
2539
+ },
2531
2540
  {
2532
2541
  "inherited": true,
2533
2542
  "keywords": [
@@ -4223,8 +4232,7 @@ export const generatedProperties = [
4223
4232
  "keywords": [
4224
4233
  "visible",
4225
4234
  "hidden",
4226
- "collapse",
4227
- "inert"
4235
+ "collapse"
4228
4236
  ],
4229
4237
  "name": "visibility"
4230
4238
  },
@@ -5440,6 +5448,12 @@ export const generatedPropertyValues = {
5440
5448
  "all"
5441
5449
  ]
5442
5450
  },
5451
+ "interactivity": {
5452
+ "values": [
5453
+ "auto",
5454
+ "inert"
5455
+ ]
5456
+ },
5443
5457
  "interpolate-size": {
5444
5458
  "values": [
5445
5459
  "numeric-only",
@@ -6377,8 +6391,7 @@ export const generatedPropertyValues = {
6377
6391
  "values": [
6378
6392
  "visible",
6379
6393
  "hidden",
6380
- "collapse",
6381
- "inert"
6394
+ "collapse"
6382
6395
  ]
6383
6396
  },
6384
6397
  "white-space-collapse": {