Skip to content

Commit 62df301

Browse files
committed
fix: handle Chrome location on Windows
Currently the task assumes Chrome is located under process.env.LOCALAPPDATA directory. This may not be as Chrome can be installed globally, to process.env["PROGRAMFILES(X86)"]. Should Chrome be released for Windows in a 64-bit flavor, it can be located under process.env.PROGRAMFILES. This commit adds fallbacks to those paths, being forward-compatible in case 64-bit Chrome gets released for Windows.
1 parent 9ebd997 commit 62df301

1 file changed

Lines changed: 23 additions & 17 deletions

File tree

index.js

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
var os = require('os'),
2-
fs = require('fs');
1+
var fs = require('fs');
32

43
var ChromeBrowser = function(baseBrowserDecorator, args) {
54
baseBrowserDecorator(this);
@@ -19,13 +18,33 @@ var ChromeBrowser = function(baseBrowserDecorator, args) {
1918
};
2019
};
2120

21+
// Return location of chrome.exe file for a given Chrome directory (available: "Chrome", "Chrome SxS").
22+
function getChromeExe(chromeDirName) {
23+
if (process.platform !== 'win32') {
24+
return null;
25+
}
26+
var windowsChromeDirectory, i, prefix;
27+
var suffix = '\\Google\\'+ chromeDirName + '\\Application\\chrome.exe';
28+
var prefixes = [process.env.LOCALAPPDATA, process.env.PROGRAMFILES, process.env['PROGRAMFILES(X86)']];
29+
30+
for (i = 0; i < prefixes.length; i++) {
31+
prefix = prefixes[i];
32+
if (fs.existsSync(prefix + suffix)) {
33+
windowsChromeDirectory = prefix + suffix;
34+
break;
35+
}
36+
}
37+
38+
return windowsChromeDirectory;
39+
}
40+
2241
ChromeBrowser.prototype = {
2342
name: 'Chrome',
2443

2544
DEFAULT_CMD: {
2645
linux: 'google-chrome',
2746
darwin: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
28-
win32: windowsChromePath('\\Google\\Chrome\\Application\\chrome.exe')
47+
win32: getChromeExe('Chrome')
2948
},
3049
ENV_CMD: 'CHROME_BIN'
3150
};
@@ -49,26 +68,13 @@ ChromeCanaryBrowser.prototype = {
4968
DEFAULT_CMD: {
5069
linux: 'google-chrome-canary',
5170
darwin: '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',
52-
win32: windowsChromePath('\\Google\\Chrome SxS\\Application\\chrome.exe')
71+
win32: getChromeExe('Chrome SxS')
5372
},
5473
ENV_CMD: 'CHROME_CANARY_BIN'
5574
};
5675

5776
ChromeCanaryBrowser.$inject = ['baseBrowserDecorator', 'args'];
5877

59-
var windowsChromePath = function(chromeExe) {
60-
if (os.platform() !== 'win32') {
61-
return '';
62-
}
63-
64-
var globalInstall = os.arch() === 'x64' ? process.env['ProgramFiles(x86)'] : process.env.ProgramFiles;
65-
66-
if (fs.existsSync(globalInstall + chromeExe)) {
67-
return globalInstall + chromeExe;
68-
}
69-
70-
return process.env.LOCALAPPDATA + chromeExe;
71-
}
7278

7379
// PUBLISH DI MODULE
7480
module.exports = {

0 commit comments

Comments
 (0)