From 3abd7c808ec778952fb5fd67872785ea5464d310 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Wed, 7 Feb 2024 17:41:21 -0800 Subject: [PATCH] fix(connectOverCDP): send custom headers in /json/version request (#29408) Fixes #29403. --- packages/playwright-core/src/server/chromium/chromium.ts | 5 +++-- tests/library/chromium/connect-over-cdp.spec.ts | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/playwright-core/src/server/chromium/chromium.ts b/packages/playwright-core/src/server/chromium/chromium.ts index 9c1fa53253..0849c1c6fe 100644 --- a/packages/playwright-core/src/server/chromium/chromium.ts +++ b/packages/playwright-core/src/server/chromium/chromium.ts @@ -82,7 +82,7 @@ export class Chromium extends BrowserType { const artifactsDir = await fs.promises.mkdtemp(ARTIFACTS_FOLDER); - const wsEndpoint = await urlToWSEndpoint(progress, endpointURL); + const wsEndpoint = await urlToWSEndpoint(progress, endpointURL, headersMap); progress.throwIfAborted(); const chromeTransport = await WebSocketTransport.connect(progress, wsEndpoint, headersMap); @@ -351,13 +351,14 @@ export class Chromium extends BrowserType { } } -async function urlToWSEndpoint(progress: Progress, endpointURL: string) { +async function urlToWSEndpoint(progress: Progress, endpointURL: string, headers: { [key: string]: string; }) { if (endpointURL.startsWith('ws')) return endpointURL; progress.log(` retrieving websocket url from ${endpointURL}`); const httpURL = endpointURL.endsWith('/') ? `${endpointURL}json/version/` : `${endpointURL}/json/version/`; const json = await fetchData({ url: httpURL, + headers, }, async (_, resp) => new Error(`Unexpected status ${resp.statusCode} when connecting to ${httpURL}.\n` + `This does not look like a DevTools server, try connecting via ws://.`) ); diff --git a/tests/library/chromium/connect-over-cdp.spec.ts b/tests/library/chromium/connect-over-cdp.spec.ts index 0262b73c7a..dd4e1c85fd 100644 --- a/tests/library/chromium/connect-over-cdp.spec.ts +++ b/tests/library/chromium/connect-over-cdp.spec.ts @@ -256,9 +256,9 @@ test('should send extra headers with connect request', async ({ browserType, ser } { const [request] = await Promise.all([ - server.waitForWebSocketConnectionRequest(), + server.waitForRequest('/json/version/'), browserType.connectOverCDP({ - endpointURL: `ws://localhost:${server.PORT}/ws`, + endpointURL: `http://localhost:${server.PORT}`, headers: { 'User-Agent': 'Playwright', 'foo': 'bar',