Skip to content

Commit

Permalink
feat: add support for headless Chrome/ChromeCanary
Browse files Browse the repository at this point in the history
  • Loading branch information
dpogue authored and dignifiedquire committed May 1, 2017
1 parent d81da0e commit 7446181
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
53 changes: 53 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 || []
Expand Down Expand Up @@ -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',

Expand Down Expand Up @@ -235,13 +285,16 @@ 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]
}

module.exports.test = {
isJSFlags: isJSFlags,
sanitizeJSFlags: sanitizeJSFlags,
headlessGetOptions: headlessGetOptions,
canaryGetOptions: canaryGetOptions
}
17 changes: 17 additions & 0 deletions test/jsflags.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
])
})
})

0 comments on commit 7446181

Please sign in to comment.