From 4fb44c267c0fb3607f514dc3f432b7e7dffd7d18 Mon Sep 17 00:00:00 2001 From: Alex Rudenko Date: Tue, 9 Dec 2025 13:57:32 +0100 Subject: [PATCH] fix: map channel for resolveDefaultUserDataDir --- src/browser.ts | 86 ++++++++++++++++++------------------------- tests/browser.test.ts | 2 +- 2 files changed, 37 insertions(+), 51 deletions(-) diff --git a/src/browser.ts b/src/browser.ts index 181ffe910..74ad6ee43 100644 --- a/src/browser.ts +++ b/src/browser.ts @@ -14,14 +14,8 @@ import type { ChromeReleaseChannel, LaunchOptions, Target, - BrowsersChromeReleaseChannel, -} from './third_party/index.js'; -import { - puppeteer, - resolveDefaultUserDataDir, - detectBrowserPlatform, - BrowserEnum, } from './third_party/index.js'; +import {puppeteer} from './third_party/index.js'; let browser: Browser | undefined; @@ -76,52 +70,44 @@ export async function ensureBrowserConnected(options: { } else if (options.browserURL) { connectOptions.browserURL = options.browserURL; } else if (channel || options.userDataDir) { - let userDataDir = options.userDataDir; - if (!userDataDir) { + const userDataDir = options.userDataDir; + if (userDataDir) { + // TODO: re-expose this logic via Puppeteer. + const portPath = path.join(userDataDir, 'DevToolsActivePort'); + try { + const fileContent = await fs.promises.readFile(portPath, 'utf8'); + const [rawPort, rawPath] = fileContent + .split('\n') + .map(line => { + return line.trim(); + }) + .filter(line => { + return !!line; + }); + if (!rawPort || !rawPath) { + throw new Error(`Invalid DevToolsActivePort '${fileContent}' found`); + } + const port = parseInt(rawPort, 10); + if (isNaN(port) || port <= 0 || port > 65535) { + throw new Error(`Invalid port '${rawPort}' found`); + } + const browserWSEndpoint = `ws://127.0.0.1:${port}${rawPath}`; + connectOptions.browserWSEndpoint = browserWSEndpoint; + } catch (error) { + throw new Error( + `Could not connect to Chrome in ${userDataDir}. Check if Chrome is running and remote debugging is enabled.`, + { + cause: error, + }, + ); + } + } else { if (!channel) { throw new Error('Channel must be provided if userDataDir is missing'); } - const platform = detectBrowserPlatform(); - if (!platform) { - throw new Error('Could not detect required browser platform'); - } - userDataDir = resolveDefaultUserDataDir( - BrowserEnum.CHROME, - platform, - (channel === 'stable' - ? 'chrome' - : `chrome-${channel}`) as BrowsersChromeReleaseChannel, - ); - } - - // TODO: re-expose this logic via Puppeteer. - const portPath = path.join(userDataDir, 'DevToolsActivePort'); - try { - const fileContent = await fs.promises.readFile(portPath, 'utf8'); - const [rawPort, rawPath] = fileContent - .split('\n') - .map(line => { - return line.trim(); - }) - .filter(line => { - return !!line; - }); - if (!rawPort || !rawPath) { - throw new Error(`Invalid DevToolsActivePort '${fileContent}' found`); - } - const port = parseInt(rawPort, 10); - if (isNaN(port) || port <= 0 || port > 65535) { - throw new Error(`Invalid port '${rawPort}' found`); - } - const browserWSEndpoint = `ws://127.0.0.1:${port}${rawPath}`; - connectOptions.browserWSEndpoint = browserWSEndpoint; - } catch (error) { - throw new Error( - `Could not connect to Chrome in ${userDataDir}. Check if Chrome is running and remote debugging is enabled.`, - { - cause: error, - }, - ); + connectOptions.channel = ( + channel === 'stable' ? 'chrome' : `chrome-${channel}` + ) as ChromeReleaseChannel; } } else { throw new Error( diff --git a/tests/browser.test.ts b/tests/browser.test.ts index 1519a62fd..45c09a3c2 100644 --- a/tests/browser.test.ts +++ b/tests/browser.test.ts @@ -90,7 +90,7 @@ describe('browser', () => { devtools: false, }); assert.ok(connectedBrowser); - assert.ok(connectedBrowser.isConnected()); + assert.ok(connectedBrowser.connected); connectedBrowser.disconnect(); } finally { await browser.close();