Skip to content

Commit

Permalink
cherry-pick(#16477): feat(driver): report backend state
Browse files Browse the repository at this point in the history
  • Loading branch information
pavelfeldman committed Aug 15, 2022
1 parent cb34325 commit 10fcbe3
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 3 deletions.
32 changes: 32 additions & 0 deletions packages/playwright-core/src/cli/driver.ts
Expand Up @@ -90,6 +90,38 @@ class ProtocolHandler {

constructor(playwright: Playwright) {
this._playwright = playwright;
playwright.instrumentation.addListener({
onPageOpen: () => this._sendSnapshot(),
onPageNavigated: () => this._sendSnapshot(),
onPageClose: () => this._sendSnapshot(),
}, null);
}

private _sendSnapshot() {
const browsers = [];
for (const browser of this._playwright.allBrowsers()) {
const b = {
name: browser.options.name,
guid: browser.guid,
contexts: [] as any[]
};
browsers.push(b);
for (const context of browser.contexts()) {
const c = {
guid: context.guid,
pages: [] as any[]
};
b.contexts.push(c);
for (const page of context.pages()) {
const p = {
guid: page.guid,
url: page.mainFrame().url()
};
c.pages.push(p);
}
}
}
process.send!({ method: 'browsersChanged', params: { browsers } });
}

async resetForReuse() {
Expand Down
12 changes: 9 additions & 3 deletions packages/playwright-core/src/server/frames.ts
Expand Up @@ -239,7 +239,7 @@ export class FrameManager {

frame._onClearLifecycle();
const navigationEvent: NavigationEvent = { url, name, newDocument: frame._currentDocument, isPublic: true };
frame.emit(Frame.Events.InternalNavigation, navigationEvent);
this._fireInternalFrameNavigation(frame, navigationEvent);
if (!initial) {
debugLogger.log('api', ` navigated to "${url}"`);
this._page.frameNavigatedToNewDocument(frame);
Expand All @@ -254,7 +254,7 @@ export class FrameManager {
return;
frame._url = url;
const navigationEvent: NavigationEvent = { url, name: frame._name, isPublic: true };
frame.emit(Frame.Events.InternalNavigation, navigationEvent);
this._fireInternalFrameNavigation(frame, navigationEvent);
debugLogger.log('api', ` navigated to "${url}"`);
}

Expand All @@ -272,7 +272,7 @@ export class FrameManager {
isPublic: !(documentId && frame._redirectedNavigations.has(documentId)),
};
frame.setPendingDocument(undefined);
frame.emit(Frame.Events.InternalNavigation, navigationEvent);
this._fireInternalFrameNavigation(frame, navigationEvent);
}

frameDetached(frameId: string) {
Expand Down Expand Up @@ -462,6 +462,12 @@ export class FrameManager {
if (ws)
ws.error(errorMessage);
}

private _fireInternalFrameNavigation(frame: Frame, event: NavigationEvent) {
frame.emit(Frame.Events.InternalNavigation, event);
if (event.isPublic && !frame.parentFrame())
frame.instrumentation.onPageNavigated(frame._page, event.url);
}
}

export class Frame extends SdkObject {
Expand Down
2 changes: 2 additions & 0 deletions packages/playwright-core/src/server/instrumentation.ts
Expand Up @@ -63,6 +63,7 @@ export interface Instrumentation {
onAfterCall(sdkObject: SdkObject, metadata: CallMetadata): Promise<void>;
onEvent(sdkObject: SdkObject, metadata: CallMetadata): void;
onPageOpen(page: Page): void;
onPageNavigated(page: Page, url: string): void;
onPageClose(page: Page): void;
onBrowserOpen(browser: Browser): void;
onBrowserClose(browser: Browser): void;
Expand All @@ -75,6 +76,7 @@ export interface InstrumentationListener {
onAfterCall?(sdkObject: SdkObject, metadata: CallMetadata): Promise<void>;
onEvent?(sdkObject: SdkObject, metadata: CallMetadata): void;
onPageOpen?(page: Page): void;
onPageNavigated?(page: Page, url: string): void;
onPageClose?(page: Page): void;
onBrowserOpen?(browser: Browser): void;
onBrowserClose?(browser: Browser): void;
Expand Down

0 comments on commit 10fcbe3

Please sign in to comment.