chrome-devtools-frontend 1.0.941095 → 1.0.943017

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 (254) hide show
  1. package/WATCHLISTS +1 -1
  2. package/config/gni/all_devtools_files.gni +0 -62
  3. package/config/gni/devtools_grd_files.gni +55 -19
  4. package/config/gni/devtools_image_files.gni +2 -3
  5. package/front_end/.eslintrc.js +12 -1
  6. package/front_end/Images/src/feedback_button_icon.svg +3 -0
  7. package/front_end/Images/src/{feedback_thin_16x16_icon.svg → survey_feedback_icon.svg} +1 -1
  8. package/front_end/Tests.js +1 -32
  9. package/front_end/core/common/Color.ts +5 -0
  10. package/front_end/core/i18n/locales/en-US.json +20 -29
  11. package/front_end/core/i18n/locales/en-XL.json +20 -29
  12. package/front_end/core/sdk/CPUProfilerModel.ts +7 -9
  13. package/front_end/core/sdk/ConsoleModel.ts +26 -28
  14. package/front_end/core/sdk/DebuggerModel.ts +4 -14
  15. package/front_end/core/sdk/sdk-meta.ts +17 -3
  16. package/front_end/entrypoints/devtools_app/devtools_app.json +1 -11
  17. package/front_end/entrypoints/inspector/inspector.json +1 -3
  18. package/front_end/entrypoints/js_app/js_app.json +1 -3
  19. package/front_end/entrypoints/main/MainImpl.ts +26 -0
  20. package/front_end/entrypoints/node_app/node_app.json +1 -3
  21. package/front_end/entrypoints/shell/shell.js +0 -11
  22. package/front_end/entrypoints/shell/shell.json +1 -5
  23. package/front_end/entrypoints/worker_app/worker_app.json +1 -7
  24. package/front_end/generated/InspectorBackendCommands.js +19 -0
  25. package/front_end/generated/protocol-mapping.d.ts +31 -1
  26. package/front_end/generated/protocol-proxy-api.d.ts +34 -2
  27. package/front_end/generated/protocol.d.ts +81 -6
  28. package/front_end/global_typings/global_defs.d.ts +5 -0
  29. package/front_end/legacy_test_runner/bindings_test_runner/IsolatedFilesystemTestRunner.js +2 -2
  30. package/front_end/legacy_test_runner/console_test_runner/console_test_runner.js +14 -2
  31. package/front_end/legacy_test_runner/legacy_test_runner.ts +10 -1
  32. package/front_end/legacy_test_runner/test_runner/TestRunner.js +11 -0
  33. package/front_end/models/formatter/SourceFormatter.ts +0 -10
  34. package/front_end/models/workspace/UISourceCode.ts +9 -42
  35. package/front_end/panels/animation/AnimationTimeline.ts +3 -3
  36. package/front_end/panels/application/ApplicationPanelSidebar.ts +3 -3
  37. package/front_end/panels/application/BackForwardCacheStrings.ts +3 -1
  38. package/front_end/panels/application/application-meta.ts +0 -3
  39. package/front_end/panels/application/components/EndpointsGrid.ts +1 -1
  40. package/front_end/panels/application/components/ReportsGrid.ts +1 -1
  41. package/front_end/panels/console/ConsolePinPane.ts +21 -26
  42. package/front_end/panels/coverage/CoverageDecorationManager.ts +4 -5
  43. package/front_end/panels/coverage/CoverageView.ts +2 -105
  44. package/front_end/panels/css_overview/components/CSSOverviewStartView.ts +11 -56
  45. package/front_end/panels/css_overview/components/cssOverviewStartView.css +1 -8
  46. package/front_end/panels/elements/ElementsTreeElement.ts +4 -9
  47. package/front_end/panels/elements/components/StylePropertyEditor.ts +2 -0
  48. package/front_end/panels/elements/components/adornerSettingsPane.css +0 -4
  49. package/front_end/panels/emulation/DeviceModeToolbar.ts +3 -1
  50. package/front_end/panels/emulation/DeviceModeView.ts +2 -1
  51. package/front_end/panels/emulation/InspectedPagePlaceholder.ts +3 -1
  52. package/front_end/panels/emulation/MediaQueryInspector.ts +3 -1
  53. package/front_end/panels/emulation/emulation-meta.ts +2 -4
  54. package/front_end/panels/issues/issues-meta.ts +0 -2
  55. package/front_end/panels/js_profiler/js_profiler-meta.ts +0 -3
  56. package/front_end/panels/layers/module.json +0 -1
  57. package/front_end/panels/lighthouse/LighthousePanel.ts +2 -4
  58. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -4
  59. package/front_end/panels/lighthouse/lighthouseStartView.css +4 -0
  60. package/front_end/panels/lighthouse/module.json +0 -6
  61. package/front_end/panels/media/media-meta.ts +0 -3
  62. package/front_end/panels/network/ResourceWebSocketFrameView.ts +2 -1
  63. package/front_end/panels/network/network-meta.ts +0 -3
  64. package/front_end/panels/profiler/CPUProfileView.ts +10 -3
  65. package/front_end/panels/profiler/profiler-meta.ts +0 -2
  66. package/front_end/panels/screencast/screencast-meta.ts +0 -3
  67. package/front_end/panels/security/security-meta.ts +0 -3
  68. package/front_end/panels/sources/BreakpointEditDialog.ts +16 -30
  69. package/front_end/panels/sources/CSSPlugin.ts +310 -331
  70. package/front_end/panels/sources/CallStackSidebarPane.ts +28 -34
  71. package/front_end/panels/sources/CoveragePlugin.ts +121 -6
  72. package/front_end/panels/sources/DebuggerPlugin.ts +1166 -1243
  73. package/front_end/panels/sources/EditingLocationHistoryManager.ts +71 -101
  74. package/front_end/panels/sources/GoToLineQuickOpen.ts +4 -3
  75. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +3 -3
  76. package/front_end/panels/sources/JavaScriptCompilerPlugin.ts +26 -23
  77. package/front_end/panels/sources/Plugin.ts +20 -4
  78. package/front_end/panels/sources/ProfilePlugin.ts +185 -0
  79. package/front_end/panels/sources/ScriptFormatterEditorAction.ts +3 -3
  80. package/front_end/panels/sources/ScriptOriginPlugin.ts +0 -10
  81. package/front_end/panels/sources/SnippetsPlugin.ts +1 -10
  82. package/front_end/panels/sources/SourcesPanel.ts +6 -5
  83. package/front_end/panels/sources/SourcesView.ts +10 -8
  84. package/front_end/panels/sources/TabbedEditorContainer.ts +31 -27
  85. package/front_end/panels/sources/UISourceCodeFrame.ts +335 -470
  86. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +3 -2
  87. package/front_end/panels/sources/sources-legacy.ts +0 -6
  88. package/front_end/panels/sources/sources-meta.ts +1 -4
  89. package/front_end/panels/sources/sources.ts +0 -2
  90. package/front_end/panels/timeline/timeline-meta.ts +0 -5
  91. package/front_end/third_party/codemirror.next/bundle.ts +9 -13
  92. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  93. package/front_end/third_party/codemirror.next/chunk/javascript.js +2 -2
  94. package/front_end/third_party/codemirror.next/chunk/markdown.js +2 -6
  95. package/front_end/third_party/codemirror.next/chunk/php.js +2 -6
  96. package/front_end/third_party/codemirror.next/chunk/python.js +1 -1
  97. package/front_end/third_party/codemirror.next/chunk/wast.js +1 -1
  98. package/front_end/third_party/codemirror.next/chunk/xml.js +2 -2
  99. package/front_end/third_party/codemirror.next/codemirror.next.d.ts +279 -198
  100. package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
  101. package/front_end/third_party/codemirror.next/package.json +13 -11
  102. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +1128 -1158
  103. package/front_end/third_party/lighthouse/locales/ar-XB.json +211 -79
  104. package/front_end/third_party/lighthouse/locales/ar.json +213 -81
  105. package/front_end/third_party/lighthouse/locales/bg.json +211 -79
  106. package/front_end/third_party/lighthouse/locales/ca.json +212 -80
  107. package/front_end/third_party/lighthouse/locales/cs.json +211 -79
  108. package/front_end/third_party/lighthouse/locales/da.json +211 -79
  109. package/front_end/third_party/lighthouse/locales/de.json +211 -79
  110. package/front_end/third_party/lighthouse/locales/el.json +213 -81
  111. package/front_end/third_party/lighthouse/locales/en-GB.json +211 -79
  112. package/front_end/third_party/lighthouse/locales/en-US.json +186 -75
  113. package/front_end/third_party/lighthouse/locales/en-XA.json +211 -79
  114. package/front_end/third_party/lighthouse/locales/en-XL.json +186 -75
  115. package/front_end/third_party/lighthouse/locales/es-419.json +211 -79
  116. package/front_end/third_party/lighthouse/locales/es.json +212 -80
  117. package/front_end/third_party/lighthouse/locales/fi.json +211 -79
  118. package/front_end/third_party/lighthouse/locales/fil.json +211 -79
  119. package/front_end/third_party/lighthouse/locales/fr.json +211 -79
  120. package/front_end/third_party/lighthouse/locales/he.json +212 -80
  121. package/front_end/third_party/lighthouse/locales/hi.json +214 -82
  122. package/front_end/third_party/lighthouse/locales/hr.json +211 -79
  123. package/front_end/third_party/lighthouse/locales/hu.json +211 -79
  124. package/front_end/third_party/lighthouse/locales/id.json +211 -79
  125. package/front_end/third_party/lighthouse/locales/it.json +211 -79
  126. package/front_end/third_party/lighthouse/locales/ja.json +211 -79
  127. package/front_end/third_party/lighthouse/locales/ko.json +211 -79
  128. package/front_end/third_party/lighthouse/locales/lt.json +211 -79
  129. package/front_end/third_party/lighthouse/locales/lv.json +214 -82
  130. package/front_end/third_party/lighthouse/locales/nl.json +211 -79
  131. package/front_end/third_party/lighthouse/locales/no.json +211 -79
  132. package/front_end/third_party/lighthouse/locales/pl.json +211 -79
  133. package/front_end/third_party/lighthouse/locales/pt-PT.json +211 -79
  134. package/front_end/third_party/lighthouse/locales/pt.json +211 -79
  135. package/front_end/third_party/lighthouse/locales/ro.json +212 -80
  136. package/front_end/third_party/lighthouse/locales/ru.json +211 -79
  137. package/front_end/third_party/lighthouse/locales/sk.json +211 -79
  138. package/front_end/third_party/lighthouse/locales/sl.json +211 -79
  139. package/front_end/third_party/lighthouse/locales/sr-Latn.json +211 -79
  140. package/front_end/third_party/lighthouse/locales/sr.json +211 -79
  141. package/front_end/third_party/lighthouse/locales/sv.json +211 -79
  142. package/front_end/third_party/lighthouse/locales/ta.json +218 -86
  143. package/front_end/third_party/lighthouse/locales/te.json +251 -119
  144. package/front_end/third_party/lighthouse/locales/th.json +211 -79
  145. package/front_end/third_party/lighthouse/locales/tr.json +211 -79
  146. package/front_end/third_party/lighthouse/locales/uk.json +212 -80
  147. package/front_end/third_party/lighthouse/locales/vi.json +211 -79
  148. package/front_end/third_party/lighthouse/locales/zh-HK.json +211 -79
  149. package/front_end/third_party/lighthouse/locales/zh-TW.json +211 -79
  150. package/front_end/third_party/lighthouse/locales/zh.json +211 -79
  151. package/front_end/third_party/lighthouse/report/bundle.d.ts +72 -34
  152. package/front_end/third_party/lighthouse/report/bundle.js +698 -492
  153. package/front_end/third_party/lighthouse/report-assets/report-generator.js +1 -2
  154. package/front_end/third_party/lighthouse/report-assets/report.js +40 -35
  155. package/front_end/third_party/lighthouse/report-assets/standalone-template.html +2 -4
  156. package/front_end/ui/components/code_highlighter/CodeHighlighter.ts +60 -68
  157. package/front_end/ui/components/data_grid/dataGrid.css +12 -10
  158. package/front_end/ui/components/docs/css_overview/start_view.html +25 -0
  159. package/front_end/ui/components/docs/css_overview/start_view.ts +14 -0
  160. package/front_end/ui/components/docs/icon_button/basic.ts +3 -3
  161. package/front_end/ui/components/docs/panel_feedback/button.html +25 -0
  162. package/front_end/ui/components/docs/panel_feedback/button.ts +18 -0
  163. package/front_end/ui/components/helpers/get-stylesheet.ts +0 -14
  164. package/front_end/ui/components/markdown_view/MarkdownImagesMap.ts +1 -1
  165. package/front_end/ui/components/panel_feedback/FeedbackButton.ts +67 -0
  166. package/front_end/ui/components/panel_feedback/panel_feedback.ts +1 -0
  167. package/front_end/ui/components/survey_link/SurveyLink.ts +1 -1
  168. package/front_end/ui/components/text_editor/TextEditor.ts +79 -36
  169. package/front_end/ui/components/text_editor/config.ts +42 -26
  170. package/front_end/ui/components/text_editor/javascript.ts +2 -3
  171. package/front_end/ui/components/text_editor/position.ts +17 -0
  172. package/front_end/ui/components/text_editor/text_editor.ts +1 -0
  173. package/front_end/ui/components/text_editor/theme.ts +5 -1
  174. package/front_end/ui/legacy/Dialog.ts +3 -1
  175. package/front_end/ui/legacy/DropTarget.ts +2 -1
  176. package/front_end/ui/legacy/EmptyWidget.ts +2 -1
  177. package/front_end/ui/legacy/FilterBar.ts +2 -1
  178. package/front_end/ui/legacy/GlassPane.ts +4 -2
  179. package/front_end/ui/legacy/Infobar.ts +5 -8
  180. package/front_end/ui/legacy/InspectorView.ts +6 -1
  181. package/front_end/ui/legacy/ListWidget.ts +2 -1
  182. package/front_end/ui/legacy/PopoverHelper.ts +2 -1
  183. package/front_end/ui/legacy/ProgressIndicator.ts +2 -1
  184. package/front_end/ui/legacy/RemoteDebuggingTerminatedScreen.ts +2 -1
  185. package/front_end/ui/legacy/ReportView.ts +2 -1
  186. package/front_end/ui/legacy/RootView.ts +2 -1
  187. package/front_end/ui/legacy/SearchableView.ts +2 -1
  188. package/front_end/ui/legacy/ShortcutRegistry.ts +11 -7
  189. package/front_end/ui/legacy/SoftContextMenu.ts +2 -1
  190. package/front_end/ui/legacy/SoftDropDown.ts +4 -2
  191. package/front_end/ui/legacy/SplitWidget.ts +2 -1
  192. package/front_end/ui/legacy/SuggestBox.ts +2 -1
  193. package/front_end/ui/legacy/TabbedPane.ts +2 -1
  194. package/front_end/ui/legacy/TargetCrashedScreen.ts +2 -1
  195. package/front_end/ui/legacy/TextPrompt.ts +2 -1
  196. package/front_end/ui/legacy/Toolbar.ts +3 -2
  197. package/front_end/ui/legacy/Treeoutline.ts +3 -2
  198. package/front_end/ui/legacy/UIUtils.ts +16 -13
  199. package/front_end/ui/legacy/ViewManager.ts +2 -1
  200. package/front_end/ui/legacy/Widget.ts +1 -1
  201. package/front_end/ui/legacy/components/object_ui/object_ui-meta.ts +0 -3
  202. package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +2 -1
  203. package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +3 -1
  204. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +2 -1
  205. package/front_end/ui/legacy/components/perf_ui/LineLevelProfile.ts +35 -131
  206. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +2 -1
  207. package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +3 -1
  208. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +2 -1
  209. package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +0 -2
  210. package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +2 -2
  211. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +3 -6
  212. package/front_end/ui/legacy/components/source_frame/FontView.ts +1 -0
  213. package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -0
  214. package/front_end/ui/legacy/components/source_frame/JSONView.ts +1 -0
  215. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +19 -14
  216. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +501 -252
  217. package/front_end/ui/legacy/components/source_frame/XMLView.ts +2 -0
  218. package/front_end/ui/legacy/components/source_frame/module.json +0 -3
  219. package/front_end/ui/legacy/components/source_frame/source_frame-legacy.ts +0 -11
  220. package/front_end/ui/legacy/components/source_frame/source_frame.ts +0 -2
  221. package/front_end/ui/legacy/components/text_editor/CodeMirrorTextEditor.ts +2 -0
  222. package/front_end/ui/legacy/components/text_editor/cmdevtools.css +3 -1
  223. package/front_end/ui/legacy/components/text_editor/module.json +0 -3
  224. package/front_end/ui/legacy/components/utils/Linkifier.ts +7 -15
  225. package/front_end/ui/legacy/radioButton.css +1 -13
  226. package/front_end/ui/legacy/textButton.css +5 -4
  227. package/front_end/ui/legacy/themeColors.css +36 -0
  228. package/front_end/ui/legacy/theme_support/theme_support_impl.ts +7 -9
  229. package/front_end/ui/legacy/utils/append-style.ts +9 -4
  230. package/front_end/ui/legacy/utils/create-shadow-root-with-core-styles.ts +2 -2
  231. package/front_end/ui/legacy/utils/inject-core-styles.ts +7 -4
  232. package/package.json +1 -1
  233. package/scripts/build/generate_css_js_files.js +23 -9
  234. package/scripts/build/ninja/generate_css.gni +10 -1
  235. package/scripts/eslint_rules/lib/check_css_import.js +2 -2
  236. package/scripts/eslint_rules/tests/check_css_import_test.js +12 -0
  237. package/front_end/Images/radioDot-dark-theme.png +0 -0
  238. package/front_end/Images/radioDot.png +0 -0
  239. package/front_end/emulated_devices/module.json +0 -6
  240. package/front_end/panels/application/module.json +0 -7
  241. package/front_end/panels/emulation/module.json +0 -11
  242. package/front_end/panels/issues/module.json +0 -6
  243. package/front_end/panels/js_profiler/module.json +0 -5
  244. package/front_end/panels/layer_viewer/module.json +0 -6
  245. package/front_end/panels/media/module.json +0 -6
  246. package/front_end/panels/network/module.json +0 -6
  247. package/front_end/panels/profiler/module.json +0 -6
  248. package/front_end/panels/screencast/module.json +0 -6
  249. package/front_end/panels/security/module.json +0 -5
  250. package/front_end/panels/timeline/module.json +0 -8
  251. package/front_end/third_party/lighthouse/report-assets/report.css +0 -1774
  252. package/front_end/ui/legacy/components/perf_ui/module.json +0 -13
  253. package/front_end/ui/legacy/components/source_frame/SourcesTextEditor.ts +0 -1030
  254. package/front_end/ui/legacy/module.json +0 -41
@@ -187,7 +187,6 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
187
187
  return;
188
188
  }
189
189
 
190
- let debuggerModel: SDK.DebuggerModel.DebuggerModel|null = details.debuggerModel;
191
190
  this.notPausedMessageElement.classList.add('hidden');
192
191
 
193
192
  const itemPromises = [];
@@ -209,32 +208,33 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
209
208
  UI.Tooltip.Tooltip.install(this.callFrameWarningsElement, Array.from(uniqueWarnings).join('\n'));
210
209
  }
211
210
 
212
- let asyncStackTrace: Protocol.Runtime.StackTrace|null|undefined = details.asyncStackTrace;
213
- if (!asyncStackTrace && details.asyncStackTraceId) {
214
- if (details.asyncStackTraceId.debuggerId) {
215
- debuggerModel = await SDK.DebuggerModel.DebuggerModel.modelForDebuggerId(details.asyncStackTraceId.debuggerId);
216
- }
217
- asyncStackTrace = debuggerModel ? await debuggerModel.fetchAsyncStackTrace(details.asyncStackTraceId) : null;
218
- }
211
+ let debuggerModel = details.debuggerModel;
212
+ let asyncStackTraceId = details.asyncStackTraceId;
213
+ let asyncStackTrace: Protocol.Runtime.StackTrace|undefined|null = details.asyncStackTrace;
219
214
  let previousStackTrace: Protocol.Runtime.CallFrame[]|SDK.DebuggerModel.CallFrame[] = details.callFrames;
220
- let maxAsyncStackChainDepth = this.maxAsyncStackChainDepth;
221
- while (asyncStackTrace && maxAsyncStackChainDepth > 0) {
215
+ for (let {maxAsyncStackChainDepth} = this; maxAsyncStackChainDepth > 0; --maxAsyncStackChainDepth) {
216
+ if (!asyncStackTrace) {
217
+ if (!asyncStackTraceId) {
218
+ break;
219
+ }
220
+ if (asyncStackTraceId.debuggerId) {
221
+ const dm = await SDK.DebuggerModel.DebuggerModel.modelForDebuggerId(asyncStackTraceId.debuggerId);
222
+ if (!dm) {
223
+ break;
224
+ }
225
+ debuggerModel = dm;
226
+ }
227
+ asyncStackTrace = await debuggerModel.fetchAsyncStackTrace(asyncStackTraceId);
228
+ if (!asyncStackTrace) {
229
+ break;
230
+ }
231
+ }
222
232
  const title = UI.UIUtils.asyncStackTraceLabel(asyncStackTrace.description, previousStackTrace);
223
233
  items.push(...await Item.createItemsForAsyncStack(
224
234
  title, debuggerModel, asyncStackTrace.callFrames, this.locationPool, this.refreshItem.bind(this)));
225
-
226
- --maxAsyncStackChainDepth;
227
235
  previousStackTrace = asyncStackTrace.callFrames;
228
- if (asyncStackTrace.parent) {
229
- asyncStackTrace = asyncStackTrace.parent;
230
- } else if (asyncStackTrace.parentId) {
231
- if (asyncStackTrace.parentId.debuggerId) {
232
- debuggerModel = await SDK.DebuggerModel.DebuggerModel.modelForDebuggerId(asyncStackTrace.parentId.debuggerId);
233
- }
234
- asyncStackTrace = debuggerModel ? await debuggerModel.fetchAsyncStackTrace(asyncStackTrace.parentId) : null;
235
- } else {
236
- asyncStackTrace = null;
237
- }
236
+ asyncStackTraceId = asyncStackTrace.parentId;
237
+ asyncStackTrace = asyncStackTrace.parent;
238
238
  }
239
239
  this.showMoreMessageElement.classList.toggle('hidden', !asyncStackTrace);
240
240
  this.items.replaceAll(items);
@@ -552,7 +552,7 @@ export class Item {
552
552
  }
553
553
 
554
554
  static async createItemsForAsyncStack(
555
- title: string, debuggerModel: SDK.DebuggerModel.DebuggerModel|null, frames: Protocol.Runtime.CallFrame[],
555
+ title: string, debuggerModel: SDK.DebuggerModel.DebuggerModel, frames: Protocol.Runtime.CallFrame[],
556
556
  locationPool: Bindings.LiveLocation.LiveLocationPool, updateDelegate: (arg0: Item) => void): Promise<Item[]> {
557
557
  const headerItemToItemsSet = new WeakMap<Item, Set<Item>>();
558
558
  const asyncHeaderItem = new Item(title, updateDelegate);
@@ -563,17 +563,11 @@ export class Item {
563
563
  const liveLocationPromises = [];
564
564
  for (const frame of frames) {
565
565
  const item = new Item(UI.UIUtils.beautifyFunctionName(frame.functionName), update);
566
- const rawLocation = debuggerModel ?
567
- debuggerModel.createRawLocationByScriptId(frame.scriptId, frame.lineNumber, frame.columnNumber) :
568
- null;
569
- if (!rawLocation) {
570
- item.linkText = (frame.url || '<unknown>') + ':' + (frame.lineNumber + 1);
571
- item.updateDelegate(item);
572
- } else {
573
- liveLocationPromises.push(
574
- Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().createCallFrameLiveLocation(
575
- rawLocation, item.update.bind(item), locationPool));
576
- }
566
+ const rawLocation =
567
+ debuggerModel.createRawLocationByScriptId(frame.scriptId, frame.lineNumber, frame.columnNumber);
568
+ liveLocationPromises.push(
569
+ Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().createCallFrameLiveLocation(
570
+ rawLocation, item.update.bind(item), locationPool));
577
571
  asyncFrameItems.push(item);
578
572
  }
579
573
 
@@ -6,8 +6,10 @@ import * as i18n from '../../core/i18n/i18n.js';
6
6
  import * as SDK from '../../core/sdk/sdk.js';
7
7
  import * as Formatter from '../../models/formatter/formatter.js';
8
8
  import type * as Workspace from '../../models/workspace/workspace.js';
9
- import type * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
9
+ import * as CodeMirror from '../../third_party/codemirror.next/codemirror.next.js';
10
+ import * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
10
11
  import * as UI from '../../ui/legacy/legacy.js';
12
+ import type * as TextEditor from '../../ui/components/text_editor/text_editor.js';
11
13
  import * as Coverage from '../coverage/coverage.js';
12
14
 
13
15
  import {Plugin} from './Plugin.js';
@@ -35,16 +37,13 @@ const str_ = i18n.i18n.registerUIStrings('panels/sources/CoveragePlugin.ts', UIS
35
37
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
36
38
 
37
39
  export class CoveragePlugin extends Plugin {
38
- private uiSourceCode: Workspace.UISourceCode.UISourceCode;
39
40
  private originalSourceCode: Workspace.UISourceCode.UISourceCode;
40
41
  private infoInToolbar: UI.Toolbar.ToolbarButton;
41
42
  private model: Coverage.CoverageModel.CoverageModel|null|undefined;
42
43
  private coverage: Coverage.CoverageModel.URLCoverageInfo|null|undefined;
43
44
 
44
- constructor(
45
- _textEditor: SourceFrame.SourcesTextEditor.SourcesTextEditor, uiSourceCode: Workspace.UISourceCode.UISourceCode) {
46
- super();
47
- this.uiSourceCode = uiSourceCode;
45
+ constructor(uiSourceCode: Workspace.UISourceCode.UISourceCode) {
46
+ super(uiSourceCode);
48
47
  this.originalSourceCode =
49
48
  Formatter.SourceFormatter.SourceFormatter.instance().getOriginalUISourceCode(this.uiSourceCode);
50
49
  this.infoInToolbar = new UI.Toolbar.ToolbarButton(i18nString(UIStrings.clickToShowCoveragePanel));
@@ -111,4 +110,120 @@ export class CoveragePlugin extends Plugin {
111
110
  async rightToolbarItems(): Promise<UI.Toolbar.ToolbarItem[]> {
112
111
  return [this.infoInToolbar];
113
112
  }
113
+
114
+ editorExtension(): CodeMirror.Extension {
115
+ return coverageCompartment.of([]);
116
+ }
117
+
118
+ private getCoverageManager(): Coverage.CoverageDecorationManager.CoverageDecorationManager|undefined {
119
+ return this.uiSourceCode.getDecorationData(SourceFrame.SourceFrame.DecoratorType.COVERAGE);
120
+ }
121
+
122
+ editorInitialized(editor: TextEditor.TextEditor.TextEditor): void {
123
+ if (this.getCoverageManager()) {
124
+ this.startDecoUpdate(editor);
125
+ }
126
+ }
127
+
128
+ decorationChanged(type: SourceFrame.SourceFrame.DecoratorType, editor: TextEditor.TextEditor.TextEditor): void {
129
+ if (type === SourceFrame.SourceFrame.DecoratorType.COVERAGE) {
130
+ this.startDecoUpdate(editor);
131
+ }
132
+ }
133
+
134
+ private startDecoUpdate(editor: TextEditor.TextEditor.TextEditor): void {
135
+ const manager = this.getCoverageManager();
136
+ (manager ? manager.usageByLine(this.uiSourceCode) : Promise.resolve([])).then(usageByLine => {
137
+ const enabled = Boolean(editor.state.field(coverageState, false));
138
+ if (!usageByLine.length) {
139
+ if (enabled) {
140
+ editor.dispatch({effects: coverageCompartment.reconfigure([])});
141
+ }
142
+ } else if (!enabled) {
143
+ editor.dispatch({
144
+ effects: coverageCompartment.reconfigure([
145
+ coverageState.init(state => markersFromCoverageData(usageByLine, state)),
146
+ coverageGutter(this.uiSourceCode.url()),
147
+ theme,
148
+ ]),
149
+ });
150
+ } else {
151
+ editor.dispatch({effects: setCoverageState.of(usageByLine)});
152
+ }
153
+ });
154
+ }
114
155
  }
156
+
157
+ const coveredMarker = new (class extends CodeMirror.GutterMarker {
158
+ elementClass = 'cm-coverageUsed';
159
+ })();
160
+
161
+ const notCoveredMarker = new (class extends CodeMirror.GutterMarker {
162
+ elementClass = 'cm-coverageUnused';
163
+ })();
164
+
165
+ function markersFromCoverageData(
166
+ usageByLine: (boolean|undefined)[], state: CodeMirror.EditorState): CodeMirror.RangeSet<CodeMirror.GutterMarker> {
167
+ const builder = new CodeMirror.RangeSetBuilder<CodeMirror.GutterMarker>();
168
+ for (let line = 0; line < usageByLine.length; line++) {
169
+ const usage = usageByLine[line];
170
+ if (usage !== undefined && line < state.doc.lines) {
171
+ const lineStart = state.doc.line(line + 1).from;
172
+ builder.add(lineStart, lineStart, usage ? coveredMarker : notCoveredMarker);
173
+ }
174
+ }
175
+ return builder.finish();
176
+ }
177
+
178
+ const setCoverageState = CodeMirror.StateEffect.define<(boolean | undefined)[]>();
179
+
180
+ const coverageState = CodeMirror.StateField.define<CodeMirror.RangeSet<CodeMirror.GutterMarker>>({
181
+ create(): CodeMirror.RangeSet<CodeMirror.GutterMarker> {
182
+ return CodeMirror.RangeSet.empty;
183
+ },
184
+ update(markers, tr) {
185
+ return tr.effects.reduce((markers, effect) => {
186
+ return effect.is(setCoverageState) ? markersFromCoverageData(effect.value, tr.state) : markers;
187
+ }, markers.map(tr.changes));
188
+ },
189
+ });
190
+
191
+ function coverageGutter(url: string): CodeMirror.Extension {
192
+ return CodeMirror.gutter({
193
+ markers: (view): CodeMirror.RangeSet<CodeMirror.GutterMarker> => view.state.field(coverageState),
194
+
195
+ domEventHandlers: {
196
+ click() {
197
+ UI.ViewManager.ViewManager.instance()
198
+ .showView('coverage')
199
+ .then(() => {
200
+ const view = UI.ViewManager.ViewManager.instance().view('coverage');
201
+ return view && view.widget();
202
+ })
203
+ .then(widget => {
204
+ const matchFormattedSuffix = url.match(/(.*):formatted$/);
205
+ const urlWithoutFormattedSuffix = (matchFormattedSuffix && matchFormattedSuffix[1]) || url;
206
+ (widget as Coverage.CoverageView.CoverageView).selectCoverageItemByUrl(urlWithoutFormattedSuffix);
207
+ });
208
+ return true;
209
+ },
210
+ },
211
+
212
+ class: 'cm-coverageGutter',
213
+ });
214
+ }
215
+
216
+ const coverageCompartment = new CodeMirror.Compartment();
217
+
218
+ const theme = CodeMirror.EditorView.baseTheme({
219
+ '.cm-coverageGutter': {
220
+ width: '5px',
221
+ marginLeft: '3px',
222
+ },
223
+ '.cm-coverageUnused': {
224
+ backgroundColor: 'var(--color-accent-red)',
225
+ },
226
+ '.cm-coverageUsed': {
227
+ backgroundColor: 'var(--color-coverage-used)',
228
+ },
229
+ });