@@ -34,6 +34,10 @@ export function loadPlaywright() {
3434 throw new Error ( "Playwright package not found; install playwright or set LOOPX_PLAYWRIGHT_PACKAGE" ) ;
3535}
3636
37+ // Playwright names the shell `chrome-headless-shell` on POSIX and
38+ // `chrome-headless-shell.exe` on Windows.
39+ const CHROME_HEADLESS_SHELL_NAMES = new Set ( [ "chrome-headless-shell" , "chrome-headless-shell.exe" ] ) ;
40+
3741function findChromeHeadlessShell ( root ) {
3842 if ( ! existsSync ( root ) ) {
3943 return null ;
@@ -46,7 +50,7 @@ function findChromeHeadlessShell(root) {
4650 const path = resolve ( current , entry . name ) ;
4751 if ( entry . isDirectory ( ) ) {
4852 pending . push ( path ) ;
49- } else if ( entry . isFile ( ) && entry . name === "chrome-headless-shell" ) {
53+ } else if ( entry . isFile ( ) && CHROME_HEADLESS_SHELL_NAMES . has ( entry . name ) ) {
5054 matches . push ( path ) ;
5155 }
5256 }
@@ -58,10 +62,14 @@ export async function launchBrowser(chromium) {
5862 const configuredPath = process . env . LOOPX_CHROME_HEADLESS_SHELL ;
5963 const playwrightPath = chromium . executablePath ( ) ;
6064 const executablePath = [ configuredPath , playwrightPath ]
61- . find ( ( candidate ) => candidate && basename ( candidate ) === "chrome-headless-shell" && existsSync ( candidate ) )
65+ . find ( ( candidate ) => candidate && CHROME_HEADLESS_SHELL_NAMES . has ( basename ( candidate ) ) && existsSync ( candidate ) )
6266 ?? findChromeHeadlessShell ( resolve ( homedir ( ) , ".cache/hyperframes/chrome" ) )
6367 ?? findChromeHeadlessShell ( resolve ( homedir ( ) , ".cache/ms-playwright" ) )
64- ?? findChromeHeadlessShell ( resolve ( homedir ( ) , "Library/Caches/ms-playwright" ) ) ;
68+ ?? findChromeHeadlessShell ( resolve ( homedir ( ) , "Library/Caches/ms-playwright" ) )
69+ // Windows installs the browser cache under %LOCALAPPDATA% instead.
70+ ?? ( process . env . LOCALAPPDATA
71+ ? findChromeHeadlessShell ( resolve ( process . env . LOCALAPPDATA , "ms-playwright" ) )
72+ : null ) ;
6573 if ( ! executablePath ) {
6674 throw new Error ( "chrome-headless-shell not found; set LOOPX_CHROME_HEADLESS_SHELL" ) ;
6775 }
0 commit comments