chrome-devtools-frontend 1.0.1575635 → 1.0.1576915
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/host/AidaClient.ts +21 -0
- package/front_end/core/sdk/DebuggerModel.ts +14 -4
- package/front_end/core/sdk/NetworkManager.ts +3 -1
- package/front_end/core/sdk/NetworkRequest.ts +7 -0
- package/front_end/core/sdk/SourceMapScopesInfo.ts +2 -1
- package/front_end/generated/SupportedCSSProperties.js +44 -0
- package/front_end/models/ai_assistance/agents/AiAgent.ts +6 -0
- package/front_end/models/ai_code_generation/AiCodeGeneration.ts +6 -0
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +37 -38
- package/front_end/models/javascript_metadata/NativeFunctions.js +12 -0
- package/front_end/models/source_map_scopes/NamesResolver.ts +5 -8
- package/front_end/models/stack_trace/StackTrace.ts +19 -18
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +5 -3
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +14 -2
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +5 -1
- package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
- package/front_end/panels/application/DeviceBoundSessionsTreeElement.ts +22 -1
- package/front_end/panels/application/DeviceBoundSessionsView.ts +44 -33
- package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +1 -0
- package/front_end/panels/application/components/BackForwardCacheView.ts +4 -2
- package/front_end/panels/application/deviceBoundSessionsView.css +1 -1
- package/front_end/panels/autofill/AutofillView.ts +1 -1
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +1 -0
- package/front_end/panels/common/AiCodeGenerationUpgradeDialog.ts +12 -4
- package/front_end/panels/common/GeminiRebrandPromoDialog.ts +5 -5
- package/front_end/panels/console/ConsoleViewMessage.ts +1 -0
- package/front_end/panels/elements/ElementsTreeElement.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/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/NetworkItemView.ts +32 -3
- package/front_end/panels/network/NetworkLogViewColumns.ts +2 -1
- package/front_end/panels/network/RequestDeviceBoundSessionsView.ts +160 -0
- package/front_end/panels/network/RequestPayloadView.ts +111 -185
- package/front_end/panels/network/ShowMoreDetailsWidget.ts +96 -0
- package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
- package/front_end/panels/network/forward/UIRequestLocation.ts +1 -0
- package/front_end/panels/network/network.ts +5 -0
- package/front_end/panels/network/requestDeviceBoundSessionsView.css +14 -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/settings/AISettingsTab.ts +2 -2
- package/front_end/panels/settings/KeybindsSettingsTab.ts +2 -1
- package/front_end/panels/sources/CallStackSidebarPane.ts +58 -11
- package/front_end/panels/sources/DebuggerPlugin.ts +19 -22
- package/front_end/panels/sources/SourcesPanel.ts +6 -24
- 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/components/EntryLabelOverlay.ts +7 -0
- package/front_end/panels/whats_new/resources/WNDT.md +1 -1
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/source-map-scopes-codec/README.chromium +2 -2
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/decode/decode.d.ts +2 -2
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/decode/decode.d.ts.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/mod.d.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/mod.d.ts.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/scopes.d.ts +9 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/scopes.d.ts.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/deno.json +8 -1
- package/front_end/third_party/source-map-scopes-codec/package/package.json +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +20 -7
- package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.ts +29 -9
- package/front_end/third_party/source-map-scopes-codec/package/src/mod.js.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/mod.ts +1 -0
- package/front_end/third_party/source-map-scopes-codec/package/src/scopes.js +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/scopes.ts +12 -1
- package/front_end/ui/components/report_view/ReportView.ts +2 -2
- package/front_end/ui/components/report_view/report.css +1 -0
- package/front_end/ui/components/suggestion_input/SuggestionInput.ts +7 -12
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +37 -5
- package/front_end/ui/components/tree_outline/TreeOutline.ts +1 -1
- package/front_end/ui/legacy/ContextMenu.ts +12 -7
- 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 +1 -0
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +4 -2
- package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +8 -0
- package/package.json +1 -1
|
@@ -125,6 +125,10 @@ const UIStrings = {
|
|
|
125
125
|
*@description Section header for details about an event.
|
|
126
126
|
*/
|
|
127
127
|
eventDetails: 'Event details',
|
|
128
|
+
/**
|
|
129
|
+
*@description Accessible label for the main area containing session details.
|
|
130
|
+
*/
|
|
131
|
+
sessionDetails: 'Session details',
|
|
128
132
|
/**
|
|
129
133
|
*@description Placeholder text when no row is selected in a table of events.
|
|
130
134
|
*/
|
|
@@ -576,7 +580,8 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
576
580
|
const {key, inclusionRules, cookieCravings} = sessionAndEvents.session;
|
|
577
581
|
sessionDetailsHtml = html`
|
|
578
582
|
<devtools-report>
|
|
579
|
-
<devtools-report-section-header>${
|
|
583
|
+
<devtools-report-section-header role="heading" aria-level="2">${
|
|
584
|
+
i18nString(UIStrings.sessionConfig)}</devtools-report-section-header>
|
|
580
585
|
<devtools-report-key>${i18nString(UIStrings.keySite)}</devtools-report-key>
|
|
581
586
|
<devtools-report-value>${key.site}</devtools-report-value>
|
|
582
587
|
<devtools-report-key>${i18nString(UIStrings.keyId)}</devtools-report-key>
|
|
@@ -590,7 +595,8 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
590
595
|
<devtools-report-value>${sessionAndEvents.session.cachedChallenge || ''}</devtools-report-value>
|
|
591
596
|
<devtools-report-key>${i18nString(UIStrings.allowedRefreshInitiators)}</devtools-report-key>
|
|
592
597
|
<devtools-report-value>${sessionAndEvents.session.allowedRefreshInitiators.join(', ')}</devtools-report-value>
|
|
593
|
-
<devtools-report-section-header>${
|
|
598
|
+
<devtools-report-section-header role="heading" aria-level="2">${
|
|
599
|
+
i18nString(UIStrings.scope)}</devtools-report-section-header>
|
|
594
600
|
<devtools-report-key>${i18nString(UIStrings.origin)}</devtools-report-key>
|
|
595
601
|
<devtools-report-value>${inclusionRules.origin}</devtools-report-value>
|
|
596
602
|
<devtools-report-key>${i18nString(UIStrings.includeSite)}</devtools-report-key>
|
|
@@ -599,13 +605,14 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
599
605
|
${
|
|
600
606
|
inclusionRules.urlRules.length > 0 ? html`
|
|
601
607
|
<div class="device-bound-session-grid-wrapper">
|
|
602
|
-
<devtools-data-grid class="device-bound-session-url-rules-grid" striped inline
|
|
608
|
+
<devtools-data-grid class="device-bound-session-url-rules-grid" striped inline name=${
|
|
609
|
+
i18nString(UIStrings.scope)}>
|
|
603
610
|
<table>
|
|
604
611
|
<thead>
|
|
605
612
|
<tr>
|
|
606
|
-
<th id="should-include"
|
|
607
|
-
<th id="host-pattern"
|
|
608
|
-
<th id="path-prefix"
|
|
613
|
+
<th id="should-include" sortable>${i18nString(UIStrings.ruleType)}</th>
|
|
614
|
+
<th id="host-pattern" sortable>${i18nString(UIStrings.ruleHostPattern)}</th>
|
|
615
|
+
<th id="path-prefix" sortable>${i18nString(UIStrings.rulePathPrefix)}</th>
|
|
609
616
|
</tr>
|
|
610
617
|
</thead>
|
|
611
618
|
<tbody>
|
|
@@ -622,22 +629,22 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
622
629
|
</div>
|
|
623
630
|
` :
|
|
624
631
|
nothing}
|
|
625
|
-
<devtools-report-section-header>${
|
|
632
|
+
<devtools-report-section-header role="heading" aria-level="2">${
|
|
633
|
+
i18nString(UIStrings.cookieCravings)}</devtools-report-section-header>
|
|
626
634
|
${
|
|
627
635
|
cookieCravings.length > 0 ? html`
|
|
628
636
|
<div class="device-bound-session-grid-wrapper">
|
|
629
|
-
<devtools-data-grid class="device-bound-session-cookie-cravings-grid" striped inline
|
|
637
|
+
<devtools-data-grid class="device-bound-session-cookie-cravings-grid" striped inline name=${
|
|
638
|
+
i18nString(UIStrings.cookieCravings)}>
|
|
630
639
|
<table>
|
|
631
640
|
<thead>
|
|
632
641
|
<tr>
|
|
633
|
-
<th id="name"
|
|
634
|
-
<th id="domain"
|
|
635
|
-
<th id="path"
|
|
636
|
-
<th id="secure" type="boolean" align="center"
|
|
637
|
-
|
|
638
|
-
<th id="
|
|
639
|
-
i18n.i18n.lockedString('HttpOnly')}</th>
|
|
640
|
-
<th id="same-site" weight="1" sortable>${i18n.i18n.lockedString('SameSite')}</th>
|
|
642
|
+
<th id="name" sortable>${i18nString(UIStrings.name)}</th>
|
|
643
|
+
<th id="domain" sortable>${i18n.i18n.lockedString('Domain')}</th>
|
|
644
|
+
<th id="path" sortable>${i18n.i18n.lockedString('Path')}</th>
|
|
645
|
+
<th id="secure" type="boolean" align="center" sortable>${i18n.i18n.lockedString('Secure')}</th>
|
|
646
|
+
<th id="http-only" type="boolean" align="center" sortable>${i18n.i18n.lockedString('HttpOnly')}</th>
|
|
647
|
+
<th id="same-site" sortable>${i18n.i18n.lockedString('SameSite')}</th>
|
|
641
648
|
</tr>
|
|
642
649
|
</thead>
|
|
643
650
|
<tbody>
|
|
@@ -660,27 +667,28 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
660
667
|
}
|
|
661
668
|
const events = [...sessionAndEvents.eventsById.values()];
|
|
662
669
|
const eventsHtml = html`
|
|
663
|
-
<devtools-report-section-header>${
|
|
670
|
+
<devtools-report-section-header role="heading" aria-level="2">${
|
|
671
|
+
i18nString(UIStrings.events)}</devtools-report-section-header>
|
|
664
672
|
${
|
|
665
673
|
events.length > 0 && onEventRowSelected ?
|
|
666
674
|
html`
|
|
667
675
|
<div class="device-bound-session-grid-wrapper">
|
|
668
|
-
<devtools-data-grid class="device-bound-session-events-grid" striped inline
|
|
669
|
-
Directives.ref((el?: Element) => {
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
676
|
+
<devtools-data-grid class="device-bound-session-events-grid" striped inline name=${
|
|
677
|
+
i18nString(UIStrings.events)} ${Directives.ref((el?: Element) => {
|
|
678
|
+
if (!el || !(el instanceof HTMLElement)) {
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
681
|
+
const grid = el as HTMLElement & {deselectRow(): void};
|
|
682
|
+
if (!selectedEvent) {
|
|
683
|
+
grid.deselectRow();
|
|
684
|
+
}
|
|
685
|
+
})}>
|
|
678
686
|
<table>
|
|
679
687
|
<thead>
|
|
680
688
|
<tr>
|
|
681
|
-
<th id="type"
|
|
682
|
-
<th id="timestamp"
|
|
683
|
-
<th id="details"
|
|
689
|
+
<th id="type" sortable>${i18nString(UIStrings.type)}</th>
|
|
690
|
+
<th id="timestamp" sortable>${i18nString(UIStrings.timestamp)}</th>
|
|
691
|
+
<th id="details" sortable>${i18nString(UIStrings.result)}</th>
|
|
684
692
|
</tr>
|
|
685
693
|
</thead>
|
|
686
694
|
<tbody>${events.map(({event, timestamp}) => html`
|
|
@@ -764,7 +772,8 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
764
772
|
` :
|
|
765
773
|
html`<div class="device-bound-session-no-event-details">${i18nString(UIStrings.selectEventToViewDetails)}</div>`;
|
|
766
774
|
const eventDetailsHtml = html`
|
|
767
|
-
<devtools-report-section-header>${
|
|
775
|
+
<devtools-report-section-header role="heading" aria-level="2">${
|
|
776
|
+
i18nString(UIStrings.eventDetails)}</devtools-report-section-header>
|
|
768
777
|
${eventDetailsContentHtml}
|
|
769
778
|
`;
|
|
770
779
|
|
|
@@ -774,11 +783,13 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
774
783
|
<style>${deviceBoundSessionsViewStyles}</style>
|
|
775
784
|
${toolbarHtml}
|
|
776
785
|
<devtools-split-view sidebar-position="second">
|
|
777
|
-
<div slot="main" class="device-bound-session-view-wrapper"
|
|
786
|
+
<div slot="main" class="device-bound-session-view-wrapper" role="region" aria-label=${
|
|
787
|
+
i18nString(UIStrings.sessionDetails)}>
|
|
778
788
|
${sessionDetailsHtml || nothing}
|
|
779
789
|
${eventsHtml}
|
|
780
790
|
</div>
|
|
781
|
-
<div slot="sidebar" class="device-bound-session-sidebar"
|
|
791
|
+
<div slot="sidebar" class="device-bound-session-sidebar" role="region" aria-label=${
|
|
792
|
+
i18nString(UIStrings.eventDetails)}>
|
|
782
793
|
${eventDetailsHtml}
|
|
783
794
|
</div>
|
|
784
795
|
</devtools-split-view>`,
|
|
@@ -180,6 +180,7 @@ export class ServiceWorkerUpdateCycleView {
|
|
|
180
180
|
const tr = this.tableElement.createChild('tr', 'service-worker-update-timeline');
|
|
181
181
|
tr.setAttribute('jslog', `${VisualLogging.treeItem('update-timeline').track({
|
|
182
182
|
click: true,
|
|
183
|
+
resize: true,
|
|
183
184
|
keydown: 'ArrowLeft|ArrowRight|ArrowUp|ArrowDown|Enter|Space',
|
|
184
185
|
})}`);
|
|
185
186
|
this.rows.push(tr);
|
|
@@ -353,7 +353,7 @@ function renderFramesPerReason(frames: string[]|undefined): LitTemplate {
|
|
|
353
353
|
}
|
|
354
354
|
const rows = [html`<div>${i18nString(UIStrings.framesPerIssue, {n: frames.length})}</div>`];
|
|
355
355
|
rows.push(...frames.map(url => html`<div class="text-ellipsis" title=${url}
|
|
356
|
-
jslog=${VisualLogging.treeItem()}>${url}</div>`));
|
|
356
|
+
jslog=${VisualLogging.treeItem().track({resize: true})}>${url}</div>`));
|
|
357
357
|
return html`
|
|
358
358
|
<div class="details-list"
|
|
359
359
|
jslog=${VisualLogging.tree('frames-per-issue')}>
|
|
@@ -361,7 +361,9 @@ function renderFramesPerReason(frames: string[]|undefined): LitTemplate {
|
|
|
361
361
|
rows,
|
|
362
362
|
title: i18nString(UIStrings.framesPerIssue, {n: frames.length}),
|
|
363
363
|
} as ExpandableList.ExpandableList.ExpandableListData}
|
|
364
|
-
jslog=${VisualLogging.treeItem()
|
|
364
|
+
jslog=${VisualLogging.treeItem().track({
|
|
365
|
+
resize: true
|
|
366
|
+
})}></devtools-expandable-list>
|
|
365
367
|
</div>
|
|
366
368
|
`;
|
|
367
369
|
}
|
|
@@ -144,7 +144,7 @@ const DEFAULT_VIEW: View = (input: ViewInput, _output: ViewOutput, target: HTMLE
|
|
|
144
144
|
// clang-format off
|
|
145
145
|
return html`
|
|
146
146
|
<span class=${spanClasses}
|
|
147
|
-
jslog=${VisualLogging.item('matched-address-item').track({hover: true})}
|
|
147
|
+
jslog=${VisualLogging.item('matched-address-item').track({hover: true, resize: true})}
|
|
148
148
|
@mouseenter=${() => input.onHighlightMatchesInAddress(startIndex)}
|
|
149
149
|
@mouseleave=${input.onClearHighlightedMatches}>
|
|
150
150
|
${templateLines}
|
|
@@ -238,6 +238,7 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
|
|
|
238
238
|
listItemElement.setAttribute('jslog', `${VisualLogging.item().track({
|
|
239
239
|
click: true,
|
|
240
240
|
dblclick: true,
|
|
241
|
+
resize: true,
|
|
241
242
|
keydown: 'ArrowUp|ArrowDown|PageUp|PageDown|Enter|Space',
|
|
242
243
|
})}`);
|
|
243
244
|
return listItemElement;
|
|
@@ -55,9 +55,10 @@ const UIStringsNotTranslate = {
|
|
|
55
55
|
const lockedString = i18n.i18n.lockedString;
|
|
56
56
|
|
|
57
57
|
export class AiCodeGenerationUpgradeDialog {
|
|
58
|
-
static show({noLogging}: {noLogging: boolean}):
|
|
58
|
+
static show({noLogging}: {noLogging: boolean}): Promise<boolean> {
|
|
59
59
|
const dialog = new UI.Dialog.Dialog();
|
|
60
60
|
dialog.setAriaLabel(lockedString(UIStringsNotTranslate.codeCompletionJustGotBetter));
|
|
61
|
+
const result = Promise.withResolvers<boolean>();
|
|
61
62
|
// clang-format off
|
|
62
63
|
Lit.render(html`
|
|
63
64
|
<div class="ai-code-generation-upgrade-dialog">
|
|
@@ -96,7 +97,8 @@ export class AiCodeGenerationUpgradeDialog {
|
|
|
96
97
|
<div class="right-buttons">
|
|
97
98
|
<devtools-button
|
|
98
99
|
@click=${() => {
|
|
99
|
-
|
|
100
|
+
result.resolve(true);
|
|
101
|
+
void UI.ViewManager.ViewManager.instance().showView('chrome-ai');
|
|
100
102
|
}}
|
|
101
103
|
jslogcontext="ai-code-generation-upgrade-dialog.manage-in-settings"
|
|
102
104
|
.variant=${Buttons.Button.Variant.OUTLINED}
|
|
@@ -105,6 +107,7 @@ export class AiCodeGenerationUpgradeDialog {
|
|
|
105
107
|
</devtools-button>
|
|
106
108
|
<devtools-button
|
|
107
109
|
@click=${() => {
|
|
110
|
+
result.resolve(true);
|
|
108
111
|
dialog.hide();
|
|
109
112
|
}}
|
|
110
113
|
jslogcontext="ai-code-generation-upgrade-dialog.continue"
|
|
@@ -117,13 +120,18 @@ export class AiCodeGenerationUpgradeDialog {
|
|
|
117
120
|
// clang-format on
|
|
118
121
|
|
|
119
122
|
dialog.setOutsideClickCallback(ev => {
|
|
120
|
-
ev.consume(true);
|
|
121
|
-
|
|
123
|
+
ev.consume(true);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
dialog.setOnHideCallback(() => {
|
|
127
|
+
result.resolve(false);
|
|
122
128
|
});
|
|
123
129
|
|
|
124
130
|
dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MEASURE_CONTENT);
|
|
125
131
|
dialog.setDimmed(true);
|
|
126
132
|
dialog.show();
|
|
133
|
+
|
|
134
|
+
return result.promise;
|
|
127
135
|
}
|
|
128
136
|
|
|
129
137
|
private constructor() {
|
|
@@ -81,7 +81,7 @@ export const DEFAULT_VIEW: View = (input, _output, target): void => {
|
|
|
81
81
|
.variant=${Buttons.Button.Variant.ICON}
|
|
82
82
|
.size=${Buttons.Button.Size.REGULAR}
|
|
83
83
|
.title=${i18nString(UIStrings.dismiss)}
|
|
84
|
-
jslog=${VisualLogging.close().track({click: true})}
|
|
84
|
+
jslog=${VisualLogging.close().track({click: true}).context('gemini-promo-dismiss')}
|
|
85
85
|
@click=${() => input.onCancelClick()}
|
|
86
86
|
></devtools-button>
|
|
87
87
|
</div>
|
|
@@ -111,11 +111,11 @@ export const DEFAULT_VIEW: View = (input, _output, target): void => {
|
|
|
111
111
|
<div class="buttons">
|
|
112
112
|
<devtools-button
|
|
113
113
|
.variant=${Buttons.Button.Variant.OUTLINED}
|
|
114
|
-
|
|
114
|
+
jslog=${VisualLogging.close().track({click: true}).context('gemini-promo-dismiss')}
|
|
115
115
|
@click=${input.onCancelClick}>${i18nString(UIStrings.dismiss)}</devtools-button>
|
|
116
116
|
<devtools-button
|
|
117
117
|
.variant=${Buttons.Button.Variant.PRIMARY}
|
|
118
|
-
.jslogContext=${'get-started'}
|
|
118
|
+
.jslogContext=${'gemini-promo-get-started'}
|
|
119
119
|
@click=${input.onGetStartedClick}>${i18nString(UIStrings.getStarted)}</devtools-button>
|
|
120
120
|
</div>
|
|
121
121
|
`,
|
|
@@ -160,7 +160,7 @@ export class GeminiRebrandPromoDialog extends UI.Widget.VBox {
|
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
static show(): void {
|
|
163
|
-
const dialog = new UI.Dialog.Dialog('gemini-
|
|
163
|
+
const dialog = new UI.Dialog.Dialog('gemini-promo-dialog');
|
|
164
164
|
dialog.setAriaLabel(i18nString(UIStrings.dialogAriaLabel));
|
|
165
165
|
dialog.setMaxContentSize(new Geometry.Size(384, 500));
|
|
166
166
|
dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.SET_EXACT_WIDTH_MAX_HEIGHT);
|
|
@@ -181,7 +181,7 @@ export class GeminiRebrandPromoDialog extends UI.Widget.VBox {
|
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
const setting = Common.Settings.Settings.instance().createSetting<boolean>(
|
|
184
|
-
'gemini-
|
|
184
|
+
'gemini-promo-dialog-shown', false, Common.Settings.SettingStorageType.SYNCED);
|
|
185
185
|
if (setting.get()) {
|
|
186
186
|
return;
|
|
187
187
|
}
|
|
@@ -1457,6 +1457,7 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
|
|
|
1457
1457
|
this.elementInternal.className = 'console-message-wrapper';
|
|
1458
1458
|
this.elementInternal.setAttribute('jslog', `${VisualLogging.item('console-message').track({
|
|
1459
1459
|
click: true,
|
|
1460
|
+
resize: true,
|
|
1460
1461
|
keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter|Space|Home|End',
|
|
1461
1462
|
})}`);
|
|
1462
1463
|
this.elementInternal.removeChildren();
|
|
@@ -680,6 +680,7 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
680
680
|
this.listItemElement.setAttribute(
|
|
681
681
|
'jslog', `${VisualLogging.treeItem().parent('elementsTreeOutline').track({
|
|
682
682
|
keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Backspace|Delete|Enter|Space|Home|End',
|
|
683
|
+
resize: true,
|
|
683
684
|
drag: true,
|
|
684
685
|
click: true,
|
|
685
686
|
})}`);
|
|
@@ -228,26 +228,27 @@ const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
228
228
|
event.preventDefault();
|
|
229
229
|
}
|
|
230
230
|
};
|
|
231
|
+
// clang-format off
|
|
231
232
|
const renderElement = (element: LayoutElement): Lit.LitTemplate => html`<div
|
|
232
233
|
class="element"
|
|
233
|
-
jslog=${VisualLogging.item()}>
|
|
234
|
+
jslog=${VisualLogging.item().track({resize: true})}>
|
|
234
235
|
<devtools-checkbox
|
|
235
236
|
data-element="true"
|
|
236
237
|
class="checkbox-label"
|
|
237
238
|
.checked=${element.enabled}
|
|
238
239
|
@change=${(e: Event) => input.onElementToggle(element, e)}
|
|
239
|
-
jslog=${VisualLogging.toggle().track({
|
|
240
|
-
click: true
|
|
241
|
-
})}>
|
|
240
|
+
jslog=${VisualLogging.toggle().track({click: true, resize: true })}>
|
|
242
241
|
<span
|
|
243
242
|
class="node-text-container"
|
|
244
243
|
data-label="true"
|
|
245
244
|
@mouseenter=${(e: MouseEvent) => input.onMouseEnter(element, e)}
|
|
246
245
|
@mouseleave=${(e: MouseEvent) => input.onMouseLeave(element, e)}>
|
|
247
246
|
<devtools-node-text .data=${{
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
247
|
+
nodeId: element.domId,
|
|
248
|
+
nodeTitle: element.name,
|
|
249
|
+
nodeClasses: element.domClasses
|
|
250
|
+
}}>
|
|
251
|
+
</devtools-node-text>
|
|
251
252
|
</span>
|
|
252
253
|
</devtools-checkbox>
|
|
253
254
|
<label
|
|
@@ -303,7 +303,7 @@ export class ElementsBreadcrumbs extends HTMLElement {
|
|
|
303
303
|
data-crumb="true"
|
|
304
304
|
>
|
|
305
305
|
<a href="#" draggable=false class="crumb-link"
|
|
306
|
-
jslog=${VisualLogging.item().track({click:true})}
|
|
306
|
+
jslog=${VisualLogging.item().track({click:true, resize:true})}
|
|
307
307
|
@click=${this.#onCrumbClick(crumb.node)}
|
|
308
308
|
@mousemove=${this.#onCrumbMouseMove(crumb.node)}
|
|
309
309
|
@mouseleave=${this.#onCrumbMouseLeave(crumb.node)}
|
|
@@ -194,7 +194,8 @@ export class StylePropertyEditor extends HTMLElement {
|
|
|
194
194
|
return html`
|
|
195
195
|
<button title=${title}
|
|
196
196
|
class=${classes}
|
|
197
|
-
jslog=${
|
|
197
|
+
jslog=${
|
|
198
|
+
VisualLogging.item().track({click: true, resize: true}).context(`${propertyName}-${propertyValue}`)}
|
|
198
199
|
@click=${() => this.#onButtonClick(propertyName, propertyValue, selected)}>
|
|
199
200
|
<devtools-icon style=${transform} name=${iconInfo.iconName}>
|
|
200
201
|
</devtools-icon>
|
|
@@ -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) {
|
|
@@ -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
|
})}
|
|
@@ -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, resize: 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>
|
|
@@ -21,6 +21,7 @@ import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
|
21
21
|
import * as NetworkComponents from './components/components.js';
|
|
22
22
|
import {EventSourceMessagesView} from './EventSourceMessagesView.js';
|
|
23
23
|
import {RequestCookiesView} from './RequestCookiesView.js';
|
|
24
|
+
import {RequestDeviceBoundSessionsView} from './RequestDeviceBoundSessionsView.js';
|
|
24
25
|
import {RequestInitiatorView} from './RequestInitiatorView.js';
|
|
25
26
|
import {RequestPayloadView} from './RequestPayloadView.js';
|
|
26
27
|
import {RequestPreviewView} from './RequestPreviewView.js';
|
|
@@ -114,6 +115,17 @@ const UIStrings = {
|
|
|
114
115
|
* @description Text for web cookies
|
|
115
116
|
*/
|
|
116
117
|
cookies: 'Cookies',
|
|
118
|
+
/**
|
|
119
|
+
* @description Title of the Device Bound Sessions tab in the Network panel. A
|
|
120
|
+
* website may decide to create a session for a user, for example when the user
|
|
121
|
+
* logs in. They can use a protocol to make it a "device bound session". That
|
|
122
|
+
* means that when the session expires, it is only possible for it to be
|
|
123
|
+
* extended on the device it was created on. Thus the session is considered
|
|
124
|
+
* to be bound to that device. For more details on the protocol, see
|
|
125
|
+
* https://github.com/w3c/webappsec-dbsc/blob/main/README.md and
|
|
126
|
+
* https://w3c.github.io/webappsec-dbsc/.
|
|
127
|
+
*/
|
|
128
|
+
deviceBoundSessions: 'Device bound sessions',
|
|
117
129
|
/**
|
|
118
130
|
* @description Text in Network Item View of the Network panel
|
|
119
131
|
*/
|
|
@@ -140,6 +152,7 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
|
|
|
140
152
|
#payloadView: RequestPayloadView|null = null;
|
|
141
153
|
readonly #responseView: RequestResponseView|undefined;
|
|
142
154
|
#cookiesView: RequestCookiesView|null = null;
|
|
155
|
+
#deviceBoundSessionsView: RequestDeviceBoundSessionsView|null = null;
|
|
143
156
|
#initialTab?: NetworkForward.UIRequestLocation.UIRequestTabs;
|
|
144
157
|
readonly #firstTab: NetworkForward.UIRequestLocation.UIRequestTabs;
|
|
145
158
|
|
|
@@ -253,10 +266,10 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
|
|
|
253
266
|
super.wasShown();
|
|
254
267
|
this.#request.addEventListener(SDK.NetworkRequest.Events.REQUEST_HEADERS_CHANGED, this.requestHeadersChanged, this);
|
|
255
268
|
this.#request.addEventListener(
|
|
256
|
-
SDK.NetworkRequest.Events.RESPONSE_HEADERS_CHANGED, this.
|
|
269
|
+
SDK.NetworkRequest.Events.RESPONSE_HEADERS_CHANGED, this.maybeAppendCookieResponsePanels, this);
|
|
257
270
|
this.#request.addEventListener(
|
|
258
271
|
SDK.NetworkRequest.Events.TRUST_TOKEN_RESULT_ADDED, this.maybeShowErrorIconInTrustTokenTabHeader, this);
|
|
259
|
-
this.
|
|
272
|
+
this.maybeAppendCookieResponsePanels();
|
|
260
273
|
this.maybeShowErrorIconInTrustTokenTabHeader();
|
|
261
274
|
|
|
262
275
|
// Only select the initial tab the first time the view is shown after construction.
|
|
@@ -283,7 +296,7 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
|
|
|
283
296
|
this.#request.removeEventListener(
|
|
284
297
|
SDK.NetworkRequest.Events.REQUEST_HEADERS_CHANGED, this.requestHeadersChanged, this);
|
|
285
298
|
this.#request.removeEventListener(
|
|
286
|
-
SDK.NetworkRequest.Events.RESPONSE_HEADERS_CHANGED, this.
|
|
299
|
+
SDK.NetworkRequest.Events.RESPONSE_HEADERS_CHANGED, this.maybeAppendCookieResponsePanels, this);
|
|
287
300
|
this.#request.removeEventListener(
|
|
288
301
|
SDK.NetworkRequest.Events.TRUST_TOKEN_RESULT_ADDED, this.maybeShowErrorIconInTrustTokenTabHeader, this);
|
|
289
302
|
}
|
|
@@ -293,6 +306,11 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
|
|
|
293
306
|
void this.maybeAppendPayloadPanel();
|
|
294
307
|
}
|
|
295
308
|
|
|
309
|
+
private maybeAppendCookieResponsePanels(): void {
|
|
310
|
+
this.maybeAppendCookiesPanel();
|
|
311
|
+
this.maybeAppendDeviceBoundSessionsPanel();
|
|
312
|
+
}
|
|
313
|
+
|
|
296
314
|
private maybeAppendCookiesPanel(): void {
|
|
297
315
|
const cookiesPresent = this.#request.hasRequestCookies() || this.#request.responseCookies.length > 0;
|
|
298
316
|
console.assert(cookiesPresent || !this.#cookiesView, 'Cookies were introduced in headers and then removed!');
|
|
@@ -311,6 +329,17 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
|
|
|
311
329
|
}
|
|
312
330
|
}
|
|
313
331
|
|
|
332
|
+
private maybeAppendDeviceBoundSessionsPanel(): void {
|
|
333
|
+
const deviceBoundSessionsPresent = this.#request.getDeviceBoundSessionUsages().length > 0;
|
|
334
|
+
if (deviceBoundSessionsPresent && !this.#deviceBoundSessionsView) {
|
|
335
|
+
this.#deviceBoundSessionsView = new RequestDeviceBoundSessionsView(this.#request);
|
|
336
|
+
this.appendTab(
|
|
337
|
+
NetworkForward.UIRequestLocation.UIRequestTabs.DEVICE_BOUND_SESSIONS,
|
|
338
|
+
i18nString(UIStrings.deviceBoundSessions), this.#deviceBoundSessionsView,
|
|
339
|
+
i18nString(UIStrings.deviceBoundSessions));
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
314
343
|
private async maybeAppendPayloadPanel(): Promise<void> {
|
|
315
344
|
if (this.hasTab('payload')) {
|
|
316
345
|
return;
|
|
@@ -409,7 +409,8 @@ 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(
|
|
412
|
+
this.waterfallHeaderElement.setAttribute(
|
|
413
|
+
'jslog', `${VisualLogging.tableHeader('waterfall').track({click: true, resize: true})}`);
|
|
413
414
|
this.waterfallHeaderElement.addEventListener('click', waterfallHeaderClicked.bind(this));
|
|
414
415
|
this.waterfallHeaderElement.addEventListener('contextmenu', event => {
|
|
415
416
|
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|