chrome-devtools-frontend 1.0.936819 → 1.0.938678

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 (245) hide show
  1. package/config/gni/all_devtools_files.gni +0 -20
  2. package/config/gni/devtools_grd_files.gni +2 -10
  3. package/front_end/Images/whatsnew.avif +0 -0
  4. package/front_end/Tests.js +0 -1
  5. package/front_end/core/host/InspectorFrontendHostAPI.ts +1 -0
  6. package/front_end/core/host/UserMetrics.ts +25 -0
  7. package/front_end/core/platform/string-utilities.ts +23 -0
  8. package/front_end/core/sdk/DOMModel.ts +1 -1
  9. package/front_end/core/sdk/NetworkManager.ts +1 -0
  10. package/front_end/entrypoints/devtools_app/devtools_app.json +0 -5
  11. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +0 -3
  12. package/front_end/entrypoints/lighthouse_worker/LighthouseService.ts +3 -1
  13. package/front_end/entrypoints/main/MainImpl.ts +15 -0
  14. package/front_end/entrypoints/node_app/node_app-meta.ts +0 -3
  15. package/front_end/entrypoints/node_app/node_app.js +3 -0
  16. package/front_end/entrypoints/shell/shell.json +3 -7
  17. package/front_end/entrypoints/worker_app/worker_app.json +0 -2
  18. package/front_end/generated/InspectorBackendCommands.js +14 -5
  19. package/front_end/generated/SupportedCSSProperties.js +8 -4
  20. package/front_end/generated/protocol-mapping.d.ts +10 -0
  21. package/front_end/generated/protocol-proxy-api.d.ts +19 -0
  22. package/front_end/generated/protocol.d.ts +56 -1
  23. package/front_end/legacy_test_runner/test_runner/test_runner.js +2 -4
  24. package/front_end/models/issues_manager/DeprecationIssue.ts +67 -0
  25. package/front_end/models/issues_manager/IssuesManager.ts +5 -0
  26. package/front_end/models/issues_manager/descriptions/deprecation.md +3 -0
  27. package/front_end/models/issues_manager/issues_manager.ts +2 -0
  28. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +8 -1
  29. package/front_end/panels/accessibility/accessibility-meta.ts +0 -3
  30. package/front_end/panels/application/components/ReportsGrid.ts +38 -4
  31. package/front_end/panels/application/components/reportingApiGrid.css +4 -0
  32. package/front_end/panels/application/module.json +1 -3
  33. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +0 -5
  34. package/front_end/panels/console/console-meta.ts +1 -3
  35. package/front_end/panels/coverage/coverage-meta.ts +0 -3
  36. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +18 -17
  37. package/front_end/panels/css_overview/CSSOverviewPanel.ts +31 -10
  38. package/front_end/panels/css_overview/css_overview-meta.ts +0 -3
  39. package/front_end/panels/elements/StylePropertyTreeElement.ts +3 -0
  40. package/front_end/panels/elements/elements-meta.ts +0 -2
  41. package/front_end/panels/elements/stylesSidebarPane.css +8 -0
  42. package/front_end/panels/event_listeners/EventListenersView.ts +2 -0
  43. package/front_end/panels/help/ReleaseNoteText.ts +28 -0
  44. package/front_end/panels/issues/issuesTree.css +11 -0
  45. package/front_end/panels/lighthouse/module.json +0 -1
  46. package/front_end/panels/media/module.json +0 -1
  47. package/front_end/panels/network/module.json +0 -1
  48. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +3 -0
  49. package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +0 -2
  50. package/front_end/panels/sources/JavaScriptBreakpointsSidebarPane.ts +14 -17
  51. package/front_end/panels/sources/javaScriptBreakpointsSidebarPane.css +18 -44
  52. package/front_end/panels/sources/sources-meta.ts +0 -2
  53. package/front_end/panels/timeline/module.json +0 -1
  54. package/front_end/third_party/puppeteer/package/CHANGELOG.md +29 -0
  55. package/front_end/third_party/puppeteer/package/README.md +12 -14
  56. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.d.ts +2 -0
  57. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.d.ts.map +1 -1
  58. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.js +13 -5
  59. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.js.map +1 -1
  60. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js +2 -2
  61. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
  62. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.d.ts +10 -1
  63. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.d.ts.map +1 -1
  64. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.js +25 -7
  65. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.js.map +1 -1
  66. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.js +6 -6
  67. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.js.map +1 -1
  68. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.d.ts +3 -1
  69. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.d.ts.map +1 -1
  70. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.js +16 -12
  71. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.js.map +1 -1
  72. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Dialog.js +2 -2
  73. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Dialog.js.map +1 -1
  74. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts +10 -1
  75. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
  76. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js +9 -1
  77. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js.map +1 -1
  78. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.js +1 -1
  79. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.js.map +1 -1
  80. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.js +8 -8
  81. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.js.map +1 -1
  82. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FileChooser.js +2 -2
  83. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FileChooser.js.map +1 -1
  84. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.d.ts +21 -9
  85. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.d.ts.map +1 -1
  86. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.js +155 -72
  87. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.js.map +1 -1
  88. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.d.ts +5 -0
  89. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.d.ts.map +1 -1
  90. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.js +32 -29
  91. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.js.map +1 -1
  92. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPResponse.d.ts.map +1 -1
  93. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPResponse.js +14 -4
  94. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPResponse.js.map +1 -1
  95. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.d.ts +2 -3
  96. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.d.ts.map +1 -1
  97. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.js +3 -4
  98. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.js.map +1 -1
  99. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.d.ts +3 -3
  100. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.d.ts.map +1 -1
  101. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.js +13 -12
  102. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.js.map +1 -1
  103. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LifecycleWatcher.js +1 -1
  104. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LifecycleWatcher.js.map +1 -1
  105. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.d.ts.map +1 -1
  106. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.js +2 -5
  107. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.js.map +1 -1
  108. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.d.ts +33 -4
  109. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.d.ts.map +1 -1
  110. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.js +92 -46
  111. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.js.map +1 -1
  112. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.js +5 -5
  113. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.js.map +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.d.ts +3 -1
  115. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.d.ts.map +1 -1
  116. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.js +3 -2
  117. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.js.map +1 -1
  118. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/TaskQueue.d.ts +21 -0
  119. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/TaskQueue.d.ts.map +1 -0
  120. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/TaskQueue.js +30 -0
  121. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/TaskQueue.js.map +1 -0
  122. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Tracing.js +1 -1
  123. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Tracing.js.map +1 -1
  124. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/helper.js +5 -5
  125. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/helper.js.map +1 -1
  126. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.js +14 -14
  127. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.js.map +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.d.ts.map +1 -1
  129. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.js +11 -5
  130. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.js.map +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts +4 -0
  132. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  133. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Launcher.d.ts.map +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Launcher.js +30 -15
  135. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Launcher.js.map +1 -1
  136. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.js +1 -1
  137. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.js.map +1 -1
  138. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.js +2 -2
  139. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.js.map +1 -1
  140. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node-puppeteer-core.js +1 -1
  141. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node-puppeteer-core.js.map +1 -1
  142. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node.js +1 -1
  143. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node.js.map +1 -1
  144. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/web.js +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/web.js.map +1 -1
  146. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts +2 -0
  147. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts.map +1 -1
  148. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.js +9 -1
  149. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.js.map +1 -1
  150. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.d.ts +10 -1
  151. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.d.ts.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.js +22 -4
  153. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.js.map +1 -1
  154. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.d.ts +3 -1
  155. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.d.ts.map +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.js +6 -2
  157. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.js.map +1 -1
  158. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts +10 -1
  159. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
  160. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js +7 -0
  161. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js.map +1 -1
  162. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.d.ts +21 -9
  163. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.d.ts.map +1 -1
  164. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.js +150 -68
  165. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.js.map +1 -1
  166. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.d.ts +5 -0
  167. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.d.ts.map +1 -1
  168. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.js +22 -19
  169. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.js.map +1 -1
  170. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPResponse.d.ts.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPResponse.js +15 -4
  172. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPResponse.js.map +1 -1
  173. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.d.ts +2 -3
  174. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.d.ts.map +1 -1
  175. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.js +2 -3
  176. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.js.map +1 -1
  177. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts +3 -3
  178. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts.map +1 -1
  179. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.js +2 -1
  180. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.js.map +1 -1
  181. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.d.ts.map +1 -1
  182. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.js +1 -4
  183. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.js.map +1 -1
  184. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts +33 -4
  185. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts.map +1 -1
  186. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.js +69 -23
  187. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.js.map +1 -1
  188. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.d.ts +3 -1
  189. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.d.ts.map +1 -1
  190. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.js +3 -2
  191. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.js.map +1 -1
  192. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/TaskQueue.d.ts +21 -0
  193. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/TaskQueue.d.ts.map +1 -0
  194. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/TaskQueue.js +26 -0
  195. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/TaskQueue.js.map +1 -0
  196. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/helper.js +1 -1
  197. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/helper.js.map +1 -1
  198. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.js +1 -1
  199. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.js.map +1 -1
  200. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.d.ts.map +1 -1
  201. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.js +7 -1
  202. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.js.map +1 -1
  203. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts +4 -0
  204. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  205. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.d.ts.map +1 -1
  206. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.js +27 -12
  207. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.js.map +1 -1
  208. package/front_end/third_party/puppeteer/package/lib/types.d.ts +3862 -3771
  209. package/front_end/third_party/puppeteer/package/package.json +33 -40
  210. package/front_end/ui/components/data_grid/DataGrid.ts +3 -1
  211. package/front_end/ui/components/data_grid/DataGridUtils.ts +8 -5
  212. package/front_end/ui/components/data_grid/dataGrid.css +0 -5
  213. package/front_end/ui/components/icon_button/iconButton.css +1 -0
  214. package/front_end/ui/components/settings/settingCheckbox.css +1 -1
  215. package/front_end/ui/legacy/ContextMenu.ts +5 -2
  216. package/front_end/ui/legacy/ListWidget.ts +2 -4
  217. package/front_end/ui/legacy/SoftContextMenu.ts +4 -1
  218. package/front_end/ui/legacy/XLink.ts +6 -6
  219. package/front_end/ui/legacy/checkboxTextLabel.css +1 -1
  220. package/front_end/ui/legacy/components/perf_ui/module.json +1 -3
  221. package/front_end/ui/legacy/components/source_frame/module.json +0 -1
  222. package/front_end/ui/legacy/inspectorCommon.css +1 -1
  223. package/front_end/ui/legacy/inspectorSyntaxHighlight.css +1 -1
  224. package/front_end/ui/legacy/inspectorSyntaxHighlightDark.css +1 -1
  225. package/front_end/ui/legacy/softContextMenu.css +10 -0
  226. package/front_end/ui/legacy/tabbedPane.css +5 -0
  227. package/front_end/ui/legacy/themeColors.css +1 -0
  228. package/front_end/ui/legacy/treeoutline.css +16 -0
  229. package/front_end/ui/legacy/viewContainers.css +6 -1
  230. package/package.json +1 -1
  231. package/scripts/build/ninja/copy-file.js +10 -1
  232. package/scripts/build/ninja/copy-files.js +10 -1
  233. package/scripts/eslint_rules/lib/check_test_definitions.js +2 -1
  234. package/scripts/eslint_rules/tests/check_test_definitions_test.js +34 -0
  235. package/scripts/eslint_rules/tests/migrate_create_shadow_root_with_styles_test.js +1 -1
  236. package/scripts/eslint_rules/tests/migrate_register_required_css_test.js +1 -1
  237. package/front_end/entrypoints/inspector_main/module.json +0 -9
  238. package/front_end/panels/accessibility/module.json +0 -7
  239. package/front_end/panels/browser_debugger/module.json +0 -7
  240. package/front_end/panels/console/module.json +0 -6
  241. package/front_end/panels/coverage/module.json +0 -6
  242. package/front_end/panels/css_overview/module.json +0 -4
  243. package/front_end/panels/elements/module.json +0 -6
  244. package/front_end/panels/protocol_monitor/module.json +0 -6
  245. package/front_end/panels/sources/module.json +0 -7
@@ -964,6 +964,26 @@ declare namespace Protocol {
964
964
  frameId?: Page.FrameId;
965
965
  }
966
966
 
967
+ /**
968
+ * This issue tracks information needed to print a deprecation message.
969
+ * The formatting is inherited from the old console.log version, see more at:
970
+ * https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/frame/deprecation.cc
971
+ * TODO(crbug.com/1264960): Re-work format to add i18n support per:
972
+ * https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/devtools_protocol/README.md
973
+ */
974
+ export interface DeprecationIssueDetails {
975
+ affectedFrame?: AffectedFrame;
976
+ sourceCodeLocation: SourceCodeLocation;
977
+ /**
978
+ * The content of the deprecation issue (this won't be translated),
979
+ * e.g. "window.inefficientLegacyStorageMethod will be removed in M97,
980
+ * around January 2022. Please use Web Storage or Indexed Database
981
+ * instead. This standard was abandoned in January, 1970. See
982
+ * https://www.chromestatus.com/feature/5684870116278272 for more details."
983
+ */
984
+ message?: string;
985
+ }
986
+
967
987
  /**
968
988
  * A unique identifier for the type of issue. Each type may use one of the
969
989
  * optional fields in InspectorIssueDetails to convey more specific
@@ -984,6 +1004,7 @@ declare namespace Protocol {
984
1004
  NavigatorUserAgentIssue = 'NavigatorUserAgentIssue',
985
1005
  WasmCrossOriginModuleSharingIssue = 'WasmCrossOriginModuleSharingIssue',
986
1006
  GenericIssue = 'GenericIssue',
1007
+ DeprecationIssue = 'DeprecationIssue',
987
1008
  }
988
1009
 
989
1010
  /**
@@ -1006,6 +1027,7 @@ declare namespace Protocol {
1006
1027
  navigatorUserAgentIssueDetails?: NavigatorUserAgentIssueDetails;
1007
1028
  wasmCrossOriginModuleSharingIssue?: WasmCrossOriginModuleSharingIssueDetails;
1008
1029
  genericIssueDetails?: GenericIssueDetails;
1030
+ deprecationIssueDetails?: DeprecationIssueDetails;
1009
1031
  }
1010
1032
 
1011
1033
  /**
@@ -4074,6 +4096,29 @@ declare namespace Protocol {
4074
4096
  }
4075
4097
  }
4076
4098
 
4099
+ /**
4100
+ * EventBreakpoints permits setting breakpoints on particular operations and
4101
+ * events in targets that run JavaScript but do not have a DOM.
4102
+ * JavaScript execution will stop on these operations as if there was a regular
4103
+ * breakpoint set.
4104
+ */
4105
+ export namespace EventBreakpoints {
4106
+
4107
+ export interface SetInstrumentationBreakpointRequest {
4108
+ /**
4109
+ * Instrumentation name to stop on.
4110
+ */
4111
+ eventName: string;
4112
+ }
4113
+
4114
+ export interface RemoveInstrumentationBreakpointRequest {
4115
+ /**
4116
+ * Instrumentation name to stop on.
4117
+ */
4118
+ eventName: string;
4119
+ }
4120
+ }
4121
+
4077
4122
  /**
4078
4123
  * This domain facilitates obtaining document snapshots with DOM, layout, and style information.
4079
4124
  */
@@ -8528,6 +8573,12 @@ declare namespace Protocol {
8528
8573
  * Request initiator.
8529
8574
  */
8530
8575
  initiator: Initiator;
8576
+ /**
8577
+ * In the case that redirectResponse is populated, this flag indicates whether
8578
+ * requestWillBeSentExtraInfo and responseReceivedExtraInfo events will be or were emitted
8579
+ * for the request which was just redirected.
8580
+ */
8581
+ redirectHasExtraInfo: boolean;
8531
8582
  /**
8532
8583
  * Redirect response data.
8533
8584
  */
@@ -8602,6 +8653,11 @@ declare namespace Protocol {
8602
8653
  * Response data.
8603
8654
  */
8604
8655
  response: Response;
8656
+ /**
8657
+ * Indicates whether requestWillBeSentExtraInfo and responseReceivedExtraInfo events will be
8658
+ * or were emitted for this request.
8659
+ */
8660
+ hasExtraInfo: boolean;
8605
8661
  /**
8606
8662
  * Frame identifier.
8607
8663
  */
@@ -10492,7 +10548,6 @@ declare namespace Protocol {
10492
10548
  ContentWebUSB = 'ContentWebUSB',
10493
10549
  ContentMediaSession = 'ContentMediaSession',
10494
10550
  ContentMediaSessionService = 'ContentMediaSessionService',
10495
- ContentMediaPlay = 'ContentMediaPlay',
10496
10551
  EmbedderPopupBlockerTabHelper = 'EmbedderPopupBlockerTabHelper',
10497
10552
  EmbedderSafeBrowsingTriggeredPopupBlocker = 'EmbedderSafeBrowsingTriggeredPopupBlocker',
10498
10553
  EmbedderSafeBrowsingThreatDetails = 'EmbedderSafeBrowsingThreatDetails',
@@ -59,15 +59,13 @@ export async function _executeTestScript() {
59
59
 
60
60
  // Auto-start unit tests
61
61
  self.test = async function() {
62
- // TODO(crbug.com/1011811): Remove eval when we use TypeScript which does support dynamic imports
63
- await eval(`import("${testScriptURL}")`);
62
+ await import(testScriptURL);
64
63
  };
65
64
  return;
66
65
  }
67
66
 
68
67
  try {
69
- // TODO(crbug.com/1011811): Remove eval when we use TypeScript which does support dynamic imports
70
- await eval(`import("${testScriptURL}")`);
68
+ await import(testScriptURL);
71
69
  } catch (err) {
72
70
  TestRunner.addResult('TEST ENDED EARLY DUE TO UNCAUGHT ERROR:');
73
71
  TestRunner.addResult(err && err.stack || err);
@@ -0,0 +1,67 @@
1
+ // Copyright 2021 The Chromium Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import type * as SDK from '../../core/sdk/sdk.js';
6
+ import type * as Protocol from '../../generated/protocol.js';
7
+
8
+ import {Issue, IssueCategory, IssueKind} from './Issue.js';
9
+ import type {MarkdownIssueDescription} from './MarkdownIssueDescription.js';
10
+
11
+ export const enum IssueCode {
12
+ DeprecationIssue = 'DeprecationIssue',
13
+ }
14
+
15
+ export class DeprecationIssue extends Issue<IssueCode> {
16
+ private issueDetails: Protocol.Audits.DeprecationIssueDetails;
17
+
18
+ constructor(issueDetails: Protocol.Audits.DeprecationIssueDetails, issuesModel: SDK.IssuesModel.IssuesModel) {
19
+ super(IssueCode.DeprecationIssue, issuesModel);
20
+ this.issueDetails = issueDetails;
21
+ }
22
+
23
+ getCategory(): IssueCategory {
24
+ return IssueCategory.Other;
25
+ }
26
+
27
+ details(): Protocol.Audits.DeprecationIssueDetails {
28
+ return this.issueDetails;
29
+ }
30
+
31
+ getDescription(): MarkdownIssueDescription|null {
32
+ return {
33
+ file: 'deprecation.md',
34
+ substitutions: new Map([
35
+ // TODO(crbug.com/1264960): Re-work format to add i18n support per:
36
+ // https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/devtools_protocol/README.md
37
+ ['PLACEHOLDER_message', String(this.issueDetails.message)],
38
+ ]),
39
+ links: [],
40
+ };
41
+ }
42
+
43
+ sources(): Iterable<Protocol.Audits.SourceCodeLocation> {
44
+ if (this.issueDetails.sourceCodeLocation) {
45
+ return [this.issueDetails.sourceCodeLocation];
46
+ }
47
+ return [];
48
+ }
49
+
50
+ primaryKey(): string {
51
+ return JSON.stringify(this.issueDetails);
52
+ }
53
+
54
+ getKind(): IssueKind {
55
+ return IssueKind.BreakingChange;
56
+ }
57
+
58
+ static fromInspectorIssue(issuesModel: SDK.IssuesModel.IssuesModel, inspectorIssue: Protocol.Audits.InspectorIssue):
59
+ DeprecationIssue[] {
60
+ const details = inspectorIssue.details.deprecationIssueDetails;
61
+ if (!details) {
62
+ console.warn('Deprecation issue without details received.');
63
+ return [];
64
+ }
65
+ return [new DeprecationIssue(details, issuesModel)];
66
+ }
67
+ }
@@ -11,6 +11,7 @@ import {AttributionReportingIssue} from './AttributionReportingIssue.js';
11
11
  import {ContentSecurityPolicyIssue} from './ContentSecurityPolicyIssue.js';
12
12
  import {CorsIssue} from './CorsIssue.js';
13
13
  import {CrossOriginEmbedderPolicyIssue, isCrossOriginEmbedderPolicyIssue} from './CrossOriginEmbedderPolicyIssue.js';
14
+ import {DeprecationIssue} from './DeprecationIssue.js';
14
15
  import {GenericIssue} from './GenericIssue.js';
15
16
  import {HeavyAdIssue} from './HeavyAdIssue.js';
16
17
  import type {Issue, IssueKind} from './Issue.js';
@@ -99,6 +100,10 @@ const issueCodeHandlers = new Map<
99
100
  Protocol.Audits.InspectorIssueCode.GenericIssue,
100
101
  GenericIssue.fromInspectorIssue,
101
102
  ],
103
+ [
104
+ Protocol.Audits.InspectorIssueCode.DeprecationIssue,
105
+ DeprecationIssue.fromInspectorIssue,
106
+ ],
102
107
  ]);
103
108
 
104
109
  /**
@@ -0,0 +1,3 @@
1
+ # Deprecated Feature Used
2
+
3
+ {PLACEHOLDER_message}
@@ -7,6 +7,7 @@ import * as ContentSecurityPolicyIssue from './ContentSecurityPolicyIssue.js';
7
7
  import * as ContrastCheckTrigger from './ContrastCheckTrigger.js';
8
8
  import * as CorsIssue from './CorsIssue.js';
9
9
  import * as CrossOriginEmbedderPolicyIssue from './CrossOriginEmbedderPolicyIssue.js';
10
+ import * as DeprecationIssue from './DeprecationIssue.js';
10
11
  import * as GenericIssue from './GenericIssue.js';
11
12
  import * as HeavyAdIssue from './HeavyAdIssue.js';
12
13
  import * as Issue from './Issue.js';
@@ -30,6 +31,7 @@ export {
30
31
  ContrastCheckTrigger,
31
32
  CorsIssue,
32
33
  CrossOriginEmbedderPolicyIssue,
34
+ DeprecationIssue,
33
35
  GenericIssue,
34
36
  HeavyAdIssue,
35
37
  Issue,
@@ -93,6 +93,9 @@ export class AXBreadcrumbsPane extends AccessibilitySubPane {
93
93
  let parent: AXBreadcrumb|null = null;
94
94
  this.inspectedNodeBreadcrumb = null;
95
95
  for (ancestor of ancestorChain) {
96
+ if (ancestor !== axNode && ancestor.ignored() && ancestor.parentNode()) {
97
+ continue;
98
+ }
96
99
  const breadcrumb = new AXBreadcrumb(ancestor, depth, (ancestor === axNode));
97
100
  if (parent) {
98
101
  parent.appendChild(breadcrumb);
@@ -112,6 +115,10 @@ export class AXBreadcrumbsPane extends AccessibilitySubPane {
112
115
 
113
116
  function append(
114
117
  parentBreadcrumb: AXBreadcrumb, axNode: SDK.AccessibilityModel.AccessibilityNode, localDepth: number): void {
118
+ if (axNode.ignored()) {
119
+ axNode.children().map(child => append(parentBreadcrumb, child, localDepth));
120
+ return;
121
+ }
115
122
  const childBreadcrumb = new AXBreadcrumb(axNode, localDepth, false);
116
123
  parentBreadcrumb.appendChild(childBreadcrumb);
117
124
 
@@ -121,7 +128,7 @@ export class AXBreadcrumbsPane extends AccessibilitySubPane {
121
128
  }
122
129
  }
123
130
 
124
- if (this.inspectedNodeBreadcrumb) {
131
+ if (this.inspectedNodeBreadcrumb && !axNode.ignored()) {
125
132
  for (const child of axNode.children()) {
126
133
  append(this.inspectedNodeBreadcrumb, child, depth);
127
134
  if (child.backendDOMNodeId() === this.collapsingBreadcrumbId) {
@@ -3,7 +3,6 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import * as i18n from '../../core/i18n/i18n.js';
6
- import * as Root from '../../core/root/root.js';
7
6
  import * as UI from '../../ui/legacy/legacy.js';
8
7
 
9
8
  // eslint-disable-next-line rulesdir/es_modules_import
@@ -26,8 +25,6 @@ const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined
26
25
 
27
26
  async function loadAccessibilityModule(): Promise<typeof Accessibility> {
28
27
  if (!loadedAccessibilityModule) {
29
- // Side-effect import resources in module.json
30
- await Root.Runtime.Runtime.instance().loadModulePromise('panels/accessibility');
31
28
  loadedAccessibilityModule = await import('./accessibility.js');
32
29
  }
33
30
  return loadedAccessibilityModule;
@@ -5,6 +5,7 @@
5
5
  import * as i18n from '../../../core/i18n/i18n.js';
6
6
  import * as DataGrid from '../../../ui/components/data_grid/data_grid.js';
7
7
  import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
8
+ import * as IconButton from '../../../ui/components/icon_button/icon_button.js';
8
9
  import * as LitHtml from '../../../ui/lit-html/lit-html.js';
9
10
 
10
11
  import type * as Protocol from '../../../generated/protocol.js';
@@ -24,6 +25,33 @@ export const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
24
25
 
25
26
  const {render, html} = LitHtml;
26
27
 
28
+ export class ReportsGridStatusHeader extends HTMLElement {
29
+ static readonly litTagName = LitHtml.literal`devtools-resources-reports-grid-status-header`;
30
+ private readonly shadow = this.attachShadow({mode: 'open'});
31
+
32
+ connectedCallback(): void {
33
+ this.shadow.adoptedStyleSheets = [reportingApiGridStyles];
34
+ this.render();
35
+ }
36
+
37
+ private render(): void {
38
+ // Disabled until https://crbug.com/1079231 is fixed.
39
+ // clang-format off
40
+ render(html`
41
+ ${i18n.i18n.lockedString('Status')}
42
+ <x-link href="https://web.dev/reporting-api/#report-status">
43
+ <${IconButton.Icon.Icon.litTagName} class="inline-icon" .data=${{
44
+ iconName: 'help_outline',
45
+ color: 'var(--color-primary)',
46
+ width: '16px',
47
+ height: '16px',
48
+ } as IconButton.Icon.IconData}></${IconButton.Icon.Icon.litTagName}>
49
+ </x-link>
50
+ `, this.shadow, {host: this});
51
+ // clang-format on
52
+ }
53
+ }
54
+
27
55
  export interface ReportsGridData {
28
56
  reports: Protocol.Network.ReportingApiReport[];
29
57
  }
@@ -59,21 +87,24 @@ export class ReportsGrid extends HTMLElement {
59
87
  {
60
88
  id: 'type',
61
89
  title: i18n.i18n.lockedString('Type'),
62
- widthWeighting: 10,
90
+ widthWeighting: 20,
63
91
  hideable: false,
64
92
  visible: true,
65
93
  },
66
94
  {
67
95
  id: 'status',
68
96
  title: i18n.i18n.lockedString('Status'),
69
- widthWeighting: 10,
97
+ widthWeighting: 20,
70
98
  hideable: false,
71
99
  visible: true,
100
+ titleElement: html`
101
+ <${ReportsGridStatusHeader.litTagName}></${ReportsGridStatusHeader.litTagName}>
102
+ `,
72
103
  },
73
104
  {
74
105
  id: 'destination',
75
106
  title: i18n.i18n.lockedString('Destination'),
76
- widthWeighting: 10,
107
+ widthWeighting: 20,
77
108
  hideable: false,
78
109
  visible: true,
79
110
  },
@@ -116,7 +147,7 @@ export class ReportsGrid extends HTMLElement {
116
147
  </div>
117
148
  `}
118
149
  </div>
119
- `, this.shadow);
150
+ `, this.shadow, {host: this});
120
151
  // clang-format on
121
152
  }
122
153
 
@@ -135,10 +166,13 @@ export class ReportsGrid extends HTMLElement {
135
166
  }
136
167
  }
137
168
 
169
+ ComponentHelpers.CustomElements.defineComponent(
170
+ 'devtools-resources-reports-grid-status-header', ReportsGridStatusHeader);
138
171
  ComponentHelpers.CustomElements.defineComponent('devtools-resources-reports-grid', ReportsGrid);
139
172
 
140
173
  declare global {
141
174
  interface HTMLElementTagNameMap {
175
+ 'devtools-resources-reports-grid-status-header': ReportsGridStatusHeader;
142
176
  'devtools-resources-reports-grid': ReportsGrid;
143
177
  }
144
178
  }
@@ -33,3 +33,7 @@
33
33
  devtools-data-grid-controller {
34
34
  border: 1px solid var(--color-details-hairline);
35
35
  }
36
+
37
+ .inline-icon {
38
+ vertical-align: text-bottom;
39
+ }
@@ -1,9 +1,7 @@
1
1
  {
2
2
  "dependencies": [
3
- "ui/legacy/components/source_frame",
4
3
  "ui/legacy",
5
4
  "ui/legacy/components/perf_ui",
6
- "panels/network",
7
- "panels/sources"
5
+ "panels/network"
8
6
  ]
9
7
  }
@@ -2,7 +2,6 @@
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 * as Root from '../../core/root/root.js';
6
5
  import * as SDK from '../../core/sdk/sdk.js';
7
6
  import * as UI from '../../ui/legacy/legacy.js';
8
7
 
@@ -83,8 +82,6 @@ let loadedBrowserDebuggerModule: (typeof BrowserDebugger|undefined);
83
82
 
84
83
  async function loadBrowserDebuggerModule(): Promise<typeof BrowserDebugger> {
85
84
  if (!loadedBrowserDebuggerModule) {
86
- // Side-effect import resources in module.json
87
- await Root.Runtime.Runtime.instance().loadModulePromise('panels/browser_debugger');
88
85
  loadedBrowserDebuggerModule = await import('./browser_debugger.js');
89
86
  }
90
87
  return loadedBrowserDebuggerModule;
@@ -99,8 +96,6 @@ let loadedSourcesModule: (typeof Sources|undefined);
99
96
  // collision with node_app as a separate view with the same id is registered in it.
100
97
  async function loadSourcesModule(): Promise<typeof Sources> {
101
98
  if (!loadedSourcesModule) {
102
- // Side-effect import resources in module.json
103
- await Root.Runtime.Runtime.instance().loadModulePromise('sources');
104
99
  loadedSourcesModule = await import('../sources/sources.js');
105
100
  }
106
101
  return loadedSourcesModule;
@@ -3,7 +3,6 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import * as Common from '../../core/common/common.js';
6
- import * as Root from '../../core/root/root.js';
7
6
  import * as UI from '../../ui/legacy/legacy.js';
8
7
 
9
8
  // eslint-disable-next-line rulesdir/es_modules_import
@@ -118,8 +117,6 @@ let loadedConsoleModule: (typeof Console|undefined);
118
117
 
119
118
  async function loadConsoleModule(): Promise<typeof Console> {
120
119
  if (!loadedConsoleModule) {
121
- // Side-effect import resources in module.json
122
- await Root.Runtime.Runtime.instance().loadModulePromise('panels/console');
123
120
  loadedConsoleModule = await import('./console.js');
124
121
  }
125
122
  return loadedConsoleModule;
@@ -306,6 +303,7 @@ Common.Settings.registerSettingExtension({
306
303
 
307
304
  Common.Settings.registerSettingExtension({
308
305
  category: Common.Settings.SettingCategory.CONSOLE,
306
+ storageType: Common.Settings.SettingStorageType.Synced,
309
307
  title: i18nLazyString(UIStrings.groupSimilarMessagesInConsole),
310
308
  settingName: 'consoleGroupSimilar',
311
309
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -3,7 +3,6 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import * as i18n from '../../core/i18n/i18n.js';
6
- import * as Root from '../../core/root/root.js';
7
6
  import * as UI from '../../ui/legacy/legacy.js';
8
7
 
9
8
  // eslint-disable-next-line rulesdir/es_modules_import
@@ -38,8 +37,6 @@ let loadedCoverageModule: (typeof Coverage|undefined);
38
37
 
39
38
  async function loadCoverageModule(): Promise<typeof Coverage> {
40
39
  if (!loadedCoverageModule) {
41
- // Side-effect import resources in module.json
42
- await Root.Runtime.Runtime.instance().loadModulePromise('panels/coverage');
43
40
  loadedCoverageModule = await import('./coverage.js');
44
41
  }
45
42
  return loadedCoverageModule;
@@ -11,12 +11,9 @@ import * as TextUtils from '../../models/text_utils/text_utils.js';
11
11
  import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
12
12
  import * as Components from '../../ui/legacy/components/utils/utils.js';
13
13
  import * as UI from '../../ui/legacy/legacy.js';
14
-
15
- import cssOverviewCompletedViewStyles from './cssOverviewCompletedView.css.js';
16
-
17
- import type * as ProtocolProxyApi from '../../generated/protocol-proxy-api.js';
18
14
  import type * as Protocol from '../../generated/protocol.js';
19
15
 
16
+ import cssOverviewCompletedViewStyles from './cssOverviewCompletedView.css.js';
20
17
  import type {OverviewController, PopulateNodesEvent, PopulateNodesEventNodes, PopulateNodesEventNodeTypes} from './CSSOverviewController.js';
21
18
  import {Events as CSSOverViewControllerEvents} from './CSSOverviewController.js';
22
19
  import {CSSOverviewSidebarPanel, SidebarEvents} from './CSSOverviewSidebarPanel.js';
@@ -227,15 +224,14 @@ export class CSSOverviewCompletedView extends UI.Panel.PanelWithSidebar {
227
224
  readonly #resultsContainer: UI.Widget.VBox;
228
225
  readonly #elementContainer: DetailsView;
229
226
  readonly #sideBar: CSSOverviewSidebarPanel;
230
- #cssModel: SDK.CSSModel.CSSModel;
231
- #domModel: SDK.DOMModel.DOMModel;
232
- readonly #domAgent: ProtocolProxyApi.DOMApi;
227
+ #cssModel?: SDK.CSSModel.CSSModel;
228
+ #domModel?: SDK.DOMModel.DOMModel;
233
229
  #linkifier: Components.Linkifier.Linkifier;
234
230
  #viewMap: Map<string, ElementDetailsView>;
235
231
  #data: OverviewData|null;
236
232
  #fragment?: UI.Fragment.Fragment;
237
233
 
238
- constructor(controller: OverviewController, target: SDK.Target.Target) {
234
+ constructor(controller: OverviewController) {
239
235
  super('css_overview_completed_view');
240
236
 
241
237
  this.#controller = controller;
@@ -264,14 +260,6 @@ export class CSSOverviewCompletedView extends UI.Panel.PanelWithSidebar {
264
260
  this.splitWidget().setSidebarWidget(this.#sideBar);
265
261
  this.splitWidget().setMainWidget(this.#mainContainer);
266
262
 
267
- const cssModel = target.model(SDK.CSSModel.CSSModel);
268
- const domModel = target.model(SDK.DOMModel.DOMModel);
269
- if (!cssModel || !domModel) {
270
- throw new Error('Target must provide CSS and DOM models');
271
- }
272
- this.#cssModel = cssModel;
273
- this.#domModel = domModel;
274
- this.#domAgent = target.domAgent();
275
263
  this.#linkifier = new Components.Linkifier.Linkifier(/* maxLinkLength */ 20, /* useLinkDecorator */ true);
276
264
 
277
265
  this.#viewMap = new Map();
@@ -300,6 +288,16 @@ export class CSSOverviewCompletedView extends UI.Panel.PanelWithSidebar {
300
288
  // TODO(paullewis): update the links in the panels in case source has been .
301
289
  }
302
290
 
291
+ initializeModels(target: SDK.Target.Target): void {
292
+ const cssModel = target.model(SDK.CSSModel.CSSModel);
293
+ const domModel = target.model(SDK.DOMModel.DOMModel);
294
+ if (!cssModel || !domModel) {
295
+ throw new Error('Target must provide CSS and DOM models');
296
+ }
297
+ this.#cssModel = cssModel;
298
+ this.#domModel = domModel;
299
+ }
300
+
303
301
  private sideBarItemSelected(event: Common.EventTarget.EventTargetEvent<string>): void {
304
302
  const {data} = event;
305
303
  const section = (this.#fragment as UI.Fragment.Fragment).$(data);
@@ -650,6 +648,9 @@ export class CSSOverviewCompletedView extends UI.Panel.PanelWithSidebar {
650
648
 
651
649
  let view = this.#viewMap.get(id);
652
650
  if (!view) {
651
+ if (!this.#domModel || !this.#cssModel) {
652
+ throw new Error('Unable to initialize CSS Overview, missing models');
653
+ }
653
654
  view = new ElementDetailsView(this.#controller, this.#domModel, this.#cssModel, this.#linkifier);
654
655
  view.populateNodes(payload.nodes);
655
656
  this.#viewMap.set(id, view);
@@ -970,7 +971,7 @@ export class ElementDetailsView extends UI.Widget.Widget {
970
971
  this.#elementGrid.setStriped(true);
971
972
  this.#elementGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged, this.sortMediaQueryDataGrid.bind(this));
972
973
 
973
- this.element.appendChild(this.#elementGrid.element);
974
+ this.#elementGrid.asWidget().show(this.element);
974
975
  }
975
976
 
976
977
  private sortMediaQueryDataGrid(): void {
@@ -21,12 +21,13 @@ import type {UnusedDeclaration} from './CSSOverviewUnusedDeclarations.js';
21
21
  // eslint-disable-next-line @typescript-eslint/naming-convention
22
22
  let CSSOverviewPanelInstance: CSSOverviewPanel;
23
23
 
24
- export class CSSOverviewPanel extends UI.Panel.Panel {
25
- readonly #model: CSSOverviewModel;
24
+ export class CSSOverviewPanel extends UI.Panel.Panel implements SDK.TargetManager.Observer {
26
25
  readonly #controller: OverviewController;
27
26
  readonly #startView: CSSOverviewComponents.CSSOverviewStartView.CSSOverviewStartView;
28
27
  readonly #processingView: CSSOverviewProcessingView;
29
28
  readonly #completedView: CSSOverviewCompletedView;
29
+ #model?: CSSOverviewModel;
30
+ #target?: SDK.Target.Target;
30
31
  #backgroundColors!: Map<string, Set<Protocol.DOM.BackendNodeId>>;
31
32
  #textColors!: Map<string, Set<Protocol.DOM.BackendNodeId>>;
32
33
  #fillColors!: Map<string, Set<Protocol.DOM.BackendNodeId>>;
@@ -44,15 +45,14 @@ export class CSSOverviewPanel extends UI.Panel.Panel {
44
45
 
45
46
  this.element.classList.add('css-overview-panel');
46
47
 
47
- const [model] = SDK.TargetManager.TargetManager.instance().models(CSSOverviewModel);
48
- this.#model = (model as CSSOverviewModel);
49
-
50
48
  this.#controller = new OverviewController();
51
49
  this.#startView = new CSSOverviewComponents.CSSOverviewStartView.CSSOverviewStartView();
52
50
  this.#startView.addEventListener(
53
51
  'overviewstartrequested', () => this.#controller.dispatchEventToListeners(Events.RequestOverviewStart));
54
52
  this.#processingView = new CSSOverviewProcessingView(this.#controller);
55
- this.#completedView = new CSSOverviewCompletedView(this.#controller, model.target());
53
+ this.#completedView = new CSSOverviewCompletedView(this.#controller);
54
+
55
+ SDK.TargetManager.TargetManager.instance().observeTargets(this);
56
56
 
57
57
  this.#controller.addEventListener(Events.RequestOverviewStart, _event => {
58
58
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.CaptureCssOverviewClicked);
@@ -73,6 +73,26 @@ export class CSSOverviewPanel extends UI.Panel.Panel {
73
73
  return CSSOverviewPanelInstance;
74
74
  }
75
75
 
76
+ targetAdded(target: SDK.Target.Target): void {
77
+ if (this.#target) {
78
+ return;
79
+ }
80
+ this.#target = target;
81
+ this.#completedView.initializeModels(target);
82
+ const [model] = SDK.TargetManager.TargetManager.instance().models(CSSOverviewModel);
83
+ this.#model = (model as CSSOverviewModel);
84
+ }
85
+
86
+ targetRemoved(): void {
87
+ }
88
+
89
+ private getModel(): CSSOverviewModel {
90
+ if (!this.#model) {
91
+ throw new Error('Did not retrieve model information yet.');
92
+ }
93
+ return this.#model;
94
+ }
95
+
76
96
  private reset(): void {
77
97
  this.#backgroundColors = new Map();
78
98
  this.#textColors = new Map();
@@ -104,7 +124,7 @@ export class CSSOverviewPanel extends UI.Panel.Panel {
104
124
  }
105
125
 
106
126
  private requestNodeHighlight(evt: Common.EventTarget.EventTargetEvent<number>): void {
107
- this.#model.highlightNode((evt.data as Protocol.DOM.BackendNodeId));
127
+ this.getModel().highlightNode((evt.data as Protocol.DOM.BackendNodeId));
108
128
  }
109
129
 
110
130
  private renderInitialView(): void {
@@ -144,10 +164,11 @@ export class CSSOverviewPanel extends UI.Panel.Panel {
144
164
  private async startOverview(): Promise<void> {
145
165
  this.renderOverviewStartedView();
146
166
 
167
+ const model = this.getModel();
147
168
  const [globalStyleStats, { elementCount, backgroundColors, textColors, textColorContrastIssues, fillColors, borderColors, fontInfo, unusedDeclarations }, mediaQueries] = await Promise.all([
148
- this.#model.getGlobalStylesheetStats(),
149
- this.#model.getNodeStyleStats(),
150
- this.#model.getMediaQueries(),
169
+ model.getGlobalStylesheetStats(),
170
+ model.getNodeStyleStats(),
171
+ model.getMediaQueries(),
151
172
  ]);
152
173
 
153
174
  if (elementCount) {
@@ -3,7 +3,6 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import * as i18n from '../../core/i18n/i18n.js';
6
- import * as Root from '../../core/root/root.js';
7
6
  import * as UI from '../../ui/legacy/legacy.js';
8
7
 
9
8
  // eslint-disable-next-line rulesdir/es_modules_import
@@ -27,8 +26,6 @@ let loadedCSSOverviewModule: (typeof CSSOverview|undefined);
27
26
 
28
27
  async function loadCSSOverviewModule(): Promise<typeof CSSOverview> {
29
28
  if (!loadedCSSOverviewModule) {
30
- // Side-effect import resources in module.json
31
- await Root.Runtime.Runtime.instance().loadModulePromise('panels/css_overview');
32
29
  loadedCSSOverviewModule = await import('./css_overview.js');
33
30
  }
34
31
  return loadedCSSOverviewModule;
@@ -1440,11 +1440,14 @@ export class StylePropertyTreeElement extends UI.TreeOutline.TreeElement {
1440
1440
  const currentNode = this.parentPaneInternal.node();
1441
1441
  this.parentPaneInternal.setUserOperation(true);
1442
1442
 
1443
+ styleText += Platform.StringUtilities.findUnclosedCssQuote(styleText);
1444
+
1443
1445
  // Append a ";" if the new text does not end in ";".
1444
1446
  // FIXME: this does not handle trailing comments.
1445
1447
  if (styleText.length && !/;\s*$/.test(styleText)) {
1446
1448
  styleText += ';';
1447
1449
  }
1450
+
1448
1451
  const overwriteProperty = !this.newProperty || hasBeenEditedIncrementally;
1449
1452
  let success: boolean = await this.property.setText(styleText, majorChange, overwriteProperty);
1450
1453
  // Revert to the original text if applying the new text failed