chrome-devtools-frontend 1.0.927127 → 1.0.928589
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/AUTHORS +1 -0
- package/config/gni/all_devtools_files.gni +0 -1
- package/config/gni/devtools_grd_files.gni +30 -4
- package/config/gni/devtools_image_files.gni +1 -0
- package/front_end/Images/src/ic_preview_feature.svg +3 -0
- package/front_end/Tests.js +2 -3
- package/front_end/core/common/Settings.ts +26 -45
- package/front_end/core/host/UserMetrics.ts +2 -2
- package/front_end/core/i18n/locales/en-US.json +60 -15
- package/front_end/core/i18n/locales/en-XL.json +60 -15
- package/front_end/core/platform/keyboard-utilities.ts +1 -0
- package/front_end/core/root/Runtime.ts +62 -61
- package/front_end/core/sdk/AccessibilityModel.ts +73 -73
- package/front_end/core/sdk/CPUProfileDataModel.ts +14 -14
- package/front_end/core/sdk/CPUProfilerModel.ts +33 -33
- package/front_end/core/sdk/CPUThrottlingManager.ts +8 -8
- package/front_end/core/sdk/CSSFontFace.ts +10 -10
- package/front_end/core/sdk/CSSMatchedStyles.ts +114 -114
- package/front_end/core/sdk/CSSMedia.ts +22 -22
- package/front_end/core/sdk/CSSMetadata.ts +53 -49
- package/front_end/core/sdk/CSSModel.ts +139 -135
- package/front_end/core/sdk/CSSProperty.ts +18 -18
- package/front_end/core/sdk/CSSRule.ts +15 -15
- package/front_end/core/sdk/CSSStyleDeclaration.ts +49 -47
- package/front_end/core/sdk/CSSStyleSheetHeader.ts +12 -12
- package/front_end/core/sdk/ChildTargetManager.ts +41 -40
- package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +10 -10
- package/front_end/core/sdk/Connections.ts +81 -81
- package/front_end/core/sdk/ConsoleModel.ts +68 -68
- package/front_end/core/sdk/Cookie.ts +48 -48
- package/front_end/core/sdk/CookieModel.ts +13 -13
- package/front_end/core/sdk/CookieParser.ts +45 -45
- package/front_end/core/sdk/DOMDebuggerModel.ts +131 -131
- package/front_end/core/sdk/DOMModel.ts +264 -252
- package/front_end/core/sdk/DebuggerModel.ts +209 -205
- package/front_end/core/sdk/EmulationModel.ts +76 -76
- package/front_end/core/sdk/FilmStripModel.ts +29 -29
- package/front_end/core/sdk/FrameManager.ts +43 -42
- package/front_end/core/sdk/HeapProfilerModel.ts +36 -36
- package/front_end/core/sdk/IsolateManager.ts +82 -82
- package/front_end/core/sdk/IssuesModel.ts +6 -6
- package/front_end/core/sdk/LayerTreeBase.ts +37 -37
- package/front_end/core/sdk/LogModel.ts +5 -5
- package/front_end/core/sdk/NetworkManager.ts +229 -225
- package/front_end/core/sdk/NetworkRequest.ts +368 -360
- package/front_end/core/sdk/OverlayColorGenerator.ts +9 -9
- package/front_end/core/sdk/OverlayModel.ts +155 -153
- package/front_end/core/sdk/OverlayPersistentHighlighter.ts +100 -101
- package/front_end/core/sdk/PageResourceLoader.ts +30 -30
- package/front_end/core/sdk/PaintProfiler.ts +16 -16
- package/front_end/core/sdk/PerformanceMetricsModel.ts +12 -12
- package/front_end/core/sdk/ProfileTreeModel.ts +3 -3
- package/front_end/core/sdk/RemoteObject.ts +108 -104
- package/front_end/core/sdk/Resource.ts +85 -84
- package/front_end/core/sdk/ResourceTreeModel.ts +150 -145
- package/front_end/core/sdk/RuntimeModel.ts +38 -34
- package/front_end/core/sdk/SDKModel.ts +3 -3
- package/front_end/core/sdk/ScreenCaptureModel.ts +19 -19
- package/front_end/core/sdk/Script.ts +29 -29
- package/front_end/core/sdk/SecurityOriginManager.ts +19 -19
- package/front_end/core/sdk/ServerTiming.ts +2 -2
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +43 -43
- package/front_end/core/sdk/ServiceWorkerManager.ts +72 -68
- package/front_end/core/sdk/SourceMap.ts +40 -36
- package/front_end/core/sdk/SourceMapManager.ts +57 -57
- package/front_end/core/sdk/Target.ts +64 -63
- package/front_end/core/sdk/TargetManager.ts +60 -56
- package/front_end/core/sdk/TracingManager.ts +39 -39
- package/front_end/core/sdk/TracingModel.ts +125 -125
- package/front_end/core/sdk/WebAuthnModel.ts +9 -9
- package/front_end/entrypoints/lighthouse_worker/{LighthouseService.js → LighthouseService.ts} +20 -45
- package/front_end/entrypoints/lighthouse_worker/{lighthouse_worker.js → lighthouse_worker.ts} +0 -0
- package/front_end/entrypoints/main/MainImpl.ts +7 -2
- package/front_end/legacy_test_runner/elements_test_runner/ElementsTestRunner.js +4 -4
- package/front_end/legacy_test_runner/sdk_test_runner/sdk_test_runner.js +1 -1
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +0 -6
- package/front_end/models/issues_manager/GenericIssue.ts +86 -0
- package/front_end/models/issues_manager/Issue.ts +24 -0
- package/front_end/models/issues_manager/IssuesManager.ts +18 -6
- package/front_end/models/issues_manager/descriptions/genericCrossOriginPortalPostMessageError.md +3 -0
- package/front_end/models/issues_manager/issues_manager.ts +2 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +5422 -1
- package/front_end/panels/console/ConsoleSidebar.ts +0 -3
- package/front_end/panels/elements/ElementsTreeElement.ts +53 -61
- package/front_end/panels/elements/ElementsTreeOutline.ts +0 -1
- package/front_end/panels/elements/components/LayoutPane.ts +5 -1
- package/front_end/panels/issues/GenericIssueDetailsView.ts +68 -0
- package/front_end/panels/issues/IssueAggregator.ts +16 -0
- package/front_end/panels/issues/IssueKindView.ts +95 -0
- package/front_end/panels/issues/IssueView.ts +6 -0
- package/front_end/panels/issues/IssuesPane.ts +81 -18
- package/front_end/panels/issues/issuesTree.css +8 -3
- package/front_end/panels/lighthouse/LighthouseController.ts +3 -1
- package/front_end/panels/network/NetworkItemView.ts +1 -1
- package/front_end/panels/network/networkLogView.css +5 -0
- package/front_end/panels/sensors/LocationsSettingsTab.ts +1 -1
- package/front_end/panels/settings/SettingsScreen.ts +1 -0
- package/front_end/panels/settings/settingsScreen.css +24 -0
- package/front_end/panels/snippets/SnippetsQuickOpen.ts +8 -3
- package/front_end/panels/sources/TabbedEditorContainer.ts +1 -1
- package/front_end/panels/sources/sources-meta.ts +22 -7
- package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
- package/front_end/third_party/codemirror.next/package.json +4 -4
- package/front_end/ui/components/code_highlighter/CodeHighlighter.ts +137 -0
- package/front_end/ui/components/code_highlighter/codeHighlighter.css +51 -0
- package/front_end/ui/components/code_highlighter/code_highlighter.ts +11 -0
- package/front_end/ui/components/docs/text_editor/basic.html +28 -0
- package/front_end/ui/components/docs/text_editor/basic.ts +14 -0
- package/front_end/ui/components/docs/text_prompt/basic.html +35 -0
- package/front_end/ui/components/docs/text_prompt/basic.ts +19 -0
- package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +1 -0
- package/front_end/ui/components/render_coordinator/RenderCoordinator.ts +17 -0
- package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +1 -0
- package/front_end/ui/components/text_editor/TextEditor.ts +161 -0
- package/front_end/ui/components/text_editor/config.ts +264 -0
- package/front_end/{panels/console/components/components.ts → ui/components/text_editor/text_editor.ts} +2 -5
- package/front_end/ui/components/text_editor/theme.ts +113 -0
- package/front_end/ui/components/text_prompt/TextPrompt.ts +144 -0
- package/front_end/ui/components/text_prompt/textPrompt.css +33 -0
- package/front_end/ui/components/text_prompt/text_prompt.ts +9 -0
- package/front_end/ui/legacy/ARIAUtils.ts +14 -11
- package/front_end/ui/legacy/TabbedPane.ts +32 -3
- package/front_end/ui/legacy/UIUtils.ts +3 -1
- package/front_end/ui/legacy/View.ts +6 -0
- package/front_end/ui/legacy/ViewManager.ts +5 -1
- package/front_end/ui/legacy/ViewRegistration.ts +5 -0
- package/front_end/ui/legacy/XLink.ts +1 -1
- package/front_end/ui/legacy/closeButton.css +6 -0
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +8 -3
- package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +38 -38
- package/front_end/ui/legacy/components/quick_open/HelpQuickOpen.ts +10 -4
- package/front_end/ui/legacy/components/quick_open/QuickOpen.ts +23 -6
- package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +14 -16
- package/front_end/ui/legacy/filter.css +1 -0
- package/front_end/ui/legacy/tabbedPane.css +24 -0
- package/front_end/ui/legacy/toolbar.css +5 -0
- package/inspector_overlay/main.ts +2 -1
- package/inspector_overlay/tool_screenshot.ts +8 -1
- package/package.json +1 -1
- package/scripts/build/rollup.config.js +9 -0
- package/scripts/migration/class-fields/migrate.js +56 -0
- package/scripts/migration/class-fields/package.json +5 -0
- package/front_end/panels/console/components/SidebarDeprecation.ts +0 -58
- package/front_end/panels/console/components/sidebarDeprecation.css +0 -17
|
@@ -15,9 +15,9 @@ import * as Host from '../host/host.js';
|
|
|
15
15
|
let targetManagerInstance: TargetManager|undefined;
|
|
16
16
|
|
|
17
17
|
export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
#targetsInternal: Set<Target>;
|
|
19
|
+
readonly #observers: Set<Observer>;
|
|
20
|
+
#modelListeners: Platform.MapUtilities.Multimap<string|symbol|number, {
|
|
21
21
|
modelClass: new(arg1: Target) => SDKModel,
|
|
22
22
|
thisObject: (Object|undefined),
|
|
23
23
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -25,18 +25,18 @@ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes
|
|
|
25
25
|
}>;
|
|
26
26
|
// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration
|
|
27
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
readonly #modelObservers: Platform.MapUtilities.Multimap<new(arg1: Target) => SDKModel, SDKModelObserver<any>>;
|
|
29
|
+
#isSuspended: boolean;
|
|
30
|
+
#browserTargetInternal: Target|null;
|
|
31
31
|
|
|
32
32
|
private constructor() {
|
|
33
33
|
super();
|
|
34
|
-
this
|
|
35
|
-
this
|
|
36
|
-
this
|
|
37
|
-
this
|
|
38
|
-
this
|
|
39
|
-
this
|
|
34
|
+
this.#targetsInternal = new Set();
|
|
35
|
+
this.#observers = new Set();
|
|
36
|
+
this.#modelListeners = new Platform.MapUtilities.Multimap();
|
|
37
|
+
this.#modelObservers = new Platform.MapUtilities.Multimap();
|
|
38
|
+
this.#isSuspended = false;
|
|
39
|
+
this.#browserTargetInternal = null;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
static instance({forceNew}: {
|
|
@@ -62,32 +62,32 @@ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
async suspendAllTargets(reason?: string): Promise<void> {
|
|
65
|
-
if (this
|
|
65
|
+
if (this.#isSuspended) {
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
68
|
-
this
|
|
68
|
+
this.#isSuspended = true;
|
|
69
69
|
this.dispatchEventToListeners(Events.SuspendStateChanged);
|
|
70
|
-
const suspendPromises = Array.from(this
|
|
70
|
+
const suspendPromises = Array.from(this.#targetsInternal.values(), target => target.suspend(reason));
|
|
71
71
|
await Promise.all(suspendPromises);
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
async resumeAllTargets(): Promise<void> {
|
|
75
|
-
if (!this
|
|
75
|
+
if (!this.#isSuspended) {
|
|
76
76
|
return;
|
|
77
77
|
}
|
|
78
|
-
this
|
|
78
|
+
this.#isSuspended = false;
|
|
79
79
|
this.dispatchEventToListeners(Events.SuspendStateChanged);
|
|
80
|
-
const resumePromises = Array.from(this
|
|
80
|
+
const resumePromises = Array.from(this.#targetsInternal.values(), target => target.resume());
|
|
81
81
|
await Promise.all(resumePromises);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
allTargetsSuspended(): boolean {
|
|
85
|
-
return this
|
|
85
|
+
return this.#isSuspended;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
models<T extends SDKModel>(modelClass: new(arg1: Target) => T): T[] {
|
|
89
89
|
const result = [];
|
|
90
|
-
for (const target of this
|
|
90
|
+
for (const target of this.#targetsInternal) {
|
|
91
91
|
const model = target.model(modelClass);
|
|
92
92
|
if (model) {
|
|
93
93
|
result.push(model);
|
|
@@ -103,24 +103,24 @@ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes
|
|
|
103
103
|
|
|
104
104
|
observeModels<T extends SDKModel>(modelClass: new(arg1: Target) => T, observer: SDKModelObserver<T>): void {
|
|
105
105
|
const models = this.models(modelClass);
|
|
106
|
-
this
|
|
106
|
+
this.#modelObservers.set(modelClass, observer);
|
|
107
107
|
for (const model of models) {
|
|
108
108
|
observer.modelAdded(model);
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
unobserveModels<T extends SDKModel>(modelClass: new(arg1: Target) => SDKModel, observer: SDKModelObserver<T>): void {
|
|
113
|
-
this
|
|
113
|
+
this.#modelObservers.delete(modelClass, observer);
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
modelAdded(target: Target, modelClass: new(arg1: Target) => SDKModel, model: SDKModel): void {
|
|
117
|
-
for (const observer of this
|
|
117
|
+
for (const observer of this.#modelObservers.get(modelClass).values()) {
|
|
118
118
|
observer.modelAdded(model);
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
private modelRemoved(target: Target, modelClass: new(arg1: Target) => SDKModel, model: SDKModel): void {
|
|
123
|
-
for (const observer of this
|
|
123
|
+
for (const observer of this.#modelObservers.get(modelClass).values()) {
|
|
124
124
|
observer.modelRemoved(model);
|
|
125
125
|
}
|
|
126
126
|
}
|
|
@@ -131,13 +131,13 @@ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes
|
|
|
131
131
|
for (const model of this.models(modelClass)) {
|
|
132
132
|
model.addEventListener(eventType, listener, thisObject);
|
|
133
133
|
}
|
|
134
|
-
this
|
|
134
|
+
this.#modelListeners.set(eventType, {modelClass: modelClass, thisObject: thisObject, listener: listener});
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
removeModelListener<Events, T extends keyof Events>(
|
|
138
138
|
modelClass: new(arg1: Target) => SDKModel<Events>, eventType: T,
|
|
139
139
|
listener: Common.EventTarget.EventListener<Events, T>, thisObject?: Object): void {
|
|
140
|
-
if (!this
|
|
140
|
+
if (!this.#modelListeners.has(eventType)) {
|
|
141
141
|
return;
|
|
142
142
|
}
|
|
143
143
|
|
|
@@ -145,25 +145,25 @@ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes
|
|
|
145
145
|
model.removeEventListener(eventType, listener, thisObject);
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
for (const info of this
|
|
148
|
+
for (const info of this.#modelListeners.get(eventType)) {
|
|
149
149
|
if (info.modelClass === modelClass && info.listener === listener && info.thisObject === thisObject) {
|
|
150
|
-
this
|
|
150
|
+
this.#modelListeners.delete(eventType, info);
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
observeTargets(targetObserver: Observer): void {
|
|
156
|
-
if (this
|
|
156
|
+
if (this.#observers.has(targetObserver)) {
|
|
157
157
|
throw new Error('Observer can only be registered once');
|
|
158
158
|
}
|
|
159
|
-
for (const target of this
|
|
159
|
+
for (const target of this.#targetsInternal) {
|
|
160
160
|
targetObserver.targetAdded(target);
|
|
161
161
|
}
|
|
162
|
-
this
|
|
162
|
+
this.#observers.add(targetObserver);
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
unobserveTargets(targetObserver: Observer): void {
|
|
166
|
-
this
|
|
166
|
+
this.#observers.delete(targetObserver);
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
createTarget(
|
|
@@ -171,15 +171,15 @@ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes
|
|
|
171
171
|
sessionId?: string, waitForDebuggerInPage?: boolean, connection?: ProtocolClient.InspectorBackend.Connection,
|
|
172
172
|
targetInfo?: Protocol.Target.TargetInfo): Target {
|
|
173
173
|
const target = new Target(
|
|
174
|
-
this, id, name, type, parentTarget, sessionId || '', this
|
|
174
|
+
this, id, name, type, parentTarget, sessionId || '', this.#isSuspended, connection || null, targetInfo);
|
|
175
175
|
if (waitForDebuggerInPage) {
|
|
176
176
|
target.pageAgent().invoke_waitForDebugger();
|
|
177
177
|
}
|
|
178
|
-
target.createModels(new Set(this
|
|
179
|
-
this
|
|
178
|
+
target.createModels(new Set(this.#modelObservers.keysArray()));
|
|
179
|
+
this.#targetsInternal.add(target);
|
|
180
180
|
|
|
181
|
-
// Iterate over a copy. observers might be modified during iteration.
|
|
182
|
-
for (const observer of [...this
|
|
181
|
+
// Iterate over a copy. #observers might be modified during iteration.
|
|
182
|
+
for (const observer of [...this.#observers]) {
|
|
183
183
|
observer.targetAdded(target);
|
|
184
184
|
}
|
|
185
185
|
|
|
@@ -187,8 +187,8 @@ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes
|
|
|
187
187
|
this.modelAdded(target, modelClass, model);
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
for (const key of this
|
|
191
|
-
for (const info of this
|
|
190
|
+
for (const key of this.#modelListeners.keysArray()) {
|
|
191
|
+
for (const info of this.#modelListeners.get(key)) {
|
|
192
192
|
const model = target.model(info.modelClass);
|
|
193
193
|
if (model) {
|
|
194
194
|
model.addEventListener(key, info.listener, info.thisObject);
|
|
@@ -200,23 +200,23 @@ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
removeTarget(target: Target): void {
|
|
203
|
-
if (!this
|
|
203
|
+
if (!this.#targetsInternal.has(target)) {
|
|
204
204
|
return;
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
this
|
|
207
|
+
this.#targetsInternal.delete(target);
|
|
208
208
|
for (const modelClass of target.models().keys()) {
|
|
209
209
|
const model = (target.models().get(modelClass) as SDKModel);
|
|
210
210
|
this.modelRemoved(target, modelClass, model);
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
-
// Iterate over a copy. observers might be modified during iteration.
|
|
214
|
-
for (const observer of [...this
|
|
213
|
+
// Iterate over a copy. #observers might be modified during iteration.
|
|
214
|
+
for (const observer of [...this.#observers]) {
|
|
215
215
|
observer.targetRemoved(target);
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
for (const key of this
|
|
219
|
-
for (const info of this
|
|
218
|
+
for (const key of this.#modelListeners.keysArray()) {
|
|
219
|
+
for (const info of this.#modelListeners.get(key)) {
|
|
220
220
|
const model = target.model(info.modelClass);
|
|
221
221
|
if (model) {
|
|
222
222
|
model.removeEventListener(key, info.listener, info.thisObject);
|
|
@@ -226,43 +226,47 @@ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes
|
|
|
226
226
|
}
|
|
227
227
|
|
|
228
228
|
targets(): Target[] {
|
|
229
|
-
return [...this
|
|
229
|
+
return [...this.#targetsInternal];
|
|
230
230
|
}
|
|
231
231
|
|
|
232
232
|
targetById(id: string): Target|null {
|
|
233
|
-
// TODO(dgozman): add a map id -> target.
|
|
233
|
+
// TODO(dgozman): add a map #id -> #target.
|
|
234
234
|
return this.targets().find(target => target.id() === id) || null;
|
|
235
235
|
}
|
|
236
236
|
|
|
237
237
|
mainTarget(): Target|null {
|
|
238
|
-
return this
|
|
238
|
+
return this.#targetsInternal.size ? this.#targetsInternal.values().next().value : null;
|
|
239
239
|
}
|
|
240
240
|
|
|
241
241
|
browserTarget(): Target|null {
|
|
242
|
-
return this
|
|
242
|
+
return this.#browserTargetInternal;
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
async maybeAttachInitialTarget(): Promise<boolean> {
|
|
246
246
|
if (!Boolean(Root.Runtime.Runtime.queryParam('browserConnection'))) {
|
|
247
247
|
return false;
|
|
248
248
|
}
|
|
249
|
-
if (!this
|
|
250
|
-
this
|
|
251
|
-
this, /* id*/ 'main', /* name*/ 'browser', TargetType.Browser, /* parentTarget*/ null,
|
|
252
|
-
/* sessionId */ '', /* suspended*/ false, /* connection*/ null, /* targetInfo*/ undefined);
|
|
253
|
-
this
|
|
249
|
+
if (!this.#browserTargetInternal) {
|
|
250
|
+
this.#browserTargetInternal = new Target(
|
|
251
|
+
this, /* #id*/ 'main', /* #name*/ 'browser', TargetType.Browser, /* #parentTarget*/ null,
|
|
252
|
+
/* #sessionId */ '', /* suspended*/ false, /* #connection*/ null, /* targetInfo*/ undefined);
|
|
253
|
+
this.#browserTargetInternal.createModels(new Set(this.#modelObservers.keysArray()));
|
|
254
254
|
}
|
|
255
255
|
const targetId =
|
|
256
256
|
await Host.InspectorFrontendHost.InspectorFrontendHostInstance.initialTargetId() as Protocol.Target.TargetID;
|
|
257
257
|
// Do not await for Target.autoAttachRelated to return, as it goes throguh the renderer and we don't want to block early
|
|
258
|
-
// at front-end initialization if a renderer is stuck. The rest of target discovery and auto-attach process should happen
|
|
258
|
+
// at front-end initialization if a renderer is stuck. The rest of #target discovery and auto-attach process should happen
|
|
259
259
|
// asynchronously upon Target.attachedToTarget.
|
|
260
|
-
this
|
|
260
|
+
this.#browserTargetInternal.targetAgent().invoke_autoAttachRelated({
|
|
261
261
|
targetId,
|
|
262
262
|
waitForDebuggerOnStart: true,
|
|
263
263
|
});
|
|
264
264
|
return true;
|
|
265
265
|
}
|
|
266
|
+
|
|
267
|
+
clearAllTargetsForTest(): void {
|
|
268
|
+
this.#targetsInternal.clear();
|
|
269
|
+
}
|
|
266
270
|
}
|
|
267
271
|
|
|
268
272
|
// TODO(crbug.com/1167717): Make this a const enum again
|
|
@@ -11,86 +11,86 @@ import {SDKModel} from './SDKModel.js';
|
|
|
11
11
|
import type {ObjectSnapshot} from './TracingModel.js';
|
|
12
12
|
|
|
13
13
|
export class TracingManager extends SDKModel<void> {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
readonly #tracingAgent: ProtocolProxyApi.TracingApi;
|
|
15
|
+
#activeClient: TracingManagerClient|null;
|
|
16
|
+
#eventBufferSize: number|null;
|
|
17
|
+
#eventsRetrieved: number;
|
|
18
|
+
#finishing?: boolean;
|
|
19
19
|
constructor(target: Target) {
|
|
20
20
|
super(target);
|
|
21
|
-
this
|
|
21
|
+
this.#tracingAgent = target.tracingAgent();
|
|
22
22
|
target.registerTracingDispatcher(new TracingDispatcher(this));
|
|
23
23
|
|
|
24
|
-
this
|
|
25
|
-
this
|
|
26
|
-
this
|
|
24
|
+
this.#activeClient = null;
|
|
25
|
+
this.#eventBufferSize = 0;
|
|
26
|
+
this.#eventsRetrieved = 0;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
bufferUsage(usage?: number, eventCount?: number, percentFull?: number): void {
|
|
30
|
-
this
|
|
31
|
-
if (this
|
|
32
|
-
this
|
|
30
|
+
this.#eventBufferSize = eventCount === undefined ? null : eventCount;
|
|
31
|
+
if (this.#activeClient) {
|
|
32
|
+
this.#activeClient.tracingBufferUsage(usage || percentFull || 0);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
eventsCollected(events: EventPayload[]): void {
|
|
37
|
-
if (!this
|
|
37
|
+
if (!this.#activeClient) {
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
|
-
this
|
|
41
|
-
this
|
|
42
|
-
if (!this
|
|
43
|
-
this
|
|
40
|
+
this.#activeClient.traceEventsCollected(events);
|
|
41
|
+
this.#eventsRetrieved += events.length;
|
|
42
|
+
if (!this.#eventBufferSize) {
|
|
43
|
+
this.#activeClient.eventsRetrievalProgress(0);
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
if (this
|
|
48
|
-
this
|
|
47
|
+
if (this.#eventsRetrieved > this.#eventBufferSize) {
|
|
48
|
+
this.#eventsRetrieved = this.#eventBufferSize;
|
|
49
49
|
}
|
|
50
|
-
this
|
|
50
|
+
this.#activeClient.eventsRetrievalProgress(this.#eventsRetrieved / this.#eventBufferSize);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
tracingComplete(): void {
|
|
54
|
-
this
|
|
55
|
-
this
|
|
56
|
-
if (this
|
|
57
|
-
this
|
|
58
|
-
this
|
|
54
|
+
this.#eventBufferSize = 0;
|
|
55
|
+
this.#eventsRetrieved = 0;
|
|
56
|
+
if (this.#activeClient) {
|
|
57
|
+
this.#activeClient.tracingComplete();
|
|
58
|
+
this.#activeClient = null;
|
|
59
59
|
}
|
|
60
|
-
this
|
|
60
|
+
this.#finishing = false;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
// TODO(petermarshall): Use the traceConfig argument instead of deprecated
|
|
64
64
|
// categories + options.
|
|
65
65
|
async start(client: TracingManagerClient, categoryFilter: string, options: string):
|
|
66
66
|
Promise<Protocol.ProtocolResponseWithError> {
|
|
67
|
-
if (this
|
|
67
|
+
if (this.#activeClient) {
|
|
68
68
|
throw new Error('Tracing is already started');
|
|
69
69
|
}
|
|
70
70
|
const bufferUsageReportingIntervalMs = 500;
|
|
71
|
-
this
|
|
71
|
+
this.#activeClient = client;
|
|
72
72
|
const args = {
|
|
73
73
|
bufferUsageReportingInterval: bufferUsageReportingIntervalMs,
|
|
74
74
|
categories: categoryFilter,
|
|
75
75
|
options: options,
|
|
76
76
|
transferMode: Protocol.Tracing.StartRequestTransferMode.ReportEvents,
|
|
77
77
|
};
|
|
78
|
-
const response = await this
|
|
78
|
+
const response = await this.#tracingAgent.invoke_start(args);
|
|
79
79
|
if (response.getError()) {
|
|
80
|
-
this
|
|
80
|
+
this.#activeClient = null;
|
|
81
81
|
}
|
|
82
82
|
return response;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
stop(): void {
|
|
86
|
-
if (!this
|
|
86
|
+
if (!this.#activeClient) {
|
|
87
87
|
throw new Error('Tracing is not started');
|
|
88
88
|
}
|
|
89
|
-
if (this
|
|
89
|
+
if (this.#finishing) {
|
|
90
90
|
throw new Error('Tracing is already being stopped');
|
|
91
91
|
}
|
|
92
|
-
this
|
|
93
|
-
this
|
|
92
|
+
this.#finishing = true;
|
|
93
|
+
this.#tracingAgent.invoke_end();
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -106,21 +106,21 @@ export interface TracingManagerClient {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
class TracingDispatcher implements ProtocolProxyApi.TracingDispatcher {
|
|
109
|
-
|
|
109
|
+
readonly #tracingManager: TracingManager;
|
|
110
110
|
constructor(tracingManager: TracingManager) {
|
|
111
|
-
this
|
|
111
|
+
this.#tracingManager = tracingManager;
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
bufferUsage({value, eventCount, percentFull}: Protocol.Tracing.BufferUsageEvent): void {
|
|
115
|
-
this
|
|
115
|
+
this.#tracingManager.bufferUsage(value, eventCount, percentFull);
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
dataCollected({value}: Protocol.Tracing.DataCollectedEvent): void {
|
|
119
|
-
this
|
|
119
|
+
this.#tracingManager.eventsCollected(value);
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
tracingComplete(): void {
|
|
123
|
-
this
|
|
123
|
+
this.#tracingManager.tracingComplete();
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|