chrome-devtools-frontend 1.0.1559913 → 1.0.1561080
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/InspectorFrontendHostStub.ts +0 -3
- package/front_end/core/platform/ArrayUtilities.ts +13 -0
- package/front_end/core/root/Runtime.ts +0 -5
- package/front_end/core/sdk/DOMModel.ts +8 -0
- package/front_end/core/sdk/NetworkManager.ts +4 -0
- package/front_end/core/sdk/NetworkRequest.ts +9 -0
- package/front_end/core/sdk/OverlayModel.ts +20 -9
- package/front_end/entrypoints/main/MainImpl.ts +2 -1
- package/front_end/generated/InspectorBackendCommands.ts +4 -2
- package/front_end/generated/protocol-mapping.d.ts +7 -0
- package/front_end/generated/protocol-proxy-api.d.ts +5 -0
- package/front_end/generated/protocol.ts +24 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +23 -22
- package/front_end/models/badges/UserBadges.ts +48 -16
- package/front_end/models/greendev/Prototypes.ts +6 -1
- package/front_end/models/trace/extras/TraceTree.ts +1 -1
- package/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +8 -3
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +11 -142
- package/front_end/panels/ai_assistance/PatchWidget.ts +90 -72
- package/front_end/panels/ai_assistance/ai_assistance.ts +1 -0
- package/front_end/panels/ai_assistance/components/ChatInput.ts +701 -0
- package/front_end/panels/ai_assistance/components/ChatView.ts +71 -1268
- package/front_end/panels/ai_assistance/components/UserActionRow.ts +514 -31
- package/front_end/panels/ai_assistance/components/chatInput.css +387 -0
- package/front_end/panels/ai_assistance/components/chatView.css +38 -599
- package/front_end/panels/ai_assistance/components/userActionRow.css +230 -0
- package/front_end/panels/autofill/AutofillView.ts +2 -2
- package/front_end/panels/changes/ChangesView.ts +15 -1
- package/front_end/panels/changes/changesView.css +6 -0
- package/front_end/panels/common/BadgeNotification.ts +44 -58
- package/front_end/panels/common/CopyChangesToPrompt.ts +233 -0
- package/front_end/panels/common/common.ts +1 -0
- package/front_end/panels/elements/ElementsTreeElement.ts +183 -359
- package/front_end/panels/elements/ElementsTreeOutline.ts +0 -6
- package/front_end/panels/elements/ShortcutTreeElement.ts +57 -50
- package/front_end/panels/elements/StylePropertiesSection.ts +1 -3
- package/front_end/panels/elements/components/AdornerManager.ts +5 -149
- package/front_end/panels/issues/HiddenIssuesRow.ts +1 -2
- package/front_end/panels/issues/IssueKindView.ts +2 -4
- package/front_end/panels/issues/IssueView.ts +2 -4
- package/front_end/panels/network/NetworkDataGridNode.ts +65 -1
- package/front_end/panels/network/NetworkLogView.ts +2 -4
- package/front_end/panels/network/NetworkLogViewColumns.ts +9 -0
- package/front_end/panels/screencast/ScreencastApp.ts +1 -0
- package/front_end/panels/settings/SettingsScreen.ts +3 -2
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +14 -1
- package/front_end/panels/timeline/ThirdPartyTreeView.ts +1 -4
- package/front_end/panels/timeline/TimelineController.ts +185 -3
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +52 -25
- package/front_end/panels/timeline/TimelineFlameChartView.ts +1 -0
- package/front_end/panels/timeline/TimelinePanel.ts +17 -104
- package/front_end/panels/timeline/TimelineTreeView.ts +1 -0
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +2 -2
- package/front_end/panels/timeline/components/insights/Table.ts +3 -3
- package/front_end/panels/whats_new/ReleaseNoteText.ts +15 -9
- package/front_end/panels/whats_new/resources/WNDT.md +6 -6
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/codemirror.next/rebuild.sh +1 -1
- package/front_end/third_party/lit/rebuild.sh +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +2 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js +9 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPResponse.d.ts +3 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPResponse.js +9 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.d.ts +3 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.js +10 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +8 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +13 -7
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +2 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js +9 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPResponse.d.ts +3 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPResponse.js +9 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.d.ts +3 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.js +10 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +8 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/package.json +3 -3
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +2 -3
- package/front_end/third_party/puppeteer/package/src/bidi/HTTPRequest.ts +13 -0
- package/front_end/third_party/puppeteer/package/src/bidi/HTTPResponse.ts +10 -0
- package/front_end/third_party/puppeteer/package/src/bidi/core/Request.ts +15 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +9 -4
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/components/adorners/Adorner.ts +8 -68
- package/front_end/ui/legacy/TabbedPane.ts +1 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
- package/package.json +2 -1
|
@@ -372,7 +372,6 @@ export class DOMTreeWidget extends UI.Widget.Widget {
|
|
|
372
372
|
*/
|
|
373
373
|
updateNodeAdorners(node: SDK.DOMModel.DOMNode): void {
|
|
374
374
|
const element = this.#viewOutput.elementsTreeOutline?.findTreeElement(node);
|
|
375
|
-
void element?.updateStyleAdorners();
|
|
376
375
|
void element?.updateAdorners();
|
|
377
376
|
}
|
|
378
377
|
|
|
@@ -1747,10 +1746,6 @@ export class ElementsTreeOutline extends
|
|
|
1747
1746
|
treeElement.setCollapsible(false);
|
|
1748
1747
|
}
|
|
1749
1748
|
|
|
1750
|
-
if (node.hasAssignedSlot()) {
|
|
1751
|
-
treeElement.createSlotLink(node.assignedSlot);
|
|
1752
|
-
}
|
|
1753
|
-
|
|
1754
1749
|
treeElement.selectable = Boolean(this.selectEnabled);
|
|
1755
1750
|
return treeElement;
|
|
1756
1751
|
}
|
|
@@ -2023,7 +2018,6 @@ export class ElementsTreeOutline extends
|
|
|
2023
2018
|
const {node} = event.data;
|
|
2024
2019
|
const treeElement = this.treeElementByNode.get(node);
|
|
2025
2020
|
if (treeElement && isOpeningTag(treeElement.tagTypeContext)) {
|
|
2026
|
-
void treeElement.updateStyleAdorners();
|
|
2027
2021
|
void treeElement.updateAdorners();
|
|
2028
2022
|
}
|
|
2029
2023
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Copyright 2021 The Chromium Authors
|
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
3
3
|
// found in the LICENSE file.
|
|
4
|
-
/* eslint-disable @devtools/no-imperative-dom-api */
|
|
5
4
|
|
|
6
5
|
/*
|
|
7
6
|
* Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
|
|
@@ -36,15 +35,16 @@
|
|
|
36
35
|
import * as Common from '../../core/common/common.js';
|
|
37
36
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
38
37
|
import type * as SDK from '../../core/sdk/sdk.js';
|
|
39
|
-
import * as Adorners from '../../ui/components/adorners/adorners.js';
|
|
40
|
-
import {createIcon} from '../../ui/kit/kit.js';
|
|
41
38
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
39
|
+
import * as Lit from '../../ui/lit/lit.js';
|
|
40
|
+
import * as VisualElements from '../../ui/visual_logging/visual_logging.js';
|
|
42
41
|
|
|
43
42
|
import * as ElementsComponents from './components/components.js';
|
|
44
|
-
import {
|
|
45
|
-
import {ElementsTreeElement} from './ElementsTreeElement.js';
|
|
43
|
+
import {adornerRef, ElementsTreeElement} from './ElementsTreeElement.js';
|
|
46
44
|
import {ElementsTreeOutline} from './ElementsTreeOutline.js';
|
|
47
45
|
|
|
46
|
+
const {html, render} = Lit;
|
|
47
|
+
|
|
48
48
|
const UIStrings = {
|
|
49
49
|
/**
|
|
50
50
|
* @description Link text content in Elements Tree Outline of the Elements panel
|
|
@@ -54,56 +54,43 @@ const UIStrings = {
|
|
|
54
54
|
const str_ = i18n.i18n.registerUIStrings('panels/elements/ShortcutTreeElement.ts', UIStrings);
|
|
55
55
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
56
56
|
|
|
57
|
+
interface ViewInput {
|
|
58
|
+
title: string;
|
|
59
|
+
onRevealAdornerClick: (e: Event) => void;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const DEFAULT_VIEW = (input: ViewInput, _output: undefined, target: HTMLElement): void => {
|
|
63
|
+
// clang-format off
|
|
64
|
+
render(html`
|
|
65
|
+
<div class="selection fill"></div>
|
|
66
|
+
<span class="elements-tree-shortcut-title">\u21AA ${input.title}</span>
|
|
67
|
+
<devtools-adorner
|
|
68
|
+
.name=${ElementsComponents.AdornerManager.RegisteredAdorners.REVEAL}
|
|
69
|
+
class="adorner-reveal"
|
|
70
|
+
jslog=${VisualElements.adorner('reveal')}
|
|
71
|
+
aria-label=${i18nString(UIStrings.reveal)}
|
|
72
|
+
@click=${input.onRevealAdornerClick}
|
|
73
|
+
@mousedown=${(e: Event) => e.consume()}
|
|
74
|
+
${adornerRef()}>
|
|
75
|
+
<span class="adorner-with-icon">
|
|
76
|
+
<devtools-icon name="select-element"></devtools-icon>
|
|
77
|
+
<span>${ElementsComponents.AdornerManager.RegisteredAdorners.REVEAL}</span>
|
|
78
|
+
</span>
|
|
79
|
+
</devtools-adorner>
|
|
80
|
+
`, target);
|
|
81
|
+
// clang-format on
|
|
82
|
+
};
|
|
83
|
+
|
|
57
84
|
export class ShortcutTreeElement extends UI.TreeOutline.TreeElement {
|
|
58
85
|
private readonly nodeShortcut: SDK.DOMModel.DOMNodeShortcut;
|
|
59
86
|
#hovered?: boolean;
|
|
60
|
-
|
|
87
|
+
#view: typeof DEFAULT_VIEW;
|
|
88
|
+
|
|
89
|
+
constructor(nodeShortcut: SDK.DOMModel.DOMNodeShortcut, view = DEFAULT_VIEW) {
|
|
61
90
|
super('');
|
|
62
|
-
this.listItemElement.createChild('div', 'selection fill');
|
|
63
|
-
const title = this.listItemElement.createChild('span', 'elements-tree-shortcut-title');
|
|
64
|
-
let text = nodeShortcut.nodeName.toLowerCase();
|
|
65
|
-
if (nodeShortcut.nodeType === Node.ELEMENT_NODE) {
|
|
66
|
-
text = '<' + text + '>';
|
|
67
|
-
}
|
|
68
|
-
title.textContent = '\u21AA ' + text;
|
|
69
91
|
this.nodeShortcut = nodeShortcut;
|
|
70
|
-
this
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
addRevealAdorner(): void {
|
|
74
|
-
const adorner = new Adorners.Adorner.Adorner();
|
|
75
|
-
adorner.classList.add('adorner-reveal');
|
|
76
|
-
const config = ElementsComponents.AdornerManager.getRegisteredAdorner(
|
|
77
|
-
ElementsComponents.AdornerManager.RegisteredAdorners.REVEAL);
|
|
78
|
-
const name = config.name;
|
|
79
|
-
const adornerContent = document.createElement('span');
|
|
80
|
-
const linkIcon = createIcon('select-element');
|
|
81
|
-
const slotText = document.createElement('span');
|
|
82
|
-
slotText.textContent = name;
|
|
83
|
-
adornerContent.append(linkIcon);
|
|
84
|
-
adornerContent.append(slotText);
|
|
85
|
-
adornerContent.classList.add('adorner-with-icon');
|
|
86
|
-
adorner.data = {
|
|
87
|
-
name,
|
|
88
|
-
content: adornerContent,
|
|
89
|
-
jslogContext: 'reveal',
|
|
90
|
-
};
|
|
91
|
-
this.listItemElement.appendChild(adorner);
|
|
92
|
-
const onClick = ((() => {
|
|
93
|
-
this.nodeShortcut.deferredNode.resolve(
|
|
94
|
-
node => {
|
|
95
|
-
void Common.Revealer.reveal(node);
|
|
96
|
-
},
|
|
97
|
-
);
|
|
98
|
-
}) as EventListener);
|
|
99
|
-
adorner.addInteraction(onClick, {
|
|
100
|
-
isToggle: false,
|
|
101
|
-
shouldPropagateOnKeydown: false,
|
|
102
|
-
ariaLabelDefault: i18nString(UIStrings.reveal),
|
|
103
|
-
ariaLabelActive: i18nString(UIStrings.reveal),
|
|
104
|
-
});
|
|
105
|
-
adorner.addEventListener('mousedown', e => e.consume(), false);
|
|
106
|
-
ElementsPanel.instance().registerAdorner(adorner);
|
|
92
|
+
this.#view = view;
|
|
93
|
+
this.performUpdate();
|
|
107
94
|
}
|
|
108
95
|
|
|
109
96
|
get hovered(): boolean {
|
|
@@ -154,4 +141,24 @@ export class ShortcutTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
154
141
|
}
|
|
155
142
|
return true;
|
|
156
143
|
}
|
|
144
|
+
|
|
145
|
+
private onRevealAdornerClick(event: Event): void {
|
|
146
|
+
event.stopPropagation();
|
|
147
|
+
this.nodeShortcut.deferredNode.resolve(node => {
|
|
148
|
+
void Common.Revealer.reveal(node);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
private performUpdate(): void {
|
|
153
|
+
let text = this.nodeShortcut.nodeName.toLowerCase();
|
|
154
|
+
if (this.nodeShortcut.nodeType === Node.ELEMENT_NODE) {
|
|
155
|
+
text = '<' + text + '>';
|
|
156
|
+
}
|
|
157
|
+
this.#view(
|
|
158
|
+
{
|
|
159
|
+
title: text,
|
|
160
|
+
onRevealAdornerClick: this.onRevealAdornerClick.bind(this),
|
|
161
|
+
},
|
|
162
|
+
undefined, this.listItemElement);
|
|
163
|
+
}
|
|
157
164
|
}
|
|
@@ -810,9 +810,7 @@ export class StylePropertiesSection {
|
|
|
810
810
|
ancestorRuleElement = this.createNestingElement(rule.nestingSelectors?.[nestingIndex++]);
|
|
811
811
|
break;
|
|
812
812
|
case Protocol.CSS.CSSRuleType.StartingStyleRule:
|
|
813
|
-
|
|
814
|
-
ancestorRuleElement = this.createStartingStyleElement();
|
|
815
|
-
}
|
|
813
|
+
ancestorRuleElement = this.createStartingStyleElement();
|
|
816
814
|
break;
|
|
817
815
|
}
|
|
818
816
|
if (ancestorRuleElement) {
|
|
@@ -2,24 +2,12 @@
|
|
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
SECURITY = 'Security',
|
|
7
|
-
LAYOUT = 'Layout',
|
|
8
|
-
DEFAULT = 'Default',
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface AdornerSetting {
|
|
5
|
+
interface AdornerSetting {
|
|
12
6
|
adorner: string;
|
|
13
7
|
isEnabled: boolean;
|
|
14
8
|
}
|
|
15
9
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export interface RegisteredAdorner {
|
|
19
|
-
readonly name: string;
|
|
20
|
-
readonly category: AdornerCategories;
|
|
21
|
-
readonly enabledByDefault: boolean;
|
|
22
|
-
}
|
|
10
|
+
type AdornerSettingsMap = Map<string, boolean>;
|
|
23
11
|
|
|
24
12
|
export enum RegisteredAdorners {
|
|
25
13
|
AD = 'ad',
|
|
@@ -39,125 +27,6 @@ export enum RegisteredAdorners {
|
|
|
39
27
|
TOP_LAYER = 'top-layer',
|
|
40
28
|
}
|
|
41
29
|
|
|
42
|
-
/**
|
|
43
|
-
* This enum-like const object serves as the authoritative registry for all the
|
|
44
|
-
* adorners available.
|
|
45
|
-
**/
|
|
46
|
-
export function getRegisteredAdorner(which: RegisteredAdorners): RegisteredAdorner {
|
|
47
|
-
switch (which) {
|
|
48
|
-
case RegisteredAdorners.GRID:
|
|
49
|
-
return {
|
|
50
|
-
name: 'grid',
|
|
51
|
-
category: AdornerCategories.LAYOUT,
|
|
52
|
-
enabledByDefault: true,
|
|
53
|
-
};
|
|
54
|
-
case RegisteredAdorners.SUBGRID:
|
|
55
|
-
return {
|
|
56
|
-
name: 'subgrid',
|
|
57
|
-
category: AdornerCategories.LAYOUT,
|
|
58
|
-
enabledByDefault: true,
|
|
59
|
-
};
|
|
60
|
-
case RegisteredAdorners.GRID_LANES:
|
|
61
|
-
return {
|
|
62
|
-
name: 'grid-lanes',
|
|
63
|
-
category: AdornerCategories.LAYOUT,
|
|
64
|
-
enabledByDefault: true,
|
|
65
|
-
};
|
|
66
|
-
case RegisteredAdorners.FLEX:
|
|
67
|
-
return {
|
|
68
|
-
name: 'flex',
|
|
69
|
-
category: AdornerCategories.LAYOUT,
|
|
70
|
-
enabledByDefault: true,
|
|
71
|
-
};
|
|
72
|
-
case RegisteredAdorners.AD:
|
|
73
|
-
return {
|
|
74
|
-
name: 'ad',
|
|
75
|
-
category: AdornerCategories.SECURITY,
|
|
76
|
-
enabledByDefault: true,
|
|
77
|
-
};
|
|
78
|
-
case RegisteredAdorners.SCROLL_SNAP:
|
|
79
|
-
return {
|
|
80
|
-
name: 'scroll-snap',
|
|
81
|
-
category: AdornerCategories.LAYOUT,
|
|
82
|
-
enabledByDefault: true,
|
|
83
|
-
};
|
|
84
|
-
case RegisteredAdorners.STARTING_STYLE:
|
|
85
|
-
return {
|
|
86
|
-
name: 'starting-style',
|
|
87
|
-
category: AdornerCategories.LAYOUT,
|
|
88
|
-
enabledByDefault: true,
|
|
89
|
-
};
|
|
90
|
-
case RegisteredAdorners.CONTAINER:
|
|
91
|
-
return {
|
|
92
|
-
name: 'container',
|
|
93
|
-
category: AdornerCategories.LAYOUT,
|
|
94
|
-
enabledByDefault: true,
|
|
95
|
-
};
|
|
96
|
-
case RegisteredAdorners.SLOT:
|
|
97
|
-
return {
|
|
98
|
-
name: 'slot',
|
|
99
|
-
category: AdornerCategories.LAYOUT,
|
|
100
|
-
enabledByDefault: true,
|
|
101
|
-
};
|
|
102
|
-
case RegisteredAdorners.TOP_LAYER:
|
|
103
|
-
return {
|
|
104
|
-
name: 'top-layer',
|
|
105
|
-
category: AdornerCategories.LAYOUT,
|
|
106
|
-
enabledByDefault: true,
|
|
107
|
-
};
|
|
108
|
-
case RegisteredAdorners.REVEAL:
|
|
109
|
-
return {
|
|
110
|
-
name: 'reveal',
|
|
111
|
-
category: AdornerCategories.DEFAULT,
|
|
112
|
-
enabledByDefault: true,
|
|
113
|
-
};
|
|
114
|
-
case RegisteredAdorners.MEDIA:
|
|
115
|
-
return {
|
|
116
|
-
name: 'media',
|
|
117
|
-
category: AdornerCategories.DEFAULT,
|
|
118
|
-
enabledByDefault: false,
|
|
119
|
-
};
|
|
120
|
-
case RegisteredAdorners.SCROLL:
|
|
121
|
-
return {
|
|
122
|
-
name: 'scroll',
|
|
123
|
-
category: AdornerCategories.LAYOUT,
|
|
124
|
-
enabledByDefault: true,
|
|
125
|
-
};
|
|
126
|
-
case RegisteredAdorners.POPOVER: {
|
|
127
|
-
return {
|
|
128
|
-
name: 'popover',
|
|
129
|
-
category: AdornerCategories.LAYOUT,
|
|
130
|
-
enabledByDefault: true,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
case RegisteredAdorners.VIEW_SOURCE: {
|
|
134
|
-
return {
|
|
135
|
-
name: 'view-source',
|
|
136
|
-
category: AdornerCategories.DEFAULT,
|
|
137
|
-
enabledByDefault: true,
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
let adornerNameToCategoryMap: Map<string, AdornerCategories>|undefined = undefined;
|
|
144
|
-
|
|
145
|
-
function getCategoryFromAdornerName(name: string): AdornerCategories {
|
|
146
|
-
if (!adornerNameToCategoryMap) {
|
|
147
|
-
adornerNameToCategoryMap = new Map();
|
|
148
|
-
for (const {name, category} of Object.values(RegisteredAdorners).map(getRegisteredAdorner)) {
|
|
149
|
-
adornerNameToCategoryMap.set(name, category);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return adornerNameToCategoryMap.get(name) || AdornerCategories.DEFAULT;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export const DefaultAdornerSettings: AdornerSetting[] =
|
|
156
|
-
Object.values(RegisteredAdorners).map(getRegisteredAdorner).map(({name, enabledByDefault}) => ({
|
|
157
|
-
adorner: name,
|
|
158
|
-
isEnabled: enabledByDefault,
|
|
159
|
-
}));
|
|
160
|
-
|
|
161
30
|
interface SettingStore<Setting> {
|
|
162
31
|
get(): Setting;
|
|
163
32
|
set(setting: Setting): void;
|
|
@@ -205,9 +74,11 @@ export class AdornerManager {
|
|
|
205
74
|
|
|
206
75
|
// Prune outdated adorners and add new ones to the persistence.
|
|
207
76
|
const outdatedAdorners = new Set(this.#adornerSettings.keys());
|
|
208
|
-
for (const
|
|
77
|
+
for (const adorner of Object.values(RegisteredAdorners)) {
|
|
209
78
|
outdatedAdorners.delete(adorner);
|
|
210
79
|
if (!this.#adornerSettings.has(adorner)) {
|
|
80
|
+
// Only the MEDIA adorner is disabled by default.
|
|
81
|
+
const isEnabled = adorner !== RegisteredAdorners.MEDIA;
|
|
211
82
|
this.#adornerSettings.set(adorner, isEnabled);
|
|
212
83
|
}
|
|
213
84
|
}
|
|
@@ -218,18 +89,3 @@ export class AdornerManager {
|
|
|
218
89
|
this.#persistCurrentSettings();
|
|
219
90
|
}
|
|
220
91
|
}
|
|
221
|
-
|
|
222
|
-
const OrderedAdornerCategories = [
|
|
223
|
-
AdornerCategories.SECURITY,
|
|
224
|
-
AdornerCategories.LAYOUT,
|
|
225
|
-
AdornerCategories.DEFAULT,
|
|
226
|
-
];
|
|
227
|
-
|
|
228
|
-
/** Use idx + 1 for the order to avoid JavaScript's 0 == false issue **/
|
|
229
|
-
export const AdornerCategoryOrder = new Map(OrderedAdornerCategories.map((category, idx) => [category, idx + 1]));
|
|
230
|
-
|
|
231
|
-
export function compareAdornerNamesByCategory(nameA: string, nameB: string): number {
|
|
232
|
-
const orderA = AdornerCategoryOrder.get(getCategoryFromAdornerName(nameA)) || Number.POSITIVE_INFINITY;
|
|
233
|
-
const orderB = AdornerCategoryOrder.get(getCategoryFromAdornerName(nameB)) || Number.POSITIVE_INFINITY;
|
|
234
|
-
return orderA - orderB;
|
|
235
|
-
}
|
|
@@ -49,8 +49,7 @@ const DEFAULT_VIEW: View = (input: ViewInput, _output: ViewOutput, target: HTMLE
|
|
|
49
49
|
// clang-format off
|
|
50
50
|
render(html`
|
|
51
51
|
<div class="header">
|
|
52
|
-
<devtools-adorner class="aggregated-issues-count"
|
|
53
|
-
.data=${{name: 'countWrapper'}}>
|
|
52
|
+
<devtools-adorner class="aggregated-issues-count" .name=${'countWrapper'}>
|
|
54
53
|
<span>${input.count}</span>
|
|
55
54
|
</devtools-adorner>
|
|
56
55
|
<div class="title">${i18nString(UIStrings.hiddenIssues)}</div>
|
|
@@ -98,10 +98,8 @@ export class IssueKindView extends UI.TreeOutline.TreeElement {
|
|
|
98
98
|
issueKindIcon.classList.add('leading-issue-icon', 'extra-large');
|
|
99
99
|
|
|
100
100
|
const countAdorner = new Adorners.Adorner.Adorner();
|
|
101
|
-
countAdorner.
|
|
102
|
-
|
|
103
|
-
content: this.#issueCount,
|
|
104
|
-
};
|
|
101
|
+
countAdorner.name = 'countWrapper';
|
|
102
|
+
countAdorner.append(this.#issueCount);
|
|
105
103
|
countAdorner.classList.add('aggregated-issues-count');
|
|
106
104
|
this.#issueCount.textContent = '0';
|
|
107
105
|
|
|
@@ -342,10 +342,8 @@ export class IssueView extends UI.TreeOutline.TreeElement {
|
|
|
342
342
|
this.#issueKindIcon.classList.add('leading-issue-icon', 'extra-large');
|
|
343
343
|
this.#aggregatedIssuesCount = document.createElement('span');
|
|
344
344
|
const countAdorner = new Adorners.Adorner.Adorner();
|
|
345
|
-
countAdorner.
|
|
346
|
-
|
|
347
|
-
content: this.#aggregatedIssuesCount,
|
|
348
|
-
};
|
|
345
|
+
countAdorner.name = 'countWrapper';
|
|
346
|
+
countAdorner.append(this.#aggregatedIssuesCount);
|
|
349
347
|
countAdorner.classList.add('aggregated-issues-count');
|
|
350
348
|
header.appendChild(this.#issueKindIcon);
|
|
351
349
|
header.appendChild(countAdorner);
|
|
@@ -323,8 +323,26 @@ const UIStrings = {
|
|
|
323
323
|
*/
|
|
324
324
|
initialPriorityToolTip: '{PH1}, Initial priority: {PH2}',
|
|
325
325
|
/**
|
|
326
|
-
* @description
|
|
326
|
+
* @description Text in Network Data Grid Node of the Network panel. Noun. Refers to a render blocking resource.
|
|
327
327
|
*/
|
|
328
|
+
blocking: 'Blocking',
|
|
329
|
+
/**
|
|
330
|
+
* @description Text in Network Data Grid Node of the Network panel. Noun. Refers to a resource that blocks the parser from starting to parse the document.
|
|
331
|
+
*/
|
|
332
|
+
inBodyParserBlocking: 'In-body parser blocking',
|
|
333
|
+
/**
|
|
334
|
+
* @description Text in Network Data Grid Node of the Network panel. Noun. Refers to a non-blocking resource.
|
|
335
|
+
*/
|
|
336
|
+
nonBlocking: 'Non-blocking',
|
|
337
|
+
/**
|
|
338
|
+
* @description Text in Network Data Grid Node of the Network panel. Noun. Refers to a non-blocking resource.
|
|
339
|
+
*/
|
|
340
|
+
nonBlockingDynamic: 'Non-blocking dynamic',
|
|
341
|
+
/**
|
|
342
|
+
* @description Text in Network Data Grid Node of the Network panel. Noun. Refers to a potentially blocking resource.
|
|
343
|
+
*/
|
|
344
|
+
potentiallyBlocking: 'Potentially blocking',
|
|
345
|
+
|
|
328
346
|
} as const;
|
|
329
347
|
const str_ = i18n.i18n.registerUIStrings('panels/network/NetworkDataGridNode.ts', UIStrings);
|
|
330
348
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
@@ -775,6 +793,25 @@ export class NetworkRequestNode extends NetworkNode {
|
|
|
775
793
|
return aRequest.identityCompare(bRequest);
|
|
776
794
|
}
|
|
777
795
|
|
|
796
|
+
static RenderBlockingComparator(a: NetworkNode, b: NetworkNode): number {
|
|
797
|
+
const aRequest = a.requestOrFirstKnownChildRequest();
|
|
798
|
+
const bRequest = b.requestOrFirstKnownChildRequest();
|
|
799
|
+
if (!aRequest || !bRequest) {
|
|
800
|
+
return !aRequest ? -1 : 1;
|
|
801
|
+
}
|
|
802
|
+
const order = [
|
|
803
|
+
Protocol.Network.RenderBlockingBehavior.InBodyParserBlocking,
|
|
804
|
+
Protocol.Network.RenderBlockingBehavior.Blocking,
|
|
805
|
+
Protocol.Network.RenderBlockingBehavior.PotentiallyBlocking,
|
|
806
|
+
Protocol.Network.RenderBlockingBehavior.NonBlocking,
|
|
807
|
+
Protocol.Network.RenderBlockingBehavior.NonBlockingDynamic,
|
|
808
|
+
undefined,
|
|
809
|
+
];
|
|
810
|
+
const aOrder = order.indexOf(aRequest.renderBlockingBehavior());
|
|
811
|
+
const bOrder = order.indexOf(bRequest.renderBlockingBehavior());
|
|
812
|
+
return aOrder - bOrder;
|
|
813
|
+
}
|
|
814
|
+
|
|
778
815
|
static RequestPropertyComparator(propertyName: string, a: NetworkNode, b: NetworkNode): number {
|
|
779
816
|
// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)
|
|
780
817
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1051,6 +1088,10 @@ export class NetworkRequestNode extends NetworkNode {
|
|
|
1051
1088
|
this.setTextAndTitle(cell, this.requestInternal.isAdRelated().toLocaleString());
|
|
1052
1089
|
break;
|
|
1053
1090
|
}
|
|
1091
|
+
case 'render-blocking': {
|
|
1092
|
+
this.renderRenderBlockingCell(cell);
|
|
1093
|
+
break;
|
|
1094
|
+
}
|
|
1054
1095
|
case 'cookies': {
|
|
1055
1096
|
this.setTextAndTitle(cell, this.arrayLength(this.requestInternal.includedRequestCookies()));
|
|
1056
1097
|
break;
|
|
@@ -1360,6 +1401,29 @@ export class NetworkRequestNode extends NetworkNode {
|
|
|
1360
1401
|
}
|
|
1361
1402
|
}
|
|
1362
1403
|
|
|
1404
|
+
private renderRenderBlockingCell(cell: HTMLElement): void {
|
|
1405
|
+
switch (this.requestInternal.renderBlockingBehavior()) {
|
|
1406
|
+
case Protocol.Network.RenderBlockingBehavior.Blocking:
|
|
1407
|
+
UI.UIUtils.createTextChild(cell, i18nString(UIStrings.blocking));
|
|
1408
|
+
break;
|
|
1409
|
+
case Protocol.Network.RenderBlockingBehavior.InBodyParserBlocking:
|
|
1410
|
+
UI.UIUtils.createTextChild(cell, i18nString(UIStrings.inBodyParserBlocking));
|
|
1411
|
+
break;
|
|
1412
|
+
case Protocol.Network.RenderBlockingBehavior.NonBlocking:
|
|
1413
|
+
UI.UIUtils.createTextChild(cell, i18nString(UIStrings.nonBlocking));
|
|
1414
|
+
break;
|
|
1415
|
+
case Protocol.Network.RenderBlockingBehavior.NonBlockingDynamic:
|
|
1416
|
+
UI.UIUtils.createTextChild(cell, i18nString(UIStrings.nonBlockingDynamic));
|
|
1417
|
+
break;
|
|
1418
|
+
case Protocol.Network.RenderBlockingBehavior.PotentiallyBlocking:
|
|
1419
|
+
UI.UIUtils.createTextChild(cell, i18nString(UIStrings.potentiallyBlocking));
|
|
1420
|
+
break;
|
|
1421
|
+
default:
|
|
1422
|
+
UI.UIUtils.createTextChild(cell, '');
|
|
1423
|
+
break;
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1363
1427
|
#getLinkifierMetric(): Host.UserMetrics.Action|undefined {
|
|
1364
1428
|
if (this.requestInternal.resourceType().isStyleSheet()) {
|
|
1365
1429
|
return Host.UserMetrics.Action.StyleSheetInitiatorLinkClicked;
|
|
@@ -2754,11 +2754,9 @@ export class MoreFiltersDropDownUI extends Common.ObjectWrapper.ObjectWrapper<UI
|
|
|
2754
2754
|
this.filterElement.setAttribute('jslog', `${VisualLogging.dropDown('more-filters').track({click: true})}`);
|
|
2755
2755
|
|
|
2756
2756
|
this.activeFiltersCountAdorner = new Adorners.Adorner.Adorner();
|
|
2757
|
+
this.activeFiltersCountAdorner.name = 'countWrapper';
|
|
2757
2758
|
this.activeFiltersCount = document.createElement('span');
|
|
2758
|
-
this.activeFiltersCountAdorner.
|
|
2759
|
-
name: 'countWrapper',
|
|
2760
|
-
content: this.activeFiltersCount,
|
|
2761
|
-
};
|
|
2759
|
+
this.activeFiltersCountAdorner.append(this.activeFiltersCount);
|
|
2762
2760
|
this.activeFiltersCountAdorner.classList.add('active-filters-count');
|
|
2763
2761
|
this.updateActiveFiltersCount();
|
|
2764
2762
|
|
|
@@ -152,6 +152,10 @@ const UIStrings = {
|
|
|
152
152
|
* @description Text to show whether a request is ad-related
|
|
153
153
|
*/
|
|
154
154
|
isAdRelated: 'Is Ad-Related',
|
|
155
|
+
/**
|
|
156
|
+
* @description Text in Network Log View Columns of the Network panel
|
|
157
|
+
*/
|
|
158
|
+
renderBlocking: 'Render Blocking',
|
|
155
159
|
} as const;
|
|
156
160
|
const str_ = i18n.i18n.registerUIStrings('panels/network/NetworkLogViewColumns.ts', UIStrings);
|
|
157
161
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
@@ -1192,6 +1196,11 @@ const DEFAULT_COLUMNS = [
|
|
|
1192
1196
|
title: i18nLazyString(UIStrings.isAdRelated),
|
|
1193
1197
|
sortingFunction: NetworkRequestNode.IsAdRelatedComparator,
|
|
1194
1198
|
},
|
|
1199
|
+
{
|
|
1200
|
+
id: 'render-blocking',
|
|
1201
|
+
title: i18nLazyString(UIStrings.renderBlocking),
|
|
1202
|
+
sortingFunction: NetworkRequestNode.RenderBlockingComparator,
|
|
1203
|
+
},
|
|
1195
1204
|
// This header is a placeholder to let datagrid know that it can be sorted by this column, but never shown.
|
|
1196
1205
|
{
|
|
1197
1206
|
id: 'waterfall',
|
|
@@ -46,6 +46,7 @@ export class ScreencastApp implements Common.App.App,
|
|
|
46
46
|
|
|
47
47
|
presentUI(document: Document): void {
|
|
48
48
|
this.rootView = new UI.RootView.RootView();
|
|
49
|
+
this.rootView.registerRequiredCSS(UI.inspectorCommonStyles);
|
|
49
50
|
|
|
50
51
|
this.rootSplitWidget =
|
|
51
52
|
new UI.SplitWidget.SplitWidget(false, true, 'inspector-view.screencast-split-view-state', 300, 300);
|
|
@@ -646,7 +646,7 @@ const GREENDEV_VIEW: View = (input, _output, target) => {
|
|
|
646
646
|
<span>${i18nString(UIStrings.greenDevUnstable)}</span>
|
|
647
647
|
</div>
|
|
648
648
|
<div class="settings-experiments-block">
|
|
649
|
-
${renderPrototypeCheckboxes(input.settings, ['aiAnnotations', 'inDevToolsFloaty'])}
|
|
649
|
+
${renderPrototypeCheckboxes(input.settings, ['aiAnnotations', 'inDevToolsFloaty', 'copyToGemini'])}
|
|
650
650
|
</div>
|
|
651
651
|
</devtools-card>
|
|
652
652
|
|
|
@@ -668,7 +668,8 @@ const GREENDEV_PROTOTYPE_NAMES: Record<keyof GreenDev.GreenDevSettings, string>
|
|
|
668
668
|
inDevToolsFloaty: 'In DevTools context picker',
|
|
669
669
|
aiAnnotations: 'AI auto-annotations',
|
|
670
670
|
inlineWidgets: 'Inline widgets in AI Assistance',
|
|
671
|
-
artifactViewer: 'Widgets in the Artifact viewer'
|
|
671
|
+
artifactViewer: 'Widgets in the Artifact viewer',
|
|
672
|
+
copyToGemini: 'Copy changes to AI Prompt'
|
|
672
673
|
};
|
|
673
674
|
|
|
674
675
|
function renderWidgetOptions(settings: GreenDev.GreenDevSettings): TemplateResult {
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
/* eslint-disable @devtools/no-imperative-dom-api */
|
|
5
5
|
|
|
6
6
|
import * as Common from '../../core/common/common.js';
|
|
7
|
+
import * as Host from '../../core/host/host.js';
|
|
7
8
|
import * as Platform from '../../core/platform/platform.js';
|
|
8
9
|
import * as Root from '../../core/root/root.js';
|
|
9
10
|
import * as Trace from '../../models/trace/trace.js';
|
|
@@ -409,6 +410,7 @@ export class CompatibilityTracksAppender {
|
|
|
409
410
|
if (trackStartLevel === null || trackEndLevel === null) {
|
|
410
411
|
throw new Error(`Could not find events for track: ${trackAppender}`);
|
|
411
412
|
}
|
|
413
|
+
|
|
412
414
|
const entryLevels = this.#flameChartData.entryLevels;
|
|
413
415
|
const events = [];
|
|
414
416
|
for (let i = 0; i < entryLevels.length; i++) {
|
|
@@ -416,7 +418,13 @@ export class CompatibilityTracksAppender {
|
|
|
416
418
|
events.push(this.#entryData[i]);
|
|
417
419
|
}
|
|
418
420
|
}
|
|
419
|
-
|
|
421
|
+
|
|
422
|
+
// TODO(crbug.com/457866795): callers expect this to be sorted, but #entryData
|
|
423
|
+
// currently isn't guaranteed to be sorted because of appendEventsAtLevel and
|
|
424
|
+
// appendEventAtLevel. Also, see
|
|
425
|
+
// TimelineFlameChartDataProvider#insertEventToEntryData. This method is cached
|
|
426
|
+
// in eventsForTreeView, so it doesn't impact performance much.
|
|
427
|
+
events.sort((a, b) => a.ts - b.ts);
|
|
420
428
|
|
|
421
429
|
this.#eventsForTrack.set(trackAppender, events);
|
|
422
430
|
return events;
|
|
@@ -541,6 +549,11 @@ export class CompatibilityTracksAppender {
|
|
|
541
549
|
appendEventsAtLevel<T extends Trace.Types.Events.Event>(
|
|
542
550
|
events: readonly T[], trackStartLevel: number, appender: TrackAppender,
|
|
543
551
|
eventAppendedCallback?: (event: T, index: number) => void): number {
|
|
552
|
+
// Usage of getEventLevel below requires `events` to be sorted.
|
|
553
|
+
if (Host.InspectorFrontendHost.isUnderTest()) {
|
|
554
|
+
Platform.ArrayUtilities.assertArrayIsSorted(events, (a, b) => a.ts - b.ts);
|
|
555
|
+
}
|
|
556
|
+
|
|
544
557
|
const lastTimestampByLevel: LastTimestampByLevel = [];
|
|
545
558
|
for (let i = 0; i < events.length; ++i) {
|
|
546
559
|
const event = events[i];
|
|
@@ -80,9 +80,6 @@ export class ThirdPartyTreeViewWidget extends TimelineTreeView.TimelineTreeView
|
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
// const events = this.#thirdPartySummaries.entityByEvent.keys();
|
|
84
|
-
const relatedEvents = this.selectedEvents().sort(Trace.Helpers.Trace.eventTimeComparator);
|
|
85
|
-
|
|
86
83
|
// The filters for this view are slightly different; we want to use the set
|
|
87
84
|
// of visible event types, but also include network events, which by
|
|
88
85
|
// default are not in the set of visible entries (as they are not shown on
|
|
@@ -90,7 +87,7 @@ export class ThirdPartyTreeViewWidget extends TimelineTreeView.TimelineTreeView
|
|
|
90
87
|
const filter = new Trace.Extras.TraceFilter.VisibleEventsFilter(
|
|
91
88
|
Trace.Styles.visibleTypes().concat([Trace.Types.Events.Name.SYNTHETIC_NETWORK_REQUEST]));
|
|
92
89
|
|
|
93
|
-
const node = new Trace.Extras.TraceTree.BottomUpRootNode(
|
|
90
|
+
const node = new Trace.Extras.TraceTree.BottomUpRootNode(this.selectedEvents(), {
|
|
94
91
|
textFilter: this.textFilter(),
|
|
95
92
|
filters: [filter],
|
|
96
93
|
startTime: this.startTime,
|