chrome-devtools-frontend 1.0.1576915 → 1.0.1577886
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/front_end/core/sdk/DebuggerModel.ts +0 -34
- package/front_end/generated/InspectorBackendCommands.ts +3 -2
- package/front_end/generated/SupportedCSSProperties.js +5 -8
- package/front_end/generated/protocol-mapping.d.ts +9 -0
- package/front_end/generated/protocol-proxy-api.d.ts +7 -0
- package/front_end/generated/protocol.ts +16 -0
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +9 -7
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +0 -24
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +0 -52
- package/front_end/models/stack_trace/StackTrace.ts +3 -9
- package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +3 -5
- package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
- package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +0 -1
- package/front_end/panels/application/components/BackForwardCacheView.ts +2 -4
- package/front_end/panels/autofill/AutofillView.ts +1 -1
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +0 -1
- package/front_end/panels/common/GeminiRebrandPromoDialog.ts +2 -0
- package/front_end/panels/console/ConsoleViewMessage.ts +0 -1
- package/front_end/panels/css_overview/cssOverviewCompletedView.css +5 -0
- package/front_end/panels/elements/ElementsTreeElement.ts +0 -1
- package/front_end/panels/elements/LayoutPane.ts +7 -8
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +1 -1
- package/front_end/panels/elements/components/StylePropertyEditor.ts +1 -2
- package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +1 -1
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +1 -1
- package/front_end/panels/media/PlayerListView.ts +1 -1
- package/front_end/panels/network/NetworkLogViewColumns.ts +1 -2
- package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
- package/front_end/panels/protocol_monitor/JSONEditor.ts +1 -1
- package/front_end/panels/recorder/components/RecordingListView.ts +1 -1
- package/front_end/panels/recorder/components/RecordingView.ts +15 -0
- package/front_end/panels/recorder/components/StepEditor.ts +3 -3
- package/front_end/panels/settings/KeybindsSettingsTab.ts +1 -2
- package/front_end/panels/sources/CallStackSidebarPane.ts +74 -175
- package/front_end/panels/sources/DebuggerPlugin.ts +2 -2
- package/front_end/panels/sources/components/HeadersView.ts +2 -2
- package/front_end/panels/timeline/components/BreadcrumbsUI.ts +1 -1
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +1 -1
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/suggestion_input/SuggestionInput.ts +12 -7
- package/front_end/ui/components/tree_outline/TreeOutline.ts +1 -1
- package/front_end/ui/legacy/ListControl.ts +1 -2
- package/front_end/ui/legacy/ListWidget.ts +1 -1
- package/front_end/ui/legacy/SoftContextMenu.ts +1 -2
- package/front_end/ui/legacy/Treeoutline.ts +0 -1
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +2 -4
- package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
- package/front_end/ui/visual_logging/Debugging.ts +2 -0
- package/package.json +1 -1
|
@@ -197,7 +197,7 @@ export class LighthouseReportRenderer {
|
|
|
197
197
|
continue;
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
auditEl.setAttribute('jslog', `${VisualLogging.item(`lighthouse.audit.${id}`)
|
|
200
|
+
auditEl.setAttribute('jslog', `${VisualLogging.item(`lighthouse.audit.${id}`)}`);
|
|
201
201
|
|
|
202
202
|
let state: string|undefined;
|
|
203
203
|
for (const className of auditEl.classList) {
|
|
@@ -60,7 +60,7 @@ function renderEndiannessSetting(
|
|
|
60
60
|
data-endianness="true" @change=${(e: Event) => onEndiannessChanged((e.target as HTMLSelectElement).value as Endianness)}>
|
|
61
61
|
${[Endianness.LITTLE, Endianness.BIG].map(endianness => {
|
|
62
62
|
return html`<option value=${endianness} .selected=${currentEndiannes === endianness}
|
|
63
|
-
jslog=${VisualLogging.item(Platform.StringUtilities.toKebabCase(endianness)).track({click: true
|
|
63
|
+
jslog=${VisualLogging.item(Platform.StringUtilities.toKebabCase(endianness)).track({click: true})}>${
|
|
64
64
|
i18n.i18n.lockedString(endianness)}</option>`;
|
|
65
65
|
})}
|
|
66
66
|
</select>
|
|
@@ -104,7 +104,7 @@ export const DEFAULT_VIEW: View = (input: ViewInput, _output: undefined, target:
|
|
|
104
104
|
${VALUE_TYPE_MODE_LIST.filter(x => isValidMode(type, x)).map(mode => {
|
|
105
105
|
return html`
|
|
106
106
|
<option value=${mode} .selected=${input.valueTypeModes.get(type) === mode}
|
|
107
|
-
jslog=${VisualLogging.item(mode).track({click: true
|
|
107
|
+
jslog=${VisualLogging.item(mode).track({click: true})}>${
|
|
108
108
|
i18n.i18n.lockedString(mode)}
|
|
109
109
|
</option>`;
|
|
110
110
|
})}
|
|
@@ -73,7 +73,7 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
|
|
|
73
73
|
})}
|
|
74
74
|
@click=${() => input.onPlayerClick(player.playerID)}
|
|
75
75
|
@contextmenu=${(e: Event) => input.onPlayerContextMenu(player.playerID, e)}
|
|
76
|
-
jslog=${VisualLogging.item('player').track({click: true
|
|
76
|
+
jslog=${VisualLogging.item('player').track({click: true})}>
|
|
77
77
|
<div class="player-entry-status-icon vbox">
|
|
78
78
|
<div class="player-entry-status-icon-centering">
|
|
79
79
|
<devtools-icon name=${player.iconName}></devtools-icon>
|
|
@@ -409,8 +409,7 @@ export class NetworkLogViewColumns {
|
|
|
409
409
|
|
|
410
410
|
private createWaterfallHeader(): void {
|
|
411
411
|
this.waterfallHeaderElement = this.waterfallColumn.contentElement.createChild('div', 'network-waterfall-header');
|
|
412
|
-
this.waterfallHeaderElement.setAttribute(
|
|
413
|
-
'jslog', `${VisualLogging.tableHeader('waterfall').track({click: true, resize: true})}`);
|
|
412
|
+
this.waterfallHeaderElement.setAttribute('jslog', `${VisualLogging.tableHeader('waterfall').track({click: true})}`);
|
|
414
413
|
this.waterfallHeaderElement.addEventListener('click', waterfallHeaderClicked.bind(this));
|
|
415
414
|
this.waterfallHeaderElement.addEventListener('contextmenu', event => {
|
|
416
415
|
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
|
@@ -59,7 +59,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
59
59
|
${headers.map(header => html`
|
|
60
60
|
<devtools-header-section-row
|
|
61
61
|
.data=${{ header }}
|
|
62
|
-
jslog=${VisualLogging.item('request-header')
|
|
62
|
+
jslog=${VisualLogging.item('request-header')}
|
|
63
63
|
></devtools-header-section-row>
|
|
64
64
|
`)}
|
|
65
65
|
`, target);
|
|
@@ -990,7 +990,7 @@ function renderTargetSelectorRow(input: ViewInput): Lit.TemplateResult|undefined
|
|
|
990
990
|
jslog=${VisualLogging.dropDown('target-selector').track({change: true})}
|
|
991
991
|
@change=${input.onTargetSelected}>
|
|
992
992
|
${input.targets.map(target => html`
|
|
993
|
-
<option jslog=${VisualLogging.item('target').track({click: true
|
|
993
|
+
<option jslog=${VisualLogging.item('target').track({click: true})}
|
|
994
994
|
value=${target.id()} ?selected=${target.id() === input.targetId}>
|
|
995
995
|
${target.name()} (${target.inspectedURL()})
|
|
996
996
|
</option>`)}
|
|
@@ -140,7 +140,7 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
140
140
|
@keydown=${(event: Event) => onKeyDown(recording.storageName, event)}
|
|
141
141
|
@click=${(event: Event) => onOpenClick(recording.storageName, event)}
|
|
142
142
|
jslog=${VisualLogging.item()
|
|
143
|
-
.track({ click: true
|
|
143
|
+
.track({ click: true })
|
|
144
144
|
.context('recording')}>
|
|
145
145
|
<div class="icon">
|
|
146
146
|
<devtools-icon name="flow">
|
|
@@ -140,6 +140,14 @@ const UIStrings = {
|
|
|
140
140
|
* @description The title of the button that open current recording in Performance panel.
|
|
141
141
|
*/
|
|
142
142
|
performancePanel: 'Performance panel',
|
|
143
|
+
/**
|
|
144
|
+
* @description The announcement when the code sidebar is opened.
|
|
145
|
+
*/
|
|
146
|
+
codeSidebarOpened: 'Code sidebar opened',
|
|
147
|
+
/**
|
|
148
|
+
* @description The announcement when the code sidebar is closed.
|
|
149
|
+
*/
|
|
150
|
+
codeSidebarClosed: 'Code sidebar closed'
|
|
143
151
|
} as const;
|
|
144
152
|
const str_ = i18n.i18n.registerUIStrings(
|
|
145
153
|
'panels/recorder/components/RecordingView.ts',
|
|
@@ -1189,6 +1197,13 @@ export class RecordingView extends UI.Widget.Widget {
|
|
|
1189
1197
|
|
|
1190
1198
|
showCodeToggle = (): void => {
|
|
1191
1199
|
this.#showCodeView = !this.#showCodeView;
|
|
1200
|
+
|
|
1201
|
+
if (this.#showCodeView) {
|
|
1202
|
+
UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.codeSidebarOpened));
|
|
1203
|
+
} else {
|
|
1204
|
+
UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.codeSidebarClosed));
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1192
1207
|
void this.#convertToCode();
|
|
1193
1208
|
};
|
|
1194
1209
|
|
|
@@ -646,7 +646,7 @@ export class StepEditor extends LitElement {
|
|
|
646
646
|
#renderTypeRow(editable: boolean): Lit.TemplateResult {
|
|
647
647
|
this.#renderedAttributes.add('type');
|
|
648
648
|
// clang-format off
|
|
649
|
-
return html`<div class="row attribute" data-attribute="type" jslog=${VisualLogging.treeItem('type')
|
|
649
|
+
return html`<div class="row attribute" data-attribute="type" jslog=${VisualLogging.treeItem('type')}>
|
|
650
650
|
<div id="type">type<span class="separator">:</span></div>
|
|
651
651
|
<devtools-suggestion-input
|
|
652
652
|
aria-labelledby="type"
|
|
@@ -667,7 +667,7 @@ export class StepEditor extends LitElement {
|
|
|
667
667
|
return;
|
|
668
668
|
}
|
|
669
669
|
// clang-format off
|
|
670
|
-
return html`<div class="row attribute" data-attribute=${attribute} jslog=${VisualLogging.treeItem(Platform.StringUtilities.toKebabCase(attribute))
|
|
670
|
+
return html`<div class="row attribute" data-attribute=${attribute} jslog=${VisualLogging.treeItem(Platform.StringUtilities.toKebabCase(attribute))}>
|
|
671
671
|
<div id=${attribute}>${attribute}<span class="separator">:</span></div>
|
|
672
672
|
<devtools-suggestion-input
|
|
673
673
|
.disabled=${this.disabled}
|
|
@@ -706,7 +706,7 @@ export class StepEditor extends LitElement {
|
|
|
706
706
|
}
|
|
707
707
|
// clang-format off
|
|
708
708
|
return html`
|
|
709
|
-
<div class="attribute" data-attribute="frame" jslog=${VisualLogging.treeItem('frame')
|
|
709
|
+
<div class="attribute" data-attribute="frame" jslog=${VisualLogging.treeItem('frame')}>
|
|
710
710
|
<div class="row">
|
|
711
711
|
<div id="frame">frame<span class="separator">:</span></div>
|
|
712
712
|
${this.#renderDeleteButton('frame')}
|
|
@@ -344,8 +344,7 @@ export class ShortcutListItem {
|
|
|
344
344
|
this.settingsTab = settingsTab;
|
|
345
345
|
this.item = item;
|
|
346
346
|
this.element = document.createElement('div');
|
|
347
|
-
this.element.setAttribute(
|
|
348
|
-
'jslog', `${VisualLogging.item().context(item.id()).track({keydown: 'Escape', resize: true})}`);
|
|
347
|
+
this.element.setAttribute('jslog', `${VisualLogging.item().context(item.id()).track({keydown: 'Escape'})}`);
|
|
349
348
|
this.editedShortcuts = new Map();
|
|
350
349
|
this.shortcutInputs = new Map();
|
|
351
350
|
this.shortcuts = UI.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction(item.id());
|
|
@@ -34,10 +34,8 @@ import * as Host from '../../core/host/host.js';
|
|
|
34
34
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
35
35
|
import * as Platform from '../../core/platform/platform.js';
|
|
36
36
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
37
|
-
import type * as Protocol from '../../generated/protocol.js';
|
|
38
37
|
import * as Bindings from '../../models/bindings/bindings.js';
|
|
39
38
|
import * as Persistence from '../../models/persistence/persistence.js';
|
|
40
|
-
import * as SourceMapScopes from '../../models/source_map_scopes/source_map_scopes.js';
|
|
41
39
|
import * as StackTrace from '../../models/stack_trace/stack_trace.js';
|
|
42
40
|
import * as Workspace from '../../models/workspace/workspace.js';
|
|
43
41
|
import {Icon} from '../../ui/kit/kit.js';
|
|
@@ -116,14 +114,12 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
116
114
|
private list: UI.ListControl.ListControl<Item>;
|
|
117
115
|
private readonly showMoreMessageElement: Element;
|
|
118
116
|
private showIgnoreListed = false;
|
|
119
|
-
private readonly locationPool = new Bindings.LiveLocation.LiveLocationPool();
|
|
120
117
|
private maxAsyncStackChainDepth = defaultMaxAsyncStackChainDepth;
|
|
121
118
|
private readonly updateItemThrottler = new Common.Throttler.Throttler(100);
|
|
122
119
|
private readonly scheduledForUpdateItems = new Set<Item>();
|
|
123
120
|
private muteActivateItem?: boolean;
|
|
124
|
-
private lastDebuggerModel: SDK.DebuggerModel.DebuggerModel|null = null;
|
|
125
121
|
|
|
126
|
-
#
|
|
122
|
+
#stackTrace: StackTrace.StackTrace.DebuggableStackTrace|null = null;
|
|
127
123
|
|
|
128
124
|
private constructor() {
|
|
129
125
|
super({
|
|
@@ -194,9 +190,6 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
194
190
|
this.showMoreMessageElement = showMoreRef.value as HTMLElement;
|
|
195
191
|
|
|
196
192
|
this.requestUpdate();
|
|
197
|
-
|
|
198
|
-
SDK.TargetManager.TargetManager.instance().addModelListener(
|
|
199
|
-
SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.DebugInfoAttached, this.debugInfoAttached, this);
|
|
200
193
|
}
|
|
201
194
|
|
|
202
195
|
static instance(opts: {
|
|
@@ -210,45 +203,30 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
210
203
|
return callstackSidebarPaneInstance;
|
|
211
204
|
}
|
|
212
205
|
|
|
213
|
-
flavorChanged(details: SDK.DebuggerModel.DebuggerPausedDetails|null): void {
|
|
206
|
+
async flavorChanged(details: SDK.DebuggerModel.DebuggerPausedDetails|null): Promise<void> {
|
|
214
207
|
this.showIgnoreListed = false;
|
|
215
208
|
this.ignoreListCheckboxElement.checked = false;
|
|
216
209
|
this.maxAsyncStackChainDepth = defaultMaxAsyncStackChainDepth;
|
|
217
|
-
this.#details = details;
|
|
218
|
-
this.setSourceMapSubscription(details?.debuggerModel ?? null);
|
|
219
210
|
|
|
220
|
-
this
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
this.requestUpdate();
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
private setSourceMapSubscription(debuggerModel: SDK.DebuggerModel.DebuggerModel|null): void {
|
|
228
|
-
// Shortcut for the case when we are listening to the same model.
|
|
229
|
-
if (this.lastDebuggerModel === debuggerModel) {
|
|
230
|
-
return;
|
|
211
|
+
if (this.#stackTrace) {
|
|
212
|
+
this.#stackTrace.removeEventListener(StackTrace.StackTrace.Events.UPDATED, this.requestUpdate, this);
|
|
213
|
+
this.#stackTrace = null;
|
|
214
|
+
this.requestUpdate(); // In case creating the stack trace takes a while, we render an empty view first.
|
|
231
215
|
}
|
|
232
216
|
|
|
233
|
-
if (
|
|
234
|
-
this.
|
|
235
|
-
|
|
217
|
+
if (details) {
|
|
218
|
+
this.#stackTrace = await Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()
|
|
219
|
+
.createStackTraceFromDebuggerPaused(details, details.debuggerModel.target());
|
|
220
|
+
this.#stackTrace.addEventListener(StackTrace.StackTrace.Events.UPDATED, this.requestUpdate, this);
|
|
236
221
|
}
|
|
237
222
|
|
|
238
|
-
this.
|
|
239
|
-
if (this.lastDebuggerModel) {
|
|
240
|
-
this.lastDebuggerModel.sourceMapManager().addEventListener(
|
|
241
|
-
SDK.SourceMapManager.Events.SourceMapAttached, this.debugInfoAttached, this);
|
|
242
|
-
}
|
|
223
|
+
this.requestUpdate();
|
|
243
224
|
}
|
|
244
225
|
|
|
245
|
-
override
|
|
246
|
-
this.locationPool.disposeAll();
|
|
247
|
-
|
|
226
|
+
override performUpdate(): void {
|
|
248
227
|
this.callFrameWarningsElement.classList.add('hidden');
|
|
249
228
|
|
|
250
|
-
|
|
251
|
-
if (!details) {
|
|
229
|
+
if (!this.#stackTrace) {
|
|
252
230
|
this.notPausedMessageElement.classList.remove('hidden');
|
|
253
231
|
this.ignoreListMessageElement.classList.add('hidden');
|
|
254
232
|
this.showMoreMessageElement.classList.add('hidden');
|
|
@@ -260,39 +238,38 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
260
238
|
|
|
261
239
|
this.notPausedMessageElement.classList.add('hidden');
|
|
262
240
|
|
|
263
|
-
const
|
|
241
|
+
const items: Item[] = [];
|
|
264
242
|
const uniqueWarnings = new Set<string>();
|
|
265
|
-
for (const frame of
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
if (frame.missingDebugInfoDetails) {
|
|
270
|
-
uniqueWarnings.add(convertMissingDebugInfo(frame.missingDebugInfoDetails, frame.functionName).details);
|
|
243
|
+
for (const frame of this.#stackTrace.syncFragment.frames) {
|
|
244
|
+
items.push(Item.createForDebuggableFrame(frame));
|
|
245
|
+
if (frame.missingDebugInfo) {
|
|
246
|
+
uniqueWarnings.add(convertMissingDebugInfo(frame.missingDebugInfo, frame.sdkFrame.functionName).details);
|
|
271
247
|
}
|
|
272
248
|
}
|
|
273
|
-
|
|
249
|
+
|
|
274
250
|
if (uniqueWarnings.size) {
|
|
275
251
|
this.callFrameWarningsElement.classList.remove('hidden');
|
|
276
252
|
UI.Tooltip.Tooltip.install(this.callFrameWarningsElement, Array.from(uniqueWarnings).join('\n'));
|
|
277
253
|
}
|
|
278
254
|
|
|
279
|
-
let previousStackTrace: Protocol.Runtime.CallFrame[]|SDK.DebuggerModel.CallFrame[] = details.callFrames;
|
|
280
255
|
let {maxAsyncStackChainDepth} = this;
|
|
281
|
-
let
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
256
|
+
let hasMore = false;
|
|
257
|
+
let previousFragment: StackTrace.StackTrace.Fragment = this.#stackTrace.syncFragment;
|
|
258
|
+
for (const asyncFragment of this.#stackTrace.asyncFragments) {
|
|
259
|
+
items.push(Item.createForAsyncHeader(asyncFragment, previousFragment));
|
|
260
|
+
for (const frame of asyncFragment.frames) {
|
|
261
|
+
items.push(Item.createForFrame(frame));
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
previousFragment = asyncFragment;
|
|
289
265
|
|
|
290
266
|
if (--maxAsyncStackChainDepth <= 0) {
|
|
267
|
+
hasMore = asyncFragment !== this.#stackTrace.asyncFragments.at(-1);
|
|
291
268
|
break;
|
|
292
269
|
}
|
|
293
270
|
}
|
|
294
271
|
|
|
295
|
-
this.showMoreMessageElement.classList.toggle('hidden', !
|
|
272
|
+
this.showMoreMessageElement.classList.toggle('hidden', !hasMore);
|
|
296
273
|
this.items.replaceAll(items);
|
|
297
274
|
for (const item of this.items) {
|
|
298
275
|
this.refreshItem(item);
|
|
@@ -363,8 +340,8 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
363
340
|
UI.ARIAUtils.setDisabled(element, true);
|
|
364
341
|
}
|
|
365
342
|
}
|
|
366
|
-
const
|
|
367
|
-
|
|
343
|
+
const isSelected =
|
|
344
|
+
item.frame === UI.Context.Context.instance().flavor(StackTrace.StackTrace.DebuggableFrameFlavor)?.frame;
|
|
368
345
|
|
|
369
346
|
element.classList.toggle('selected', isSelected);
|
|
370
347
|
UI.ARIAUtils.setSelected(element, isSelected);
|
|
@@ -375,11 +352,12 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
375
352
|
element.appendChild(icon);
|
|
376
353
|
element.tabIndex = item === this.list.selectedItem() ? 0 : -1;
|
|
377
354
|
|
|
378
|
-
if (
|
|
355
|
+
if (item.frame?.missingDebugInfo) {
|
|
379
356
|
const icon = new Icon();
|
|
380
357
|
icon.name = 'warning-filled';
|
|
381
358
|
icon.classList.add('call-frame-warning-icon', 'small');
|
|
382
|
-
const {resources, details} =
|
|
359
|
+
const {resources, details} =
|
|
360
|
+
convertMissingDebugInfo(item.frame.missingDebugInfo, item.frame.sdkFrame.functionName);
|
|
383
361
|
const messages = resources.map(
|
|
384
362
|
r => i18nString(UIStrings.debugFileNotFound, {PH1: Common.ParsedURL.ParsedURL.extractName(r.resourceUrl)}));
|
|
385
363
|
UI.Tooltip.Tooltip.install(icon, [details, ...messages].join('\n'));
|
|
@@ -421,7 +399,7 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
421
399
|
return;
|
|
422
400
|
}
|
|
423
401
|
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
|
424
|
-
const debuggerCallFrame = item.frame;
|
|
402
|
+
const debuggerCallFrame = item.frame?.sdkFrame;
|
|
425
403
|
if (debuggerCallFrame) {
|
|
426
404
|
contextMenu.defaultSection().appendItem(i18nString(UIStrings.restartFrame), () => {
|
|
427
405
|
Host.userMetrics.actionTaken(Host.UserMetrics.Action.StackFrameRestarted);
|
|
@@ -444,17 +422,14 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
444
422
|
this.list.selectItem(item);
|
|
445
423
|
const debuggerCallFrame = item.frame;
|
|
446
424
|
const oldItem = this.activeCallFrameItem();
|
|
447
|
-
if (debuggerCallFrame
|
|
448
|
-
debuggerCallFrame.debuggerModel.setSelectedCallFrame(debuggerCallFrame);
|
|
449
|
-
UI.Context.Context.instance().setFlavor(SDK.DebuggerModel.CallFrame, debuggerCallFrame);
|
|
425
|
+
if (debuggerCallFrame) {
|
|
426
|
+
debuggerCallFrame.sdkFrame.debuggerModel.setSelectedCallFrame(debuggerCallFrame.sdkFrame);
|
|
427
|
+
UI.Context.Context.instance().setFlavor(SDK.DebuggerModel.CallFrame, debuggerCallFrame.sdkFrame);
|
|
450
428
|
UI.Context.Context.instance().setFlavor(
|
|
451
429
|
StackTrace.StackTrace.DebuggableFrameFlavor,
|
|
452
|
-
StackTrace.StackTrace.DebuggableFrameFlavor.for(
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
column: uiLocation.columnNumber ?? -1,
|
|
456
|
-
sdkFrame: debuggerCallFrame,
|
|
457
|
-
}));
|
|
430
|
+
StackTrace.StackTrace.DebuggableFrameFlavor.for(debuggerCallFrame));
|
|
431
|
+
}
|
|
432
|
+
if (oldItem !== item) {
|
|
458
433
|
if (oldItem) {
|
|
459
434
|
this.refreshItem(oldItem);
|
|
460
435
|
}
|
|
@@ -467,7 +442,7 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
467
442
|
activeCallFrameItem(): Item|null {
|
|
468
443
|
const callFrame = UI.Context.Context.instance().flavor(SDK.DebuggerModel.CallFrame);
|
|
469
444
|
if (callFrame) {
|
|
470
|
-
return this.items.find(callFrameItem => callFrameItem.frame === callFrame) || null;
|
|
445
|
+
return this.items.find(callFrameItem => callFrameItem.frame?.sdkFrame === callFrame) || null;
|
|
471
446
|
}
|
|
472
447
|
return null;
|
|
473
448
|
}
|
|
@@ -546,132 +521,56 @@ export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
|
|
|
546
521
|
}
|
|
547
522
|
|
|
548
523
|
export class Item {
|
|
549
|
-
isIgnoreListed
|
|
550
|
-
title
|
|
551
|
-
linkText
|
|
552
|
-
uiLocation: Workspace.UISourceCode.UILocation|null;
|
|
553
|
-
isAsyncHeader
|
|
554
|
-
|
|
524
|
+
isIgnoreListed = false;
|
|
525
|
+
title = '';
|
|
526
|
+
linkText = '';
|
|
527
|
+
uiLocation: Workspace.UISourceCode.UILocation|null = null;
|
|
528
|
+
isAsyncHeader = false;
|
|
529
|
+
|
|
555
530
|
/** Only set for synchronous frames */
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
updateDelegate: (arg0: Item) => void, list: UI.ListControl.ListControl<Item>): Promise<Item> {
|
|
562
|
-
const name = frame.functionName;
|
|
563
|
-
const item = new Item(UI.UIUtils.beautifyFunctionName(name), updateDelegate, frame, list);
|
|
564
|
-
await Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().createCallFrameLiveLocation(
|
|
565
|
-
frame.location(), item.update.bind(item), locationPool);
|
|
566
|
-
void SourceMapScopes.NamesResolver.resolveDebuggerFrameFunctionName(frame).then(functionName => {
|
|
567
|
-
if (functionName && functionName !== name) {
|
|
568
|
-
// Just update the item's title and call the update delegate directly,
|
|
569
|
-
// instead of going through the update method below, since location
|
|
570
|
-
// didn't change.
|
|
571
|
-
item.title = functionName;
|
|
572
|
-
item.updateDelegate(item);
|
|
573
|
-
}
|
|
574
|
-
});
|
|
531
|
+
frame?: StackTrace.StackTrace.DebuggableFrame;
|
|
532
|
+
|
|
533
|
+
static createForDebuggableFrame(frame: StackTrace.StackTrace.DebuggableFrame): Item {
|
|
534
|
+
const item = Item.createForFrame(frame);
|
|
535
|
+
item.frame = frame;
|
|
575
536
|
return item;
|
|
576
537
|
}
|
|
577
538
|
|
|
578
|
-
static
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
asyncHeaderItem.isAsyncHeader = true;
|
|
586
|
-
|
|
587
|
-
const asyncFrameItems = [];
|
|
588
|
-
const liveLocationPromises = [];
|
|
589
|
-
for (const frame of frames) {
|
|
590
|
-
const item = new Item(UI.UIUtils.beautifyFunctionName(frame.functionName), update, undefined, list);
|
|
591
|
-
const rawLocation =
|
|
592
|
-
debuggerModel.createRawLocationByScriptId(frame.scriptId, frame.lineNumber, frame.columnNumber);
|
|
593
|
-
liveLocationPromises.push(
|
|
594
|
-
Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().createCallFrameLiveLocation(
|
|
595
|
-
rawLocation, item.update.bind(item), locationPool));
|
|
596
|
-
void SourceMapScopes.NamesResolver.resolveProfileFrameFunctionName(frame, debuggerModel.target())
|
|
597
|
-
.then(functionName => {
|
|
598
|
-
if (functionName && functionName !== frame.functionName) {
|
|
599
|
-
item.title = functionName;
|
|
600
|
-
item.updateDelegate(item);
|
|
601
|
-
}
|
|
602
|
-
});
|
|
603
|
-
asyncFrameItems.push(item);
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
await Promise.all(liveLocationPromises);
|
|
607
|
-
updateDelegate(asyncHeaderItem);
|
|
608
|
-
|
|
609
|
-
return [asyncHeaderItem, ...asyncFrameItems];
|
|
610
|
-
|
|
611
|
-
function update(item: Item): void {
|
|
612
|
-
updateDelegate(item);
|
|
613
|
-
let shouldUpdate = false;
|
|
614
|
-
const items = headerItemToItemsSet.get(asyncHeaderItem);
|
|
615
|
-
if (items) {
|
|
616
|
-
if (item.isIgnoreListed) {
|
|
617
|
-
items.delete(item);
|
|
618
|
-
shouldUpdate = items.size === 0;
|
|
619
|
-
} else {
|
|
620
|
-
shouldUpdate = items.size === 0;
|
|
621
|
-
items.add(item);
|
|
622
|
-
}
|
|
623
|
-
asyncHeaderItem.isIgnoreListed = items.size === 0;
|
|
624
|
-
}
|
|
625
|
-
if (shouldUpdate) {
|
|
626
|
-
updateDelegate(asyncHeaderItem);
|
|
627
|
-
}
|
|
539
|
+
static createForFrame(frame: StackTrace.StackTrace.Frame): Item {
|
|
540
|
+
const item = new Item(UI.UIUtils.beautifyFunctionName(frame.name ?? ''));
|
|
541
|
+
const uiSourceCode = frame.uiSourceCode;
|
|
542
|
+
if (uiSourceCode) {
|
|
543
|
+
item.isIgnoreListed = uiSourceCode.isIgnoreListed() ?? false;
|
|
544
|
+
item.uiLocation = uiSourceCode.uiLocation(frame.line, frame.column);
|
|
545
|
+
item.linkText = item.uiLocation.linkText();
|
|
628
546
|
}
|
|
547
|
+
return item;
|
|
629
548
|
}
|
|
630
549
|
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
this.isAsyncHeader = false;
|
|
639
|
-
this.updateDelegate = updateDelegate;
|
|
640
|
-
this.frame = frame;
|
|
641
|
-
this.list = list;
|
|
550
|
+
static createForAsyncHeader(
|
|
551
|
+
fragment: StackTrace.StackTrace.AsyncFragment, previousFragment: StackTrace.StackTrace.Fragment): Item {
|
|
552
|
+
const description = UI.UIUtils.asyncStackTraceLabel(
|
|
553
|
+
fragment.description, previousFragment.frames.map(f => ({functionName: f.name ?? ''})));
|
|
554
|
+
const item = new Item(description);
|
|
555
|
+
item.isAsyncHeader = true;
|
|
556
|
+
return item;
|
|
642
557
|
}
|
|
643
558
|
|
|
644
|
-
private
|
|
645
|
-
|
|
646
|
-
this.isIgnoreListed = Boolean(uiLocation?.isIgnoreListed());
|
|
647
|
-
this.linkText = uiLocation ? uiLocation.linkText() : '';
|
|
648
|
-
this.uiLocation = uiLocation;
|
|
649
|
-
|
|
650
|
-
if (this.frame && uiLocation && this === this.list.selectedItem()) {
|
|
651
|
-
UI.Context.Context.instance().setFlavor(
|
|
652
|
-
StackTrace.StackTrace.DebuggableFrameFlavor,
|
|
653
|
-
StackTrace.StackTrace.DebuggableFrameFlavor.for({
|
|
654
|
-
uiSourceCode: uiLocation.uiSourceCode,
|
|
655
|
-
line: uiLocation.lineNumber,
|
|
656
|
-
column: uiLocation.columnNumber ?? -1,
|
|
657
|
-
sdkFrame: this.frame,
|
|
658
|
-
}));
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
this.updateDelegate(this);
|
|
559
|
+
private constructor(title: string) {
|
|
560
|
+
this.title = title;
|
|
662
561
|
}
|
|
663
562
|
}
|
|
664
563
|
|
|
665
564
|
export function convertMissingDebugInfo(
|
|
666
|
-
missingDebugInfo:
|
|
565
|
+
missingDebugInfo: StackTrace.StackTrace.MissingDebugInfo, functionName: string|undefined):
|
|
667
566
|
{details: Platform.UIString.LocalizedString, resources: SDK.DebuggerModel.MissingDebugFiles[]} {
|
|
668
567
|
switch (missingDebugInfo.type) {
|
|
669
|
-
case
|
|
568
|
+
case StackTrace.StackTrace.MissingDebugInfoType.PARTIAL_INFO:
|
|
670
569
|
return {
|
|
671
570
|
details: i18nString(UIStrings.debugSymbolsIncomplete, {PH1: functionName ?? ''}),
|
|
672
571
|
resources: missingDebugInfo.missingDebugFiles
|
|
673
572
|
};
|
|
674
|
-
case
|
|
573
|
+
case StackTrace.StackTrace.MissingDebugInfoType.NO_INFO:
|
|
675
574
|
return {
|
|
676
575
|
details: i18nString(UIStrings.failedToLoadDebugSymbolsForFunction, {PH1: functionName ?? ''}),
|
|
677
576
|
resources: []
|
|
@@ -1661,9 +1661,9 @@ export class DebuggerPlugin extends Plugin {
|
|
|
1661
1661
|
const uiLocation = new Workspace.UISourceCode.UILocation(
|
|
1662
1662
|
frameFlavor.frame.uiSourceCode, frameFlavor.frame.line, frameFlavor.frame.column);
|
|
1663
1663
|
this.setExecutionLocation(uiLocation);
|
|
1664
|
-
if (frameFlavor.
|
|
1664
|
+
if (frameFlavor.frame.missingDebugInfo) {
|
|
1665
1665
|
this.updateMissingDebugInfoInfobar(
|
|
1666
|
-
convertMissingDebugInfo(frameFlavor.
|
|
1666
|
+
convertMissingDebugInfo(frameFlavor.frame.missingDebugInfo, frameFlavor.sdkFrame.functionName));
|
|
1667
1667
|
} else {
|
|
1668
1668
|
this.updateMissingDebugInfoInfobar(null);
|
|
1669
1669
|
}
|
|
@@ -404,7 +404,7 @@ export class HeadersViewComponent extends HTMLElement {
|
|
|
404
404
|
// clang-format off
|
|
405
405
|
return html`
|
|
406
406
|
<div class="row" data-block-index=${blockIndex}
|
|
407
|
-
jslog=${VisualLogging.treeItem(pattern === '*' ? pattern : undefined)
|
|
407
|
+
jslog=${VisualLogging.treeItem(pattern === '*' ? pattern : undefined)}>
|
|
408
408
|
<div>${i18n.i18n.lockedString('Apply to')}</div>
|
|
409
409
|
<div class="separator">:</div>
|
|
410
410
|
${this.#renderEditable(pattern, 'apply-to')}
|
|
@@ -427,7 +427,7 @@ export class HeadersViewComponent extends HTMLElement {
|
|
|
427
427
|
// clang-format off
|
|
428
428
|
return html`
|
|
429
429
|
<div class="row padded" data-block-index=${blockIndex} data-header-index=${headerIndex}
|
|
430
|
-
jslog=${VisualLogging.treeItem(header.name).parent('headers-editor-row-parent')
|
|
430
|
+
jslog=${VisualLogging.treeItem(header.name).parent('headers-editor-row-parent')}>
|
|
431
431
|
${this.#renderEditable(header.name, 'header-name red', true)}
|
|
432
432
|
<div class="separator">:</div>
|
|
433
433
|
${this.#renderEditable(header.value, 'header-value')}
|
|
@@ -111,7 +111,7 @@ export class BreadcrumbsUI extends HTMLElement {
|
|
|
111
111
|
// clang-format off
|
|
112
112
|
return html`
|
|
113
113
|
<div class="breadcrumb" @contextmenu=${(event: Event) => this.#onContextMenu(event, breadcrumb)} @click=${() => this.#activateBreadcrumb(breadcrumb)}
|
|
114
|
-
jslog=${VisualLogging.item('timeline.breadcrumb-select').track({click: true
|
|
114
|
+
jslog=${VisualLogging.item('timeline.breadcrumb-select').track({click: true})}>
|
|
115
115
|
<span class="${(breadcrumb === this.#activeBreadcrumb) ? 'active-breadcrumb' : ''} range">
|
|
116
116
|
${(index === 0) ?
|
|
117
117
|
`Full range (${i18n.TimeUtilities.preciseMillisToString(breadcrumbRange, 2)})` :
|
|
@@ -424,7 +424,7 @@ export const DEFAULT_VIEW: (input: SidebarAnnotationsTabViewInput, output: objec
|
|
|
424
424
|
@mouseout=${() => (annotation.type === 'ENTRY_LABEL') ? input.onAnnotationHoverOut() : null}
|
|
425
425
|
aria-label=${label}
|
|
426
426
|
tabindex="0"
|
|
427
|
-
jslog=${VisualLogging.item(`timeline.annotation-sidebar.annotation-${jslogForAnnotation(annotation)}`).track({click: true
|
|
427
|
+
jslog=${VisualLogging.item(`timeline.annotation-sidebar.annotation-${jslogForAnnotation(annotation)}`).track({click: true})}
|
|
428
428
|
>
|
|
429
429
|
<div class="annotation">
|
|
430
430
|
${renderAnnotationIdentifier(annotation, input.annotationEntryToColorMap)}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Name: Dependencies sourced from the upstream `chromium` repository
|
|
2
2
|
URL: https://chromium.googlesource.com/chromium/src
|
|
3
3
|
Version: N/A
|
|
4
|
-
Revision:
|
|
4
|
+
Revision: b49b82a652effc8081624941a4f102e6ac80fba9
|
|
5
5
|
Update Mechanism: Manual (https://crbug.com/428069060)
|
|
6
6
|
License: BSD-3-Clause
|
|
7
7
|
License File: LICENSE
|
|
@@ -217,16 +217,21 @@ class SuggestionBox extends LitElement {
|
|
|
217
217
|
return;
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
// clang-format off
|
|
221
220
|
return html`<style>${contentEditableStyles}</style><ul class="suggestions">
|
|
222
|
-
${this.#suggestions.map((suggestion, index) =>
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
221
|
+
${this.#suggestions.map((suggestion, index) => {
|
|
222
|
+
return html`<li
|
|
223
|
+
class=${classMap({
|
|
224
|
+
selected: index === this.cursor,
|
|
225
|
+
})}
|
|
226
|
+
@mousedown=${this.#dispatchSuggestEvent.bind(this, suggestion)}
|
|
227
|
+
jslog=${VisualLogging.item('suggestion').track({
|
|
228
|
+
click: true,
|
|
229
|
+
})}
|
|
230
|
+
>
|
|
226
231
|
${suggestion}
|
|
227
|
-
</li
|
|
232
|
+
</li>`;
|
|
233
|
+
})}
|
|
228
234
|
</ul>`;
|
|
229
|
-
// clang-format on
|
|
230
235
|
}
|
|
231
236
|
}
|
|
232
237
|
|
|
@@ -475,7 +475,7 @@ export class TreeOutline<TreeNodeDataType> extends HTMLElement {
|
|
|
475
475
|
aria-level=${depth + 1}
|
|
476
476
|
aria-posinset=${positionInSet + 1}
|
|
477
477
|
class=${listItemClasses}
|
|
478
|
-
jslog=${VisualLogging.treeItem(node.jslogContext).track({click: true,
|
|
478
|
+
jslog=${VisualLogging.treeItem(node.jslogContext).track({click: true, keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter|Space|Home|End'})}
|
|
479
479
|
@click=${this.#onNodeClick}
|
|
480
480
|
track-dom-node-to-tree-node=${trackDOMNodeToTreeNode(this.#domNodeToTreeNodeMap, node)}
|
|
481
481
|
${Lit.Directives.ref(domNode => {
|