diff --git a/packages/playwright-core/src/remote/playwrightConnection.ts b/packages/playwright-core/src/remote/playwrightConnection.ts index c575d4006a202..6bd35068ad4bc 100644 --- a/packages/playwright-core/src/remote/playwrightConnection.ts +++ b/packages/playwright-core/src/remote/playwrightConnection.ts @@ -192,7 +192,10 @@ export class PlaywrightConnection { } if (!browser) { - browser = await playwright[(this._options.browserName || 'chromium') as 'chromium'].launch(serverSideCallMetadata(), this._options.launchOptions); + browser = await playwright[(this._options.browserName || 'chromium') as 'chromium'].launch(serverSideCallMetadata(), { + ...this._options.launchOptions, + headless: !!process.env.PW_DEBUG_CONTROLLER_HEADLESS, + }); browser.on(Browser.Events.Disconnected, () => { // Underlying browser did close for some reason - force disconnect the client. this.close({ code: 1001, reason: 'Browser closed' }); @@ -256,6 +259,8 @@ function launchOptionsHash(options: LaunchOptions) { if (copy[key] === defaultLaunchOptions[key]) delete copy[key]; } + for (const key of optionsThatAllowBrowserReuse) + delete copy[key]; return JSON.stringify(copy); } @@ -267,3 +272,7 @@ const defaultLaunchOptions: LaunchOptions = { headless: true, devtools: false, }; + +const optionsThatAllowBrowserReuse: (keyof LaunchOptions)[] = [ + 'headless', +]; diff --git a/tests/library/debug-controller.spec.ts b/tests/library/debug-controller.spec.ts index 843e01f1d9291..b794c8ffd1b01 100644 --- a/tests/library/debug-controller.spec.ts +++ b/tests/library/debug-controller.spec.ts @@ -30,6 +30,7 @@ type Fixtures = { const test = baseTest.extend({ wsEndpoint: async ({ }, use) => { + process.env.PW_DEBUG_CONTROLLER_HEADLESS = '1'; const server = new PlaywrightServer({ path: '/' + createGuid(), maxConnections: Number.MAX_VALUE, enableSocksProxy: false }); const wsEndpoint = await server.listen(); await use(wsEndpoint);