var fs = require('fs'); var ChromeBrowser = function(baseBrowserDecorator, args) { baseBrowserDecorator(this); var flags = args.flags || []; this._getOptions = function(url) { // Chrome CLI options // http://peter.sh/experiments/chromium-command-line-switches/ return [ '--user-data-dir=' + this._tempDir, '--no-default-browser-check', '--no-first-run', '--disable-default-apps', '--start-maximized' ].concat(flags, [url]); }; }; // Return location of chrome.exe file for a given Chrome directory (available: "Chrome", "Chrome SxS"). function getChromeExe(chromeDirName) { if (process.platform !== 'win32') { return null; } var windowsChromeDirectory, i, prefix; var suffix = '\\Google\\'+ chromeDirName + '\\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)) { windowsChromeDirectory = prefix + suffix; break; } } return windowsChromeDirectory; } ChromeBrowser.prototype = { name: 'Chrome', DEFAULT_CMD: { linux: 'google-chrome', darwin: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', win32: getChromeExe('Chrome') }, ENV_CMD: 'CHROME_BIN' }; ChromeBrowser.$inject = ['baseBrowserDecorator', 'args']; var ChromeCanaryBrowser = function(baseBrowserDecorator, args) { ChromeBrowser.call(this, baseBrowserDecorator, args); var parentOptions = this._getOptions; this._getOptions = function(url) { // disable crankshaft optimizations, as it causes lot of memory leaks (as of Chrome 23.0) return parentOptions.call(this, url).concat(['--js-flags="--nocrankshaft --noopt"']); }; }; ChromeCanaryBrowser.prototype = { name: 'ChromeCanary', DEFAULT_CMD: { linux: 'google-chrome-canary', darwin: '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary', win32: getChromeExe('Chrome SxS') }, ENV_CMD: 'CHROME_CANARY_BIN' }; ChromeCanaryBrowser.$inject = ['baseBrowserDecorator', 'args']; // PUBLISH DI MODULE module.exports = { 'launcher:Chrome': ['type', ChromeBrowser], 'launcher:ChromeCanary': ['type', ChromeCanaryBrowser] };