chrome-devtools-frontend 1.0.944427 → 1.0.945677

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 (327) hide show
  1. package/config/gni/devtools_grd_files.gni +4 -0
  2. package/config/gni/devtools_image_files.gni +1 -0
  3. package/front_end/Images/src/circled_exclamation_icon.svg +3 -0
  4. package/front_end/core/common/ParsedURL.ts +1 -1
  5. package/front_end/core/host/UserMetrics.ts +3 -1
  6. package/front_end/core/i18n/i18nImpl.ts +7 -4
  7. package/front_end/core/i18n/locales/en-US.json +3 -60
  8. package/front_end/core/i18n/locales/en-XL.json +15 -72
  9. package/front_end/core/protocol_client/NodeURL.ts +1 -0
  10. package/front_end/core/sdk/CSSMetadata.ts +0 -1
  11. package/front_end/core/sdk/CSSStyleSheetHeader.ts +2 -3
  12. package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +2 -3
  13. package/front_end/core/sdk/Cookie.ts +17 -0
  14. package/front_end/core/sdk/CookieModel.ts +1 -0
  15. package/front_end/core/sdk/DebuggerModel.ts +5 -4
  16. package/front_end/core/sdk/NetworkManager.ts +4 -1
  17. package/front_end/core/sdk/NetworkRequest.ts +2 -2
  18. package/front_end/core/sdk/Resource.ts +2 -2
  19. package/front_end/core/sdk/Script.ts +2 -3
  20. package/front_end/entrypoints/main/MainImpl.ts +6 -0
  21. package/front_end/generated/protocol.d.ts +0 -4
  22. package/front_end/models/bindings/BreakpointManager.ts +3 -4
  23. package/front_end/models/bindings/ResourceMapping.ts +1 -2
  24. package/front_end/models/bindings/StylesSourceMapping.ts +1 -2
  25. package/front_end/models/emulation/EmulatedDevices.ts +2 -4
  26. package/front_end/models/persistence/IsolatedFileSystem.ts +7 -6
  27. package/front_end/models/persistence/PersistenceActions.ts +4 -1
  28. package/front_end/models/persistence/PlatformFileSystem.ts +3 -4
  29. package/front_end/models/text_utils/ContentProvider.ts +1 -2
  30. package/front_end/models/text_utils/StaticContentProvider.ts +2 -3
  31. package/front_end/models/timeline_model/TimelineJSProfile.ts +16 -3
  32. package/front_end/models/timeline_model/TimelineModel.ts +1 -0
  33. package/front_end/models/workspace/UISourceCode.ts +2 -2
  34. package/front_end/models/workspace_diff/WorkspaceDiff.ts +20 -6
  35. package/front_end/panels/animation/AnimationTimeline.ts +1 -1
  36. package/front_end/panels/animation/animationTimeline.css +2 -0
  37. package/front_end/panels/application/BackForwardCacheStrings.ts +15 -75
  38. package/front_end/panels/application/BackForwardCacheView.ts +8 -1
  39. package/front_end/panels/application/ReportingApiView.ts +15 -1
  40. package/front_end/panels/application/components/EndpointsGrid.ts +63 -4
  41. package/front_end/panels/application/components/FrameDetailsView.ts +21 -34
  42. package/front_end/panels/changes/ChangesView.ts +8 -7
  43. package/front_end/panels/elements/StyleEditorWidget.ts +7 -7
  44. package/front_end/panels/elements/StylePropertyTreeElement.ts +8 -15
  45. package/front_end/panels/elements/StylesSidebarPane.ts +35 -9
  46. package/front_end/panels/emulation/DeviceModeView.ts +3 -0
  47. package/front_end/panels/help/ReleaseNoteText.ts +3 -1
  48. package/front_end/panels/network/NetworkItemView.ts +7 -1
  49. package/front_end/panels/profiler/heapProfiler.css +2 -5
  50. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +1 -1
  51. package/front_end/panels/sources/DebuggerPlugin.ts +1 -1
  52. package/front_end/panels/sources/NavigatorView.ts +1 -1
  53. package/front_end/panels/sources/UISourceCodeFrame.ts +0 -1
  54. package/front_end/panels/timeline/TimelineController.ts +3 -0
  55. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +3 -34
  56. package/front_end/panels/timeline/TimelineUIUtils.ts +51 -3
  57. package/front_end/panels/webauthn/WebauthnPane.ts +31 -32
  58. package/front_end/services/window_bounds/WindowBoundsService.ts +27 -0
  59. package/front_end/services/window_bounds/window_bounds.ts +9 -0
  60. package/front_end/third_party/acorn/README.chromium +2 -2
  61. package/front_end/third_party/acorn/acorn.ts +1 -1
  62. package/front_end/third_party/acorn/package/CHANGELOG.md +31 -1
  63. package/front_end/third_party/acorn/package/README.md +1 -1
  64. package/front_end/third_party/acorn/package/dist/acorn.d.ts +3 -0
  65. package/front_end/third_party/acorn/package/dist/acorn.js +772 -708
  66. package/front_end/third_party/acorn/package/dist/acorn.mjs +767 -703
  67. package/front_end/third_party/acorn/package/dist/bin.js +47 -21
  68. package/front_end/third_party/acorn/package/package.json +1 -1
  69. package/front_end/third_party/acorn-loose/README.chromium +2 -2
  70. package/front_end/third_party/acorn-loose/package/CHANGELOG.md +12 -0
  71. package/front_end/third_party/acorn-loose/package/dist/acorn-loose.js +27 -7
  72. package/front_end/third_party/acorn-loose/package/dist/acorn-loose.mjs +28 -8
  73. package/front_end/third_party/acorn-loose/package/package.json +2 -2
  74. package/front_end/third_party/codemirror.next/bundle.ts +1 -1
  75. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  76. package/front_end/third_party/codemirror.next/codemirror.next.d.ts +8 -1
  77. package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
  78. package/front_end/third_party/codemirror.next/package.json +1 -1
  79. package/front_end/third_party/i18n/i18n-impl.ts +1 -1
  80. package/front_end/third_party/lit-html/README.chromium +2 -2
  81. package/front_end/third_party/lit-html/package/CHANGELOG.md +216 -28
  82. package/front_end/third_party/lit-html/package/LICENSE +9 -9
  83. package/front_end/third_party/lit-html/package/README.md +12 -162
  84. package/front_end/third_party/lit-html/package/async-directive.d.ts +23 -54
  85. package/front_end/third_party/lit-html/package/async-directive.d.ts.map +1 -1
  86. package/front_end/third_party/lit-html/package/async-directive.js +2 -7
  87. package/front_end/third_party/lit-html/package/async-directive.js.map +1 -1
  88. package/front_end/third_party/lit-html/package/development/async-directive.d.ts +23 -54
  89. package/front_end/third_party/lit-html/package/development/async-directive.d.ts.map +1 -1
  90. package/front_end/third_party/lit-html/package/development/async-directive.js +44 -194
  91. package/front_end/third_party/lit-html/package/development/async-directive.js.map +1 -1
  92. package/front_end/third_party/lit-html/package/development/directive-helpers.d.ts +6 -5
  93. package/front_end/third_party/lit-html/package/development/directive-helpers.d.ts.map +1 -1
  94. package/front_end/third_party/lit-html/package/development/directive-helpers.js +25 -9
  95. package/front_end/third_party/lit-html/package/development/directive-helpers.js.map +1 -1
  96. package/front_end/third_party/lit-html/package/development/directive.d.ts +3 -16
  97. package/front_end/third_party/lit-html/package/development/directive.d.ts.map +1 -1
  98. package/front_end/third_party/lit-html/package/development/directive.js +6 -1
  99. package/front_end/third_party/lit-html/package/development/directive.js.map +1 -1
  100. package/front_end/third_party/lit-html/package/development/directives/async-append.d.ts +7 -14
  101. package/front_end/third_party/lit-html/package/development/directives/async-append.d.ts.map +1 -1
  102. package/front_end/third_party/lit-html/package/development/directives/async-append.js +17 -58
  103. package/front_end/third_party/lit-html/package/development/directives/async-append.js.map +1 -1
  104. package/front_end/third_party/lit-html/package/development/directives/async-replace.d.ts +9 -14
  105. package/front_end/third_party/lit-html/package/development/directives/async-replace.d.ts.map +1 -1
  106. package/front_end/third_party/lit-html/package/development/directives/async-replace.js +57 -37
  107. package/front_end/third_party/lit-html/package/development/directives/async-replace.js.map +1 -1
  108. package/front_end/third_party/lit-html/package/development/directives/cache.d.ts +2 -3
  109. package/front_end/third_party/lit-html/package/development/directives/cache.d.ts.map +1 -1
  110. package/front_end/third_party/lit-html/package/development/directives/cache.js +4 -6
  111. package/front_end/third_party/lit-html/package/development/directives/cache.js.map +1 -1
  112. package/front_end/third_party/lit-html/package/development/directives/class-map.d.ts +2 -2
  113. package/front_end/third_party/lit-html/package/development/directives/class-map.d.ts.map +1 -1
  114. package/front_end/third_party/lit-html/package/development/directives/class-map.js +17 -7
  115. package/front_end/third_party/lit-html/package/development/directives/class-map.js.map +1 -1
  116. package/front_end/third_party/lit-html/package/development/directives/guard.d.ts +3 -2
  117. package/front_end/third_party/lit-html/package/development/directives/guard.d.ts.map +1 -1
  118. package/front_end/third_party/lit-html/package/development/directives/guard.js +3 -2
  119. package/front_end/third_party/lit-html/package/development/directives/guard.js.map +1 -1
  120. package/front_end/third_party/lit-html/package/development/directives/live.d.ts +4 -3
  121. package/front_end/third_party/lit-html/package/development/directives/live.d.ts.map +1 -1
  122. package/front_end/third_party/lit-html/package/development/directives/live.js +5 -7
  123. package/front_end/third_party/lit-html/package/development/directives/live.js.map +1 -1
  124. package/front_end/third_party/lit-html/package/development/directives/private-async-helpers.d.ts +58 -0
  125. package/front_end/third_party/lit-html/package/development/directives/private-async-helpers.d.ts.map +1 -0
  126. package/front_end/third_party/lit-html/package/development/directives/private-async-helpers.js +85 -0
  127. package/front_end/third_party/lit-html/package/development/directives/private-async-helpers.js.map +1 -0
  128. package/front_end/third_party/lit-html/package/development/directives/ref.d.ts +14 -11
  129. package/front_end/third_party/lit-html/package/development/directives/ref.d.ts.map +1 -1
  130. package/front_end/third_party/lit-html/package/development/directives/ref.js +13 -11
  131. package/front_end/third_party/lit-html/package/development/directives/ref.js.map +1 -1
  132. package/front_end/third_party/lit-html/package/development/directives/repeat.d.ts +8 -4
  133. package/front_end/third_party/lit-html/package/development/directives/repeat.d.ts.map +1 -1
  134. package/front_end/third_party/lit-html/package/development/directives/repeat.js +23 -9
  135. package/front_end/third_party/lit-html/package/development/directives/repeat.js.map +1 -1
  136. package/front_end/third_party/lit-html/package/development/directives/style-map.d.ts +1 -2
  137. package/front_end/third_party/lit-html/package/development/directives/style-map.d.ts.map +1 -1
  138. package/front_end/third_party/lit-html/package/development/directives/style-map.js +1 -2
  139. package/front_end/third_party/lit-html/package/development/directives/style-map.js.map +1 -1
  140. package/front_end/third_party/lit-html/package/development/directives/template-content.d.ts +1 -2
  141. package/front_end/third_party/lit-html/package/development/directives/template-content.js +1 -2
  142. package/front_end/third_party/lit-html/package/development/directives/unsafe-html.d.ts +6 -4
  143. package/front_end/third_party/lit-html/package/development/directives/unsafe-html.d.ts.map +1 -1
  144. package/front_end/third_party/lit-html/package/development/directives/unsafe-html.js +7 -5
  145. package/front_end/third_party/lit-html/package/development/directives/unsafe-html.js.map +1 -1
  146. package/front_end/third_party/lit-html/package/development/directives/unsafe-svg.d.ts +4 -1
  147. package/front_end/third_party/lit-html/package/development/directives/unsafe-svg.d.ts.map +1 -1
  148. package/front_end/third_party/lit-html/package/development/directives/unsafe-svg.js +3 -0
  149. package/front_end/third_party/lit-html/package/development/directives/unsafe-svg.js.map +1 -1
  150. package/front_end/third_party/lit-html/package/development/directives/until.d.ts +12 -8
  151. package/front_end/third_party/lit-html/package/development/directives/until.d.ts.map +1 -1
  152. package/front_end/third_party/lit-html/package/development/directives/until.js +63 -23
  153. package/front_end/third_party/lit-html/package/development/directives/until.js.map +1 -1
  154. package/front_end/third_party/lit-html/package/development/experimental-hydrate.d.ts.map +1 -1
  155. package/front_end/third_party/lit-html/package/development/experimental-hydrate.js +9 -8
  156. package/front_end/third_party/lit-html/package/development/experimental-hydrate.js.map +1 -1
  157. package/front_end/third_party/lit-html/package/development/lit-html.d.ts +81 -136
  158. package/front_end/third_party/lit-html/package/development/lit-html.d.ts.map +1 -1
  159. package/front_end/third_party/lit-html/package/development/lit-html.js +249 -76
  160. package/front_end/third_party/lit-html/package/development/lit-html.js.map +1 -1
  161. package/front_end/third_party/lit-html/package/development/polyfill-support.d.ts +1 -41
  162. package/front_end/third_party/lit-html/package/development/polyfill-support.d.ts.map +1 -1
  163. package/front_end/third_party/lit-html/package/development/polyfill-support.js +40 -21
  164. package/front_end/third_party/lit-html/package/development/polyfill-support.js.map +1 -1
  165. package/front_end/third_party/lit-html/package/development/private-ssr-support.d.ts +12 -10
  166. package/front_end/third_party/lit-html/package/development/private-ssr-support.d.ts.map +1 -1
  167. package/front_end/third_party/lit-html/package/development/private-ssr-support.js +11 -3
  168. package/front_end/third_party/lit-html/package/development/private-ssr-support.js.map +1 -1
  169. package/front_end/third_party/lit-html/package/development/static.d.ts.map +1 -1
  170. package/front_end/third_party/lit-html/package/development/static.js +6 -5
  171. package/front_end/third_party/lit-html/package/development/static.js.map +1 -1
  172. package/front_end/third_party/lit-html/package/directive-helpers.d.ts +6 -5
  173. package/front_end/third_party/lit-html/package/directive-helpers.d.ts.map +1 -1
  174. package/front_end/third_party/lit-html/package/directive-helpers.js +2 -2
  175. package/front_end/third_party/lit-html/package/directive-helpers.js.map +1 -1
  176. package/front_end/third_party/lit-html/package/directive.d.ts +3 -16
  177. package/front_end/third_party/lit-html/package/directive.d.ts.map +1 -1
  178. package/front_end/third_party/lit-html/package/directive.js +1 -1
  179. package/front_end/third_party/lit-html/package/directive.js.map +1 -1
  180. package/front_end/third_party/lit-html/package/directives/async-append.d.ts +7 -14
  181. package/front_end/third_party/lit-html/package/directives/async-append.d.ts.map +1 -1
  182. package/front_end/third_party/lit-html/package/directives/async-append.js +2 -6
  183. package/front_end/third_party/lit-html/package/directives/async-append.js.map +1 -1
  184. package/front_end/third_party/lit-html/package/directives/async-replace.d.ts +9 -14
  185. package/front_end/third_party/lit-html/package/directives/async-replace.d.ts.map +1 -1
  186. package/front_end/third_party/lit-html/package/directives/async-replace.js +2 -5
  187. package/front_end/third_party/lit-html/package/directives/async-replace.js.map +1 -1
  188. package/front_end/third_party/lit-html/package/directives/cache.d.ts +2 -3
  189. package/front_end/third_party/lit-html/package/directives/cache.d.ts.map +1 -1
  190. package/front_end/third_party/lit-html/package/directives/cache.js +2 -5
  191. package/front_end/third_party/lit-html/package/directives/cache.js.map +1 -1
  192. package/front_end/third_party/lit-html/package/directives/class-map.d.ts +2 -2
  193. package/front_end/third_party/lit-html/package/directives/class-map.d.ts.map +1 -1
  194. package/front_end/third_party/lit-html/package/directives/class-map.js +2 -4
  195. package/front_end/third_party/lit-html/package/directives/class-map.js.map +1 -1
  196. package/front_end/third_party/lit-html/package/directives/guard.d.ts +3 -2
  197. package/front_end/third_party/lit-html/package/directives/guard.d.ts.map +1 -1
  198. package/front_end/third_party/lit-html/package/directives/guard.js +2 -4
  199. package/front_end/third_party/lit-html/package/directives/guard.js.map +1 -1
  200. package/front_end/third_party/lit-html/package/directives/live.d.ts +4 -3
  201. package/front_end/third_party/lit-html/package/directives/live.d.ts.map +1 -1
  202. package/front_end/third_party/lit-html/package/directives/live.js +1 -4
  203. package/front_end/third_party/lit-html/package/directives/live.js.map +1 -1
  204. package/front_end/third_party/lit-html/package/directives/private-async-helpers.d.ts +58 -0
  205. package/front_end/third_party/lit-html/package/directives/private-async-helpers.d.ts.map +1 -0
  206. package/front_end/third_party/lit-html/package/directives/private-async-helpers.js +7 -0
  207. package/front_end/third_party/lit-html/package/directives/private-async-helpers.js.map +1 -0
  208. package/front_end/third_party/lit-html/package/directives/ref.d.ts +14 -11
  209. package/front_end/third_party/lit-html/package/directives/ref.d.ts.map +1 -1
  210. package/front_end/third_party/lit-html/package/directives/ref.js +2 -5
  211. package/front_end/third_party/lit-html/package/directives/ref.js.map +1 -1
  212. package/front_end/third_party/lit-html/package/directives/repeat.d.ts +8 -4
  213. package/front_end/third_party/lit-html/package/directives/repeat.d.ts.map +1 -1
  214. package/front_end/third_party/lit-html/package/directives/repeat.js +2 -5
  215. package/front_end/third_party/lit-html/package/directives/repeat.js.map +1 -1
  216. package/front_end/third_party/lit-html/package/directives/style-map.d.ts +1 -2
  217. package/front_end/third_party/lit-html/package/directives/style-map.d.ts.map +1 -1
  218. package/front_end/third_party/lit-html/package/directives/style-map.js +2 -4
  219. package/front_end/third_party/lit-html/package/directives/style-map.js.map +1 -1
  220. package/front_end/third_party/lit-html/package/directives/template-content.d.ts +1 -2
  221. package/front_end/third_party/lit-html/package/directives/template-content.js +2 -4
  222. package/front_end/third_party/lit-html/package/directives/template-content.js.map +1 -1
  223. package/front_end/third_party/lit-html/package/directives/unsafe-html.d.ts +6 -4
  224. package/front_end/third_party/lit-html/package/directives/unsafe-html.d.ts.map +1 -1
  225. package/front_end/third_party/lit-html/package/directives/unsafe-html.js +2 -4
  226. package/front_end/third_party/lit-html/package/directives/unsafe-html.js.map +1 -1
  227. package/front_end/third_party/lit-html/package/directives/unsafe-svg.d.ts +4 -1
  228. package/front_end/third_party/lit-html/package/directives/unsafe-svg.d.ts.map +1 -1
  229. package/front_end/third_party/lit-html/package/directives/unsafe-svg.js.map +1 -1
  230. package/front_end/third_party/lit-html/package/directives/until.d.ts +12 -8
  231. package/front_end/third_party/lit-html/package/directives/until.d.ts.map +1 -1
  232. package/front_end/third_party/lit-html/package/directives/until.js +2 -6
  233. package/front_end/third_party/lit-html/package/directives/until.js.map +1 -1
  234. package/front_end/third_party/lit-html/package/experimental-hydrate.d.ts.map +1 -1
  235. package/front_end/third_party/lit-html/package/experimental-hydrate.js +2 -5
  236. package/front_end/third_party/lit-html/package/experimental-hydrate.js.map +1 -1
  237. package/front_end/third_party/lit-html/package/lit-html.d.ts +81 -136
  238. package/front_end/third_party/lit-html/package/lit-html.d.ts.map +1 -1
  239. package/front_end/third_party/lit-html/package/lit-html.js +1 -1
  240. package/front_end/third_party/lit-html/package/lit-html.js.map +1 -1
  241. package/front_end/third_party/lit-html/package/package.json +75 -24
  242. package/front_end/third_party/lit-html/package/polyfill-support.d.ts +1 -41
  243. package/front_end/third_party/lit-html/package/polyfill-support.d.ts.map +1 -1
  244. package/front_end/third_party/lit-html/package/polyfill-support.js +1 -1
  245. package/front_end/third_party/lit-html/package/polyfill-support.js.map +1 -1
  246. package/front_end/third_party/lit-html/package/private-ssr-support.d.ts +12 -10
  247. package/front_end/third_party/lit-html/package/private-ssr-support.d.ts.map +1 -1
  248. package/front_end/third_party/lit-html/package/private-ssr-support.js +2 -2
  249. package/front_end/third_party/lit-html/package/private-ssr-support.js.map +1 -1
  250. package/front_end/third_party/lit-html/package/static.d.ts.map +1 -1
  251. package/front_end/third_party/lit-html/package/static.js +1 -1
  252. package/front_end/third_party/lit-html/package/static.js.map +1 -1
  253. package/front_end/third_party/marked/README.chromium +2 -2
  254. package/front_end/third_party/marked/marked.ts +2 -2
  255. package/front_end/third_party/marked/package/README.md +7 -1
  256. package/front_end/third_party/marked/package/bin/marked.js +214 -0
  257. package/front_end/third_party/marked/package/lib/marked.cjs +2907 -0
  258. package/front_end/third_party/marked/package/lib/marked.esm.d.ts +1 -3
  259. package/front_end/third_party/marked/package/lib/marked.esm.js +627 -586
  260. package/front_end/third_party/marked/package/lib/marked.umd.js +2913 -0
  261. package/front_end/third_party/marked/package/man/marked.1 +5 -24
  262. package/front_end/third_party/marked/package/man/marked.1.txt +21 -31
  263. package/front_end/third_party/marked/package/marked.min.js +1 -1
  264. package/front_end/third_party/marked/package/package.json +41 -32
  265. package/front_end/third_party/marked/package/src/Lexer.js +109 -108
  266. package/front_end/third_party/marked/package/src/Parser.js +38 -15
  267. package/front_end/third_party/marked/package/src/Renderer.js +5 -5
  268. package/front_end/third_party/marked/package/src/Slugger.js +2 -2
  269. package/front_end/third_party/marked/package/src/TextRenderer.js +2 -2
  270. package/front_end/third_party/marked/package/src/Tokenizer.js +215 -190
  271. package/front_end/third_party/marked/package/src/defaults.js +6 -9
  272. package/front_end/third_party/marked/package/src/helpers.js +16 -27
  273. package/front_end/third_party/marked/package/src/marked.js +146 -63
  274. package/front_end/third_party/marked/package/src/rules.js +20 -45
  275. package/front_end/third_party/wasmparser/README.chromium +2 -2
  276. package/front_end/third_party/wasmparser/package/.github/workflows/main.yml +47 -0
  277. package/front_end/third_party/wasmparser/package/CHANGELOG.md +12 -0
  278. package/front_end/third_party/wasmparser/package/dist/cjs/WasmParser.js +53 -53
  279. package/front_end/third_party/wasmparser/package/dist/cjs/WasmParser.js.map +1 -1
  280. package/front_end/third_party/wasmparser/package/dist/esm/WasmParser.js +53 -53
  281. package/front_end/third_party/wasmparser/package/dist/esm/WasmParser.js.map +1 -1
  282. package/front_end/third_party/wasmparser/package/package.json +1 -1
  283. package/front_end/third_party/wasmparser/package/src/WasmParser.ts +53 -53
  284. package/front_end/ui/components/adorners/Adorner.ts +14 -14
  285. package/front_end/ui/components/buttons/Button.ts +133 -42
  286. package/front_end/ui/components/buttons/button.css +31 -0
  287. package/front_end/ui/components/data_grid/DataGrid.ts +131 -122
  288. package/front_end/ui/components/data_grid/DataGridController.ts +42 -42
  289. package/front_end/ui/components/diff_view/DiffView.ts +4 -4
  290. package/front_end/ui/components/docs/button/basic.html +3 -0
  291. package/front_end/ui/components/docs/button/basic.ts +58 -0
  292. package/front_end/ui/components/expandable_list/ExpandableList.ts +11 -11
  293. package/front_end/ui/components/icon_button/Icon.ts +24 -21
  294. package/front_end/ui/components/icon_button/IconButton.ts +31 -31
  295. package/front_end/ui/components/issue_counter/IssueCounter.ts +52 -52
  296. package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +42 -42
  297. package/front_end/ui/components/linear_memory_inspector/LinearMemoryInspector.ts +67 -67
  298. package/front_end/ui/components/linear_memory_inspector/LinearMemoryInspectorController.ts +22 -22
  299. package/front_end/ui/components/linear_memory_inspector/LinearMemoryInspectorPane.ts +36 -36
  300. package/front_end/ui/components/linear_memory_inspector/LinearMemoryNavigator.ts +19 -19
  301. package/front_end/ui/components/linear_memory_inspector/LinearMemoryValueInterpreter.ts +25 -25
  302. package/front_end/ui/components/linear_memory_inspector/LinearMemoryViewer.ts +52 -52
  303. package/front_end/ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts +21 -21
  304. package/front_end/ui/components/linear_memory_inspector/ValueInterpreterSettings.ts +6 -6
  305. package/front_end/ui/components/markdown_view/MarkdownImage.ts +14 -14
  306. package/front_end/ui/components/markdown_view/MarkdownLink.ts +8 -8
  307. package/front_end/ui/components/markdown_view/MarkdownView.ts +6 -6
  308. package/front_end/ui/components/render_coordinator/RenderCoordinator.ts +33 -33
  309. package/front_end/ui/components/report_view/ReportView.ts +18 -18
  310. package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +53 -53
  311. package/front_end/ui/components/settings/SettingCheckbox.ts +15 -15
  312. package/front_end/ui/components/survey_link/SurveyLink.ts +28 -28
  313. package/front_end/ui/components/text_editor/TextEditor.ts +68 -36
  314. package/front_end/ui/components/text_editor/config.ts +4 -2
  315. package/front_end/ui/components/text_editor/javascript.ts +6 -6
  316. package/front_end/ui/components/text_prompt/TextPrompt.ts +19 -19
  317. package/front_end/ui/components/tree_outline/TreeOutline.ts +56 -56
  318. package/front_end/ui/legacy/Infobar.ts +9 -0
  319. package/front_end/ui/legacy/InspectorView.ts +1 -1
  320. package/front_end/ui/legacy/ListWidget.ts +2 -2
  321. package/front_end/ui/legacy/ViewManager.ts +6 -0
  322. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +20 -0
  323. package/front_end/ui/legacy/tabbedPane.css +1 -1
  324. package/inspector_overlay/main.ts +3 -0
  325. package/package.json +1 -1
  326. package/scripts/eslint_rules/lib/l10n_filename_matches.js +17 -4
  327. package/scripts/eslint_rules/tests/l10n_filename_matches_test.js +21 -0
@@ -47,10 +47,6 @@ const UIStrings = {
47
47
  */
48
48
  document: 'Document',
49
49
  /**
50
- *@description Text for web URLs
51
- */
52
- url: 'URL',
53
- /**
54
50
  *@description Title for a link to the Sources panel
55
51
  */
56
52
  clickToRevealInSourcesPanel: 'Click to reveal in Sources panel',
@@ -67,10 +63,6 @@ const UIStrings = {
67
63
  */
68
64
  clickToRevealInNetworkPanelMight: 'Click to reveal in Network panel (might require page reload)',
69
65
  /**
70
- *@description Text for the origin of something
71
- */
72
- origin: 'Origin',
73
- /**
74
66
  *@description Related node label in Timeline UIUtils of the Performance panel
75
67
  */
76
68
  ownerElement: 'Owner Element',
@@ -117,11 +109,11 @@ const UIStrings = {
117
109
  /**
118
110
  *@description Row title for in the Frame Details view
119
111
  */
120
- crossoriginIsolated: 'Cross-Origin Isolated',
112
+ crossoriginIsolated: '`Cross-Origin` Isolated',
121
113
  /**
122
114
  *@description Explanatory text in the Frame Details view
123
115
  */
124
- localhostIsAlwaysASecureContext: 'Localhost is always a secure context',
116
+ localhostIsAlwaysASecureContext: '`Localhost` is always a secure context',
125
117
  /**
126
118
  *@description Explanatory text in the Frame Details view
127
119
  */
@@ -131,14 +123,6 @@ const UIStrings = {
131
123
  */
132
124
  theFramesSchemeIsInsecure: 'The frame\'s scheme is insecure',
133
125
  /**
134
- *@description Row title in the Frame Details view
135
- */
136
- crossoriginEmbedderPolicy: 'Cross-Origin Embedder Policy',
137
- /**
138
- *@description Row title in the Frame Details view
139
- */
140
- crossoriginOpenerPolicy: 'Cross-Origin Opener Policy',
141
- /**
142
126
  *@description This label specifies the server endpoints to which the server is reporting errors
143
127
  *and warnings through the Report-to API. Following this label will be the URL of the server.
144
128
  */
@@ -150,7 +134,8 @@ const UIStrings = {
150
134
  /**
151
135
  *@description Explanatory text in the Frame Details view for the API availability section
152
136
  */
153
- availabilityOfCertainApisDepends: 'Availability of certain APIs depends on the document being cross-origin isolated.',
137
+ availabilityOfCertainApisDepends:
138
+ 'Availability of certain APIs depends on the document being `cross-origin` isolated.',
154
139
  /**
155
140
  *@description Description of the SharedArrayBuffer status
156
141
  */
@@ -167,20 +152,20 @@ const UIStrings = {
167
152
  *@description Tooltip for the SharedArrayBuffer availability status
168
153
  */
169
154
  sharedarraybufferConstructorIs:
170
- 'SharedArrayBuffer constructor is available and SABs can be transferred via postMessage',
155
+ '`SharedArrayBuffer` constructor is available and `SABs` can be transferred via `postMessage`',
171
156
  /**
172
157
  *@description Tooltip for the SharedArrayBuffer availability status
173
158
  */
174
159
  sharedarraybufferConstructorIsAvailable:
175
- 'SharedArrayBuffer constructor is available but SABs cannot be transferred via postMessage',
160
+ '`SharedArrayBuffer` constructor is available but `SABs` cannot be transferred via `postMessage`',
176
161
  /**
177
162
  *@description Explanation for the SharedArrayBuffer availability status
178
163
  */
179
- willRequireCrossoriginIsolated: '⚠️ will require cross-origin isolated context in the future',
164
+ willRequireCrossoriginIsolated: '⚠️ will require `cross-origin` isolated context in the future',
180
165
  /**
181
166
  *@description Explanation for the SharedArrayBuffer availability status
182
167
  */
183
- requiresCrossoriginIsolated: 'requires cross-origin isolated context',
168
+ requiresCrossoriginIsolated: 'requires `cross-origin` isolated context',
184
169
  /**
185
170
  *@description Explanation for the SharedArrayBuffer availability status in case the transfer of a SAB requires the
186
171
  * permission policy `cross-origin-isolated` to be enabled (e.g. because the message refers to the situation in an iframe).
@@ -194,11 +179,12 @@ const UIStrings = {
194
179
  /**
195
180
  *@description Tooltip for the Measure Memory availability status
196
181
  */
197
- thePerformanceAPI: 'The performance.measureUserAgentSpecificMemory() API is available',
182
+ thePerformanceAPI: 'The `performance.measureUserAgentSpecificMemory()` API is available',
198
183
  /**
199
184
  *@description Tooltip for the Measure Memory availability status
200
185
  */
201
- thePerformancemeasureuseragentspecificmemory: 'The performance.measureUserAgentSpecificMemory() API is not available',
186
+ thePerformancemeasureuseragentspecificmemory:
187
+ 'The `performance.measureUserAgentSpecificMemory()` API is not available',
202
188
  /**
203
189
  *@description Entry in the API availability section of the frame details view
204
190
  */
@@ -211,12 +197,13 @@ const UIStrings = {
211
197
  *@description Label for a stack trace. If a frame is created programmatically (i.e. via JavaScript), there is a
212
198
  * stack trace for the line of code which caused the creation of the iframe. This is the stack trace we are showing here.
213
199
  */
214
- creationStackTrace: 'Frame Creation Stack Trace',
200
+ creationStackTrace: 'Frame Creation `Stack Trace`',
215
201
  /**
216
202
  *@description Tooltip for 'Frame Creation Stack Trace' explaining that the stack
217
203
  *trace shows where in the code the frame has been created programmatically
218
204
  */
219
- creationStackTraceExplanation: 'This frame was created programmatically. The stack trace shows where this happened.',
205
+ creationStackTraceExplanation:
206
+ 'This frame was created programmatically. The `stack trace` shows where this happened.',
220
207
  /**
221
208
  *@description Text descripting why a frame has been indentified as an advertisement.
222
209
  */
@@ -230,11 +217,11 @@ const UIStrings = {
230
217
  *@description Text descripting why a frame has been indentified as an advertisement.
231
218
  */
232
219
  createdByAdScriptExplanation:
233
- 'There was an ad script in the (async) stack when this frame was created. Examining the creation stack trace of this frame might provide more insight.',
220
+ 'There was an ad script in the `(async) stack` when this frame was created. Examining the creation `stack trace` of this frame might provide more insight.',
234
221
  /**
235
222
  *@description Label for a list of origin trials that associated with at least one token.
236
223
  */
237
- originTrials: 'Origin Trials',
224
+ // originTrials: 'Origin Trials',
238
225
  };
239
226
  const str_ = i18n.i18n.registerUIStrings('panels/application/components/FrameDetailsView.ts', UIStrings);
240
227
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -330,7 +317,7 @@ export class FrameDetailsReportView extends HTMLElement {
330
317
 
331
318
  return LitHtml.html`
332
319
  <${ReportView.ReportView.ReportSectionHeader.litTagName}>
333
- ${i18nString(UIStrings.originTrials)}
320
+ ${i18n.i18n.lockedString('Origin Trials')}
334
321
  <${IconButton.IconButton.IconButton.litTagName} class="inline-button" .data="${{
335
322
  clickHandler: refreshOriginTrials,
336
323
  groups: [
@@ -356,7 +343,7 @@ export class FrameDetailsReportView extends HTMLElement {
356
343
  return LitHtml.html`
357
344
  <${ReportView.ReportView.ReportSectionHeader.litTagName}>${i18nString(UIStrings.document)}</${
358
345
  ReportView.ReportView.ReportSectionHeader.litTagName}>
359
- <${ReportView.ReportView.ReportKey.litTagName}>${i18nString(UIStrings.url)}</${
346
+ <${ReportView.ReportView.ReportKey.litTagName}>${i18n.i18n.lockedString('URL')}</${
360
347
  ReportView.ReportView.ReportKey.litTagName}>
361
348
  <${ReportView.ReportView.ReportValue.litTagName}>
362
349
  <div class="inline-items">
@@ -462,7 +449,7 @@ export class FrameDetailsReportView extends HTMLElement {
462
449
  private maybeRenderOrigin(): LitHtml.TemplateResult|{} {
463
450
  if (this.frame && this.frame.securityOrigin && this.frame.securityOrigin !== '://') {
464
451
  return LitHtml.html`
465
- <${ReportView.ReportView.ReportKey.litTagName}>${i18nString(UIStrings.origin)}</${
452
+ <${ReportView.ReportView.ReportKey.litTagName}>${i18n.i18n.lockedString('Origin')}</${
466
453
  ReportView.ReportView.ReportKey.litTagName}>
467
454
  <${ReportView.ReportView.ReportValue.litTagName}>
468
455
  <div class="text-ellipsis" title=${this.frame.securityOrigin}>${this.frame.securityOrigin}</div>
@@ -622,11 +609,11 @@ export class FrameDetailsReportView extends HTMLElement {
622
609
  return LitHtml.html`
623
610
  ${
624
611
  this.maybeRenderCrossOriginStatus(
625
- info.coep, i18nString(UIStrings.crossoriginEmbedderPolicy),
612
+ info.coep, i18n.i18n.lockedString('Cross-Origin Embedder Policy (COEP)'),
626
613
  Protocol.Network.CrossOriginEmbedderPolicyValue.None)}
627
614
  ${
628
615
  this.maybeRenderCrossOriginStatus(
629
- info.coop, i18nString(UIStrings.crossoriginOpenerPolicy),
616
+ info.coop, i18n.i18n.lockedString('Cross-Origin Opener Policy (COOP)'),
630
617
  Protocol.Network.CrossOriginOpenerPolicyValue.UnsafeNone)}
631
618
  `;
632
619
  }
@@ -4,6 +4,7 @@
4
4
 
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import * as i18n from '../../core/i18n/i18n.js';
7
+ import * as Root from '../../core/root/root.js';
7
8
  import * as Diff from '../../third_party/diff/diff.js';
8
9
  import * as DiffView from '../../ui/components/diff_view/diff_view.js';
9
10
  import * as UI from '../../ui/legacy/legacy.js';
@@ -166,7 +167,7 @@ export class ChangesView extends UI.Widget.VBox {
166
167
  this.registerCSSFiles([changesViewStyles]);
167
168
  }
168
169
 
169
- private refreshDiff(): void {
170
+ private async refreshDiff(): Promise<void> {
170
171
  if (!this.isShowing()) {
171
172
  return;
172
173
  }
@@ -180,12 +181,12 @@ export class ChangesView extends UI.Widget.VBox {
180
181
  this.hideDiff(i18nString(UIStrings.binaryData));
181
182
  return;
182
183
  }
183
- this.workspaceDiff.requestDiff(uiSourceCode).then((diff: Diff.Diff.DiffArray|null): void => {
184
- if (this.selectedUISourceCode !== uiSourceCode) {
185
- return;
186
- }
187
- this.renderDiffRows(diff);
188
- });
184
+ const diff = await this.workspaceDiff.requestDiff(
185
+ uiSourceCode, {shouldFormatDiff: Root.Runtime.experiments.isEnabled('preciseChanges')});
186
+ if (this.selectedUISourceCode !== uiSourceCode) {
187
+ return;
188
+ }
189
+ this.renderDiffRows(diff);
189
190
  }
190
191
 
191
192
  private hideDiff(message: string): void {
@@ -30,7 +30,7 @@ export class StyleEditorWidget extends UI.Widget.VBox {
30
30
  private section?: StylePropertiesSection;
31
31
  private editorContainer: HTMLElement;
32
32
 
33
- #propertyIndex = -1;
33
+ #triggerKey: string|undefined;
34
34
 
35
35
  constructor() {
36
36
  super(true);
@@ -73,12 +73,12 @@ export class StyleEditorWidget extends UI.Widget.VBox {
73
73
  this.editor?.addEventListener('propertydeselected', this.onPropertyDeselected);
74
74
  }
75
75
 
76
- setPropertyIndex(value: number): void {
77
- this.#propertyIndex = value;
76
+ setTriggerKey(value: string): void {
77
+ this.#triggerKey = value;
78
78
  }
79
79
 
80
- getPropertyIndex(): number {
81
- return this.#propertyIndex;
80
+ getTriggerKey(): string|undefined {
81
+ return this.#triggerKey;
82
82
  }
83
83
 
84
84
  unbindContext(): void {
@@ -116,7 +116,7 @@ export class StyleEditorWidget extends UI.Widget.VBox {
116
116
 
117
117
  static createTriggerButton(
118
118
  pane: StylesSidebarPane, section: StylePropertiesSection, editorClass: {new(): Editor}, buttonTitle: string,
119
- propertyIndex: number): HTMLElement {
119
+ triggerKey: string): HTMLElement {
120
120
  const triggerButton = createButton(buttonTitle);
121
121
 
122
122
  triggerButton.onclick = async(event): Promise<void> => {
@@ -125,7 +125,7 @@ export class StyleEditorWidget extends UI.Widget.VBox {
125
125
  const widget = StyleEditorWidget.instance();
126
126
  widget.setEditor(editorClass);
127
127
  widget.bindContext(pane, section);
128
- widget.setPropertyIndex(propertyIndex);
128
+ widget.setTriggerKey(triggerKey);
129
129
  await widget.render();
130
130
  const scrollerElement = triggerButton.enclosingNodeOrSelfWithClass('style-panes-wrapper');
131
131
  const onScroll = (): void => {
@@ -668,24 +668,17 @@ export class StylePropertyTreeElement extends UI.TreeOutline.TreeElement {
668
668
  const section = this.section();
669
669
  if (this.valueElement && section && section.editable && this.property.name === 'display') {
670
670
  const propertyValue = this.property.trimmedValueWithoutImportant();
671
- if (propertyValue === 'flex' || propertyValue === 'inline-flex') {
671
+ const isFlex = propertyValue === 'flex' || propertyValue === 'inline-flex';
672
+ const isGrid = propertyValue === 'grid' || propertyValue === 'inline-grid';
673
+ if (isFlex || isGrid) {
674
+ const key = `${section.getSectionIdx()}_${section.nextEditorTriggerButtonIdx}`;
672
675
  const button = StyleEditorWidget.createTriggerButton(
673
- this.parentPaneInternal, section, FlexboxEditor, i18nString(UIStrings.flexboxEditorButton),
674
- this.property.index);
676
+ this.parentPaneInternal, section, isFlex ? FlexboxEditor : GridEditor,
677
+ isFlex ? i18nString(UIStrings.flexboxEditorButton) : i18nString(UIStrings.gridEditorButton), key);
678
+ section.nextEditorTriggerButtonIdx++;
675
679
  this.listItemElement.appendChild(button);
676
680
  const helper = this.parentPaneInternal.swatchPopoverHelper();
677
- if (helper.isShowing(StyleEditorWidget.instance()) &&
678
- this.property.index === StyleEditorWidget.instance().getPropertyIndex()) {
679
- helper.setAnchorElement(button);
680
- }
681
- }
682
- if (propertyValue === 'grid' || propertyValue === 'inline-grid') {
683
- const button = StyleEditorWidget.createTriggerButton(
684
- this.parentPaneInternal, section, GridEditor, i18nString(UIStrings.gridEditorButton), this.property.index);
685
- this.listItemElement.appendChild(button);
686
- const helper = this.parentPaneInternal.swatchPopoverHelper();
687
- if (helper.isShowing(StyleEditorWidget.instance()) &&
688
- this.property.index === StyleEditorWidget.instance().getPropertyIndex()) {
681
+ if (helper.isShowing(StyleEditorWidget.instance()) && StyleEditorWidget.instance().getTriggerKey() === key) {
689
682
  helper.setAnchorElement(button);
690
683
  }
691
684
  }
@@ -832,6 +832,7 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
832
832
  this.idleCallbackManager = new IdleCallbackManager();
833
833
 
834
834
  const blocks = [new SectionBlock(null)];
835
+ let sectionIdx = 0;
835
836
  let lastParentNode: SDK.DOMModel.DOMNode|null = null;
836
837
  for (const style of matchedStyles.nodeStyles()) {
837
838
  const parentNode = matchedStyles.isInherited(style) ? matchedStyles.nodeForStyle(style) : null;
@@ -844,7 +845,8 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
844
845
  const lastBlock = blocks[blocks.length - 1];
845
846
  if (lastBlock) {
846
847
  this.idleCallbackManager.schedule(() => {
847
- const section = new StylePropertiesSection(this, matchedStyles, style);
848
+ const section = new StylePropertiesSection(this, matchedStyles, style, sectionIdx);
849
+ sectionIdx++;
848
850
  lastBlock.sections.push(section);
849
851
  });
850
852
  }
@@ -860,7 +862,8 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
860
862
  const block = SectionBlock.createPseudoTypeBlock(pseudoType);
861
863
  for (const style of matchedStyles.pseudoStyles(pseudoType)) {
862
864
  this.idleCallbackManager.schedule(() => {
863
- const section = new StylePropertiesSection(this, matchedStyles, style);
865
+ const section = new StylePropertiesSection(this, matchedStyles, style, sectionIdx);
866
+ sectionIdx++;
864
867
  block.sections.push(section);
865
868
  });
866
869
  }
@@ -871,7 +874,8 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
871
874
  const block = SectionBlock.createKeyframesBlock(keyframesRule.name().text);
872
875
  for (const keyframe of keyframesRule.keyframes()) {
873
876
  this.idleCallbackManager.schedule(() => {
874
- block.sections.push(new KeyframePropertiesSection(this, matchedStyles, keyframe.style));
877
+ block.sections.push(new KeyframePropertiesSection(this, matchedStyles, keyframe.style, sectionIdx));
878
+ sectionIdx++;
875
879
  });
876
880
  }
877
881
  blocks.push(block);
@@ -917,7 +921,7 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
917
921
  const node = this.node();
918
922
  const blankSection = new BlankStylePropertiesSection(
919
923
  this, insertAfterSection.matchedStyles, node ? node.simpleSelector() : '', styleSheetId, ruleLocation,
920
- insertAfterSection.style());
924
+ insertAfterSection.style(), 0);
921
925
 
922
926
  this.sectionsContainer.insertBefore(blankSection.element, insertAfterSection.element.nextSibling);
923
927
 
@@ -929,6 +933,13 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
929
933
  block.sections.splice(index + 1, 0, blankSection);
930
934
  blankSection.startEditingSelector();
931
935
  }
936
+ let sectionIdx = 0;
937
+ for (const block of this.sectionBlocks) {
938
+ for (const section of block.sections) {
939
+ section.setSectionIdx(sectionIdx);
940
+ sectionIdx++;
941
+ }
942
+ }
932
943
  }
933
944
 
934
945
  removeSection(section: StylePropertiesSection): void {
@@ -1208,10 +1219,15 @@ export class StylePropertiesSection {
1208
1219
 
1209
1220
  private queryListElement: HTMLElement;
1210
1221
 
1222
+ // Used to identify buttons that trigger a flexbox or grid editor.
1223
+ nextEditorTriggerButtonIdx = 1;
1224
+ private sectionIdx = 0;
1225
+
1211
1226
  constructor(
1212
1227
  parentPane: StylesSidebarPane, matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles,
1213
- style: SDK.CSSStyleDeclaration.CSSStyleDeclaration) {
1228
+ style: SDK.CSSStyleDeclaration.CSSStyleDeclaration, sectionIdx: number) {
1214
1229
  this.parentPane = parentPane;
1230
+ this.sectionIdx = sectionIdx;
1215
1231
  this.styleInternal = style;
1216
1232
  this.matchedStyles = matchedStyles;
1217
1233
  this.editable = Boolean(style.styleSheetId && style.range);
@@ -1344,6 +1360,15 @@ export class StylePropertiesSection {
1344
1360
  this.onpopulate();
1345
1361
  }
1346
1362
 
1363
+ setSectionIdx(sectionIdx: number): void {
1364
+ this.sectionIdx = sectionIdx;
1365
+ this.onpopulate();
1366
+ }
1367
+
1368
+ getSectionIdx(): number {
1369
+ return this.sectionIdx;
1370
+ }
1371
+
1347
1372
  registerFontProperty(treeElement: StylePropertyTreeElement): void {
1348
1373
  if (this.fontEditorSectionManager) {
1349
1374
  this.fontEditorSectionManager.registerFontProperty(treeElement);
@@ -1935,6 +1960,7 @@ export class StylePropertiesSection {
1935
1960
 
1936
1961
  onpopulate(): void {
1937
1962
  this.parentPane.setActiveProperty(null);
1963
+ this.nextEditorTriggerButtonIdx = 1;
1938
1964
  this.propertiesTreeOutline.removeChildren();
1939
1965
  const style = this.styleInternal;
1940
1966
  let count = 0;
@@ -2457,10 +2483,10 @@ export class BlankStylePropertiesSection extends StylePropertiesSection {
2457
2483
  constructor(
2458
2484
  stylesPane: StylesSidebarPane, matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles, defaultSelectorText: string,
2459
2485
  styleSheetId: Protocol.CSS.StyleSheetId, ruleLocation: TextUtils.TextRange.TextRange,
2460
- insertAfterStyle: SDK.CSSStyleDeclaration.CSSStyleDeclaration) {
2486
+ insertAfterStyle: SDK.CSSStyleDeclaration.CSSStyleDeclaration, sectionIdx: number) {
2461
2487
  const cssModel = (stylesPane.cssModel() as SDK.CSSModel.CSSModel);
2462
2488
  const rule = SDK.CSSRule.CSSStyleRule.createDummyRule(cssModel, defaultSelectorText);
2463
- super(stylesPane, matchedStyles, rule.style);
2489
+ super(stylesPane, matchedStyles, rule.style, sectionIdx);
2464
2490
  this.normal = false;
2465
2491
  this.ruleLocation = ruleLocation;
2466
2492
  this.styleSheetId = styleSheetId;
@@ -2564,8 +2590,8 @@ export class BlankStylePropertiesSection extends StylePropertiesSection {
2564
2590
  export class KeyframePropertiesSection extends StylePropertiesSection {
2565
2591
  constructor(
2566
2592
  stylesPane: StylesSidebarPane, matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles,
2567
- style: SDK.CSSStyleDeclaration.CSSStyleDeclaration) {
2568
- super(stylesPane, matchedStyles, style);
2593
+ style: SDK.CSSStyleDeclaration.CSSStyleDeclaration, sectionIdx: number) {
2594
+ super(stylesPane, matchedStyles, style, sectionIdx);
2569
2595
  this.selectorElement.className = 'keyframe-key';
2570
2596
  }
2571
2597
 
@@ -547,6 +547,9 @@ export class DeviceModeView extends UI.Widget.VBox {
547
547
  const link = document.createElement('a');
548
548
  link.download = fileName + '.png';
549
549
  canvas.toBlob(blob => {
550
+ if (blob === null) {
551
+ return;
552
+ }
550
553
  link.href = URL.createObjectURL(blob);
551
554
  link.click();
552
555
  });
@@ -21,7 +21,9 @@ function getReleaseNoteLang(): string {
21
21
  // @ts-ignore TODO(crbug.com/1163928) Wait for Intl support.
22
22
  const currentDevToolsLocale = new Intl.Locale(currentDevToolsUILanguage);
23
23
 
24
- return releaseNoteLangs.has(currentDevToolsLocale.language) ? currentDevToolsLocale.language : '';
24
+ return currentDevToolsLocale.language && releaseNoteLangs.has(currentDevToolsLocale.language) ?
25
+ currentDevToolsLocale.language :
26
+ '';
25
27
  }
26
28
 
27
29
  function getLocalizedReleaseNoteURL(url: string): string {
@@ -270,7 +270,13 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
270
270
 
271
271
  private selectTabInternal(tabId: string): void {
272
272
  if (!this.selectTab(tabId)) {
273
- this.selectTab('headers');
273
+ // maybeAppendPayloadPanel might cause payload tab to appear asynchronously, so
274
+ // it makes sense to retry on the next tick
275
+ setTimeout(() => {
276
+ if (!this.selectTab(tabId)) {
277
+ this.selectTab('headers');
278
+ }
279
+ }, 0);
274
280
  }
275
281
  }
276
282
 
@@ -132,11 +132,8 @@
132
132
  }
133
133
  }
134
134
 
135
- .heap-snapshot-view tr:not(.selected) td.object-column span.heap-object-tag {
136
- color: var(--color-text-secondary);
137
- }
138
-
139
- .heap-snapshot-view td.object-column span.grayed {
135
+ .heap-snapshot-view tr:not(.selected) td.object-column span.heap-object-tag,
136
+ .heap-snapshot-view tr:not(.selected) td.object-column span.grayed {
140
137
  color: var(--color-text-secondary);
141
138
  }
142
139
 
@@ -41,7 +41,7 @@ export class SnippetFileSystem extends Persistence.PlatformFileSystem.PlatformFi
41
41
  private readonly snippetsSetting: Common.Settings.Setting<Snippet[]>;
42
42
  constructor() {
43
43
  // TODO(crbug.com/1253323): Cast to UrlString will be removed when migration to branded types is complete.
44
- super('snippet://' as Platform.DevToolsPath.UrlString, 'snippets');
44
+ super('snippet://', 'snippets');
45
45
  this.lastSnippetIdentifierSetting =
46
46
  Common.Settings.Settings.instance().createSetting('scriptSnippets_lastIdentifier', 0);
47
47
  this.snippetsSetting = Common.Settings.Settings.instance().createSetting('scriptSnippets', []);
@@ -702,8 +702,8 @@ export class DebuggerPlugin extends Plugin {
702
702
  if (this.popoverHelper.isPopoverVisible()) {
703
703
  this.popoverHelper.hidePopover();
704
704
  event.consume();
705
+ return true;
705
706
  }
706
- return true;
707
707
  }
708
708
  if (ctrlDown && this.executionLocation) {
709
709
  this.setControlDown(true);
@@ -851,7 +851,7 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
851
851
  // TODO(crbug.com/1253323): Cast to RawPathString will be removed when migration to branded types is complete.
852
852
  const folderPath = Common.ParsedURL.ParsedURL.capFilePrefix(
853
853
  Persistence.FileSystemWorkspaceBinding.FileSystemWorkspaceBinding.completeURL(project, path) as
854
- Platform.DevToolsPath.RawPathString,
854
+ Platform.DevToolsPath.UrlString,
855
855
  Host.Platform.isWin());
856
856
  contextMenu.revealSection().appendItem(
857
857
  i18nString(UIStrings.openFolder),
@@ -380,7 +380,6 @@ export class UISourceCodeFrame extends
380
380
  const location = this.editorLocationToUILocation(lineNumber, columnNumber);
381
381
  contextMenu.appendApplicableItems(
382
382
  new Workspace.UISourceCode.UILocation(this.uiSourceCodeInternal, location.lineNumber, location.columnNumber));
383
- contextMenu.appendApplicableItems(this);
384
383
  for (const plugin of this.plugins) {
385
384
  plugin.populateTextAreaContextMenu(contextMenu, lineNumber, columnNumber);
386
385
  }
@@ -93,6 +93,9 @@ export class TimelineController implements SDK.TargetManager.SDKModelObserver<SD
93
93
  ];
94
94
  categoriesArray.push(TimelineModel.TimelineModel.TimelineModelImpl.Category.LatencyInfo);
95
95
 
96
+ if (Root.Runtime.experiments.isEnabled('timelineV8RuntimeCallStats') && options.enableJSSampling) {
97
+ categoriesArray.push(disabledByDefault('v8.runtime_stats_sampling'));
98
+ }
96
99
  if (!Root.Runtime.Runtime.queryParam('timelineTracingJSProfileDisabled') && options.enableJSSampling) {
97
100
  categoriesArray.push(disabledByDefault('v8.cpu_profiler'));
98
101
  }
@@ -46,7 +46,7 @@ import type {PerformanceModel} from './PerformanceModel.js';
46
46
  import {FlameChartStyle, Selection, TimelineFlameChartMarker} from './TimelineFlameChartView.js';
47
47
  import {TimelineSelection} from './TimelinePanel.js';
48
48
  import type {TimelineCategory} from './TimelineUIUtils.js';
49
- import {TimelineUIUtils} from './TimelineUIUtils.js';
49
+ import {TimelineUIUtils, assignLayoutShiftsToClusters} from './TimelineUIUtils.js';
50
50
 
51
51
  const UIStrings = {
52
52
  /**
@@ -768,7 +768,7 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
768
768
 
769
769
  const metricEvents: SDK.TracingModel.Event[] = [];
770
770
  const lcpEvents = [];
771
- const layoutShifts = [];
771
+ const layoutShifts: SDK.TracingModel.Event[] = [];
772
772
  const timelineModel = this.performanceModel.timelineModel();
773
773
  for (const track of this.model.tracks()) {
774
774
  for (const event of track.events) {
@@ -807,38 +807,7 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
807
807
  }
808
808
 
809
809
  if (layoutShifts.length) {
810
- const gapTimeInMs = 1000;
811
- const limitTimeInMs = 5000;
812
- let firstTimestamp = Number.NEGATIVE_INFINITY;
813
- let previousTimestamp = Number.NEGATIVE_INFINITY;
814
- let maxScore = 0;
815
- let currentClusterId = 1;
816
- let currentClusterScore = 0;
817
- let currentCluster = new Set<SDK.TracingModel.Event>();
818
-
819
- for (const e of layoutShifts) {
820
- if (e.args['data']['had_recent_input'] || e.args['data']['weighted_score_delta'] === undefined) {
821
- continue;
822
- }
823
-
824
- if (e.startTime - firstTimestamp > limitTimeInMs || e.startTime - previousTimestamp > gapTimeInMs) {
825
- firstTimestamp = e.startTime;
826
-
827
- for (const layoutShift of currentCluster) {
828
- layoutShift.args['data']['_current_cluster_score'] = currentClusterScore;
829
- layoutShift.args['data']['_current_cluster_id'] = currentClusterId;
830
- }
831
-
832
- currentClusterId += 1;
833
- currentClusterScore = 0;
834
- currentCluster = new Set();
835
- }
836
-
837
- previousTimestamp = e.startTime;
838
- currentClusterScore += e.args['data']['weighted_score_delta'];
839
- currentCluster.add(e);
840
- maxScore = Math.max(maxScore, currentClusterScore);
841
- }
810
+ assignLayoutShiftsToClusters(layoutShifts);
842
811
  }
843
812
 
844
813
  metricEvents.sort(SDK.TracingModel.Event.compareStartTime);
@@ -2421,9 +2421,13 @@ export class TimelineUIUtils {
2421
2421
  contentHelper.appendTextRow(i18nString(UIStrings.score), eventData['score'].toPrecision(4));
2422
2422
  contentHelper.appendTextRow(
2423
2423
  i18nString(UIStrings.cumulativeScore), eventData['cumulative_score'].toPrecision(4));
2424
- contentHelper.appendTextRow(i18nString(UIStrings.currentClusterId), eventData['_current_cluster_id']);
2425
- contentHelper.appendTextRow(
2426
- i18nString(UIStrings.currentClusterScore), eventData['_current_cluster_score'].toPrecision(4));
2424
+ if ('_current_cluster_id' in eventData) {
2425
+ contentHelper.appendTextRow(i18nString(UIStrings.currentClusterId), eventData['_current_cluster_id']);
2426
+ }
2427
+ if ('_current_cluster_score' in eventData) {
2428
+ contentHelper.appendTextRow(
2429
+ i18nString(UIStrings.currentClusterScore), eventData['_current_cluster_score'].toPrecision(4));
2430
+ }
2427
2431
  contentHelper.appendTextRow(
2428
2432
  i18nString(UIStrings.hadRecentInput),
2429
2433
  eventData['had_recent_input'] ? i18nString(UIStrings.yes) : i18nString(UIStrings.no));
@@ -3783,3 +3787,47 @@ export interface TimelineMarkerStyle {
3783
3787
  tall: boolean;
3784
3788
  lowPriority: boolean;
3785
3789
  }
3790
+
3791
+ export function assignLayoutShiftsToClusters(layoutShifts: readonly SDK.TracingModel.Event[]): void {
3792
+ const gapTimeInMs = 1000;
3793
+ const limitTimeInMs = 5000;
3794
+ let firstTimestamp = Number.NEGATIVE_INFINITY;
3795
+ let previousTimestamp = Number.NEGATIVE_INFINITY;
3796
+ let currentClusterId = 0;
3797
+ let currentClusterScore = 0;
3798
+ let currentCluster = new Set<SDK.TracingModel.Event>();
3799
+
3800
+ for (const event of layoutShifts) {
3801
+ if (event.args['data']['had_recent_input'] || event.args['data']['weighted_score_delta'] === undefined) {
3802
+ continue;
3803
+ }
3804
+
3805
+ if (event.startTime - firstTimestamp > limitTimeInMs || event.startTime - previousTimestamp > gapTimeInMs) {
3806
+ // This means the event does not fit into the current session/cluster, so we need to start a new cluster.
3807
+ firstTimestamp = event.startTime;
3808
+
3809
+ // Update all the layout shifts we found in this cluster to associate them with the cluster.
3810
+ for (const layoutShift of currentCluster) {
3811
+ layoutShift.args['data']['_current_cluster_score'] = currentClusterScore;
3812
+ layoutShift.args['data']['_current_cluster_id'] = currentClusterId;
3813
+ }
3814
+
3815
+ // Increment the cluster ID and reset the data.
3816
+ currentClusterId += 1;
3817
+ currentClusterScore = 0;
3818
+ currentCluster = new Set();
3819
+ }
3820
+
3821
+ // Store the timestamp of the previous layout shift.
3822
+ previousTimestamp = event.startTime;
3823
+ // Update the score of the current cluster and store this event in that cluster
3824
+ currentClusterScore += event.args['data']['weighted_score_delta'];
3825
+ currentCluster.add(event);
3826
+ }
3827
+
3828
+ // The last cluster we find may not get closed out - so if not, update all the shifts that we associate with it.
3829
+ for (const layoutShift of currentCluster) {
3830
+ layoutShift.args['data']['_current_cluster_score'] = currentClusterScore;
3831
+ layoutShift.args['data']['_current_cluster_id'] = currentClusterId;
3832
+ }
3833
+ }