From f484b20eeaa3cf14eb1453b5d4e769818d9c913d Mon Sep 17 00:00:00 2001 From: Joel Einbinder Date: Thu, 2 Jul 2020 08:02:27 -0700 Subject: [PATCH] fix(recorder): allow node to close gracefully (#2817) --- src/debug/recorderController.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/debug/recorderController.ts b/src/debug/recorderController.ts index 82eb5ccaf9..2d7add4344 100644 --- a/src/debug/recorderController.ts +++ b/src/debug/recorderController.ts @@ -28,6 +28,7 @@ export class RecorderController { private _performingAction = false; private _pageAliases = new Map(); private _lastPopupOrdinal = 0; + private _timers = new Set(); constructor(context: BrowserContextBase, output: Writable) { this._output = new TerminalOutput(output || process.stdout); @@ -49,6 +50,12 @@ export class RecorderController { page.on(Events.Page.FrameNavigated, (frame: frames.Frame) => this._onFrameNavigated(frame)); page.on(Events.Page.Popup, (popup: Page) => this._onPopup(page, popup)); }); + + context.once(Events.BrowserContext.Close, () => { + for (const timer of this._timers) + clearTimeout(timer); + this._timers.clear(); + }); } private async _performAction(frame: frames.Frame, action: actions.Action) { @@ -70,7 +77,11 @@ export class RecorderController { if (action.name === 'select') await frame.selectOption(action.selector, action.options); this._performingAction = false; - setTimeout(() => action.committed = true, 5000); + const timer = setTimeout(() => { + action.committed = true; + this._timers.delete(timer); + }, 5000); + this._timers.add(timer); } private async _recordAction(frame: frames.Frame, action: actions.Action) {