chrome-devtools-frontend 1.0.940255 → 1.0.942095

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 (133) hide show
  1. package/config/gni/all_devtools_files.gni +0 -13
  2. package/config/gni/devtools_grd_files.gni +13 -13
  3. package/config/gni/devtools_image_files.gni +1 -2
  4. package/front_end/.eslintrc.js +1 -0
  5. package/front_end/Images/src/feedback_button_icon.svg +3 -0
  6. package/front_end/Tests.js +15 -0
  7. package/front_end/core/common/Color.ts +5 -0
  8. package/front_end/core/i18n/locales/en-US.json +39 -30
  9. package/front_end/core/i18n/locales/en-XL.json +39 -30
  10. package/front_end/core/sdk/DOMDebuggerModel.ts +18 -1
  11. package/front_end/core/sdk/sdk-meta.ts +17 -3
  12. package/front_end/entrypoints/devtools_app/devtools_app.json +1 -7
  13. package/front_end/entrypoints/main/MainImpl.ts +26 -0
  14. package/front_end/entrypoints/shell/shell.js +0 -11
  15. package/front_end/entrypoints/shell/shell.json +0 -1
  16. package/front_end/entrypoints/worker_app/worker_app.json +0 -4
  17. package/front_end/generated/InspectorBackendCommands.js +1 -0
  18. package/front_end/generated/protocol.d.ts +2 -0
  19. package/front_end/global_typings/global_defs.d.ts +5 -0
  20. package/front_end/legacy_test_runner/console_test_runner/console_test_runner.js +14 -2
  21. package/front_end/legacy_test_runner/legacy_test_runner.ts +10 -1
  22. package/front_end/legacy_test_runner/test_runner/TestRunner.js +9 -0
  23. package/front_end/models/formatter/SourceFormatter.ts +0 -10
  24. package/front_end/models/workspace/UISourceCode.ts +9 -42
  25. package/front_end/panels/animation/AnimationTimeline.ts +3 -3
  26. package/front_end/panels/application/ApplicationPanelSidebar.ts +3 -3
  27. package/front_end/panels/application/application-meta.ts +0 -3
  28. package/front_end/panels/console/ConsolePinPane.ts +21 -26
  29. package/front_end/panels/coverage/CoverageDecorationManager.ts +4 -5
  30. package/front_end/panels/coverage/CoverageView.ts +2 -105
  31. package/front_end/panels/css_overview/components/CSSOverviewStartView.ts +11 -56
  32. package/front_end/panels/css_overview/components/cssOverviewStartView.css +1 -8
  33. package/front_end/panels/elements/ElementsTreeElement.ts +4 -9
  34. package/front_end/panels/elements/components/adornerSettingsPane.css +0 -4
  35. package/front_end/panels/emulation/emulation-meta.ts +2 -2
  36. package/front_end/panels/issues/IssueKindView.ts +22 -4
  37. package/front_end/panels/issues/issues-meta.ts +0 -2
  38. package/front_end/panels/layers/module.json +0 -1
  39. package/front_end/panels/lighthouse/lighthouseStartView.css +4 -0
  40. package/front_end/panels/media/media-meta.ts +0 -3
  41. package/front_end/panels/network/NetworkLogView.ts +3 -0
  42. package/front_end/panels/network/ResourceWebSocketFrameView.ts +2 -1
  43. package/front_end/panels/network/network-meta.ts +0 -3
  44. package/front_end/panels/profiler/module.json +1 -2
  45. package/front_end/panels/security/security-meta.ts +0 -3
  46. package/front_end/panels/sources/BreakpointEditDialog.ts +16 -30
  47. package/front_end/panels/sources/CSSPlugin.ts +310 -331
  48. package/front_end/panels/sources/CallStackSidebarPane.ts +28 -34
  49. package/front_end/panels/sources/CoveragePlugin.ts +121 -6
  50. package/front_end/panels/sources/DebuggerPlugin.ts +1166 -1243
  51. package/front_end/panels/sources/EditingLocationHistoryManager.ts +71 -101
  52. package/front_end/panels/sources/GoToLineQuickOpen.ts +4 -3
  53. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +3 -3
  54. package/front_end/panels/sources/JavaScriptCompilerPlugin.ts +26 -23
  55. package/front_end/panels/sources/Plugin.ts +20 -4
  56. package/front_end/panels/sources/ProfilePlugin.ts +185 -0
  57. package/front_end/panels/sources/ScriptFormatterEditorAction.ts +3 -3
  58. package/front_end/panels/sources/ScriptOriginPlugin.ts +0 -10
  59. package/front_end/panels/sources/SnippetsPlugin.ts +1 -10
  60. package/front_end/panels/sources/SourcesPanel.ts +15 -10
  61. package/front_end/panels/sources/SourcesView.ts +10 -8
  62. package/front_end/panels/sources/TabbedEditorContainer.ts +31 -27
  63. package/front_end/panels/sources/UISourceCodeFrame.ts +335 -470
  64. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +3 -2
  65. package/front_end/panels/sources/sources-legacy.ts +0 -6
  66. package/front_end/panels/sources/sources.ts +0 -2
  67. package/front_end/panels/timeline/module.json +0 -2
  68. package/front_end/third_party/codemirror.next/bundle.ts +9 -13
  69. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  70. package/front_end/third_party/codemirror.next/chunk/javascript.js +2 -2
  71. package/front_end/third_party/codemirror.next/chunk/markdown.js +2 -6
  72. package/front_end/third_party/codemirror.next/chunk/php.js +2 -6
  73. package/front_end/third_party/codemirror.next/chunk/python.js +1 -1
  74. package/front_end/third_party/codemirror.next/chunk/wast.js +1 -1
  75. package/front_end/third_party/codemirror.next/chunk/xml.js +2 -2
  76. package/front_end/third_party/codemirror.next/codemirror.next.d.ts +279 -198
  77. package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
  78. package/front_end/third_party/codemirror.next/package.json +13 -11
  79. package/front_end/ui/components/code_highlighter/CodeHighlighter.ts +60 -68
  80. package/front_end/ui/components/data_grid/dataGrid.css +12 -10
  81. package/front_end/ui/components/docs/css_overview/start_view.html +25 -0
  82. package/front_end/ui/components/docs/css_overview/start_view.ts +14 -0
  83. package/front_end/ui/components/docs/panel_feedback/basic.html +25 -0
  84. package/front_end/ui/components/docs/panel_feedback/basic.ts +20 -0
  85. package/front_end/ui/components/docs/panel_feedback/button.html +25 -0
  86. package/front_end/ui/components/docs/panel_feedback/button.ts +18 -0
  87. package/front_end/ui/components/helpers/get-stylesheet.ts +1 -0
  88. package/front_end/ui/components/panel_feedback/FeedbackButton.ts +67 -0
  89. package/front_end/ui/components/panel_feedback/PanelFeedback.ts +100 -0
  90. package/front_end/ui/components/panel_feedback/panelFeedback.css +76 -0
  91. package/front_end/ui/components/panel_feedback/panel_feedback.ts +6 -0
  92. package/front_end/ui/components/report_view/reportValue.css +1 -0
  93. package/front_end/ui/components/text_editor/TextEditor.ts +79 -36
  94. package/front_end/ui/components/text_editor/config.ts +42 -26
  95. package/front_end/ui/components/text_editor/javascript.ts +2 -3
  96. package/front_end/ui/components/text_editor/position.ts +17 -0
  97. package/front_end/ui/components/text_editor/text_editor.ts +1 -0
  98. package/front_end/ui/components/text_editor/theme.ts +5 -1
  99. package/front_end/ui/legacy/Infobar.ts +2 -6
  100. package/front_end/ui/legacy/ShortcutRegistry.ts +11 -7
  101. package/front_end/ui/legacy/Widget.ts +1 -1
  102. package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +2 -1
  103. package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +3 -1
  104. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +2 -1
  105. package/front_end/ui/legacy/components/perf_ui/LineLevelProfile.ts +35 -131
  106. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +2 -1
  107. package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +3 -1
  108. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +2 -1
  109. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +3 -6
  110. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +18 -14
  111. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +502 -252
  112. package/front_end/ui/legacy/components/source_frame/source_frame-legacy.ts +0 -11
  113. package/front_end/ui/legacy/components/source_frame/source_frame.ts +0 -2
  114. package/front_end/ui/legacy/components/text_editor/cmdevtools.css +3 -1
  115. package/front_end/ui/legacy/radioButton.css +1 -13
  116. package/front_end/ui/legacy/softContextMenu.css +1 -0
  117. package/front_end/ui/legacy/themeColors.css +36 -0
  118. package/front_end/ui/legacy/utils/append-style.ts +9 -4
  119. package/package.json +1 -1
  120. package/scripts/build/generate_css_js_files.js +23 -9
  121. package/scripts/build/ninja/generate_css.gni +10 -1
  122. package/scripts/eslint_rules/lib/check_css_import.js +2 -2
  123. package/scripts/eslint_rules/tests/check_css_import_test.js +12 -0
  124. package/front_end/Images/radioDot-dark-theme.png +0 -0
  125. package/front_end/Images/radioDot.png +0 -0
  126. package/front_end/panels/application/module.json +0 -7
  127. package/front_end/panels/issues/module.json +0 -6
  128. package/front_end/panels/layer_viewer/module.json +0 -6
  129. package/front_end/panels/media/module.json +0 -6
  130. package/front_end/panels/network/module.json +0 -6
  131. package/front_end/panels/security/module.json +0 -5
  132. package/front_end/ui/legacy/components/perf_ui/module.json +0 -13
  133. package/front_end/ui/legacy/components/source_frame/SourcesTextEditor.ts +0 -1030
@@ -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
+ });