diff --git a/packages/playwright-core/src/remote/playwrightConnection.ts b/packages/playwright-core/src/remote/playwrightConnection.ts index d3b8f1762a78b..005918f686a07 100644 --- a/packages/playwright-core/src/remote/playwrightConnection.ts +++ b/packages/playwright-core/src/remote/playwrightConnection.ts @@ -220,7 +220,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' }); @@ -284,6 +287,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); } @@ -295,3 +300,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);