chrome-devtools-frontend 1.0.1566234 → 1.0.1567721
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/contributing/performance.md +24 -0
- package/front_end/core/common/Base64.ts +21 -2
- package/front_end/core/common/ResourceType.ts +7 -0
- package/front_end/core/host/InspectorFrontendHostStub.ts +3 -0
- package/front_end/core/host/UserMetrics.ts +20 -0
- package/front_end/core/sdk/NetworkManager.ts +3 -3
- package/front_end/entrypoints/main/MainImpl.ts +1 -7
- package/front_end/generated/Deprecation.ts +0 -8
- package/front_end/generated/InspectorBackendCommands.ts +1 -1
- package/front_end/generated/SupportedCSSProperties.js +39 -49
- package/front_end/generated/protocol.ts +4 -0
- package/front_end/models/ai_assistance/agents/AiAgent.ts +2 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +98 -105
- package/front_end/models/emulation/DeviceModeModel.ts +1 -1
- package/front_end/models/formatter/FormatterWorkerPool.ts +8 -6
- package/front_end/models/javascript_metadata/NativeFunctions.js +4 -9
- package/front_end/models/persistence/PersistenceImpl.ts +8 -0
- package/front_end/models/text_utils/TextUtils.snapshot.txt +83 -0
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +0 -1
- package/front_end/panels/ai_assistance/components/ArtifactsViewer.ts +28 -4
- package/front_end/panels/ai_assistance/components/ChatView.ts +52 -169
- package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +27 -8
- package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +19 -4
- package/front_end/panels/application/ApplicationPanelSidebar.ts +1 -0
- package/front_end/panels/application/DeviceBoundSessionsModel.ts +42 -0
- package/front_end/panels/application/DeviceBoundSessionsTreeElement.ts +60 -11
- package/front_end/panels/application/DeviceBoundSessionsView.ts +947 -103
- package/front_end/panels/application/ResourcesPanel.ts +7 -0
- package/front_end/panels/application/deviceBoundSessionsView.css +10 -1
- package/front_end/panels/common/AiCodeGenerationUpgradeDialog.ts +115 -0
- package/front_end/panels/common/aiCodeGenerationUpgradeDialog.css +79 -0
- package/front_end/panels/common/common.ts +1 -0
- package/front_end/panels/console/ConsoleInsightTeaser.ts +17 -3
- package/front_end/panels/issues/AffectedSourcesView.ts +0 -1
- package/front_end/panels/issues/IssuesPane.ts +0 -4
- package/front_end/panels/network/RequestTimingView.ts +5 -20
- package/front_end/panels/network/networkTimingTable.css +5 -5
- package/front_end/panels/recorder/components/StepEditor.ts +15 -8
- package/front_end/panels/settings/AISettingsTab.ts +31 -2
- package/front_end/panels/sources/InplaceFormatterEditorAction.ts +8 -6
- package/front_end/panels/sources/UISourceCodeFrame.ts +9 -3
- package/front_end/panels/timeline/TimelinePanel.ts +12 -4
- package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +1 -1
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +9 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +8 -0
- 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 +8 -0
- 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/Browser.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js +3 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.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 +1 -0
- 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/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +33 -31
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js +1 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts +7 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js +11 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts +2 -2
- 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 +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +2 -2
- 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 +13 -4
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +62 -42
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +9 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +8 -0
- 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 +8 -0
- 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/Browser.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js +3 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.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 +1 -0
- 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/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +33 -31
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js +1 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts +7 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js +11 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +2 -2
- 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 +13 -4
- package/front_end/third_party/puppeteer/package/package.json +3 -3
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +11 -3
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +9 -0
- package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/bidi/BrowserContext.ts +3 -1
- package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +3 -5
- package/front_end/third_party/puppeteer/package/src/bidi/core/UserContext.ts +2 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +43 -45
- package/front_end/third_party/puppeteer/package/src/cdp/WebWorker.ts +3 -11
- package/front_end/third_party/puppeteer/package/src/common/ConsoleMessage.ts +12 -0
- package/front_end/third_party/puppeteer/package/src/common/Cookie.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/revisions.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/README.chromium +2 -5
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/builder.d.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/builder.d.ts.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/safe_builder.d.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/safe_builder.d.ts.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/decode/decode.d.ts +1 -1
- 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/encode/encode.d.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/encode/encode.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 +130 -0
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/scopes.d.ts.map +1 -0
- package/front_end/third_party/source-map-scopes-codec/package/deno.json +1 -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/builder/builder.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
- package/front_end/third_party/source-map-scopes-codec/package/src/codec.js.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/codec.ts +4 -0
- package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +30 -13
- 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 +35 -17
- package/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.ts +2 -2
- package/front_end/third_party/source-map-scopes-codec/package/src/mod.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/scopes.js +7 -0
- package/front_end/third_party/source-map-scopes-codec/package/src/scopes.js.map +1 -0
- package/front_end/third_party/source-map-scopes-codec/package/src/util.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +4 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +11 -0
- package/mcp/mcp.ts +1 -0
- package/package.json +1 -2
- package/front_end/third_party/source-map-scopes-codec/package/src/scopes-tsconfig.json +0 -8
- /package/front_end/third_party/source-map-scopes-codec/package/src/{scopes.d.ts → scopes.ts} +0 -0
|
@@ -48,10 +48,45 @@ export class DeviceBoundSessionsModel extends Common.ObjectWrapper.ObjectWrapper
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
clearVisibleSites(): void {
|
|
51
|
+
if (this.getPreserveLogSetting().get()) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
51
54
|
this.#visibleSites.clear();
|
|
52
55
|
this.dispatchEventToListeners(DeviceBoundSessionModelEvents.CLEAR_VISIBLE_SITES);
|
|
53
56
|
}
|
|
54
57
|
|
|
58
|
+
clearEvents(): void {
|
|
59
|
+
if (this.getPreserveLogSetting().get()) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const emptySessions = new Map<string, Array<string|undefined>>();
|
|
63
|
+
const emptySites = new Set<string>();
|
|
64
|
+
for (const [site, sessionIdToSessionMap] of [...this.#siteSessions]) {
|
|
65
|
+
let emptySessionsSiteEntry = emptySessions.get(site);
|
|
66
|
+
for (const [sessionId, sessionAndEvents] of sessionIdToSessionMap) {
|
|
67
|
+
sessionAndEvents.eventsById.clear();
|
|
68
|
+
if (sessionAndEvents.session) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
// Remove empty sessions.
|
|
72
|
+
sessionIdToSessionMap.delete(sessionId);
|
|
73
|
+
if (!emptySessionsSiteEntry) {
|
|
74
|
+
emptySessionsSiteEntry = [];
|
|
75
|
+
emptySessions.set(site, emptySessionsSiteEntry);
|
|
76
|
+
}
|
|
77
|
+
emptySessionsSiteEntry.push(sessionId);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Remove empty sites.
|
|
81
|
+
if (sessionIdToSessionMap.size === 0) {
|
|
82
|
+
this.#siteSessions.delete(site);
|
|
83
|
+
emptySites.add(site);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
this.dispatchEventToListeners(DeviceBoundSessionModelEvents.CLEAR_EVENTS, {emptySessions, emptySites});
|
|
88
|
+
}
|
|
89
|
+
|
|
55
90
|
isSiteVisible(site: string): boolean {
|
|
56
91
|
return this.#visibleSites.has(site);
|
|
57
92
|
}
|
|
@@ -60,6 +95,10 @@ export class DeviceBoundSessionsModel extends Common.ObjectWrapper.ObjectWrapper
|
|
|
60
95
|
return this.#siteSessions.get(site)?.get(sessionId);
|
|
61
96
|
}
|
|
62
97
|
|
|
98
|
+
getPreserveLogSetting(): Common.Settings.Setting<boolean> {
|
|
99
|
+
return Common.Settings.Settings.instance().createSetting('device-bound-sessions-preserve-log', false);
|
|
100
|
+
}
|
|
101
|
+
|
|
63
102
|
#onSessionsSet({data: sessions}: {data: Protocol.Network.DeviceBoundSession[]}): void {
|
|
64
103
|
for (const session of sessions) {
|
|
65
104
|
const sessionAndEvents = this.#ensureSiteAndSessionInitialized(session.key.site, session.key.id);
|
|
@@ -117,6 +156,7 @@ export const enum DeviceBoundSessionModelEvents {
|
|
|
117
156
|
ADD_VISIBLE_SITE = 'ADD_VISIBLE_SITE',
|
|
118
157
|
CLEAR_VISIBLE_SITES = 'CLEAR_VISIBLE_SITES',
|
|
119
158
|
EVENT_OCCURRED = 'EVENT_OCCURRED',
|
|
159
|
+
CLEAR_EVENTS = 'CLEAR_EVENTS',
|
|
120
160
|
}
|
|
121
161
|
|
|
122
162
|
export interface DeviceBoundSessionModelEventTypes {
|
|
@@ -124,4 +164,6 @@ export interface DeviceBoundSessionModelEventTypes {
|
|
|
124
164
|
[DeviceBoundSessionModelEvents.ADD_VISIBLE_SITE]: {site: string};
|
|
125
165
|
[DeviceBoundSessionModelEvents.CLEAR_VISIBLE_SITES]: void;
|
|
126
166
|
[DeviceBoundSessionModelEvents.EVENT_OCCURRED]: {site: string, sessionId?: string};
|
|
167
|
+
[DeviceBoundSessionModelEvents.CLEAR_EVENTS]:
|
|
168
|
+
{emptySessions: Map<string, Array<string|undefined>>, emptySites: Set<string>};
|
|
127
169
|
}
|
|
@@ -7,7 +7,7 @@ import * as i18n from '../../core/i18n/i18n.js';
|
|
|
7
7
|
import type * as Platform from '../../core/platform/platform.js';
|
|
8
8
|
import {createIcon} from '../../ui/kit/kit.js';
|
|
9
9
|
|
|
10
|
-
import {ApplicationPanelTreeElement
|
|
10
|
+
import {ApplicationPanelTreeElement} from './ApplicationPanelTreeElement.js';
|
|
11
11
|
import {
|
|
12
12
|
DeviceBoundSessionModelEvents,
|
|
13
13
|
type DeviceBoundSessionModelEventTypes,
|
|
@@ -51,14 +51,15 @@ const UIStrings = {
|
|
|
51
51
|
const str_ = i18n.i18n.registerUIStrings('panels/application/DeviceBoundSessionsTreeElement.ts', UIStrings);
|
|
52
52
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
53
53
|
|
|
54
|
-
export class RootTreeElement extends
|
|
54
|
+
export class RootTreeElement extends ApplicationPanelTreeElement {
|
|
55
55
|
#model: DeviceBoundSessionsModel;
|
|
56
|
-
#sites = new Map<string, {
|
|
56
|
+
#sites = new Map<string, {
|
|
57
|
+
siteTreeElement: ApplicationPanelTreeElement,
|
|
58
|
+
sessions: Map<string|undefined, ApplicationPanelTreeElement>,
|
|
59
|
+
}>();
|
|
57
60
|
|
|
58
61
|
constructor(storagePanel: ResourcesPanel, model: DeviceBoundSessionsModel) {
|
|
59
|
-
super(
|
|
60
|
-
storagePanel, i18nString(UIStrings.deviceBoundSessions), i18nString(UIStrings.deviceBoundSessions),
|
|
61
|
-
i18nString(UIStrings.deviceBoundSessionsCategoryDescription), 'device-bound-sessions-root');
|
|
62
|
+
super(storagePanel, i18nString(UIStrings.deviceBoundSessions), /* expandable=*/ true, 'device-bound-sessions-root');
|
|
62
63
|
this.setLeadingIcons([createIcon('lock-person')]);
|
|
63
64
|
this.#model = model;
|
|
64
65
|
}
|
|
@@ -67,12 +68,21 @@ export class RootTreeElement extends ExpandableApplicationPanelTreeElement {
|
|
|
67
68
|
return 'device-bound-sessions://' as Platform.DevToolsPath.UrlString;
|
|
68
69
|
}
|
|
69
70
|
|
|
71
|
+
override onselect(selectedByUser?: boolean): boolean {
|
|
72
|
+
super.onselect(selectedByUser);
|
|
73
|
+
this.resourcesPanel.showDeviceBoundSessionDefault(
|
|
74
|
+
this.#model, i18nString(UIStrings.deviceBoundSessions),
|
|
75
|
+
i18nString(UIStrings.deviceBoundSessionsCategoryDescription));
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
|
|
70
79
|
override onbind(): void {
|
|
71
80
|
super.onbind();
|
|
72
81
|
this.#model.addEventListener(DeviceBoundSessionModelEvents.INITIALIZE_SESSIONS, this.#onNewSessions, this);
|
|
73
82
|
this.#model.addEventListener(DeviceBoundSessionModelEvents.ADD_VISIBLE_SITE, this.#onVisibleSiteAdded, this);
|
|
74
83
|
this.#model.addEventListener(DeviceBoundSessionModelEvents.CLEAR_VISIBLE_SITES, this.#onVisibleSitesCleared, this);
|
|
75
84
|
this.#model.addEventListener(DeviceBoundSessionModelEvents.EVENT_OCCURRED, this.#onEventOccurred, this);
|
|
85
|
+
this.#model.addEventListener(DeviceBoundSessionModelEvents.CLEAR_EVENTS, this.#onClearEvents, this);
|
|
76
86
|
}
|
|
77
87
|
|
|
78
88
|
override onunbind(): void {
|
|
@@ -82,6 +92,7 @@ export class RootTreeElement extends ExpandableApplicationPanelTreeElement {
|
|
|
82
92
|
this.#model.removeEventListener(
|
|
83
93
|
DeviceBoundSessionModelEvents.CLEAR_VISIBLE_SITES, this.#onVisibleSitesCleared, this);
|
|
84
94
|
this.#model.removeEventListener(DeviceBoundSessionModelEvents.EVENT_OCCURRED, this.#onEventOccurred, this);
|
|
95
|
+
this.#model.removeEventListener(DeviceBoundSessionModelEvents.CLEAR_EVENTS, this.#onClearEvents, this);
|
|
85
96
|
}
|
|
86
97
|
|
|
87
98
|
#updateSiteTreeElementVisibility(site: string): void {
|
|
@@ -112,12 +123,21 @@ export class RootTreeElement extends ExpandableApplicationPanelTreeElement {
|
|
|
112
123
|
#addSiteSessionIfMissing(site: string, sessionId: string|undefined): void {
|
|
113
124
|
let siteMapEntry = this.#sites.get(site);
|
|
114
125
|
if (!siteMapEntry) {
|
|
115
|
-
const siteElement = new
|
|
116
|
-
this.resourcesPanel, site,
|
|
117
|
-
i18nString(UIStrings.deviceBoundSessionsCategoryDescription), 'device-bound-sessions-site');
|
|
126
|
+
const siteElement = new ApplicationPanelTreeElement(
|
|
127
|
+
this.resourcesPanel, site, /* expandable=*/ true, 'device-bound-sessions-site');
|
|
118
128
|
siteElement.setLeadingIcons([createIcon('cloud')]);
|
|
119
129
|
siteElement.itemURL = `device-bound-sessions://${site}` as Platform.DevToolsPath.UrlString;
|
|
120
|
-
|
|
130
|
+
|
|
131
|
+
const defaultOnSelect = siteElement.onselect.bind(siteElement);
|
|
132
|
+
siteElement.onselect = (selectedByUser?: boolean): boolean => {
|
|
133
|
+
defaultOnSelect(selectedByUser);
|
|
134
|
+
this.resourcesPanel.showDeviceBoundSessionDefault(
|
|
135
|
+
this.#model, i18nString(UIStrings.deviceBoundSessions),
|
|
136
|
+
i18nString(UIStrings.deviceBoundSessionsCategoryDescription));
|
|
137
|
+
return false;
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
siteMapEntry = {siteTreeElement: siteElement, sessions: new Map()};
|
|
121
141
|
this.#sites.set(site, siteMapEntry);
|
|
122
142
|
}
|
|
123
143
|
|
|
@@ -139,12 +159,35 @@ export class RootTreeElement extends ExpandableApplicationPanelTreeElement {
|
|
|
139
159
|
} else {
|
|
140
160
|
siteMapEntry.siteTreeElement.appendChild(sessionElement);
|
|
141
161
|
}
|
|
142
|
-
siteMapEntry.sessions.
|
|
162
|
+
siteMapEntry.sessions.set(sessionId, sessionElement);
|
|
143
163
|
}
|
|
144
164
|
|
|
145
165
|
this.#updateSiteTreeElementVisibility(site);
|
|
146
166
|
}
|
|
147
167
|
|
|
168
|
+
#removeEmptyElements(emptySessions: Map<string, Array<string|undefined>>, emptySites: Set<string>): void {
|
|
169
|
+
for (const emptySite of emptySites) {
|
|
170
|
+
const siteData = this.#sites.get(emptySite);
|
|
171
|
+
if (siteData) {
|
|
172
|
+
this.removeChild(siteData.siteTreeElement);
|
|
173
|
+
this.#sites.delete(emptySite);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
for (const [site, emptySessionIds] of emptySessions) {
|
|
178
|
+
const siteData = this.#sites.get(site);
|
|
179
|
+
if (siteData) {
|
|
180
|
+
for (const emptySessionId of emptySessionIds) {
|
|
181
|
+
const sessionElement = siteData.sessions.get(emptySessionId);
|
|
182
|
+
if (sessionElement) {
|
|
183
|
+
siteData.siteTreeElement.removeChild(sessionElement);
|
|
184
|
+
siteData.sessions.delete(emptySessionId);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
148
191
|
#onNewSessions({data: {sessions}}: Common.EventTarget.EventTargetEvent<
|
|
149
192
|
DeviceBoundSessionModelEventTypes[DeviceBoundSessionModelEvents.INITIALIZE_SESSIONS]>): void {
|
|
150
193
|
for (const session of sessions) {
|
|
@@ -167,4 +210,10 @@ export class RootTreeElement extends ExpandableApplicationPanelTreeElement {
|
|
|
167
210
|
.EventTargetEvent<DeviceBoundSessionModelEventTypes[DeviceBoundSessionModelEvents.EVENT_OCCURRED]>): void {
|
|
168
211
|
this.#addSiteSessionIfMissing(site, sessionId);
|
|
169
212
|
}
|
|
213
|
+
|
|
214
|
+
#onClearEvents({data: {emptySessions, emptySites}}: Common.EventTarget
|
|
215
|
+
.EventTargetEvent<DeviceBoundSessionModelEventTypes[DeviceBoundSessionModelEvents.CLEAR_EVENTS]>):
|
|
216
|
+
void {
|
|
217
|
+
this.#removeEmptyElements(emptySessions, emptySites);
|
|
218
|
+
}
|
|
170
219
|
}
|