diff --git a/packages/playwright-core/src/server/browserType.ts b/packages/playwright-core/src/server/browserType.ts index 2add19ea33..6e154b7e66 100644 --- a/packages/playwright-core/src/server/browserType.ts +++ b/packages/playwright-core/src/server/browserType.ts @@ -47,7 +47,7 @@ export const kNoXServerRunningError = 'Looks like you launched a headed browser export interface BrowserReadyState { onBrowserOutput(message: string): void; onBrowserExit(): void; - ready(): Promise; + waitUntilReady(): Promise<{ wsEndpoint?: string }>; } export abstract class BrowserType extends SdkObject { @@ -250,7 +250,7 @@ export abstract class BrowserType extends SdkObject { kill }; progress.cleanupWhenAborted(() => closeOrKill(progress.timeUntilDeadline())); - const wsEndpoint = await readyState?.ready(); + const wsEndpoint = (await readyState?.waitUntilReady())?.wsEndpoint; if (options.useWebSocket) { transport = await WebSocketTransport.connect(progress, wsEndpoint!); } else { diff --git a/packages/playwright-core/src/server/chromium/chromium.ts b/packages/playwright-core/src/server/chromium/chromium.ts index 323cd469a7..26ba870dbb 100644 --- a/packages/playwright-core/src/server/chromium/chromium.ts +++ b/packages/playwright-core/src/server/chromium/chromium.ts @@ -369,8 +369,9 @@ class ChromiumReadyState implements BrowserReadyState { onBrowserExit(): void { this._wsEndpoint.reject(new Error('Browser exited')); } - async ready(): Promise { - return this._wsEndpoint; + async waitUntilReady(): Promise<{ wsEndpoint?: string }> { + const wsEndpoint = await this._wsEndpoint; + return { wsEndpoint }; } } diff --git a/packages/playwright-core/src/server/firefox/firefox.ts b/packages/playwright-core/src/server/firefox/firefox.ts index 7439b9c2b7..45449b1757 100644 --- a/packages/playwright-core/src/server/firefox/firefox.ts +++ b/packages/playwright-core/src/server/firefox/firefox.ts @@ -104,11 +104,11 @@ class JugglerReadyState implements BrowserReadyState { } onBrowserExit(): void { // Unblock launch when browser prematurely exits. - this._jugglerPromise.resolve(); + this._jugglerPromise.reject(new Error('Browser exited')); } - async ready(): Promise { + async waitUntilReady(): Promise<{ wsEndpoint?: string }> { await this._jugglerPromise; - return undefined; + return { }; } }