44 lines
1 KiB
JavaScript
44 lines
1 KiB
JavaScript
|
const log = require('../logger').create('launcher')
|
||
|
|
||
|
/**
|
||
|
* Kill browser if it does not capture in given `captureTimeout`.
|
||
|
*/
|
||
|
function CaptureTimeoutLauncher (timer, captureTimeout) {
|
||
|
if (!captureTimeout) {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
let pendingTimeoutId = null
|
||
|
|
||
|
this.on('start', () => {
|
||
|
pendingTimeoutId = timer.setTimeout(() => {
|
||
|
pendingTimeoutId = null
|
||
|
if (this.state !== this.STATE_BEING_CAPTURED) {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
log.warn(`${this.name} has not captured in ${captureTimeout} ms, killing.`)
|
||
|
this.error = 'timeout'
|
||
|
this.kill()
|
||
|
}, captureTimeout)
|
||
|
})
|
||
|
|
||
|
this.on('done', () => {
|
||
|
if (pendingTimeoutId) {
|
||
|
timer.clearTimeout(pendingTimeoutId)
|
||
|
pendingTimeoutId = null
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
CaptureTimeoutLauncher.decoratorFactory = function (timer,
|
||
|
/* config.captureTimeout */ captureTimeout) {
|
||
|
return function (launcher) {
|
||
|
CaptureTimeoutLauncher.call(launcher, timer, captureTimeout)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
CaptureTimeoutLauncher.decoratorFactory.$inject = ['timer', 'config.captureTimeout']
|
||
|
|
||
|
module.exports = CaptureTimeoutLauncher
|