chrome-devtools-frontend 1.0.1578486 → 1.0.1579812
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/docs/cookbook/devtools_on_devtools.md +2 -2
- package/docs/feature-specs/elements-gutter-decorators.md +40 -0
- package/docs/feature-specs/elements-tree-selection-and-hover.md +31 -0
- package/docs/feature-specs/images/elements-gutter-decorators-multiple.png +0 -0
- package/docs/get_the_code.md +3 -3
- package/front_end/core/common/Revealer.ts +0 -5
- package/front_end/core/sdk/ConsoleModel.ts +0 -3
- package/front_end/generated/ARIAProperties.js +0 -6
- package/front_end/generated/InspectorBackendCommands.ts +1 -1
- package/front_end/generated/protocol.ts +1 -0
- package/front_end/models/ai_assistance/AiConversation.ts +42 -22
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.snapshot.txt +30 -0
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +79 -0
- package/front_end/models/issues_manager/CookieIssue.ts +0 -1
- package/front_end/models/issues_manager/IssuesManager.ts +2 -15
- package/front_end/models/javascript_metadata/NativeFunctions.js +4 -0
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +5 -3
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +33 -27
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +0 -1
- package/front_end/panels/ai_assistance/components/ChatInput.ts +38 -18
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +7 -4
- package/front_end/panels/ai_assistance/components/ChatView.ts +2 -0
- package/front_end/panels/ai_assistance/components/chatInput.css +10 -3
- package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
- package/front_end/panels/application/DeviceBoundSessionsView.ts +51 -76
- package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +1 -0
- package/front_end/panels/application/components/BackForwardCacheView.ts +4 -2
- package/front_end/panels/application/preloading/components/RuleSetDetailsView.css +0 -5
- package/front_end/panels/autofill/AutofillView.ts +1 -1
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +1 -0
- package/front_end/panels/common/AiCodeGenerationTeaser.ts +2 -2
- package/front_end/panels/common/AiCodeGenerationUpgradeDialog.ts +4 -4
- package/front_end/panels/console/ConsoleViewMessage.ts +1 -32
- package/front_end/panels/console/consoleView.css +0 -5
- package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +78 -0
- package/front_end/panels/elements/ElementsTreeElement.ts +93 -121
- package/front_end/panels/elements/ElementsTreeOutline.ts +1 -0
- package/front_end/panels/elements/LayoutPane.ts +8 -7
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +1 -1
- package/front_end/panels/elements/components/StylePropertyEditor.ts +2 -1
- package/front_end/panels/elements/elements.ts +3 -0
- package/front_end/panels/elements/elementsTreeOutline.css +16 -5
- package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
- package/front_end/panels/lighthouse/LighthouseStartView.ts +1 -1
- package/front_end/panels/lighthouse/lighthouseStartView.css +6 -0
- 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 +14 -2
- package/front_end/panels/media/playerListView.css +5 -0
- package/front_end/panels/network/NetworkItemView.ts +2 -1
- package/front_end/panels/network/NetworkLogView.ts +2 -5
- package/front_end/panels/network/NetworkLogViewColumns.ts +19 -7
- package/front_end/panels/network/RequestInitiatorView.ts +20 -4
- package/front_end/panels/network/RequestPayloadView.ts +253 -280
- package/front_end/panels/network/ShowMoreDetailsWidget.ts +3 -3
- package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
- package/front_end/panels/network/requestPayloadTree.css +6 -3
- package/front_end/panels/network/requestPayloadView.css +1 -0
- 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/StepEditor.ts +3 -3
- package/front_end/panels/security/SecurityPanel.ts +0 -16
- package/front_end/panels/security/security-meta.ts +1 -15
- package/front_end/panels/settings/EditFileSystemView.ts +8 -8
- package/front_end/panels/settings/KeybindsSettingsTab.ts +2 -1
- package/front_end/panels/settings/SettingsScreen.ts +4 -4
- package/front_end/panels/sources/CallStackSidebarPane.ts +1 -1
- 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/panels/timeline/overlays/OverlaysImpl.ts +47 -26
- package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +121 -39
- package/front_end/panels/timeline/overlays/components/timespanBreakdownOverlay.css +106 -101
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/buttons/Button.ts +1 -1
- package/front_end/ui/components/suggestion_input/SuggestionInput.ts +7 -12
- package/front_end/ui/components/tree_outline/TreeOutline.ts +1 -1
- package/front_end/ui/legacy/InplaceEditor.ts +1 -1
- package/front_end/ui/legacy/InspectorView.ts +6 -5
- package/front_end/ui/legacy/ListControl.ts +2 -1
- package/front_end/ui/legacy/ListWidget.ts +1 -1
- package/front_end/ui/legacy/SoftContextMenu.ts +2 -1
- package/front_end/ui/legacy/Treeoutline.ts +82 -22
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +4 -2
- package/front_end/ui/legacy/components/data_grid/SortableDataGrid.ts +59 -9
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +28 -15
- package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +2 -1
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +2 -2
- package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
- package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +3 -3
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +2 -3
- package/front_end/ui/legacy/softDropDown.css +7 -1
- package/front_end/ui/visual_logging/Debugging.ts +1 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
- package/mcp/mcp.ts +2 -0
- package/package.json +1 -1
|
@@ -217,14 +217,25 @@ select {
|
|
|
217
217
|
}
|
|
218
218
|
|
|
219
219
|
.elements-gutter-decoration {
|
|
220
|
-
position: absolute;
|
|
221
|
-
top: 3px;
|
|
222
|
-
left: 2px;
|
|
223
220
|
height: 9px;
|
|
224
221
|
width: 9px;
|
|
225
222
|
border-radius: 5px;
|
|
226
|
-
border: 1px solid var(--
|
|
227
|
-
background-color: var(--
|
|
223
|
+
border: 1px solid var(--decoration-color); /* stylelint-disable-line plugin/use_theme_colors */
|
|
224
|
+
background-color: var(--decoration-color); /* stylelint-disable-line plugin/use_theme_colors */
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.elements-gutter-decoration-container {
|
|
228
|
+
display: flex;
|
|
229
|
+
position: absolute;
|
|
230
|
+
top: 0;
|
|
231
|
+
left: 1px;
|
|
232
|
+
width: 15px;
|
|
233
|
+
height: 15px;
|
|
234
|
+
align-items: center;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.elements-gutter-decoration + .elements-gutter-decoration {
|
|
238
|
+
margin-left: -6px;
|
|
228
239
|
}
|
|
229
240
|
|
|
230
241
|
.elements-gutter-decoration.elements-has-decorated-children {
|
|
@@ -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}`).track({resize: true})}`);
|
|
201
201
|
|
|
202
202
|
let state: string|undefined;
|
|
203
203
|
for (const className of auditEl.classList) {
|
|
@@ -182,7 +182,7 @@ export class StartView extends UI.Widget.Widget {
|
|
|
182
182
|
<form class="lighthouse-start-view">
|
|
183
183
|
<header class="hbox">
|
|
184
184
|
<div class="lighthouse-logo"></div>
|
|
185
|
-
<
|
|
185
|
+
<h1 class="lighthouse-title">${i18nString(UIStrings.generateLighthouseReport)}</h1>
|
|
186
186
|
<div class="lighthouse-start-button-container" $="start-button-container">${this.startButton}</div>
|
|
187
187
|
</header>
|
|
188
188
|
<div $="help-text" class="lighthouse-help-text hidden"></div>
|
|
@@ -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, resize: 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, resize: true})}>${
|
|
108
108
|
i18n.i18n.lockedString(mode)}
|
|
109
109
|
</option>`;
|
|
110
110
|
})}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import '../../ui/kit/kit.js';
|
|
6
6
|
|
|
7
7
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
8
|
+
import * as Platform from '../../core/platform/platform.js';
|
|
8
9
|
import type * as Protocol from '../../generated/protocol.js';
|
|
9
10
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
10
11
|
import {Directives, html, render} from '../../ui/lit/lit.js';
|
|
@@ -61,7 +62,8 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
|
|
|
61
62
|
render(
|
|
62
63
|
html`
|
|
63
64
|
<style>${playerListViewStyles}</style>
|
|
64
|
-
<div class="player-entry-header">${i18nString(UIStrings.players)}</div>
|
|
65
|
+
<div class="player-entry-header" id="players-header">${i18nString(UIStrings.players)}</div>
|
|
66
|
+
<div role="listbox" aria-labelledby="players-header">
|
|
65
67
|
${input.players.map(player => {
|
|
66
68
|
const isSelected = player.playerID === input.selectedPlayerID;
|
|
67
69
|
return html`
|
|
@@ -71,9 +73,18 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
|
|
|
71
73
|
selected: isSelected,
|
|
72
74
|
'force-white-icons': isSelected,
|
|
73
75
|
})}
|
|
76
|
+
tabindex="0"
|
|
74
77
|
@click=${() => input.onPlayerClick(player.playerID)}
|
|
78
|
+
@keydown=${(e: KeyboardEvent) => {
|
|
79
|
+
if (Platform.KeyboardUtilities.isEnterOrSpaceKey(e)) {
|
|
80
|
+
e.preventDefault();
|
|
81
|
+
input.onPlayerClick(player.playerID);
|
|
82
|
+
}
|
|
83
|
+
}}
|
|
75
84
|
@contextmenu=${(e: Event) => input.onPlayerContextMenu(player.playerID, e)}
|
|
76
|
-
|
|
85
|
+
role="option"
|
|
86
|
+
aria-selected=${isSelected}
|
|
87
|
+
jslog=${VisualLogging.item('player').track({click: true, resize: true})}>
|
|
77
88
|
<div class="player-entry-status-icon vbox">
|
|
78
89
|
<div class="player-entry-status-icon-centering">
|
|
79
90
|
<devtools-icon name=${player.iconName}></devtools-icon>
|
|
@@ -84,6 +95,7 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
|
|
|
84
95
|
</div>
|
|
85
96
|
`;
|
|
86
97
|
})}
|
|
98
|
+
</div>
|
|
87
99
|
`,
|
|
88
100
|
target
|
|
89
101
|
);
|
|
@@ -34,6 +34,11 @@ li.storage-group-list-item::before {
|
|
|
34
34
|
background: var(--sys-color-state-hover-on-subtle);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
&:focus-visible {
|
|
38
|
+
outline: var(--sys-size-2) solid var(--sys-color-state-focus-ring);
|
|
39
|
+
outline-offset: calc(var(--sys-size-2) * -1);
|
|
40
|
+
}
|
|
41
|
+
|
|
37
42
|
&.selected {
|
|
38
43
|
background: var(--sys-color-tonal-container);
|
|
39
44
|
color: var(--sys-color-on-tonal-container);
|
|
@@ -345,7 +345,8 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
|
|
|
345
345
|
return;
|
|
346
346
|
}
|
|
347
347
|
if (this.#request.queryParameters || await this.#request.requestFormData()) {
|
|
348
|
-
this.#payloadView = new RequestPayloadView(
|
|
348
|
+
this.#payloadView = new RequestPayloadView();
|
|
349
|
+
this.#payloadView.request = this.#request;
|
|
349
350
|
this.appendTab(
|
|
350
351
|
NetworkForward.UIRequestLocation.UIRequestTabs.PAYLOAD, i18nString(UIStrings.payload), this.#payloadView,
|
|
351
352
|
i18nString(UIStrings.payload), /* userGesture=*/ void 0,
|
|
@@ -1451,17 +1451,14 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
|
|
|
1451
1451
|
}
|
|
1452
1452
|
|
|
1453
1453
|
private removeNodeAndMaybeAncestors(node: NetworkRequestNode): void {
|
|
1454
|
-
let parent
|
|
1455
|
-
(DataGrid.DataGrid.DataGridNode<DataGrid.ViewportDataGrid.ViewportDataGridNode<
|
|
1456
|
-
DataGrid.SortableDataGrid.SortableDataGridNode<NetworkNode>>>|
|
|
1457
|
-
null) = node.parent;
|
|
1454
|
+
let parent = node.parent;
|
|
1458
1455
|
if (!parent) {
|
|
1459
1456
|
return;
|
|
1460
1457
|
}
|
|
1461
1458
|
parent.removeChild(node);
|
|
1462
1459
|
while (parent && !parent.hasChildren() && parent.dataGrid && parent.dataGrid.rootNode() !== parent) {
|
|
1463
1460
|
const grandparent = (parent.parent as NetworkNode);
|
|
1464
|
-
grandparent.removeChild(parent);
|
|
1461
|
+
grandparent.removeChild(parent as NetworkNode);
|
|
1465
1462
|
parent = grandparent;
|
|
1466
1463
|
}
|
|
1467
1464
|
}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import * as Common from '../../core/common/common.js';
|
|
7
7
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
8
8
|
import type * as NetworkTimeCalculator from '../../models/network_time_calculator/network_time_calculator.js';
|
|
9
|
+
import * as StackTrace from '../../models/stack_trace/stack_trace.js';
|
|
9
10
|
import {Icon} from '../../ui/kit/kit.js';
|
|
10
11
|
import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
|
|
11
12
|
import * as Components from '../../ui/legacy/components/utils/utils.js';
|
|
@@ -409,7 +410,8 @@ export class NetworkLogViewColumns {
|
|
|
409
410
|
|
|
410
411
|
private createWaterfallHeader(): void {
|
|
411
412
|
this.waterfallHeaderElement = this.waterfallColumn.contentElement.createChild('div', 'network-waterfall-header');
|
|
412
|
-
this.waterfallHeaderElement.setAttribute(
|
|
413
|
+
this.waterfallHeaderElement.setAttribute(
|
|
414
|
+
'jslog', `${VisualLogging.tableHeader('waterfall').track({click: true, resize: true})}`);
|
|
413
415
|
this.waterfallHeaderElement.addEventListener('click', waterfallHeaderClicked.bind(this));
|
|
414
416
|
this.waterfallHeaderElement.addEventListener('contextmenu', event => {
|
|
415
417
|
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
|
@@ -880,20 +882,30 @@ export class NetworkLogViewColumns {
|
|
|
880
882
|
if (!request) {
|
|
881
883
|
return null;
|
|
882
884
|
}
|
|
885
|
+
let descriptor: Common.EventTarget.EventDescriptor|undefined = undefined;
|
|
883
886
|
return {
|
|
884
887
|
box: anchor.boxInWindow(),
|
|
885
888
|
show: async (popover: UI.GlassPane.GlassPane) => {
|
|
886
|
-
this.popupLinkifier
|
|
887
|
-
popover.setSizeBehavior(UI.GlassPane.SizeBehavior.MEASURE_CONTENT);
|
|
888
|
-
});
|
|
889
|
-
const content = RequestInitiatorView.createStackTracePreview((request), this.popupLinkifier, false);
|
|
889
|
+
const content = await RequestInitiatorView.createStackTracePreview((request), this.popupLinkifier, false);
|
|
890
890
|
if (!content) {
|
|
891
891
|
return false;
|
|
892
892
|
}
|
|
893
|
-
content.
|
|
893
|
+
descriptor = content.stackTrace?.addEventListener(StackTrace.StackTrace.Events.UPDATED, async () => {
|
|
894
|
+
await content.preview.updateComplete;
|
|
895
|
+
popover.setSizeBehavior(UI.GlassPane.SizeBehavior.MEASURE_CONTENT);
|
|
896
|
+
});
|
|
897
|
+
content.preview.show(popover.contentElement);
|
|
898
|
+
await content.preview.updateComplete.then(() => {
|
|
899
|
+
popover.setSizeBehavior(UI.GlassPane.SizeBehavior.MEASURE_CONTENT);
|
|
900
|
+
});
|
|
894
901
|
return true;
|
|
895
902
|
},
|
|
896
|
-
hide:
|
|
903
|
+
hide: () => {
|
|
904
|
+
this.popupLinkifier.reset();
|
|
905
|
+
if (descriptor) {
|
|
906
|
+
Common.EventTarget.removeEventListeners([descriptor]);
|
|
907
|
+
}
|
|
908
|
+
},
|
|
897
909
|
};
|
|
898
910
|
}
|
|
899
911
|
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
7
7
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
8
|
+
import * as Bindings from '../../models/bindings/bindings.js';
|
|
8
9
|
import * as Logs from '../../models/logs/logs.js';
|
|
10
|
+
import type * as StackTrace from '../../models/stack_trace/stack_trace.js';
|
|
9
11
|
import * as Components from '../../ui/legacy/components/utils/utils.js';
|
|
10
12
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
11
13
|
import * as Lit from '../../ui/lit/lit.js';
|
|
@@ -172,17 +174,31 @@ export class RequestInitiatorView extends UI.Widget.VBox {
|
|
|
172
174
|
this.#view = view;
|
|
173
175
|
}
|
|
174
176
|
|
|
175
|
-
static createStackTracePreview(
|
|
177
|
+
static async createStackTracePreview(
|
|
176
178
|
request: SDK.NetworkRequest.NetworkRequest, linkifier: Components.Linkifier.Linkifier,
|
|
177
|
-
focusableLink?: boolean):
|
|
179
|
+
focusableLink?: boolean): Promise<{
|
|
180
|
+
preview: Components.JSPresentationUtils.StackTracePreviewContent,
|
|
181
|
+
stackTrace: StackTrace.StackTrace.StackTrace|null,
|
|
182
|
+
}|null> {
|
|
178
183
|
const initiator = request.initiator();
|
|
179
184
|
if (!initiator?.stack) {
|
|
180
185
|
return null;
|
|
181
186
|
}
|
|
182
187
|
const networkManager = SDK.NetworkManager.NetworkManager.forRequest(request);
|
|
183
188
|
const target = networkManager ? networkManager.target() : undefined;
|
|
184
|
-
|
|
185
|
-
|
|
189
|
+
if (target) {
|
|
190
|
+
const stackTrace = await Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()
|
|
191
|
+
.createStackTraceFromProtocolRuntime(initiator.stack, target);
|
|
192
|
+
const preview = new Components.JSPresentationUtils.StackTracePreviewContent(
|
|
193
|
+
undefined, target, linkifier, {tabStops: focusableLink});
|
|
194
|
+
preview.stackTrace = stackTrace;
|
|
195
|
+
return {preview, stackTrace};
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
preview: new Components.JSPresentationUtils.StackTracePreviewContent(
|
|
199
|
+
undefined, target, linkifier, {runtimeStackTrace: initiator.stack, tabStops: focusableLink}),
|
|
200
|
+
stackTrace: null
|
|
201
|
+
};
|
|
186
202
|
}
|
|
187
203
|
|
|
188
204
|
override performUpdate(): void {
|