chrome-devtools-frontend 1.0.1608868 → 1.0.1609381
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/AidaGcaTranslation.ts +13 -0
- package/front_end/core/sdk/PreloadingModel.ts +1 -1
- package/front_end/entrypoints/heap_snapshot_worker/AllocationProfile.ts +1 -1
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +1 -1
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.ts +1 -1
- package/front_end/generated/InspectorBackendCommands.ts +1 -2
- package/front_end/generated/protocol-mapping.d.ts +0 -9
- package/front_end/generated/protocol-proxy-api.d.ts +0 -7
- package/front_end/generated/protocol.ts +0 -20
- package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +4 -2
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +5 -4
- package/front_end/models/ai_assistance/agents/ConversationSummaryAgent.ts +24 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +2 -2
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +41 -22
- package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -2
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +5 -3
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +69 -69
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +1 -1
- package/front_end/models/live-metrics/LiveMetrics.ts +43 -41
- package/front_end/models/trace/EntityMapper.ts +12 -0
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +44 -15
- package/front_end/panels/ai_assistance/components/chatMessage.css +13 -0
- package/front_end/panels/application/ApplicationPanelSidebar.ts +8 -0
- package/front_end/panels/application/IndexedDBViews.ts +1 -1
- package/front_end/panels/application/ResourcesPanel.ts +8 -0
- package/front_end/panels/application/ServiceWorkerCacheViews.ts +1 -1
- package/front_end/panels/application/application-meta.ts +11 -0
- package/front_end/panels/application/application.ts +1 -0
- package/front_end/panels/application/components/StorageMetadataView.ts +31 -7
- package/front_end/panels/application/components/backForwardCacheView.css +4 -0
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +29 -0
- package/front_end/panels/elements/ElementsTreeElement.ts +4 -0
- package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +1 -1
- package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +1 -1
- package/front_end/panels/profiler/HeapSnapshotView.ts +1 -1
- package/front_end/panels/timeline/TimelinePanel.ts +2 -6
- package/front_end/panels/timeline/utils/Helpers.ts +1 -1
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/legacy/InspectorDrawerView.ts +188 -15
- package/front_end/ui/legacy/InspectorView.ts +162 -11
- package/front_end/ui/legacy/TabbedPane.ts +2 -2
- package/front_end/ui/legacy/inspectorDrawerTabbedPane.css +54 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
- package/front_end/ui/visual_logging/LoggingDriver.ts +3 -3
- package/mcp/mcp.ts +1 -1
- package/package.json +1 -1
- /package/front_end/models/{heap_snapshot_model → heap_snapshot}/ChildrenProvider.ts +0 -0
- /package/front_end/models/{heap_snapshot_model → heap_snapshot}/HeapSnapshotModel.ts +0 -0
- /package/front_end/models/{heap_snapshot_model → heap_snapshot}/HeapSnapshotProxy.ts +0 -0
- /package/front_end/models/{heap_snapshot_model/heap_snapshot_model.ts → heap_snapshot/heap_snapshot.ts} +0 -0
|
@@ -482,7 +482,6 @@ function renderStepCode(step: Step): Lit.LitTemplate {
|
|
|
482
482
|
<devtools-code-block
|
|
483
483
|
.code=${step.code.trim()}
|
|
484
484
|
.codeLang=${'js'}
|
|
485
|
-
.displayLimit=${MAX_NUM_LINES_IN_CODEBLOCK}
|
|
486
485
|
.displayNotice=${!Boolean(step.output)}
|
|
487
486
|
.header=${codeHeadingText}
|
|
488
487
|
.showCopyButton=${true}
|
|
@@ -493,7 +492,6 @@ function renderStepCode(step: Step): Lit.LitTemplate {
|
|
|
493
492
|
<devtools-code-block
|
|
494
493
|
.code=${step.output}
|
|
495
494
|
.codeLang=${'js'}
|
|
496
|
-
.displayLimit=${MAX_NUM_LINES_IN_CODEBLOCK}
|
|
497
495
|
.displayNotice=${true}
|
|
498
496
|
.header=${lockedString(UIStringsNotTranslate.dataReturned)}
|
|
499
497
|
.showCopyButton=${false}
|
|
@@ -526,7 +524,6 @@ function renderStepDetails({
|
|
|
526
524
|
<devtools-code-block
|
|
527
525
|
.code=${contextDetail.text}
|
|
528
526
|
.codeLang=${contextDetail.codeLang || ''}
|
|
529
|
-
.displayLimit=${MAX_NUM_LINES_IN_CODEBLOCK}
|
|
530
527
|
.displayNotice=${false}
|
|
531
528
|
.header=${contextDetail.title}
|
|
532
529
|
.showCopyButton=${true}
|
|
@@ -568,9 +565,14 @@ function renderWalkthroughSidebarButton(
|
|
|
568
565
|
const variant = hasOneStepWithWidget && !input.isLoading ? Buttons.Button.Variant.TONAL : Buttons.Button.Variant.TEXT;
|
|
569
566
|
const icon = AiAssistanceModel.AiUtils.getIconName();
|
|
570
567
|
|
|
568
|
+
const toggleContainerClasses = Lit.Directives.classMap({
|
|
569
|
+
'walkthrough-toggle-container': true,
|
|
570
|
+
// We only apply the widget styling when loading is complete
|
|
571
|
+
'has-widgets': hasOneStepWithWidget && !input.isLoading,
|
|
572
|
+
});
|
|
571
573
|
// clang-format off
|
|
572
574
|
return html`
|
|
573
|
-
<div class
|
|
575
|
+
<div class=${toggleContainerClasses}>
|
|
574
576
|
${input.isLoading ?
|
|
575
577
|
html`<devtools-spinner></devtools-spinner>` :
|
|
576
578
|
html`<devtools-icon name=${icon}></devtools-icon>`}
|
|
@@ -589,9 +591,7 @@ function renderWalkthroughSidebarButton(
|
|
|
589
591
|
// the walkthrough open with an alternative message.
|
|
590
592
|
walkthrough.onOpen(message as ModelChatMessage);
|
|
591
593
|
}
|
|
592
|
-
}}
|
|
593
|
-
>
|
|
594
|
-
${title}<devtools-icon class="chevron" .name=${isExpanded ? 'cross' : 'chevron-right'}></devtools-icon>
|
|
594
|
+
}}>${title}<devtools-icon class="chevron" .name=${isExpanded ? 'cross' : 'chevron-right'}></devtools-icon>
|
|
595
595
|
</devtools-button>
|
|
596
596
|
</div>
|
|
597
597
|
`;
|
|
@@ -761,6 +761,15 @@ async function makeComputedStyleWidget(widgetData: ComputedStyleAiWidget): Promi
|
|
|
761
761
|
}
|
|
762
762
|
const styles = new ComputedStyle.ComputedStyleModel.ComputedStyle(domNodeForId, widgetData.data.computedStyles);
|
|
763
763
|
|
|
764
|
+
let filterText: RegExp|null = null;
|
|
765
|
+
try {
|
|
766
|
+
filterText = new RegExp(widgetData.data.properties.join('|'), 'i');
|
|
767
|
+
} catch {
|
|
768
|
+
// If the AI provides an invalid regex (e.g. "*"), we don't want to crash.
|
|
769
|
+
// We can just skip the widget in this case.
|
|
770
|
+
return null;
|
|
771
|
+
}
|
|
772
|
+
|
|
764
773
|
// clang-format off
|
|
765
774
|
const renderedWidget = html`<devtools-widget
|
|
766
775
|
class="computed-styles-widget" ${widget(Elements.ComputedStyleWidget.ComputedStyleWidget, {
|
|
@@ -769,7 +778,7 @@ async function makeComputedStyleWidget(widgetData: ComputedStyleAiWidget): Promi
|
|
|
769
778
|
// This disables showing the nested traces and detailed information in the widget.
|
|
770
779
|
propertyTraces: null,
|
|
771
780
|
allowUserControl: false,
|
|
772
|
-
filterText
|
|
781
|
+
filterText,
|
|
773
782
|
enableNarrowViewResizing: false,
|
|
774
783
|
})}></devtools-widget>`;
|
|
775
784
|
// clang-format on
|
|
@@ -777,11 +786,19 @@ async function makeComputedStyleWidget(widgetData: ComputedStyleAiWidget): Promi
|
|
|
777
786
|
return {
|
|
778
787
|
renderedWidget,
|
|
779
788
|
revealable: new Elements.ElementsPanel.NodeComputedStyles(domNodeForId),
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
789
|
+
// clang-format off
|
|
790
|
+
title: html`
|
|
791
|
+
<span class="computed-style-title-wrapper">
|
|
792
|
+
<span class="computed-style-title-prefix">Computed styles</span>
|
|
793
|
+
<span class="style-class-wrapper">
|
|
794
|
+
(<devtools-widget
|
|
795
|
+
${widget(PanelsCommon.DOMLinkifier.DOMNodeLink, {
|
|
796
|
+
node: domNodeForId,
|
|
797
|
+
})}
|
|
798
|
+
></devtools-widget>)
|
|
799
|
+
</span>
|
|
800
|
+
</span>`,
|
|
801
|
+
// clang-format on
|
|
785
802
|
};
|
|
786
803
|
}
|
|
787
804
|
|
|
@@ -804,12 +821,21 @@ async function makeStylePropertiesWidget(widgetData: StylePropertiesAiWidget): P
|
|
|
804
821
|
return null;
|
|
805
822
|
}
|
|
806
823
|
|
|
824
|
+
let filter: RegExp|null = null;
|
|
825
|
+
try {
|
|
826
|
+
filter = widgetData.data.selector ? new RegExp(widgetData.data.selector) : null;
|
|
827
|
+
} catch {
|
|
828
|
+
// If the AI provides an invalid regex (e.g. "*"), we don't want to crash.
|
|
829
|
+
// We can just skip the widget in this case.
|
|
830
|
+
return null;
|
|
831
|
+
}
|
|
832
|
+
|
|
807
833
|
// clang-format off
|
|
808
834
|
const renderedWidget = html`<devtools-widget
|
|
809
835
|
class="styling-preview-widget"
|
|
810
836
|
${widget(Elements.StandaloneStylesContainer.StandaloneStylesContainer, {
|
|
811
837
|
domNode: domNodeForId,
|
|
812
|
-
filter
|
|
838
|
+
filter,
|
|
813
839
|
})}>
|
|
814
840
|
</devtools-widget>`;
|
|
815
841
|
// clang-format on
|
|
@@ -1519,7 +1545,7 @@ async function makeTimelineRangeSummaryWidget(widgetData: TimelineRangeSummaryAi
|
|
|
1519
1545
|
eventsArray.sort((a, b) => a.ts - b.ts);
|
|
1520
1546
|
|
|
1521
1547
|
const thirdPartyTree = new Timeline.ThirdPartyTreeView.ThirdPartyTreeViewWidget();
|
|
1522
|
-
const mapper =
|
|
1548
|
+
const mapper = Trace.EntityMapper.EntityMapper.getOrCreate(parsedTrace);
|
|
1523
1549
|
thirdPartyTree.model = {selectedEvents: eventsArray, parsedTrace, entityMapper: mapper};
|
|
1524
1550
|
thirdPartyTree.activeSelection = Timeline.TimelineSelection.selectionFromRangeMicroSeconds(bounds.min, bounds.max);
|
|
1525
1551
|
thirdPartyTree.refreshTree(true);
|
|
@@ -1542,6 +1568,9 @@ async function makeTimelineRangeSummaryWidget(widgetData: TimelineRangeSummaryAi
|
|
|
1542
1568
|
entityMapper: thirdPartyTree.entityMapper(),
|
|
1543
1569
|
},
|
|
1544
1570
|
activeSelection: { bounds },
|
|
1571
|
+
onBottomUpButtonClicked: (node: Trace.Extras.TraceTree.Node|null) => {
|
|
1572
|
+
void Common.Revealer.reveal(new TimelineUtils.Helpers.RevealableBottomUpProfile(bounds, node ?? undefined));
|
|
1573
|
+
},
|
|
1545
1574
|
})}`,
|
|
1546
1575
|
} as TimelineComponents.TimelineRangeSummaryView.TimelineRangeSummaryViewData,
|
|
1547
1576
|
})}
|
|
@@ -456,6 +456,19 @@
|
|
|
456
456
|
white-space: nowrap; /* stop the titles going onto multiple lines */
|
|
457
457
|
}
|
|
458
458
|
|
|
459
|
+
/* This widget's title is some text + then a DOM node link, so it
|
|
460
|
+
* needs some extra styling */
|
|
461
|
+
.computed-style-title-wrapper {
|
|
462
|
+
display: flex;
|
|
463
|
+
align-items: center;
|
|
464
|
+
justify-content: flex-start;
|
|
465
|
+
gap: var(--sys-size-3);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
.computed-style-title-prefix {
|
|
469
|
+
flex-shrink: 0;
|
|
470
|
+
}
|
|
471
|
+
|
|
459
472
|
.widget-reveal-container {
|
|
460
473
|
padding: 0;
|
|
461
474
|
background: none;
|
|
@@ -1031,6 +1031,14 @@ export class ApplicationPanelSidebar extends UI.Widget.VBox implements SDK.Targe
|
|
|
1031
1031
|
}
|
|
1032
1032
|
}
|
|
1033
1033
|
|
|
1034
|
+
showStorageBucket(bucketInfo: Protocol.Storage.StorageBucketInfo): void {
|
|
1035
|
+
const bucketsModel = SDK.TargetManager.TargetManager.instance().primaryPageTarget()?.model(
|
|
1036
|
+
SDK.StorageBucketsModel.StorageBucketsModel);
|
|
1037
|
+
if (bucketsModel) {
|
|
1038
|
+
this.storageBucketsTreeElement?.getBucketTreeElement(bucketsModel, bucketInfo)?.revealAndSelect(true);
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1034
1042
|
private onmousemove(event: MouseEvent): void {
|
|
1035
1043
|
const nodeUnderMouse = (event.target as Node);
|
|
1036
1044
|
if (!nodeUnderMouse) {
|
|
@@ -12,6 +12,7 @@ import * as UI from '../../ui/legacy/legacy.js';
|
|
|
12
12
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
13
13
|
|
|
14
14
|
import {ApplicationPanelSidebar, StorageCategoryView} from './ApplicationPanelSidebar.js';
|
|
15
|
+
import type {StorageMetadataView} from './components/components.js';
|
|
15
16
|
import {CookieItemsView} from './CookieItemsView.js';
|
|
16
17
|
import type {DeviceBoundSessionsModel} from './DeviceBoundSessionsModel.js';
|
|
17
18
|
import {DeviceBoundSessionsView} from './DeviceBoundSessionsView.js';
|
|
@@ -260,3 +261,10 @@ export class AttemptViewWithFilterRevealer implements
|
|
|
260
261
|
sidebar.showPreloadingAttemptViewWithFilter(filter);
|
|
261
262
|
}
|
|
262
263
|
}
|
|
264
|
+
|
|
265
|
+
export class StorageBucketRevealer implements Common.Revealer.Revealer<StorageMetadataView.StorageBucketRevealInfo> {
|
|
266
|
+
async reveal(revealInfo: StorageMetadataView.StorageBucketRevealInfo): Promise<void> {
|
|
267
|
+
const sidebar = await ResourcesPanel.showAndGetSidebar();
|
|
268
|
+
sidebar.showStorageBucket(revealInfo.bucketInfo);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
@@ -133,7 +133,7 @@ export class ServiceWorkerCacheView extends UI.View.SimpleView {
|
|
|
133
133
|
.model(SDK.StorageBucketsModel.StorageBucketsModel)
|
|
134
134
|
?.getBucketByName(cache.storageBucket.storageKey, cache.storageBucket.name);
|
|
135
135
|
|
|
136
|
-
this.metadataView.setShowOnlyBucket(
|
|
136
|
+
this.metadataView.setShowOnlyBucket(true);
|
|
137
137
|
|
|
138
138
|
if (bucketInfo) {
|
|
139
139
|
this.metadataView.setStorageBucket(bucketInfo);
|
|
@@ -174,3 +174,14 @@ Common.Revealer.registerRevealer({
|
|
|
174
174
|
return new Resources.ResourcesPanel.AttemptViewWithFilterRevealer();
|
|
175
175
|
},
|
|
176
176
|
});
|
|
177
|
+
|
|
178
|
+
Common.Revealer.registerRevealer({
|
|
179
|
+
contextTypes() {
|
|
180
|
+
return maybeRetrieveContextTypes(Resources => [Resources.Components.StorageMetadataView.StorageBucketRevealInfo]);
|
|
181
|
+
},
|
|
182
|
+
destination: Common.Revealer.RevealerDestination.APPLICATION_PANEL,
|
|
183
|
+
async loadRevealer() {
|
|
184
|
+
const Resources = await loadResourcesModule();
|
|
185
|
+
return new Resources.ResourcesPanel.StorageBucketRevealer();
|
|
186
|
+
},
|
|
187
|
+
});
|
|
@@ -45,6 +45,7 @@ import * as TrustTokensTreeElement from './TrustTokensTreeElement.js';
|
|
|
45
45
|
import * as WebMCPTreeElement from './WebMCPTreeElement.js';
|
|
46
46
|
import * as WebMCPView from './WebMCPView.js';
|
|
47
47
|
|
|
48
|
+
export * as Components from './components/components.js';
|
|
48
49
|
export {
|
|
49
50
|
ApplicationPanelSidebar,
|
|
50
51
|
AppManifestView,
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
/* eslint-disable @devtools/no-lit-render-outside-of-view */
|
|
5
5
|
|
|
6
6
|
import '../../../ui/components/report_view/report_view.js';
|
|
7
|
+
import '../../../ui/kit/kit.js';
|
|
7
8
|
|
|
9
|
+
import * as Common from '../../../core/common/common.js';
|
|
8
10
|
import * as i18n from '../../../core/i18n/i18n.js';
|
|
9
11
|
import * as SDK from '../../../core/sdk/sdk.js';
|
|
10
12
|
import type * as Protocol from '../../../generated/protocol.js';
|
|
@@ -13,6 +15,7 @@ import * as LegacyWrapper from '../../../ui/components/legacy_wrapper/legacy_wra
|
|
|
13
15
|
import * as RenderCoordinator from '../../../ui/components/render_coordinator/render_coordinator.js';
|
|
14
16
|
import * as UI from '../../../ui/legacy/legacy.js';
|
|
15
17
|
import {html, type LitTemplate, nothing, render, type TemplateResult} from '../../../ui/lit/lit.js';
|
|
18
|
+
import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
|
|
16
19
|
|
|
17
20
|
import storageMetadataViewStyle from './storageMetadataView.css.js';
|
|
18
21
|
|
|
@@ -113,12 +116,17 @@ const UIStrings = {
|
|
|
113
116
|
const str_ = i18n.i18n.registerUIStrings('panels/application/components/StorageMetadataView.ts', UIStrings);
|
|
114
117
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
115
118
|
|
|
119
|
+
export class StorageBucketRevealInfo {
|
|
120
|
+
constructor(public bucketInfo: Protocol.Storage.StorageBucketInfo) {
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
116
124
|
export class StorageMetadataView extends LegacyWrapper.LegacyWrapper.WrappableComponent {
|
|
117
125
|
readonly #shadow = this.attachShadow({mode: 'open'});
|
|
118
126
|
#storageBucketsModel?: SDK.StorageBucketsModel.StorageBucketsModel;
|
|
119
127
|
#storageKey: SDK.StorageKeyManager.StorageKey|null = null;
|
|
120
128
|
#storageBucket: Protocol.Storage.StorageBucketInfo|null = null;
|
|
121
|
-
#showOnlyBucket =
|
|
129
|
+
#showOnlyBucket = false;
|
|
122
130
|
|
|
123
131
|
setStorageKey(storageKey: string): void {
|
|
124
132
|
this.#storageKey = SDK.StorageKeyManager.parseStorageKey(storageKey);
|
|
@@ -220,20 +228,36 @@ export class StorageMetadataView extends LegacyWrapper.LegacyWrapper.WrappableCo
|
|
|
220
228
|
const {bucket: {name}, persistent, durability, quota} = this.#storageBucket;
|
|
221
229
|
const isDefault = !name;
|
|
222
230
|
|
|
223
|
-
|
|
231
|
+
const renderBucketName = (): TemplateResult => {
|
|
224
232
|
if (isDefault) {
|
|
225
|
-
return html
|
|
226
|
-
${this.key(i18nString(UIStrings.bucketName))}
|
|
227
|
-
${this.value(html`<span class="default-bucket">default</span>`)}`;
|
|
233
|
+
return html`<span class="default-bucket">${i18nString(UIStrings.defaultBucket)}</span>`;
|
|
228
234
|
}
|
|
235
|
+
if (!this.#showOnlyBucket) {
|
|
236
|
+
return html`${name}`;
|
|
237
|
+
}
|
|
238
|
+
const revealBucket = (e: Event): void => {
|
|
239
|
+
e.preventDefault();
|
|
240
|
+
void Common.Revealer.reveal(
|
|
241
|
+
new StorageBucketRevealInfo(this.#storageBucket as Protocol.Storage.StorageBucketInfo));
|
|
242
|
+
};
|
|
243
|
+
return html`<devtools-link
|
|
244
|
+
@click=${revealBucket}
|
|
245
|
+
title=${name}
|
|
246
|
+
jslog=${VisualLogging.action('storage-bucket').track({
|
|
247
|
+
click: true
|
|
248
|
+
})}
|
|
249
|
+
>${name}</devtools-link>`;
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
if (this.#showOnlyBucket) {
|
|
229
253
|
return html`
|
|
230
254
|
${this.key(i18nString(UIStrings.bucketName))}
|
|
231
|
-
${this.value(
|
|
255
|
+
${this.value(renderBucketName())}`;
|
|
232
256
|
}
|
|
233
257
|
// clang-format off
|
|
234
258
|
return html`
|
|
235
259
|
${this.key(i18nString(UIStrings.bucketName))}
|
|
236
|
-
${this.value(
|
|
260
|
+
${this.value(renderBucketName())}
|
|
237
261
|
${this.key(i18nString(UIStrings.persistent))}
|
|
238
262
|
${this.value(persistent ? i18nString(UIStrings.yes) : i18nString(UIStrings.no))}
|
|
239
263
|
${this.key(i18nString(UIStrings.durability))}
|
|
@@ -54,6 +54,10 @@ const UIStrings = {
|
|
|
54
54
|
* @description Text in details
|
|
55
55
|
*/
|
|
56
56
|
detailsTargetHint: 'Target hint',
|
|
57
|
+
/**
|
|
58
|
+
* @description Text in details
|
|
59
|
+
*/
|
|
60
|
+
detailsFormSubmission: 'Form submission',
|
|
57
61
|
/**
|
|
58
62
|
* @description Text in details
|
|
59
63
|
*/
|
|
@@ -62,6 +66,14 @@ const UIStrings = {
|
|
|
62
66
|
* @description Header of rule set
|
|
63
67
|
*/
|
|
64
68
|
detailsRuleSet: 'Rule set',
|
|
69
|
+
/**
|
|
70
|
+
* @description Text indicating that the preloading field is true.
|
|
71
|
+
*/
|
|
72
|
+
yes: 'Yes',
|
|
73
|
+
/**
|
|
74
|
+
* @description Text indicating that the preloading field is false.
|
|
75
|
+
*/
|
|
76
|
+
no: 'No',
|
|
65
77
|
/**
|
|
66
78
|
* @description Description: status
|
|
67
79
|
*/
|
|
@@ -202,6 +214,7 @@ export class PreloadingDetailsReportView extends LegacyWrapper.LegacyWrapper.Wra
|
|
|
202
214
|
${this.#action(isFallbackToPrefetch)}
|
|
203
215
|
${this.#status(isFallbackToPrefetch)}
|
|
204
216
|
${this.#targetHint()}
|
|
217
|
+
${this.#formSubmission()}
|
|
205
218
|
${this.#maybePrefetchFailureReason()}
|
|
206
219
|
${this.#maybePrerenderFailureReason()}
|
|
207
220
|
|
|
@@ -381,6 +394,22 @@ export class PreloadingDetailsReportView extends LegacyWrapper.LegacyWrapper.Wra
|
|
|
381
394
|
`;
|
|
382
395
|
}
|
|
383
396
|
|
|
397
|
+
#formSubmission(): Lit.LitTemplate {
|
|
398
|
+
assertNotNullOrUndefined(this.#data);
|
|
399
|
+
const attempt = this.#data.pipeline.getOriginallyTriggered();
|
|
400
|
+
const hasFormSubmission = attempt.key.formSubmission !== undefined;
|
|
401
|
+
if (!hasFormSubmission || !this.#isPrerenderLike(attempt.action)) {
|
|
402
|
+
return Lit.nothing;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
return html`
|
|
406
|
+
<devtools-report-key>${i18nString(UIStrings.detailsFormSubmission)}</devtools-report-key>
|
|
407
|
+
<devtools-report-value>
|
|
408
|
+
${attempt.key.formSubmission ? i18nString(UIStrings.yes) : i18nString(UIStrings.no)}
|
|
409
|
+
</devtools-report-value>
|
|
410
|
+
`;
|
|
411
|
+
}
|
|
412
|
+
|
|
384
413
|
#maybePrerenderFailureReason(): Lit.LitTemplate {
|
|
385
414
|
assertNotNullOrUndefined(this.#data);
|
|
386
415
|
const attempt = this.#data.pipeline.getOriginallyTriggered();
|
|
@@ -2850,6 +2850,10 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
2850
2850
|
}
|
|
2851
2851
|
|
|
2852
2852
|
updateDecorations(): void {
|
|
2853
|
+
// Important to keep the entire tree node row as a clickable area for that
|
|
2854
|
+
// node.
|
|
2855
|
+
this.listItemElement.style.setProperty('--indent', this.computeLeftIndent() + 'px');
|
|
2856
|
+
|
|
2853
2857
|
if (this.isClosingTag()) {
|
|
2854
2858
|
return;
|
|
2855
2859
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import * as Common from '../../core/common/common.js';
|
|
6
6
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
7
7
|
import type * as SDK from '../../core/sdk/sdk.js';
|
|
8
|
-
import * as HeapSnapshotModel from '../../models/
|
|
8
|
+
import * as HeapSnapshotModel from '../../models/heap_snapshot/heap_snapshot.js';
|
|
9
9
|
import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
|
|
10
10
|
import * as Components from '../../ui/legacy/components/utils/utils.js';
|
|
11
11
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
@@ -10,7 +10,7 @@ import * as i18n from '../../core/i18n/i18n.js';
|
|
|
10
10
|
import * as Platform from '../../core/platform/platform.js';
|
|
11
11
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
12
12
|
import type * as Protocol from '../../generated/protocol.js';
|
|
13
|
-
import * as HeapSnapshotModel from '../../models/
|
|
13
|
+
import * as HeapSnapshotModel from '../../models/heap_snapshot/heap_snapshot.js';
|
|
14
14
|
import {createIcon} from '../../ui/kit/kit.js';
|
|
15
15
|
import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
|
|
16
16
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
@@ -11,7 +11,7 @@ import * as Platform from '../../core/platform/platform.js';
|
|
|
11
11
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
12
12
|
import type * as Protocol from '../../generated/protocol.js';
|
|
13
13
|
import * as Bindings from '../../models/bindings/bindings.js';
|
|
14
|
-
import * as HeapSnapshotModel from '../../models/
|
|
14
|
+
import * as HeapSnapshotModel from '../../models/heap_snapshot/heap_snapshot.js';
|
|
15
15
|
import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
|
|
16
16
|
import * as ObjectUI from '../../ui/legacy/components/object_ui/object_ui.js';
|
|
17
17
|
import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
|
|
@@ -2179,7 +2179,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
|
2179
2179
|
PerfUI.LineLevelProfile.Performance.instance().initialize(cpuProfiles, primaryPageTarget);
|
|
2180
2180
|
|
|
2181
2181
|
// Initialize EntityMapper
|
|
2182
|
-
this.#entityMapper =
|
|
2182
|
+
this.#entityMapper = Trace.EntityMapper.EntityMapper.getOrCreate(parsedTrace);
|
|
2183
2183
|
|
|
2184
2184
|
// Set up SourceMapsResolver to ensure we resolve any function names in
|
|
2185
2185
|
// profile calls.
|
|
@@ -2189,9 +2189,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
|
2189
2189
|
SourceMapsResolver.SourceMappingsUpdated.eventName, this.#onSourceMapsNodeNamesResolvedBound);
|
|
2190
2190
|
void this.#sourceMapsResolver.install();
|
|
2191
2191
|
|
|
2192
|
-
// Initialize EntityMapper
|
|
2193
|
-
this.#entityMapper = new Trace.EntityMapper.EntityMapper(parsedTrace);
|
|
2194
|
-
|
|
2195
2192
|
this.statusDialog?.updateProgressBar(i18nString(UIStrings.processed), 80);
|
|
2196
2193
|
this.updateMiniMap();
|
|
2197
2194
|
this.statusDialog?.updateProgressBar(i18nString(UIStrings.processed), 90);
|
|
@@ -3060,7 +3057,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
|
3060
3057
|
|
|
3061
3058
|
return trace;
|
|
3062
3059
|
}
|
|
3063
|
-
|
|
3064
3060
|
}
|
|
3065
3061
|
|
|
3066
3062
|
export const enum State {
|
|
@@ -3143,7 +3139,7 @@ export class BottomUpProfileRevealer implements Common.Revealer.Revealer<Utils.H
|
|
|
3143
3139
|
TraceBounds.TraceBounds.BoundsManager.instance().setTimelineVisibleWindow(
|
|
3144
3140
|
revealable.bounds, {ignoreMiniMapBounds: true, shouldAnimate: true});
|
|
3145
3141
|
panel.select(null);
|
|
3146
|
-
panel.getFlameChart().selectDetailsViewTab(Tab.BottomUp, null);
|
|
3142
|
+
panel.getFlameChart().selectDetailsViewTab(Tab.BottomUp, revealable.node ?? null);
|
|
3147
3143
|
}
|
|
3148
3144
|
}
|
|
3149
3145
|
|
|
@@ -138,6 +138,6 @@ export class RevealableTimeRange {
|
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
export class RevealableBottomUpProfile {
|
|
141
|
-
constructor(public bounds: Trace.Types.Timing.TraceWindowMicro) {
|
|
141
|
+
constructor(public bounds: Trace.Types.Timing.TraceWindowMicro, public node?: Trace.Extras.TraceTree.Node) {
|
|
142
142
|
}
|
|
143
143
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Name: Dependencies sourced from the upstream `chromium` repository
|
|
2
2
|
URL: Internal
|
|
3
3
|
Version: N/A
|
|
4
|
-
Revision:
|
|
4
|
+
Revision: 5b539f63dc636f6b69d9c294a65bc5aff0bea3de
|
|
5
5
|
Update Mechanism: Manual (https://crbug.com/428069060)
|
|
6
6
|
License: BSD-3-Clause
|
|
7
7
|
License File: LICENSE
|