diff --git a/index.js b/index.js index a11601e..c9ff3b1 100644 --- a/index.js +++ b/index.js @@ -160,6 +160,34 @@ ChromeBrowser.prototype = { ChromeBrowser.$inject = ['baseBrowserDecorator', 'args'] +function headlessGetOptions (url, args, parent) { + return parent.call(this, url, args).concat(['--headless', '--disable-gpu', '--remote-debugging-port=9222']) +} + +var ChromeHeadlessBrowser = function (baseBrowserDecorator, args) { + ChromeBrowser.apply(this, arguments) + + var parentOptions = this._getOptions + this._getOptions = function (url) { + return headlessGetOptions.call(this, url, args, parentOptions) + } +} + +ChromeHeadlessBrowser.prototype = { + name: 'ChromeHeadless', + + 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(['google-chrome', 'google-chrome-stable']), + darwin: getChromeDarwin('/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'), + win32: getChromeExe('Chrome') + }, + ENV_CMD: 'CHROME_BIN' +} + +ChromeHeadlessBrowser.$inject = ['baseBrowserDecorator', 'args'] + function canaryGetOptions (url, args, parent) { // disable crankshaft optimizations, as it causes lot of memory leaks (as of Chrome 23.0) var flags = args.flags || [] @@ -197,6 +225,28 @@ ChromeCanaryBrowser.prototype = { ChromeCanaryBrowser.$inject = ['baseBrowserDecorator', 'args'] +var ChromeCanaryHeadlessBrowser = function (baseBrowserDecorator, args) { + ChromeCanaryBrowser.apply(this, arguments) + + var parentOptions = this._getOptions + this._getOptions = function (url) { + return headlessGetOptions.call(this, url, args, parentOptions) + } +} + +ChromeCanaryHeadlessBrowser.prototype = { + name: 'ChromeCanaryHeadless', + + DEFAULT_CMD: { + linux: getBin(['google-chrome-canary', 'google-chrome-unstable']), + darwin: getChromeDarwin('/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary'), + win32: getChromeExe('Chrome SxS') + }, + ENV_CMD: 'CHROME_CANARY_BIN' +} + +ChromeCanaryHeadlessBrowser.$inject = ['baseBrowserDecorator', 'args'] + ChromiumBrowser.prototype = { name: 'Chromium', @@ -235,7 +285,9 @@ DartiumBrowser.$inject = ['baseBrowserDecorator', 'args'] // PUBLISH DI MODULE module.exports = { 'launcher:Chrome': ['type', ChromeBrowser], + 'launcher:ChromeHeadless': ['type', ChromeHeadlessBrowser], 'launcher:ChromeCanary': ['type', ChromeCanaryBrowser], + 'launcher:ChromeCanaryHeadless': ['type', ChromeCanaryHeadlessBrowser], 'launcher:Chromium': ['type', ChromiumBrowser], 'launcher:Dartium': ['type', DartiumBrowser] } @@ -243,5 +295,6 @@ module.exports = { module.exports.test = { isJSFlags: isJSFlags, sanitizeJSFlags: sanitizeJSFlags, + headlessGetOptions: headlessGetOptions, canaryGetOptions: canaryGetOptions } diff --git a/test/jsflags.spec.js b/test/jsflags.spec.js index 83f2a67..0fe85ee 100644 --- a/test/jsflags.spec.js +++ b/test/jsflags.spec.js @@ -53,3 +53,20 @@ describe('canaryGetOptions', function () { ]) }) }) + +describe('headlessGetOptions', function () { + var headlessGetOptions = launcher.test.headlessGetOptions + + it('should return the headless flags', function () { + var parent = sinon.stub().returns(['-incognito']) + var context = {} + var url = 'http://localhost:9876' + var args = {} + expect(headlessGetOptions.call(context, url, args, parent)).to.be.eql([ + '-incognito', + '--headless', + '--disable-gpu', + '--remote-debugging-port=9222' + ]) + }) +})