From 3c0832a0d94c6c88984e0b5db246d7b3c660df74 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Fri, 21 Oct 2022 20:57:22 -0400 Subject: [PATCH] chore: brush up the debug controller api (#18262) --- packages/playwright-core/src/cli/driver.ts | 2 +- packages/playwright-core/src/protocol/validator.ts | 7 +++++-- .../playwright-core/src/server/debugController.ts | 9 +++++++-- .../server/dispatchers/debugControllerDispatcher.ts | 8 ++++---- packages/protocol/src/channels.ts | 13 +++++++++---- packages/protocol/src/protocol.yml | 7 ++++++- 6 files changed, 32 insertions(+), 14 deletions(-) diff --git a/packages/playwright-core/src/cli/driver.ts b/packages/playwright-core/src/cli/driver.ts index 5b2a7237a6..372802470c 100644 --- a/packages/playwright-core/src/cli/driver.ts +++ b/packages/playwright-core/src/cli/driver.ts @@ -83,7 +83,7 @@ class ProtocolHandler { constructor(playwright: Playwright) { this._controller = playwright.debugController; this._controller.setAutoCloseAllowed(true); - this._controller.setTrackHierarcy(true); + this._controller.setReportStateChanged(true); this._controller.on(DebugController.Events.BrowsersChanged, browsers => { process.send!({ method: 'browsersChanged', params: { browsers } }); }); diff --git a/packages/playwright-core/src/protocol/validator.ts b/packages/playwright-core/src/protocol/validator.ts index c8654fbeb8..1bb5bf0214 100644 --- a/packages/playwright-core/src/protocol/validator.ts +++ b/packages/playwright-core/src/protocol/validator.ts @@ -336,6 +336,9 @@ scheme.DebugControllerInspectRequestedEvent = tObject({ selector: tString, locators: tArray(tType('NameValue')), }); +scheme.DebugControllerStateChangedEvent = tObject({ + pageCount: tNumber, +}); scheme.DebugControllerBrowsersChangedEvent = tObject({ browsers: tArray(tObject({ contexts: tArray(tObject({ @@ -346,10 +349,10 @@ scheme.DebugControllerBrowsersChangedEvent = tObject({ scheme.DebugControllerSourcesChangedEvent = tObject({ sources: tArray(tType('RecorderSource')), }); -scheme.DebugControllerSetTrackHierarchyParams = tObject({ +scheme.DebugControllerSetReportStateChangedParams = tObject({ enabled: tBoolean, }); -scheme.DebugControllerSetTrackHierarchyResult = tOptional(tObject({})); +scheme.DebugControllerSetReportStateChangedResult = tOptional(tObject({})); scheme.DebugControllerResetForReuseParams = tOptional(tObject({})); scheme.DebugControllerResetForReuseResult = tOptional(tObject({})); scheme.DebugControllerNavigateAllParams = tObject({ diff --git a/packages/playwright-core/src/server/debugController.ts b/packages/playwright-core/src/server/debugController.ts index b8105c88c6..570ee2716c 100644 --- a/packages/playwright-core/src/server/debugController.ts +++ b/packages/playwright-core/src/server/debugController.ts @@ -32,6 +32,7 @@ const internalMetadata = serverSideCallMetadata(); export class DebugController extends SdkObject { static Events = { BrowsersChanged: 'browsersChanged', + StateChanged: 'stateChanged', InspectRequested: 'inspectRequested', SourcesChanged: 'sourcesChanged', }; @@ -53,11 +54,11 @@ export class DebugController extends SdkObject { } dispose() { - this.setTrackHierarcy(false); + this.setReportStateChanged(false); this.setAutoCloseAllowed(false); } - setTrackHierarcy(enabled: boolean) { + setReportStateChanged(enabled: boolean) { if (enabled && !this._trackHierarchyListener) { this._trackHierarchyListener = { onPageOpen: () => this._emitSnapshot(), @@ -154,6 +155,7 @@ export class DebugController extends SdkObject { private _emitSnapshot() { const browsers = []; + let pageCount = 0; for (const browser of this._playwright.allBrowsers()) { const b = { contexts: [] as any[] @@ -166,9 +168,12 @@ export class DebugController extends SdkObject { b.contexts.push(c); for (const page of context.pages()) c.pages.push(page.mainFrame().url()); + pageCount += context.pages().length; } } + // TODO: browsers is deprecated, remove it. this.emit(DebugController.Events.BrowsersChanged, browsers); + this.emit(DebugController.Events.StateChanged, { pageCount }); } private async _allRecorders(): Promise { diff --git a/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts b/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts index 4db2702767..555ec810a2 100644 --- a/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts @@ -25,8 +25,8 @@ export class DebugControllerDispatcher extends Dispatcher { - this._dispatchEvent('browsersChanged', { browsers }); + this._object.on(DebugController.Events.StateChanged, params => { + this._dispatchEvent('stateChanged', params); }); this._object.on(DebugController.Events.InspectRequested, ({ selector, locators }) => { this._dispatchEvent('inspectRequested', { selector, locators }); @@ -36,8 +36,8 @@ export class DebugControllerDispatcher extends Dispatcher void): this; + on(event: 'stateChanged', callback: (params: DebugControllerStateChangedEvent) => void): this; on(event: 'browsersChanged', callback: (params: DebugControllerBrowsersChangedEvent) => void): this; on(event: 'sourcesChanged', callback: (params: DebugControllerSourcesChangedEvent) => void): this; } export interface DebugControllerChannel extends DebugControllerEventTarget, Channel { _type_DebugController: boolean; - setTrackHierarchy(params: DebugControllerSetTrackHierarchyParams, metadata?: Metadata): Promise; + setReportStateChanged(params: DebugControllerSetReportStateChangedParams, metadata?: Metadata): Promise; resetForReuse(params?: DebugControllerResetForReuseParams, metadata?: Metadata): Promise; navigateAll(params: DebugControllerNavigateAllParams, metadata?: Metadata): Promise; setRecorderMode(params: DebugControllerSetRecorderModeParams, metadata?: Metadata): Promise; @@ -611,6 +612,9 @@ export type DebugControllerInspectRequestedEvent = { selector: string, locators: NameValue[], }; +export type DebugControllerStateChangedEvent = { + pageCount: number, +}; export type DebugControllerBrowsersChangedEvent = { browsers: { contexts: { @@ -621,13 +625,13 @@ export type DebugControllerBrowsersChangedEvent = { export type DebugControllerSourcesChangedEvent = { sources: RecorderSource[], }; -export type DebugControllerSetTrackHierarchyParams = { +export type DebugControllerSetReportStateChangedParams = { enabled: boolean, }; -export type DebugControllerSetTrackHierarchyOptions = { +export type DebugControllerSetReportStateChangedOptions = { }; -export type DebugControllerSetTrackHierarchyResult = void; +export type DebugControllerSetReportStateChangedResult = void; export type DebugControllerResetForReuseParams = {}; export type DebugControllerResetForReuseOptions = {}; export type DebugControllerResetForReuseResult = void; @@ -667,6 +671,7 @@ export type DebugControllerCloseAllBrowsersResult = void; export interface DebugControllerEvents { 'inspectRequested': DebugControllerInspectRequestedEvent; + 'stateChanged': DebugControllerStateChangedEvent; 'browsersChanged': DebugControllerBrowsersChangedEvent; 'sourcesChanged': DebugControllerSourcesChangedEvent; } diff --git a/packages/protocol/src/protocol.yml b/packages/protocol/src/protocol.yml index 5fc91070df..28207028b6 100644 --- a/packages/protocol/src/protocol.yml +++ b/packages/protocol/src/protocol.yml @@ -660,7 +660,7 @@ DebugController: type: interface commands: - setTrackHierarchy: + setReportStateChanged: parameters: enabled: boolean @@ -699,6 +699,11 @@ DebugController: type: array items: NameValue + stateChanged: + parameters: + pageCount: number + + # Deprecated browsersChanged: parameters: browsers: