diff --git a/packages/playwright-core/src/client/browser.ts b/packages/playwright-core/src/client/browser.ts index be47ddeb51..8b13350100 100644 --- a/packages/playwright-core/src/client/browser.ts +++ b/packages/playwright-core/src/client/browser.ts @@ -49,7 +49,7 @@ export class Browser extends ChannelOwner implements ap constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.BrowserInitializer) { super(parent, type, guid, initializer); this._name = initializer.name; - this._channel.on('close', () => this._didClose()); + this._channel.on('close', ({ reason }) => this._didClose(reason)); this._closedPromise = new Promise(f => this.once(Events.Browser.Disconnected, f)); } @@ -136,10 +136,9 @@ export class Browser extends ChannelOwner implements ap } async close(options: { reason?: string } = {}): Promise { - this._closeReason = options.reason; try { if (this._shouldCloseConnectionOnClose) - this._connection.close(); + this._connection.close(options.reason); else await this._channel.close(options); await this._closedPromise; @@ -150,8 +149,9 @@ export class Browser extends ChannelOwner implements ap } } - _didClose() { + _didClose(reason?: string) { this._isConnected = false; + this._closeReason = reason; this.emit(Events.Browser.Disconnected, this); } } diff --git a/packages/playwright-core/src/protocol/validator.ts b/packages/playwright-core/src/protocol/validator.ts index f899812622..04a24fa9d8 100644 --- a/packages/playwright-core/src/protocol/validator.ts +++ b/packages/playwright-core/src/protocol/validator.ts @@ -608,7 +608,9 @@ scheme.BrowserInitializer = tObject({ version: tString, name: tString, }); -scheme.BrowserCloseEvent = tOptional(tObject({})); +scheme.BrowserCloseEvent = tObject({ + reason: tOptional(tString), +}); scheme.BrowserCloseParams = tObject({ reason: tOptional(tString), }); diff --git a/packages/playwright-core/src/server/browser.ts b/packages/playwright-core/src/server/browser.ts index 663b9be377..1b4a93434f 100644 --- a/packages/playwright-core/src/server/browser.ts +++ b/packages/playwright-core/src/server/browser.ts @@ -155,7 +155,7 @@ export abstract class Browser extends SdkObject { context._browserClosed(); if (this._defaultContext) this._defaultContext._browserClosed(); - this.emit(Browser.Events.Disconnected); + this.emit(Browser.Events.Disconnected, { reason: this._closeReason }); this.instrumentation.onBrowserClose(this); } diff --git a/packages/playwright-core/src/server/dispatchers/browserDispatcher.ts b/packages/playwright-core/src/server/dispatchers/browserDispatcher.ts index 99ce5f961f..a4a43894e3 100644 --- a/packages/playwright-core/src/server/dispatchers/browserDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/browserDispatcher.ts @@ -34,11 +34,11 @@ export class BrowserDispatcher extends Dispatcher this._didClose()); + this.addObjectListener(Browser.Events.Disconnected, ({ reason }) => this._didClose(reason)); } - _didClose() { - this._dispatchEvent('close'); + _didClose(reason?: string) { + this._dispatchEvent('close', { reason }); this._dispose(); } diff --git a/packages/protocol/src/channels.ts b/packages/protocol/src/channels.ts index 8a5a481ddf..8fb326839e 100644 --- a/packages/protocol/src/channels.ts +++ b/packages/protocol/src/channels.ts @@ -1131,7 +1131,9 @@ export interface BrowserChannel extends BrowserEventTarget, Channel { startTracing(params: BrowserStartTracingParams, metadata?: CallMetadata): Promise; stopTracing(params?: BrowserStopTracingParams, metadata?: CallMetadata): Promise; } -export type BrowserCloseEvent = {}; +export type BrowserCloseEvent = { + reason?: string, +}; export type BrowserCloseParams = { reason?: string, }; diff --git a/packages/protocol/src/protocol.yml b/packages/protocol/src/protocol.yml index d2811cfb19..a524138cdc 100644 --- a/packages/protocol/src/protocol.yml +++ b/packages/protocol/src/protocol.yml @@ -1009,6 +1009,8 @@ Browser: events: close: + parameters: + reason: string? ConsoleMessage: type: mixin