chrome-devtools-frontend 1.0.941208 → 1.0.943182

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 (289) hide show
  1. package/WATCHLISTS +1 -1
  2. package/config/gni/all_devtools_files.gni +0 -64
  3. package/config/gni/devtools_grd_files.gni +54 -19
  4. package/config/gni/devtools_image_files.gni +1 -3
  5. package/front_end/.eslintrc.js +11 -1
  6. package/front_end/Images/src/{feedback_thin_16x16_icon.svg → survey_feedback_icon.svg} +1 -1
  7. package/front_end/Tests.js +1 -32
  8. package/front_end/core/common/Color.ts +5 -0
  9. package/front_end/core/i18n/locales/en-US.json +17 -29
  10. package/front_end/core/i18n/locales/en-XL.json +17 -29
  11. package/front_end/core/sdk/CPUProfilerModel.ts +7 -9
  12. package/front_end/core/sdk/ConsoleModel.ts +27 -33
  13. package/front_end/core/sdk/DebuggerModel.ts +4 -14
  14. package/front_end/core/sdk/sdk-meta.ts +17 -3
  15. package/front_end/entrypoints/device_mode_emulation_frame/device_mode_emulation_frame.ts +1 -1
  16. package/front_end/entrypoints/devtools_app/devtools_app.js +1 -1
  17. package/front_end/entrypoints/devtools_app/devtools_app.json +1 -12
  18. package/front_end/entrypoints/formatter_worker/formatter_worker-entrypoint.ts +1 -1
  19. package/front_end/entrypoints/heap_snapshot_worker/heap_snapshot_worker-entrypoint.ts +1 -1
  20. package/front_end/entrypoints/inspector/inspector.js +1 -1
  21. package/front_end/entrypoints/inspector/inspector.json +1 -3
  22. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +2 -3
  23. package/front_end/entrypoints/js_app/js_app.js +1 -1
  24. package/front_end/entrypoints/js_app/js_app.json +1 -3
  25. package/front_end/entrypoints/main/MainImpl.ts +26 -0
  26. package/front_end/entrypoints/main/main-meta.ts +1 -2
  27. package/front_end/entrypoints/ndb_app/ndb_app.js +1 -1
  28. package/front_end/entrypoints/node_app/node_app-meta.ts +0 -2
  29. package/front_end/entrypoints/node_app/node_app.js +1 -1
  30. package/front_end/entrypoints/node_app/node_app.json +1 -3
  31. package/front_end/entrypoints/node_main/node_main-meta.ts +0 -1
  32. package/front_end/entrypoints/shell/shell.js +0 -11
  33. package/front_end/entrypoints/shell/shell.json +1 -5
  34. package/front_end/entrypoints/wasmparser_worker/wasmparser_worker-entrypoint.ts +1 -1
  35. package/front_end/entrypoints/worker_app/worker_app.js +1 -1
  36. package/front_end/entrypoints/worker_app/worker_app.json +1 -7
  37. package/front_end/generated/InspectorBackendCommands.js +19 -0
  38. package/front_end/generated/protocol-mapping.d.ts +31 -1
  39. package/front_end/generated/protocol-proxy-api.d.ts +34 -2
  40. package/front_end/generated/protocol.d.ts +81 -6
  41. package/front_end/legacy_test_runner/bindings_test_runner/IsolatedFilesystemTestRunner.js +2 -2
  42. package/front_end/legacy_test_runner/console_test_runner/console_test_runner.js +5 -1
  43. package/front_end/legacy_test_runner/legacy_test_runner.ts +10 -1
  44. package/front_end/legacy_test_runner/test_runner/TestRunner.js +3 -1
  45. package/front_end/models/formatter/SourceFormatter.ts +0 -10
  46. package/front_end/models/persistence/persistence-meta.ts +0 -1
  47. package/front_end/models/workspace/UISourceCode.ts +9 -42
  48. package/front_end/panels/accessibility/accessibility-meta.ts +0 -1
  49. package/front_end/panels/animation/AnimationTimeline.ts +3 -3
  50. package/front_end/panels/animation/animation-meta.ts +0 -1
  51. package/front_end/panels/application/ApplicationPanelSidebar.ts +3 -3
  52. package/front_end/panels/application/BackForwardCacheStrings.ts +3 -1
  53. package/front_end/panels/application/application-meta.ts +0 -4
  54. package/front_end/panels/application/components/EndpointsGrid.ts +1 -1
  55. package/front_end/panels/application/components/ReportsGrid.ts +1 -1
  56. package/front_end/panels/application/components/stackTraceRow.css +8 -0
  57. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +1 -2
  58. package/front_end/panels/changes/changes-meta.ts +0 -1
  59. package/front_end/panels/console/ConsolePinPane.ts +23 -32
  60. package/front_end/panels/console/ConsoleViewMessage.ts +8 -1
  61. package/front_end/panels/console/console-meta.ts +0 -1
  62. package/front_end/panels/console_counters/console_counters-meta.ts +0 -1
  63. package/front_end/panels/coverage/CoverageDecorationManager.ts +4 -5
  64. package/front_end/panels/coverage/CoverageView.ts +2 -105
  65. package/front_end/panels/coverage/coverage-meta.ts +0 -1
  66. package/front_end/panels/css_overview/components/CSSOverviewStartView.ts +11 -56
  67. package/front_end/panels/css_overview/components/cssOverviewStartView.css +1 -8
  68. package/front_end/panels/css_overview/css_overview-meta.ts +0 -1
  69. package/front_end/panels/developer_resources/developer_resources-meta.ts +0 -1
  70. package/front_end/panels/elements/ElementsTreeElement.ts +4 -9
  71. package/front_end/panels/elements/components/StylePropertyEditor.ts +2 -0
  72. package/front_end/panels/elements/components/adornerSettingsPane.css +0 -4
  73. package/front_end/panels/elements/elements-meta.ts +0 -1
  74. package/front_end/panels/emulation/DeviceModeToolbar.ts +3 -1
  75. package/front_end/panels/emulation/DeviceModeView.ts +2 -1
  76. package/front_end/panels/emulation/InspectedPagePlaceholder.ts +3 -1
  77. package/front_end/panels/emulation/MediaQueryInspector.ts +3 -1
  78. package/front_end/panels/emulation/emulation-meta.ts +2 -5
  79. package/front_end/panels/help/help-meta.ts +0 -1
  80. package/front_end/panels/input/input-meta.ts +0 -1
  81. package/front_end/panels/issues/issues-meta.ts +0 -3
  82. package/front_end/panels/js_profiler/js_profiler-meta.ts +0 -4
  83. package/front_end/panels/layers/layers-meta.ts +0 -4
  84. package/front_end/panels/lighthouse/LighthousePanel.ts +2 -4
  85. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -4
  86. package/front_end/panels/lighthouse/lighthouse-meta.ts +0 -1
  87. package/front_end/panels/lighthouse/lighthouseStartView.css +4 -0
  88. package/front_end/panels/lighthouse/module.json +0 -6
  89. package/front_end/panels/media/media-meta.ts +0 -4
  90. package/front_end/panels/mobile_throttling/mobile_throttling-meta.ts +0 -1
  91. package/front_end/panels/network/ResourceWebSocketFrameView.ts +2 -1
  92. package/front_end/panels/network/network-meta.ts +1 -5
  93. package/front_end/panels/performance_monitor/performance_monitor-meta.ts +0 -1
  94. package/front_end/panels/profiler/CPUProfileView.ts +10 -3
  95. package/front_end/panels/profiler/profiler-meta.ts +0 -3
  96. package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +0 -1
  97. package/front_end/panels/screencast/screencast-meta.ts +0 -4
  98. package/front_end/panels/security/security-meta.ts +0 -4
  99. package/front_end/panels/sensors/sensors-meta.ts +0 -1
  100. package/front_end/panels/settings/emulation/emulation-meta.ts +0 -1
  101. package/front_end/panels/settings/settings-meta.ts +0 -1
  102. package/front_end/panels/sources/BreakpointEditDialog.ts +16 -30
  103. package/front_end/panels/sources/CSSPlugin.ts +310 -331
  104. package/front_end/panels/sources/CallStackSidebarPane.ts +28 -34
  105. package/front_end/panels/sources/CoveragePlugin.ts +121 -6
  106. package/front_end/panels/sources/DebuggerPlugin.ts +1166 -1243
  107. package/front_end/panels/sources/EditingLocationHistoryManager.ts +71 -101
  108. package/front_end/panels/sources/GoToLineQuickOpen.ts +4 -3
  109. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +3 -3
  110. package/front_end/panels/sources/JavaScriptCompilerPlugin.ts +26 -23
  111. package/front_end/panels/sources/Plugin.ts +20 -4
  112. package/front_end/panels/sources/ProfilePlugin.ts +185 -0
  113. package/front_end/panels/sources/ScriptFormatterEditorAction.ts +3 -3
  114. package/front_end/panels/sources/ScriptOriginPlugin.ts +0 -10
  115. package/front_end/panels/sources/SnippetsPlugin.ts +1 -10
  116. package/front_end/panels/sources/SourcesPanel.ts +6 -5
  117. package/front_end/panels/sources/SourcesView.ts +10 -8
  118. package/front_end/panels/sources/TabbedEditorContainer.ts +31 -27
  119. package/front_end/panels/sources/UISourceCodeFrame.ts +335 -470
  120. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +3 -2
  121. package/front_end/panels/sources/sources-legacy.ts +0 -6
  122. package/front_end/panels/sources/sources-meta.ts +2 -6
  123. package/front_end/panels/sources/sources.ts +0 -2
  124. package/front_end/panels/timeline/timeline-meta.ts +2 -9
  125. package/front_end/panels/web_audio/web_audio-meta.ts +0 -1
  126. package/front_end/panels/webauthn/webauthn-meta.ts +0 -1
  127. package/front_end/third_party/codemirror.next/bundle.ts +9 -13
  128. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  129. package/front_end/third_party/codemirror.next/chunk/javascript.js +2 -2
  130. package/front_end/third_party/codemirror.next/chunk/markdown.js +2 -6
  131. package/front_end/third_party/codemirror.next/chunk/php.js +2 -6
  132. package/front_end/third_party/codemirror.next/chunk/python.js +1 -1
  133. package/front_end/third_party/codemirror.next/chunk/wast.js +1 -1
  134. package/front_end/third_party/codemirror.next/chunk/xml.js +2 -2
  135. package/front_end/third_party/codemirror.next/codemirror.next.d.ts +279 -198
  136. package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
  137. package/front_end/third_party/codemirror.next/package.json +13 -11
  138. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +1128 -1158
  139. package/front_end/third_party/lighthouse/locales/ar-XB.json +211 -79
  140. package/front_end/third_party/lighthouse/locales/ar.json +213 -81
  141. package/front_end/third_party/lighthouse/locales/bg.json +211 -79
  142. package/front_end/third_party/lighthouse/locales/ca.json +212 -80
  143. package/front_end/third_party/lighthouse/locales/cs.json +211 -79
  144. package/front_end/third_party/lighthouse/locales/da.json +211 -79
  145. package/front_end/third_party/lighthouse/locales/de.json +211 -79
  146. package/front_end/third_party/lighthouse/locales/el.json +213 -81
  147. package/front_end/third_party/lighthouse/locales/en-GB.json +211 -79
  148. package/front_end/third_party/lighthouse/locales/en-US.json +186 -75
  149. package/front_end/third_party/lighthouse/locales/en-XA.json +211 -79
  150. package/front_end/third_party/lighthouse/locales/en-XL.json +186 -75
  151. package/front_end/third_party/lighthouse/locales/es-419.json +211 -79
  152. package/front_end/third_party/lighthouse/locales/es.json +212 -80
  153. package/front_end/third_party/lighthouse/locales/fi.json +211 -79
  154. package/front_end/third_party/lighthouse/locales/fil.json +211 -79
  155. package/front_end/third_party/lighthouse/locales/fr.json +211 -79
  156. package/front_end/third_party/lighthouse/locales/he.json +212 -80
  157. package/front_end/third_party/lighthouse/locales/hi.json +214 -82
  158. package/front_end/third_party/lighthouse/locales/hr.json +211 -79
  159. package/front_end/third_party/lighthouse/locales/hu.json +211 -79
  160. package/front_end/third_party/lighthouse/locales/id.json +211 -79
  161. package/front_end/third_party/lighthouse/locales/it.json +211 -79
  162. package/front_end/third_party/lighthouse/locales/ja.json +211 -79
  163. package/front_end/third_party/lighthouse/locales/ko.json +211 -79
  164. package/front_end/third_party/lighthouse/locales/lt.json +211 -79
  165. package/front_end/third_party/lighthouse/locales/lv.json +214 -82
  166. package/front_end/third_party/lighthouse/locales/nl.json +211 -79
  167. package/front_end/third_party/lighthouse/locales/no.json +211 -79
  168. package/front_end/third_party/lighthouse/locales/pl.json +211 -79
  169. package/front_end/third_party/lighthouse/locales/pt-PT.json +211 -79
  170. package/front_end/third_party/lighthouse/locales/pt.json +211 -79
  171. package/front_end/third_party/lighthouse/locales/ro.json +212 -80
  172. package/front_end/third_party/lighthouse/locales/ru.json +211 -79
  173. package/front_end/third_party/lighthouse/locales/sk.json +211 -79
  174. package/front_end/third_party/lighthouse/locales/sl.json +211 -79
  175. package/front_end/third_party/lighthouse/locales/sr-Latn.json +211 -79
  176. package/front_end/third_party/lighthouse/locales/sr.json +211 -79
  177. package/front_end/third_party/lighthouse/locales/sv.json +211 -79
  178. package/front_end/third_party/lighthouse/locales/ta.json +218 -86
  179. package/front_end/third_party/lighthouse/locales/te.json +251 -119
  180. package/front_end/third_party/lighthouse/locales/th.json +211 -79
  181. package/front_end/third_party/lighthouse/locales/tr.json +211 -79
  182. package/front_end/third_party/lighthouse/locales/uk.json +212 -80
  183. package/front_end/third_party/lighthouse/locales/vi.json +211 -79
  184. package/front_end/third_party/lighthouse/locales/zh-HK.json +211 -79
  185. package/front_end/third_party/lighthouse/locales/zh-TW.json +211 -79
  186. package/front_end/third_party/lighthouse/locales/zh.json +211 -79
  187. package/front_end/third_party/lighthouse/report/bundle.d.ts +72 -34
  188. package/front_end/third_party/lighthouse/report/bundle.js +698 -492
  189. package/front_end/third_party/lighthouse/report-assets/report-generator.js +1 -2
  190. package/front_end/third_party/lighthouse/report-assets/report.js +40 -35
  191. package/front_end/third_party/lighthouse/report-assets/standalone-template.html +2 -4
  192. package/front_end/ui/components/code_highlighter/CodeHighlighter.ts +60 -68
  193. package/front_end/ui/components/data_grid/dataGrid.css +12 -10
  194. package/front_end/ui/components/docs/component_docs.ts +14 -0
  195. package/front_end/ui/components/docs/create_breadcrumbs.ts +1 -1
  196. package/front_end/ui/components/docs/css_overview/start_view.html +25 -0
  197. package/front_end/ui/components/docs/css_overview/start_view.ts +14 -0
  198. package/front_end/ui/components/docs/icon_button/basic.ts +3 -3
  199. package/front_end/ui/components/docs/toggle_dark_mode.ts +1 -0
  200. package/front_end/ui/components/docs/toggle_fonts.ts +2 -0
  201. package/front_end/ui/components/helpers/get-stylesheet.ts +0 -15
  202. package/front_end/ui/components/linear_memory_inspector/linear_memory_inspector-meta.ts +1 -2
  203. package/front_end/ui/components/markdown_view/MarkdownImagesMap.ts +1 -1
  204. package/front_end/ui/components/survey_link/SurveyLink.ts +1 -1
  205. package/front_end/ui/components/text_editor/TextEditor.ts +79 -36
  206. package/front_end/ui/components/text_editor/config.ts +42 -26
  207. package/front_end/ui/components/text_editor/javascript.ts +2 -3
  208. package/front_end/ui/components/text_editor/position.ts +17 -0
  209. package/front_end/ui/components/text_editor/text_editor.ts +1 -0
  210. package/front_end/ui/components/text_editor/theme.ts +5 -1
  211. package/front_end/ui/components/tree_outline/TreeOutline.ts +63 -8
  212. package/front_end/ui/components/tree_outline/TreeOutlineUtils.ts +8 -6
  213. package/front_end/ui/legacy/Dialog.ts +3 -1
  214. package/front_end/ui/legacy/DropTarget.ts +2 -1
  215. package/front_end/ui/legacy/EmptyWidget.ts +2 -1
  216. package/front_end/ui/legacy/FilterBar.ts +2 -1
  217. package/front_end/ui/legacy/GlassPane.ts +4 -2
  218. package/front_end/ui/legacy/Infobar.ts +5 -8
  219. package/front_end/ui/legacy/InspectorView.ts +6 -1
  220. package/front_end/ui/legacy/ListWidget.ts +2 -1
  221. package/front_end/ui/legacy/PopoverHelper.ts +2 -1
  222. package/front_end/ui/legacy/ProgressIndicator.ts +2 -1
  223. package/front_end/ui/legacy/RemoteDebuggingTerminatedScreen.ts +2 -1
  224. package/front_end/ui/legacy/ReportView.ts +2 -1
  225. package/front_end/ui/legacy/RootView.ts +2 -1
  226. package/front_end/ui/legacy/SearchableView.ts +2 -1
  227. package/front_end/ui/legacy/ShortcutRegistry.ts +11 -7
  228. package/front_end/ui/legacy/SoftContextMenu.ts +3 -2
  229. package/front_end/ui/legacy/SoftDropDown.ts +4 -2
  230. package/front_end/ui/legacy/SplitWidget.ts +2 -1
  231. package/front_end/ui/legacy/SuggestBox.ts +2 -1
  232. package/front_end/ui/legacy/TabbedPane.ts +2 -1
  233. package/front_end/ui/legacy/TargetCrashedScreen.ts +2 -1
  234. package/front_end/ui/legacy/TextPrompt.ts +2 -1
  235. package/front_end/ui/legacy/Toolbar.ts +3 -2
  236. package/front_end/ui/legacy/Treeoutline.ts +4 -3
  237. package/front_end/ui/legacy/UIUtils.ts +17 -14
  238. package/front_end/ui/legacy/ViewManager.ts +2 -1
  239. package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +1 -2
  240. package/front_end/ui/legacy/components/inline_editor/cssAngle.css +4 -0
  241. package/front_end/ui/legacy/components/object_ui/JavaScriptREPL.ts +2 -2
  242. package/front_end/ui/legacy/components/object_ui/object_ui-meta.ts +0 -4
  243. package/front_end/ui/legacy/components/perf_ui/LineLevelProfile.ts +35 -131
  244. package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +0 -3
  245. package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +2 -2
  246. package/front_end/ui/legacy/components/quick_open/quick_open-meta.ts +2 -3
  247. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +3 -6
  248. package/front_end/ui/legacy/components/source_frame/FontView.ts +4 -1
  249. package/front_end/ui/legacy/components/source_frame/ImageView.ts +4 -1
  250. package/front_end/ui/legacy/components/source_frame/JSONView.ts +4 -1
  251. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +21 -15
  252. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +501 -252
  253. package/front_end/ui/legacy/components/source_frame/XMLView.ts +7 -2
  254. package/front_end/ui/legacy/components/source_frame/source_frame-legacy.ts +0 -11
  255. package/front_end/ui/legacy/components/source_frame/source_frame.ts +0 -2
  256. package/front_end/ui/legacy/components/text_editor/CodeMirrorTextEditor.ts +2 -0
  257. package/front_end/ui/legacy/components/text_editor/cmdevtools.css +3 -1
  258. package/front_end/ui/legacy/components/text_editor/module.json +0 -3
  259. package/front_end/ui/legacy/components/utils/Linkifier.ts +7 -15
  260. package/front_end/ui/legacy/radioButton.css +1 -13
  261. package/front_end/ui/legacy/textButton.css +5 -4
  262. package/front_end/ui/legacy/themeColors.css +36 -0
  263. package/front_end/ui/legacy/theme_support/theme_support_impl.ts +7 -9
  264. package/front_end/ui/legacy/utils/create-shadow-root-with-core-styles.ts +2 -2
  265. package/front_end/ui/legacy/utils/inject-core-styles.ts +7 -4
  266. package/package.json +1 -1
  267. package/scripts/check_gn.js +0 -35
  268. package/scripts/eslint_rules/lib/es_modules_import.js +15 -8
  269. package/scripts/eslint_rules/tests/es_modules_import_test.js +8 -0
  270. package/front_end/Images/radioDot-dark-theme.png +0 -0
  271. package/front_end/Images/radioDot.png +0 -0
  272. package/front_end/emulated_devices/module.json +0 -6
  273. package/front_end/panels/application/module.json +0 -6
  274. package/front_end/panels/emulation/module.json +0 -11
  275. package/front_end/panels/issues/module.json +0 -6
  276. package/front_end/panels/js_profiler/module.json +0 -5
  277. package/front_end/panels/layer_viewer/module.json +0 -5
  278. package/front_end/panels/layers/module.json +0 -5
  279. package/front_end/panels/media/module.json +0 -5
  280. package/front_end/panels/network/module.json +0 -5
  281. package/front_end/panels/profiler/module.json +0 -5
  282. package/front_end/panels/screencast/module.json +0 -6
  283. package/front_end/panels/security/module.json +0 -5
  284. package/front_end/panels/timeline/module.json +0 -7
  285. package/front_end/third_party/lighthouse/report-assets/report.css +0 -1774
  286. package/front_end/ui/legacy/components/source_frame/SourcesTextEditor.ts +0 -1030
  287. package/front_end/ui/legacy/components/source_frame/messagesPopover.css +0 -32
  288. package/front_end/ui/legacy/components/source_frame/module.json +0 -14
  289. package/front_end/ui/legacy/module.json +0 -41
@@ -2,6 +2,7 @@
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 rootViewStyles from './rootView.css.legacy.js';
5
6
  import {VBox} from './Widget.js';
6
7
  import {ZoomManager} from './ZoomManager.js';
7
8
 
@@ -11,7 +12,7 @@ export class RootView extends VBox {
11
12
  super();
12
13
  this.markAsRoot();
13
14
  this.element.classList.add('root-view');
14
- this.registerRequiredCSS('ui/legacy/rootView.css');
15
+ this.registerRequiredCSS(rootViewStyles);
15
16
  this.element.setAttribute('spellcheck', 'false');
16
17
  }
17
18
 
@@ -39,6 +39,7 @@ import * as i18n from '../../core/i18n/i18n.js';
39
39
  import * as ARIAUtils from './ARIAUtils.js';
40
40
  import {HistoryInput} from './HistoryInput.js';
41
41
  import {InspectorView} from './InspectorView.js';
42
+ import searchableViewStyles from './searchableView.css.legacy.js';
42
43
  import {Toolbar, ToolbarButton, ToolbarToggle} from './Toolbar.js';
43
44
  import {Tooltip} from './Tooltip.js';
44
45
  import {createTextButton} from './UIUtils.js';
@@ -123,7 +124,7 @@ export class SearchableView extends VBox {
123
124
 
124
125
  constructor(searchable: Searchable, replaceable: Replaceable|null, settingName?: string) {
125
126
  super(true);
126
- this.registerRequiredCSS('ui/legacy/searchableView.css');
127
+ this.registerRequiredCSS(searchableViewStyles);
127
128
  searchableViewsByElement.set(this.element, this);
128
129
 
129
130
  this.searchProvider = searchable;
@@ -144,27 +144,31 @@ export class ShortcutRegistry {
144
144
  return this.devToolsDefaultShortcutActions.has(actionId);
145
145
  }
146
146
 
147
- addShortcutListener(element: Element, handlers: {
148
- [x: string]: () => Promise<boolean>,
149
- }): (arg0: Event) => void {
147
+ getShortcutListener(handlers: {[x: string]: () => Promise<boolean>}): (event: KeyboardEvent) => void {
148
+ const shortcuts = Object.keys(handlers).flatMap(action => [...this.actionToShortcut.get(action)]);
150
149
  // We only want keys for these specific actions to get handled this
151
150
  // way; all others should be allowed to bubble up.
152
151
  const allowlistKeyMap = new ShortcutTreeNode(0, 0);
153
- const shortcuts = Object.keys(handlers).flatMap(action => [...this.actionToShortcut.get(action)]);
154
152
  shortcuts.forEach(shortcut => {
155
153
  allowlistKeyMap.addKeyMapping(shortcut.descriptors.map(descriptor => descriptor.key), shortcut.action);
156
154
  });
157
155
 
158
- const listener = (event: Event): void => {
159
- const key = KeyboardShortcut.makeKeyFromEvent((event as KeyboardEvent));
156
+ return (event: KeyboardEvent): void => {
157
+ const key = KeyboardShortcut.makeKeyFromEvent(event);
160
158
  const keyMap = this.activePrefixKey ? allowlistKeyMap.getNode(this.activePrefixKey.key()) : allowlistKeyMap;
161
159
  if (!keyMap) {
162
160
  return;
163
161
  }
164
162
  if (keyMap.getNode(key)) {
165
- this.handleShortcut((event as KeyboardEvent), handlers);
163
+ this.handleShortcut(event, handlers);
166
164
  }
167
165
  };
166
+ }
167
+
168
+ addShortcutListener(element: Element, handlers: {
169
+ [x: string]: () => Promise<boolean>,
170
+ }): (arg0: Event) => void {
171
+ const listener = this.getShortcutListener(handlers) as (event: Event) => void;
168
172
  element.addEventListener('keydown', listener);
169
173
  return listener;
170
174
  }
@@ -35,8 +35,9 @@ import type * as Platform from '../../core/platform/platform.js';
35
35
  import * as ARIAUtils from './ARIAUtils.js';
36
36
  import {AnchorBehavior, GlassPane, MarginBehavior, PointerEventsBehavior, SizeBehavior} from './GlassPane.js';
37
37
  import {Icon} from './Icon.js';
38
- import * as ThemeSupport from './theme_support/theme_support.js'; // eslint-disable-line rulesdir/es_modules_import
38
+ import * as ThemeSupport from './theme_support/theme_support.js';
39
39
  import {createTextChild, ElementFocusRestorer} from './UIUtils.js';
40
+ import softContextMenuStyles from './softContextMenu.css.legacy.js';
40
41
 
41
42
  const UIStrings = {
42
43
  /**
@@ -101,7 +102,7 @@ export class SoftContextMenu {
101
102
  this.glassPane = new GlassPane();
102
103
  this.glassPane.setPointerEventsBehavior(
103
104
  this.parentMenu ? PointerEventsBehavior.PierceGlassPane : PointerEventsBehavior.BlockedByGlassPane);
104
- this.glassPane.registerRequiredCSS('ui/legacy/softContextMenu.css');
105
+ this.glassPane.registerRequiredCSS(softContextMenuStyles);
105
106
  this.glassPane.setContentAnchorBox(anchorBox);
106
107
  this.glassPane.setSizeBehavior(SizeBehavior.MeasureContent);
107
108
  this.glassPane.setMarginBehavior(MarginBehavior.NoMargin);
@@ -14,6 +14,8 @@ import type {ListDelegate} from './ListControl.js';
14
14
  import {ListControl, ListMode} from './ListControl.js';
15
15
  import type {ItemsReplacedEvent, ListModel} from './ListModel.js';
16
16
  import {Events as ListModelEvents} from './ListModel.js';
17
+ import softDropDownStyles from './softDropDown.css.legacy.js';
18
+ import softDropDownButtonStyles from './softDropDownButton.css.legacy.js';
17
19
 
18
20
  const UIStrings = {
19
21
  /**
@@ -46,7 +48,7 @@ export class SoftDropDown<T> implements ListDelegate<T> {
46
48
 
47
49
  this.element = document.createElement('button');
48
50
  this.element.classList.add('soft-dropdown');
49
- Utils.appendStyle(this.element, 'ui/legacy/softDropDownButton.css');
51
+ Utils.appendStyle(this.element, softDropDownButtonStyles);
50
52
  this.titleElement = this.element.createChild('span', 'title');
51
53
  const dropdownArrowIcon = Icon.create('smallicon-triangle-down');
52
54
  this.element.appendChild(dropdownArrowIcon);
@@ -63,7 +65,7 @@ export class SoftDropDown<T> implements ListDelegate<T> {
63
65
  this.width = 315;
64
66
  Utils
65
67
  .createShadowRootWithCoreStyles(this.glassPane.contentElement, {
66
- cssFile: 'ui/legacy/softDropDown.css',
68
+ cssFile: softDropDownStyles,
67
69
  delegatesFocus: undefined,
68
70
  })
69
71
  .appendChild(this.list.element);
@@ -37,6 +37,7 @@ import {Events as ResizerWidgetEvents, SimpleResizerWidget} from './ResizerWidge
37
37
  import {ToolbarButton} from './Toolbar.js';
38
38
  import {Widget} from './Widget.js';
39
39
  import {Events as ZoomManagerEvents, ZoomManager} from './ZoomManager.js';
40
+ import splitWidgetStyles from './splitWidget.css.legacy.js';
40
41
 
41
42
  export class SplitWidget extends Common.ObjectWrapper.eventMixin<EventTypes, typeof Widget>(Widget) {
42
43
  private sidebarElementInternal: HTMLElement;
@@ -77,7 +78,7 @@ export class SplitWidget extends Common.ObjectWrapper.eventMixin<EventTypes, typ
77
78
  defaultSidebarHeight?: number, constraintsInDip?: boolean) {
78
79
  super(true);
79
80
  this.element.classList.add('split-widget');
80
- this.registerRequiredCSS('ui/legacy/splitWidget.css');
81
+ this.registerRequiredCSS(splitWidgetStyles);
81
82
 
82
83
  this.contentElement.classList.add('shadow-split-widget');
83
84
  this.sidebarElementInternal =
@@ -41,6 +41,7 @@ import type {ListDelegate} from './ListControl.js';
41
41
  import {ListControl, ListMode} from './ListControl.js';
42
42
  import {ListModel} from './ListModel.js';
43
43
  import {measurePreferredSize} from './UIUtils.js';
44
+ import suggestBoxStyles from './suggestBox.css.legacy.js';
44
45
 
45
46
  const UIStrings = {
46
47
  /**
@@ -107,7 +108,7 @@ export class SuggestBox implements ListDelegate<Suggestion> {
107
108
  this.glassPane.setAnchorBehavior(AnchorBehavior.PreferBottom);
108
109
  this.glassPane.setOutsideClickCallback(this.hide.bind(this));
109
110
  const shadowRoot = Utils.createShadowRootWithCoreStyles(
110
- this.glassPane.contentElement, {cssFile: 'ui/legacy/suggestBox.css', delegatesFocus: undefined});
111
+ this.glassPane.contentElement, {cssFile: suggestBoxStyles, delegatesFocus: undefined});
111
112
  shadowRoot.appendChild(this.element);
112
113
  }
113
114
 
@@ -43,6 +43,7 @@ import {installDragHandle, invokeOnceAfterBatchUpdate} from './UIUtils.js';
43
43
  import type {Widget} from './Widget.js';
44
44
  import {VBox} from './Widget.js';
45
45
  import {Events as ZoomManagerEvents, ZoomManager} from './ZoomManager.js';
46
+ import tabbedPaneStyles from './tabbedPane.css.legacy.js';
46
47
 
47
48
  const UIStrings = {
48
49
  /**
@@ -110,7 +111,7 @@ export class TabbedPane extends Common.ObjectWrapper.eventMixin<EventTypes, type
110
111
 
111
112
  constructor() {
112
113
  super(true);
113
- this.registerRequiredCSS('ui/legacy/tabbedPane.css');
114
+ this.registerRequiredCSS(tabbedPaneStyles);
114
115
  this.element.classList.add('tabbed-pane');
115
116
  this.contentElement.classList.add('tabbed-pane-shadow');
116
117
  this.contentElement.tabIndex = -1;
@@ -4,6 +4,7 @@
4
4
 
5
5
  import * as i18n from '../../core/i18n/i18n.js';
6
6
 
7
+ import targetCrashedScreenStyles from './targetCrashedScreen.css.legacy.js';
7
8
  import {VBox} from './Widget.js';
8
9
 
9
10
  const UIStrings = {
@@ -22,7 +23,7 @@ export class TargetCrashedScreen extends VBox {
22
23
  private readonly hideCallback: () => void;
23
24
  constructor(hideCallback: () => void) {
24
25
  super(true);
25
- this.registerRequiredCSS('ui/legacy/targetCrashedScreen.css');
26
+ this.registerRequiredCSS(targetCrashedScreenStyles);
26
27
  this.contentElement.createChild('div', 'message').textContent =
27
28
  i18nString(UIStrings.devtoolsWasDisconnectedFromThe);
28
29
  this.contentElement.createChild('div', 'message').textContent =
@@ -43,6 +43,7 @@ import type {SuggestBoxDelegate, Suggestion} from './SuggestBox.js';
43
43
  import {SuggestBox} from './SuggestBox.js';
44
44
  import {Tooltip} from './Tooltip.js';
45
45
  import {ElementFocusRestorer} from './UIUtils.js';
46
+ import textPromptStyles from './textPrompt.css.legacy.js';
46
47
 
47
48
  export class TextPrompt extends Common.ObjectWrapper.ObjectWrapper<EventTypes> implements SuggestBoxDelegate {
48
49
  private proxyElement!: HTMLElement|undefined;
@@ -135,7 +136,7 @@ export class TextPrompt extends Common.ObjectWrapper.ObjectWrapper<EventTypes> i
135
136
  this.boundOnMouseWheel = this.onMouseWheel.bind(this);
136
137
  this.boundClearAutocomplete = this.clearAutocomplete.bind(this);
137
138
  this.proxyElement = element.ownerDocument.createElement('span');
138
- Utils.appendStyle(this.proxyElement, 'ui/legacy/textPrompt.css');
139
+ Utils.appendStyle(this.proxyElement, textPromptStyles);
139
140
  this.contentElement = this.proxyElement.createChild('div', 'text-prompt-root');
140
141
  this.proxyElement.style.display = this.proxyElementDisplay;
141
142
  if (element.parentElement) {
@@ -46,6 +46,7 @@ import type {Suggestion} from './SuggestBox.js';
46
46
  import {Events as TextPromptEvents, TextPrompt} from './TextPrompt.js';
47
47
  import {Tooltip} from './Tooltip.js';
48
48
  import {CheckboxLabel, LongClickController} from './UIUtils.js';
49
+ import toolbarStyles from './toolbar.css.legacy.js';
49
50
 
50
51
  const UIStrings = {
51
52
  /**
@@ -75,8 +76,8 @@ export class Toolbar {
75
76
  this.element.className = className;
76
77
  this.element.classList.add('toolbar');
77
78
  this.enabled = true;
78
- this.shadowRoot = Utils.createShadowRootWithCoreStyles(
79
- this.element, {cssFile: 'ui/legacy/toolbar.css', delegatesFocus: undefined});
79
+ this.shadowRoot =
80
+ Utils.createShadowRootWithCoreStyles(this.element, {cssFile: toolbarStyles, delegatesFocus: undefined});
80
81
  this.contentElement = this.shadowRoot.createChild('div', 'toolbar-shadow');
81
82
  this.insertionPoint = this.contentElement.createChild('slot');
82
83
  }
@@ -45,6 +45,7 @@ import {InplaceEditor} from './InplaceEditor.js';
45
45
  import {Keys} from './KeyboardShortcut.js';
46
46
  import {Tooltip} from './Tooltip.js';
47
47
  import {deepElementFromPoint, enclosingNodeOrSelfWithNodeNameInArray, isEditing} from './UIUtils.js';
48
+ import treeoutlineStyles from './treeoutline.css.legacy.js';
48
49
 
49
50
  const nodeToParentTreeElementMap = new WeakMap<Node, TreeElement>();
50
51
 
@@ -391,14 +392,14 @@ export class TreeOutlineInShadow extends TreeOutline {
391
392
  super();
392
393
  this.contentElement.classList.add('tree-outline');
393
394
  this.element = document.createElement('div');
394
- this.shadowRoot = Utils.createShadowRootWithCoreStyles(
395
- this.element, {cssFile: 'ui/legacy/treeoutline.css', delegatesFocus: undefined});
395
+ this.shadowRoot =
396
+ Utils.createShadowRootWithCoreStyles(this.element, {cssFile: treeoutlineStyles, delegatesFocus: undefined});
396
397
  this.disclosureElement = this.shadowRoot.createChild('div', 'tree-outline-disclosure');
397
398
  this.disclosureElement.appendChild(this.contentElement);
398
399
  this.renderSelection = true;
399
400
  }
400
401
 
401
- registerRequiredCSS(cssFile: string): void {
402
+ registerRequiredCSS(cssFile: string|{cssContent: string}): void {
402
403
  Utils.appendStyle(this.shadowRoot, cssFile);
403
404
  }
404
405
 
@@ -46,13 +46,20 @@ import {Size} from './Geometry.js';
46
46
  import {GlassPane, PointerEventsBehavior, SizeBehavior} from './GlassPane.js';
47
47
  import {Icon} from './Icon.js';
48
48
  import {KeyboardShortcut} from './KeyboardShortcut.js';
49
- import * as ThemeSupport from './theme_support/theme_support.js'; // eslint-disable-line rulesdir/es_modules_import
49
+ import * as ThemeSupport from './theme_support/theme_support.js';
50
50
  import * as Utils from './utils/utils.js';
51
51
 
52
52
  import type {ToolbarButton} from './Toolbar.js';
53
53
  import {Toolbar} from './Toolbar.js';
54
54
  import {Tooltip} from './Tooltip.js';
55
55
  import type {TreeOutline} from './Treeoutline.js';
56
+ import checkboxTextLabelStyles from './checkboxTextLabel.css.legacy.js';
57
+ import closeButtonStyles from './closeButton.css.legacy.js';
58
+ import confirmDialogStyles from './confirmDialog.css.legacy.js';
59
+ import inlineButtonStyles from './inlineButton.css.legacy.js';
60
+ import radioButtonStyles from './radioButton.css.legacy.js';
61
+ import sliderStyles from './slider.css.legacy.js';
62
+ import smallBubbleStyles from './smallBubble.css.legacy.js';
56
63
 
57
64
  const UIStrings = {
58
65
  /**
@@ -1186,8 +1193,8 @@ export class CheckboxLabel extends HTMLSpanElement {
1186
1193
  super();
1187
1194
  CheckboxLabel.lastId = CheckboxLabel.lastId + 1;
1188
1195
  const id = 'ui-checkbox-label' + CheckboxLabel.lastId;
1189
- this.shadowRootInternal = Utils.createShadowRootWithCoreStyles(
1190
- this, {cssFile: 'ui/legacy/checkboxTextLabel.css', delegatesFocus: undefined});
1196
+ this.shadowRootInternal =
1197
+ Utils.createShadowRootWithCoreStyles(this, {cssFile: checkboxTextLabelStyles, delegatesFocus: undefined});
1191
1198
  this.checkboxElement = (this.shadowRootInternal.createChild('input') as HTMLInputElement);
1192
1199
  this.checkboxElement.type = 'checkbox';
1193
1200
  this.checkboxElement.setAttribute('id', id);
@@ -1268,8 +1275,7 @@ export class DevToolsRadioButton extends HTMLSpanElement {
1268
1275
  this.radioElement.id = id;
1269
1276
  this.radioElement.type = 'radio';
1270
1277
  this.labelElement.htmlFor = id;
1271
- const root =
1272
- Utils.createShadowRootWithCoreStyles(this, {cssFile: 'ui/legacy/radioButton.css', delegatesFocus: undefined});
1278
+ const root = Utils.createShadowRootWithCoreStyles(this, {cssFile: radioButtonStyles, delegatesFocus: undefined});
1273
1279
  root.createChild('slot');
1274
1280
  this.addEventListener('click', this.radioClickHandler.bind(this), false);
1275
1281
  }
@@ -1291,8 +1297,7 @@ export class DevToolsSlider extends HTMLSpanElement {
1291
1297
 
1292
1298
  constructor() {
1293
1299
  super();
1294
- const root =
1295
- Utils.createShadowRootWithCoreStyles(this, {cssFile: 'ui/legacy/slider.css', delegatesFocus: undefined});
1300
+ const root = Utils.createShadowRootWithCoreStyles(this, {cssFile: sliderStyles, delegatesFocus: undefined});
1296
1301
  this.sliderElement = document.createElement('input');
1297
1302
  this.sliderElement.classList.add('dt-range-input');
1298
1303
  this.sliderElement.type = 'range';
@@ -1315,8 +1320,7 @@ export class DevToolsSmallBubble extends HTMLSpanElement {
1315
1320
 
1316
1321
  constructor() {
1317
1322
  super();
1318
- const root =
1319
- Utils.createShadowRootWithCoreStyles(this, {cssFile: 'ui/legacy/smallBubble.css', delegatesFocus: undefined});
1323
+ const root = Utils.createShadowRootWithCoreStyles(this, {cssFile: smallBubbleStyles, delegatesFocus: undefined});
1320
1324
  this.textElement = root.createChild('div');
1321
1325
  this.textElement.className = 'info';
1322
1326
  this.textElement.createChild('slot');
@@ -1336,8 +1340,7 @@ export class DevToolsCloseButton extends HTMLDivElement {
1336
1340
 
1337
1341
  constructor() {
1338
1342
  super();
1339
- const root =
1340
- Utils.createShadowRootWithCoreStyles(this, {cssFile: 'ui/legacy/closeButton.css', delegatesFocus: undefined});
1343
+ const root = Utils.createShadowRootWithCoreStyles(this, {cssFile: closeButtonStyles, delegatesFocus: undefined});
1341
1344
  this.buttonElement = (root.createChild('div', 'close-button') as HTMLElement);
1342
1345
  Tooltip.install(this.buttonElement, i18nString(UIStrings.close));
1343
1346
  ARIAUtils.setAccessibleName(this.buttonElement, i18nString(UIStrings.close));
@@ -1566,7 +1569,7 @@ export class MessageDialog {
1566
1569
  dialog.setSizeBehavior(SizeBehavior.MeasureContent);
1567
1570
  dialog.setDimmed(true);
1568
1571
  const shadowRoot = Utils.createShadowRootWithCoreStyles(
1569
- dialog.contentElement, {cssFile: 'ui/legacy/confirmDialog.css', delegatesFocus: undefined});
1572
+ dialog.contentElement, {cssFile: confirmDialogStyles, delegatesFocus: undefined});
1570
1573
  const content = shadowRoot.createChild('div', 'widget');
1571
1574
  await new Promise(resolve => {
1572
1575
  const okButton = createTextButton(i18nString(UIStrings.ok), resolve, '', true);
@@ -1590,7 +1593,7 @@ export class ConfirmDialog {
1590
1593
  dialog.setDimmed(true);
1591
1594
  ARIAUtils.setAccessibleName(dialog.contentElement, message);
1592
1595
  const shadowRoot = Utils.createShadowRootWithCoreStyles(
1593
- dialog.contentElement, {cssFile: 'ui/legacy/confirmDialog.css', delegatesFocus: undefined});
1596
+ dialog.contentElement, {cssFile: confirmDialogStyles, delegatesFocus: undefined});
1594
1597
  const content = shadowRoot.createChild('div', 'widget');
1595
1598
  content.createChild('div', 'message').createChild('span').textContent = message;
1596
1599
  const buttonsBar = content.createChild('div', 'button');
@@ -1615,7 +1618,7 @@ export class ConfirmDialog {
1615
1618
  export function createInlineButton(toolbarButton: ToolbarButton): Element {
1616
1619
  const element = document.createElement('span');
1617
1620
  const shadowRoot =
1618
- Utils.createShadowRootWithCoreStyles(element, {cssFile: 'ui/legacy/inlineButton.css', delegatesFocus: undefined});
1621
+ Utils.createShadowRootWithCoreStyles(element, {cssFile: inlineButtonStyles, delegatesFocus: undefined});
1619
1622
  element.classList.add('inline-button');
1620
1623
  const toolbar = new Toolbar('');
1621
1624
  toolbar.appendToolbarItem(toolbarButton);
@@ -18,6 +18,7 @@ import type {TabbedViewLocation, View, ViewLocation, ViewLocationResolver} from
18
18
  import {getRegisteredLocationResolvers, getRegisteredViewExtensions, maybeRemoveViewExtension, registerLocationResolver, registerViewExtension, ViewLocationCategoryValues, ViewLocationValues, ViewPersistence, ViewRegistration} from './ViewRegistration.js';
19
19
  import type {Widget, WidgetElement} from './Widget.js';
20
20
  import {VBox} from './Widget.js';
21
+ import viewContainersStyles from './viewContainers.css.legacy.js';
21
22
 
22
23
  const UIStrings = {
23
24
  /**
@@ -418,7 +419,7 @@ export class _ExpandableContainerWidget extends VBox {
418
419
  constructor(view: View) {
419
420
  super(true);
420
421
  this.element.classList.add('flex-none');
421
- this.registerRequiredCSS('ui/legacy/viewContainers.css');
422
+ this.registerRequiredCSS(viewContainersStyles);
422
423
 
423
424
  this.titleElement = document.createElement('div');
424
425
  this.titleElement.classList.add('expandable-view-title');
@@ -222,8 +222,7 @@ export class CSSAngle extends HTMLElement {
222
222
  .data=${{
223
223
  angle: this.angle,
224
224
  } as CSSAngleSwatchData}>
225
- </${CSSAngleSwatch.litTagName}><slot></slot>
226
- </div>
225
+ </${CSSAngleSwatch.litTagName}><slot></slot></div>
227
226
  ${this.popoverOpen ? this.renderPopover() : null}
228
227
  </div>
229
228
  `, this.shadow, {
@@ -22,3 +22,7 @@ devtools-css-angle-editor {
22
22
  position: fixed;
23
23
  z-index: 2;
24
24
  }
25
+
26
+ .preview {
27
+ display: inline-block;
28
+ }
@@ -36,7 +36,7 @@ export class JavaScriptREPL {
36
36
 
37
37
  static async evaluateAndBuildPreview(
38
38
  text: string, throwOnSideEffect: boolean, replMode: boolean, timeout?: number, allowErrors?: boolean,
39
- objectGroup?: string): Promise<{
39
+ objectGroup?: string, awaitPromise: boolean = false): Promise<{
40
40
  preview: DocumentFragment,
41
41
  result: SDK.RuntimeModel.EvaluationResult|null,
42
42
  }> {
@@ -60,7 +60,7 @@ export class JavaScriptREPL {
60
60
  returnByValue: undefined,
61
61
  allowUnsafeEvalBlockedByCSP: undefined,
62
62
  };
63
- const result = await executionContext.evaluate(options, false /* userGesture */, false /* awaitPromise */);
63
+ const result = await executionContext.evaluate(options, false /* userGesture */, awaitPromise);
64
64
  const preview = JavaScriptREPL.buildEvaluationPreview(result, allowErrors);
65
65
  return {preview, result};
66
66
  }
@@ -2,19 +2,15 @@
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 '../../legacy.js';
8
7
 
9
- // eslint-disable-next-line rulesdir/es_modules_import
10
8
  import type * as ObjectUI from './object_ui.js';
11
9
 
12
10
  let loadedObjectUIModule: (typeof ObjectUI|undefined);
13
11
 
14
12
  async function loadObjectUIModule(): Promise<typeof ObjectUI> {
15
13
  if (!loadedObjectUIModule) {
16
- // Side-effect import resources in module.json
17
- await Root.Runtime.Runtime.instance().loadModulePromise('ui/legacy/components/object_ui');
18
14
  loadedObjectUIModule = await import('./object_ui.js');
19
15
  }
20
16
  return loadedObjectUIModule;
@@ -2,37 +2,19 @@
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 i18n from '../../../../core/i18n/i18n.js';
6
- import * as Platform from '../../../../core/platform/platform.js';
7
5
  import * as SDK from '../../../../core/sdk/sdk.js';
8
6
  import * as Bindings from '../../../../models/bindings/bindings.js';
9
7
  import * as Workspace from '../../../../models/workspace/workspace.js';
10
8
  import * as SourceFrame from '../source_frame/source_frame.js';
11
9
  import type * as Protocol from '../../../../generated/protocol.js';
12
10
 
13
- const UIStrings = {
14
- /**
15
- *@description The milisecond unit
16
- */
17
- ms: 'ms',
18
- /**
19
- *@description Unit for data size in DevTools
20
- */
21
- mb: 'MB',
22
- /**
23
- *@description A unit
24
- */
25
- kb: 'kB',
26
- };
27
- const str_ = i18n.i18n.registerUIStrings('ui/legacy/components/perf_ui/LineLevelProfile.ts', UIStrings);
28
- const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
29
11
  let performanceInstance: Performance;
30
12
 
31
13
  export class Performance {
32
14
  private readonly helper: Helper;
33
15
 
34
16
  private constructor() {
35
- this.helper = new Helper('performance');
17
+ this.helper = new Helper(SourceFrame.SourceFrame.DecoratorType.PERFORMANCE);
36
18
  }
37
19
 
38
20
  static instance(opts: {
@@ -112,7 +94,7 @@ let memoryInstance: Memory;
112
94
  export class Memory {
113
95
  private readonly helper: Helper;
114
96
  private constructor() {
115
- this.helper = new Helper('memory');
97
+ this.helper = new Helper(SourceFrame.SourceFrame.DecoratorType.MEMORY);
116
98
  }
117
99
 
118
100
  static instance(opts: {
@@ -193,10 +175,12 @@ export class Helper {
193
175
  }, 0);
194
176
  }
195
177
 
196
- private doUpdate(): void {
178
+ private async doUpdate(): Promise<void> {
197
179
  this.locationPool.disposeAll();
198
- Workspace.Workspace.WorkspaceImpl.instance().uiSourceCodes().forEach(
199
- uiSourceCode => uiSourceCode.removeDecorationsForType(this.type));
180
+ // Map from sources to line->value profile maps.
181
+ const decorationsBySource = new Map<Workspace.UISourceCode.UISourceCode, Map<number, number>>();
182
+ const pending: Promise<void>[] = [];
183
+
200
184
  for (const targetToScript of this.lineData) {
201
185
  const target = (targetToScript[0] as SDK.Target.Target | null);
202
186
  const debuggerModel = target ? target.model(SDK.DebuggerModel.DebuggerModel) : null;
@@ -206,124 +190,44 @@ export class Helper {
206
190
  const lineToDataMap = (scriptToLine[1] as Map<number, number>);
207
191
  // debuggerModel is null when the profile is loaded from file.
208
192
  // Try to get UISourceCode by the URL in this case.
209
- const uiSourceCode = !debuggerModel && typeof scriptIdOrUrl === 'string' ?
210
- Workspace.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(scriptIdOrUrl) :
211
- null;
212
- if (!debuggerModel && !uiSourceCode) {
213
- continue;
214
- }
215
- for (const lineToData of lineToDataMap) {
216
- const line = (lineToData[0] as number) - 1;
217
- const data = (lineToData[1] as number);
218
- if (uiSourceCode) {
219
- uiSourceCode.addLineDecoration(line, this.type, data);
220
- continue;
221
- }
222
- if (debuggerModel) {
193
+ const workspace = Workspace.Workspace.WorkspaceImpl.instance();
194
+ if (debuggerModel) {
195
+ const workspaceBinding = Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance();
196
+ for (const lineToData of lineToDataMap) {
197
+ const line = lineToData[0] - 1;
198
+ const data = lineToData[1];
223
199
  const rawLocation = typeof scriptIdOrUrl === 'string' ?
224
200
  debuggerModel.createRawLocationByURL(scriptIdOrUrl, line, 0) :
225
201
  debuggerModel.createRawLocationByScriptId(String(scriptIdOrUrl) as Protocol.Runtime.ScriptId, line, 0);
226
202
  if (rawLocation) {
227
- new Presentation(rawLocation, this.type, data, this.locationPool);
203
+ pending.push(workspaceBinding.rawLocationToUILocation(rawLocation).then((uiLocation): void => {
204
+ if (uiLocation) {
205
+ let lineMap = decorationsBySource.get(uiLocation.uiSourceCode);
206
+ if (!lineMap) {
207
+ lineMap = new Map<number, number>();
208
+ decorationsBySource.set(uiLocation.uiSourceCode, lineMap);
209
+ }
210
+ lineMap.set(uiLocation.lineNumber + 1, data);
211
+ }
212
+ }));
228
213
  }
229
214
  }
215
+ } else if (typeof scriptIdOrUrl === 'string') {
216
+ const uiSourceCode = workspace.uiSourceCodeForURL(scriptIdOrUrl);
217
+ if (uiSourceCode) {
218
+ decorationsBySource.set(uiSourceCode, lineToDataMap);
219
+ }
230
220
  }
231
221
  }
222
+ await Promise.all(pending);
223
+ for (const [uiSourceCode, lineMap] of decorationsBySource) {
224
+ uiSourceCode.setDecorationData(this.type, lineMap);
225
+ }
232
226
  }
233
- }
234
- }
235
-
236
- export class Presentation {
237
- private readonly type: string;
238
- private readonly time: number;
239
- private uiLocation: Workspace.UISourceCode.UILocation|null;
240
-
241
- constructor(
242
- rawLocation: SDK.DebuggerModel.Location, type: string, time: number,
243
- locationPool: Bindings.LiveLocation.LiveLocationPool) {
244
- this.type = type;
245
- this.time = time;
246
- this.uiLocation = null;
247
- Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().createLiveLocation(
248
- rawLocation, this.updateLocation.bind(this), locationPool);
249
- }
250
-
251
- async updateLocation(liveLocation: Bindings.LiveLocation.LiveLocation): Promise<void> {
252
- if (this.uiLocation) {
253
- this.uiLocation.uiSourceCode.removeDecorationsForType(this.type);
254
- }
255
- this.uiLocation = await liveLocation.uiLocation();
256
- if (this.uiLocation) {
257
- this.uiLocation.uiSourceCode.addLineDecoration(this.uiLocation.lineNumber, this.type, this.time);
258
- }
259
- }
260
- }
261
-
262
- let lineDecoratorInstance: LineDecorator;
263
-
264
- export class LineDecorator implements SourceFrame.SourceFrame.LineDecorator {
265
- static instance(opts: {
266
- forceNew: boolean|null,
267
- } = {forceNew: null}): LineDecorator {
268
- const {forceNew} = opts;
269
- if (!lineDecoratorInstance || forceNew) {
270
- lineDecoratorInstance = new LineDecorator();
271
- }
272
-
273
- return lineDecoratorInstance;
274
- }
275
- decorate(
276
- uiSourceCode: Workspace.UISourceCode.UISourceCode, textEditor: SourceFrame.SourcesTextEditor.SourcesTextEditor,
277
- type: string): void {
278
- const gutterType = `CodeMirror-gutter-${type}`;
279
- const decorations = uiSourceCode.decorationsForType(type);
280
- textEditor.uninstallGutter(gutterType);
281
- if (!decorations || !decorations.size) {
282
- return;
283
- }
284
- textEditor.installGutter(gutterType, false);
285
- for (const decoration of decorations) {
286
- const value = (decoration.data() as number);
287
- const element = this.createElement(type, value);
288
- textEditor.setGutterDecoration(decoration.range().startLine, gutterType, element);
289
- }
290
- }
291
-
292
- private createElement(type: string, value: number): Element {
293
- const element = document.createElement('div');
294
- element.classList.add('text-editor-line-marker-text');
295
- if (type === 'performance') {
296
- const intensity = Platform.NumberUtilities.clamp(Math.log10(1 + 10 * value) / 5, 0.02, 1);
297
- element.textContent = value.toFixed(1);
298
- element.style.backgroundColor = `hsla(44, 100%, 50%, ${intensity.toFixed(3)})`;
299
- element.createChild('span', 'line-marker-units').textContent = i18nString(UIStrings.ms);
300
- } else {
301
- const intensity = Platform.NumberUtilities.clamp(Math.log10(1 + 2e-3 * value) / 5, 0.02, 1);
302
- element.style.backgroundColor = `hsla(217, 100%, 70%, ${intensity.toFixed(3)})`;
303
- value /= 1e3;
304
- let units;
305
- let fractionDigits;
306
- if (value >= 1e3) {
307
- units = i18nString(UIStrings.mb);
308
- value /= 1e3;
309
- fractionDigits = value >= 20 ? 0 : 1;
310
- } else {
311
- units = i18nString(UIStrings.kb);
312
- fractionDigits = 0;
227
+ for (const uiSourceCode of Workspace.Workspace.WorkspaceImpl.instance().uiSourceCodes()) {
228
+ if (!decorationsBySource.has(uiSourceCode)) {
229
+ uiSourceCode.setDecorationData(this.type, undefined);
313
230
  }
314
- element.textContent = value.toFixed(fractionDigits);
315
- element.createChild('span', 'line-marker-units').textContent = units;
316
231
  }
317
- return element;
318
232
  }
319
233
  }
320
-
321
- SourceFrame.SourceFrame.registerLineDecorator({
322
- lineDecorator: LineDecorator.instance,
323
- decoratorType: SourceFrame.SourceFrame.DecoratorType.MEMORY,
324
- });
325
-
326
- SourceFrame.SourceFrame.registerLineDecorator({
327
- lineDecorator: LineDecorator.instance,
328
- decoratorType: SourceFrame.SourceFrame.DecoratorType.PERFORMANCE,
329
- });