Skip to content

Commit 7446181

Browse files
dpoguedignifiedquire
authored andcommitted
feat: add support for headless Chrome/ChromeCanary
1 parent d81da0e commit 7446181

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

index.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,34 @@ ChromeBrowser.prototype = {
160160

161161
ChromeBrowser.$inject = ['baseBrowserDecorator', 'args']
162162

163+
function headlessGetOptions (url, args, parent) {
164+
return parent.call(this, url, args).concat(['--headless', '--disable-gpu', '--remote-debugging-port=9222'])
165+
}
166+
167+
var ChromeHeadlessBrowser = function (baseBrowserDecorator, args) {
168+
ChromeBrowser.apply(this, arguments)
169+
170+
var parentOptions = this._getOptions
171+
this._getOptions = function (url) {
172+
return headlessGetOptions.call(this, url, args, parentOptions)
173+
}
174+
}
175+
176+
ChromeHeadlessBrowser.prototype = {
177+
name: 'ChromeHeadless',
178+
179+
DEFAULT_CMD: {
180+
// Try chromium-browser before chromium to avoid conflict with the legacy
181+
// chromium-bsu package previously known as 'chromium' in Debian and Ubuntu.
182+
linux: getBin(['google-chrome', 'google-chrome-stable']),
183+
darwin: getChromeDarwin('/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'),
184+
win32: getChromeExe('Chrome')
185+
},
186+
ENV_CMD: 'CHROME_BIN'
187+
}
188+
189+
ChromeHeadlessBrowser.$inject = ['baseBrowserDecorator', 'args']
190+
163191
function canaryGetOptions (url, args, parent) {
164192
// disable crankshaft optimizations, as it causes lot of memory leaks (as of Chrome 23.0)
165193
var flags = args.flags || []
@@ -197,6 +225,28 @@ ChromeCanaryBrowser.prototype = {
197225

198226
ChromeCanaryBrowser.$inject = ['baseBrowserDecorator', 'args']
199227

228+
var ChromeCanaryHeadlessBrowser = function (baseBrowserDecorator, args) {
229+
ChromeCanaryBrowser.apply(this, arguments)
230+
231+
var parentOptions = this._getOptions
232+
this._getOptions = function (url) {
233+
return headlessGetOptions.call(this, url, args, parentOptions)
234+
}
235+
}
236+
237+
ChromeCanaryHeadlessBrowser.prototype = {
238+
name: 'ChromeCanaryHeadless',
239+
240+
DEFAULT_CMD: {
241+
linux: getBin(['google-chrome-canary', 'google-chrome-unstable']),
242+
darwin: getChromeDarwin('/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary'),
243+
win32: getChromeExe('Chrome SxS')
244+
},
245+
ENV_CMD: 'CHROME_CANARY_BIN'
246+
}
247+
248+
ChromeCanaryHeadlessBrowser.$inject = ['baseBrowserDecorator', 'args']
249+
200250
ChromiumBrowser.prototype = {
201251
name: 'Chromium',
202252

@@ -235,13 +285,16 @@ DartiumBrowser.$inject = ['baseBrowserDecorator', 'args']
235285
// PUBLISH DI MODULE
236286
module.exports = {
237287
'launcher:Chrome': ['type', ChromeBrowser],
288+
'launcher:ChromeHeadless': ['type', ChromeHeadlessBrowser],
238289
'launcher:ChromeCanary': ['type', ChromeCanaryBrowser],
290+
'launcher:ChromeCanaryHeadless': ['type', ChromeCanaryHeadlessBrowser],
239291
'launcher:Chromium': ['type', ChromiumBrowser],
240292
'launcher:Dartium': ['type', DartiumBrowser]
241293
}
242294

243295
module.exports.test = {
244296
isJSFlags: isJSFlags,
245297
sanitizeJSFlags: sanitizeJSFlags,
298+
headlessGetOptions: headlessGetOptions,
246299
canaryGetOptions: canaryGetOptions
247300
}

test/jsflags.spec.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,20 @@ describe('canaryGetOptions', function () {
5353
])
5454
})
5555
})
56+
57+
describe('headlessGetOptions', function () {
58+
var headlessGetOptions = launcher.test.headlessGetOptions
59+
60+
it('should return the headless flags', function () {
61+
var parent = sinon.stub().returns(['-incognito'])
62+
var context = {}
63+
var url = 'http://localhost:9876'
64+
var args = {}
65+
expect(headlessGetOptions.call(context, url, args, parent)).to.be.eql([
66+
'-incognito',
67+
'--headless',
68+
'--disable-gpu',
69+
'--remote-debugging-port=9222'
70+
])
71+
})
72+
})

0 commit comments

Comments
 (0)