chore: brush up the debug controller api (#18262)

This commit is contained in:
Pavel Feldman 2022-10-21 20:57:22 -04:00 committed by GitHub
parent 98215b4d74
commit 3c0832a0d9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 32 additions and 14 deletions

View file

@ -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 } });
});

View file

@ -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({

View file

@ -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<Recorder[]> {

View file

@ -25,8 +25,8 @@ export class DebugControllerDispatcher extends Dispatcher<DebugController, chann
constructor(connection: DispatcherConnection, debugController: DebugController) {
super(connection, debugController, 'DebugController', {});
this._type_DebugController = true;
this._object.on(DebugController.Events.BrowsersChanged, browsers => {
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<DebugController, chann
});
}
async setTrackHierarchy(params: channels.DebugControllerSetTrackHierarchyParams) {
this._object.setTrackHierarcy(params.enabled);
async setReportStateChanged(params: channels.DebugControllerSetReportStateChangedParams) {
this._object.setReportStateChanged(params.enabled);
}
async resetForReuse() {

View file

@ -593,12 +593,13 @@ export type RecorderSource = {
export type DebugControllerInitializer = {};
export interface DebugControllerEventTarget {
on(event: 'inspectRequested', callback: (params: DebugControllerInspectRequestedEvent) => 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<DebugControllerSetTrackHierarchyResult>;
setReportStateChanged(params: DebugControllerSetReportStateChangedParams, metadata?: Metadata): Promise<DebugControllerSetReportStateChangedResult>;
resetForReuse(params?: DebugControllerResetForReuseParams, metadata?: Metadata): Promise<DebugControllerResetForReuseResult>;
navigateAll(params: DebugControllerNavigateAllParams, metadata?: Metadata): Promise<DebugControllerNavigateAllResult>;
setRecorderMode(params: DebugControllerSetRecorderModeParams, metadata?: Metadata): Promise<DebugControllerSetRecorderModeResult>;
@ -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;
}

View file

@ -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: