capture_timeout.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. const log = require('../logger').create('launcher')
  2. /**
  3. * Kill browser if it does not capture in given `captureTimeout`.
  4. */
  5. function CaptureTimeoutLauncher (timer, captureTimeout) {
  6. if (!captureTimeout) {
  7. return
  8. }
  9. let pendingTimeoutId = null
  10. this.on('start', () => {
  11. pendingTimeoutId = timer.setTimeout(() => {
  12. pendingTimeoutId = null
  13. if (this.state !== this.STATE_BEING_CAPTURED) {
  14. return
  15. }
  16. log.warn(`${this.name} has not captured in ${captureTimeout} ms, killing.`)
  17. this.error = 'timeout'
  18. this.kill()
  19. }, captureTimeout)
  20. })
  21. this.on('done', () => {
  22. if (pendingTimeoutId) {
  23. timer.clearTimeout(pendingTimeoutId)
  24. pendingTimeoutId = null
  25. }
  26. })
  27. }
  28. CaptureTimeoutLauncher.decoratorFactory = function (timer,
  29. /* config.captureTimeout */ captureTimeout) {
  30. return function (launcher) {
  31. CaptureTimeoutLauncher.call(launcher, timer, captureTimeout)
  32. }
  33. }
  34. CaptureTimeoutLauncher.decoratorFactory.$inject = ['timer', 'config.captureTimeout']
  35. module.exports = CaptureTimeoutLauncher