chrome-devtools-frontend 1.0.941208 → 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.
- package/config/gni/all_devtools_files.gni +0 -6
- package/config/gni/devtools_grd_files.gni +6 -12
- package/config/gni/devtools_image_files.gni +0 -2
- package/front_end/Tests.js +1 -0
- package/front_end/core/common/Color.ts +5 -0
- package/front_end/core/i18n/locales/en-US.json +16 -28
- package/front_end/core/i18n/locales/en-XL.json +16 -28
- package/front_end/core/sdk/sdk-meta.ts +17 -3
- package/front_end/entrypoints/devtools_app/devtools_app.json +1 -7
- package/front_end/entrypoints/main/MainImpl.ts +26 -0
- package/front_end/entrypoints/shell/shell.js +0 -11
- package/front_end/entrypoints/worker_app/worker_app.json +0 -4
- package/front_end/generated/InspectorBackendCommands.js +1 -0
- package/front_end/generated/protocol.d.ts +2 -0
- package/front_end/legacy_test_runner/legacy_test_runner.ts +10 -1
- package/front_end/models/formatter/SourceFormatter.ts +0 -10
- package/front_end/models/workspace/UISourceCode.ts +9 -42
- package/front_end/panels/animation/AnimationTimeline.ts +3 -3
- package/front_end/panels/application/ApplicationPanelSidebar.ts +3 -3
- package/front_end/panels/application/application-meta.ts +0 -3
- package/front_end/panels/console/ConsolePinPane.ts +21 -26
- package/front_end/panels/coverage/CoverageDecorationManager.ts +4 -5
- package/front_end/panels/coverage/CoverageView.ts +2 -105
- package/front_end/panels/css_overview/components/CSSOverviewStartView.ts +11 -56
- package/front_end/panels/css_overview/components/cssOverviewStartView.css +1 -8
- package/front_end/panels/elements/ElementsTreeElement.ts +4 -9
- package/front_end/panels/elements/components/adornerSettingsPane.css +0 -4
- package/front_end/panels/emulation/emulation-meta.ts +2 -2
- package/front_end/panels/issues/issues-meta.ts +0 -2
- package/front_end/panels/layers/module.json +0 -1
- package/front_end/panels/lighthouse/lighthouseStartView.css +4 -0
- package/front_end/panels/media/media-meta.ts +0 -3
- package/front_end/panels/network/ResourceWebSocketFrameView.ts +2 -1
- package/front_end/panels/network/network-meta.ts +0 -3
- package/front_end/panels/security/security-meta.ts +0 -3
- package/front_end/panels/sources/BreakpointEditDialog.ts +16 -30
- package/front_end/panels/sources/CSSPlugin.ts +310 -331
- package/front_end/panels/sources/CallStackSidebarPane.ts +28 -34
- package/front_end/panels/sources/CoveragePlugin.ts +121 -6
- package/front_end/panels/sources/DebuggerPlugin.ts +1166 -1243
- package/front_end/panels/sources/EditingLocationHistoryManager.ts +71 -101
- package/front_end/panels/sources/GoToLineQuickOpen.ts +4 -3
- package/front_end/panels/sources/InplaceFormatterEditorAction.ts +3 -3
- package/front_end/panels/sources/JavaScriptCompilerPlugin.ts +26 -23
- package/front_end/panels/sources/Plugin.ts +20 -4
- package/front_end/panels/sources/ProfilePlugin.ts +185 -0
- package/front_end/panels/sources/ScriptFormatterEditorAction.ts +3 -3
- package/front_end/panels/sources/ScriptOriginPlugin.ts +0 -10
- package/front_end/panels/sources/SnippetsPlugin.ts +1 -10
- package/front_end/panels/sources/SourcesPanel.ts +6 -5
- package/front_end/panels/sources/SourcesView.ts +10 -8
- package/front_end/panels/sources/TabbedEditorContainer.ts +31 -27
- package/front_end/panels/sources/UISourceCodeFrame.ts +335 -470
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +3 -2
- package/front_end/panels/sources/sources-legacy.ts +0 -6
- package/front_end/panels/sources/sources.ts +0 -2
- package/front_end/panels/timeline/module.json +0 -1
- package/front_end/third_party/codemirror.next/bundle.ts +9 -13
- package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/javascript.js +2 -2
- package/front_end/third_party/codemirror.next/chunk/markdown.js +2 -6
- package/front_end/third_party/codemirror.next/chunk/php.js +2 -6
- package/front_end/third_party/codemirror.next/chunk/python.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/wast.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/xml.js +2 -2
- package/front_end/third_party/codemirror.next/codemirror.next.d.ts +279 -198
- package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
- package/front_end/third_party/codemirror.next/package.json +13 -11
- package/front_end/ui/components/code_highlighter/CodeHighlighter.ts +60 -68
- package/front_end/ui/components/data_grid/dataGrid.css +12 -10
- package/front_end/ui/components/docs/css_overview/start_view.html +25 -0
- package/front_end/ui/components/docs/css_overview/start_view.ts +14 -0
- package/front_end/ui/components/text_editor/TextEditor.ts +79 -36
- package/front_end/ui/components/text_editor/config.ts +42 -26
- package/front_end/ui/components/text_editor/javascript.ts +2 -3
- package/front_end/ui/components/text_editor/position.ts +17 -0
- package/front_end/ui/components/text_editor/text_editor.ts +1 -0
- package/front_end/ui/components/text_editor/theme.ts +5 -1
- package/front_end/ui/legacy/Infobar.ts +2 -6
- package/front_end/ui/legacy/ShortcutRegistry.ts +11 -7
- package/front_end/ui/legacy/components/perf_ui/LineLevelProfile.ts +35 -131
- package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +3 -6
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +18 -14
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +502 -252
- package/front_end/ui/legacy/components/source_frame/source_frame-legacy.ts +0 -11
- package/front_end/ui/legacy/components/source_frame/source_frame.ts +0 -2
- package/front_end/ui/legacy/components/text_editor/cmdevtools.css +3 -1
- package/front_end/ui/legacy/radioButton.css +1 -13
- package/front_end/ui/legacy/themeColors.css +36 -0
- package/package.json +1 -1
- package/front_end/Images/radioDot-dark-theme.png +0 -0
- package/front_end/Images/radioDot.png +0 -0
- package/front_end/panels/application/module.json +0 -6
- package/front_end/panels/issues/module.json +0 -6
- package/front_end/panels/layer_viewer/module.json +0 -5
- package/front_end/panels/media/module.json +0 -5
- package/front_end/panels/network/module.json +0 -5
- package/front_end/panels/security/module.json +0 -5
- 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
|
|
213
|
-
|
|
214
|
-
|
|
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
|
|
221
|
-
|
|
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
|
-
|
|
229
|
-
|
|
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
|
|
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 =
|
|
567
|
-
debuggerModel.createRawLocationByScriptId(frame.scriptId, frame.lineNumber, frame.columnNumber)
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
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
|
|
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
|
-
|
|
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
|
+
});
|