diff --git a/index.js b/index.js index 4142da1..ec074f0 100644 --- a/index.js +++ b/index.js @@ -58,6 +58,50 @@ function getChromeExe(chromeDirName) { return windowsChromeDirectory; } +var ChromiumBrowser = function(baseBrowserDecorator, args) { + baseBrowserDecorator(this); + + var flags = args.flags || []; + + this._getOptions = function(url) { + // Chromium CLI options + // http://peter.sh/experiments/chromium-command-line-switches/ + flags.forEach(function(flag, i) { + if(isJSFlags(flag)) flags[i] = sanitizeJSFlags(flag); + }); + + return [ + '--user-data-dir=' + this._tempDir, + '--no-default-browser-check', + '--no-first-run', + '--disable-default-apps', + '--disable-popup-blocking', + '--disable-translate' + ].concat(flags, [url]); + }; +}; + +// Return location of Chromium's chrome.exe file. +function getChromiumExe(chromeDirName) { + // Only run these checks on win32 + if (process.platform !== 'win32') { + return null; + } + var windowsChromiumDirectory, i, prefix; + var suffix = '\\Chromium\\Application\\chrome.exe'; + var prefixes = [process.env.LOCALAPPDATA, process.env.PROGRAMFILES, process.env['PROGRAMFILES(X86)']]; + + for (i = 0; i < prefixes.length; i++) { + prefix = prefixes[i]; + if (fs.existsSync(prefix + suffix)) { + windowsChromiumDirectory = prefix + suffix; + break; + } + } + + return windowsChromiumDirectory; +} + function getBin(commands) { // Don't run these checks on win32 if (process.platform !== 'linux') { @@ -79,9 +123,7 @@ ChromeBrowser.prototype = { name: 'Chrome', DEFAULT_CMD: { - // Try chromium-browser before chromium to avoid conflict with the legacy - // chromium-bsu package previously known as 'chromium' in Debian and Ubuntu. - linux: getBin(['chromium-browser', 'chromium', 'google-chrome', 'google-chrome-stable']), + linux: getBin(['google-chrome', 'google-chrome-stable']), darwin: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', win32: getChromeExe('Chrome') }, @@ -128,6 +170,21 @@ ChromeCanaryBrowser.prototype = { ChromeCanaryBrowser.$inject = ['baseBrowserDecorator', 'args']; +ChromiumBrowser.prototype = { + name: 'Chromium', + + DEFAULT_CMD: { + // Try chromium-browser before chromium to avoid conflict with the legacy + // chromium-bsu package previously known as 'chromium' in Debian and Ubuntu. + linux: getBin(['chromium-browser', 'chromium']), + darwin: '/Applications/Chromium.app/Contents/MacOS/Chromium', + win32: getChromiumExe() + }, + ENV_CMD: 'CHROMIUM_BIN' +}; + +ChromiumBrowser.$inject = ['baseBrowserDecorator', 'args']; + var DartiumBrowser = function(baseBrowserDecorator, args) { ChromeBrowser.call(this, baseBrowserDecorator, args); @@ -153,6 +210,7 @@ DartiumBrowser.$inject = ['baseBrowserDecorator', 'args']; module.exports = { 'launcher:Chrome': ['type', ChromeBrowser], 'launcher:ChromeCanary': ['type', ChromeCanaryBrowser], + 'launcher:Chromium': ['type', ChromiumBrowser], 'launcher:Dartium': ['type', DartiumBrowser] }; @@ -160,4 +218,4 @@ module.exports.test = { isJSFlags: isJSFlags, sanitizeJSFlags: sanitizeJSFlags, canaryGetOptions: canaryGetOptions -} \ No newline at end of file +}