From 85decdc28d7d2128e6d2946a72f4d99dd5dbb48a Mon Sep 17 00:00:00 2001 From: Alex Rudenko Date: Wed, 23 Feb 2022 20:21:17 +0100 Subject: [PATCH] fix: regression in --user-data-dir handling (#8060) --- src/node/Launcher.ts | 4 ---- test/launcher.spec.ts | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/node/Launcher.ts b/src/node/Launcher.ts index e80c1690a6271..6d5865bbd7809 100644 --- a/src/node/Launcher.ts +++ b/src/node/Launcher.ts @@ -123,10 +123,6 @@ class ChromeLauncher implements ProductLauncher { if (userDataDirIndex !== -1) { userDataDir = chromeArguments[userDataDirIndex].split('=')[1]; - if (!fs.existsSync(userDataDir)) { - throw new Error(`Chrome user data dir not found at '${userDataDir}'`); - } - isTempUserDataDir = false; } else { userDataDir = await mkdtempAsync( diff --git a/test/launcher.spec.ts b/test/launcher.spec.ts index 7fa0744562cd6..6266c59acf6ee 100644 --- a/test/launcher.spec.ts +++ b/test/launcher.spec.ts @@ -276,6 +276,31 @@ describe('Launcher specs', function () { // This might throw. See https://github.com/puppeteer/puppeteer/issues/2778 await rmAsync(userDataDir).catch(() => {}); }); + itChromeOnly('userDataDir argument with non-existent dir', async () => { + const { isChrome, puppeteer, defaultBrowserOptions } = getTestState(); + + const userDataDir = await mkdtempAsync(TMP_FOLDER); + await rmAsync(userDataDir); + const options = Object.assign({}, defaultBrowserOptions); + if (isChrome) { + options.args = [ + ...(defaultBrowserOptions.args || []), + `--user-data-dir=${userDataDir}`, + ]; + } else { + options.args = [ + ...(defaultBrowserOptions.args || []), + '-profile', + userDataDir, + ]; + } + const browser = await puppeteer.launch(options); + expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); + await browser.close(); + expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); + // This might throw. See https://github.com/puppeteer/puppeteer/issues/2778 + await rmAsync(userDataDir).catch(() => {}); + }); it('userDataDir option should restore state', async () => { const { server, puppeteer, defaultBrowserOptions } = getTestState();