chore: do not leak recorder event registrations (#21751)

This commit is contained in:
Max Schmitt 2023-03-17 16:16:08 +01:00 committed by GitHub
parent 53d341be01
commit 4a0dec6807
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -42,6 +42,7 @@ import { EventEmitter } from 'events';
import { raceAgainstTimeout } from '../utils/timeoutRunner';
import type { Language, LanguageGenerator } from './recorder/language';
import { locatorOrSelectorAsSelector } from '../utils/isomorphic/locatorParser';
import { eventsHelper, type RegisteredListener } from './../utils/eventsHelper';
type BindingSource = { frame: Frame, page: Page };
@ -349,6 +350,7 @@ class ContextRecorder extends EventEmitter {
private _throttledOutputFile: ThrottledFile | null = null;
private _orderedLanguages: LanguageGenerator[] = [];
private _testIdAttributeName: string = 'data-testid';
private _listeners: RegisteredListener[] = [];
constructor(context: BrowserContext, params: channels.BrowserContextRecorderSupplementEnableParams) {
super();
@ -387,9 +389,9 @@ class ContextRecorder extends EventEmitter {
context.on(BrowserContext.Events.BeforeClose, () => {
this._throttledOutputFile?.flush();
});
process.on('exit', () => {
this._listeners.push(eventsHelper.addEventListener(process, 'exit', () => {
this._throttledOutputFile?.flush();
});
}));
this._generator = generator;
}
@ -447,6 +449,7 @@ class ContextRecorder extends EventEmitter {
for (const timer of this._timers)
clearTimeout(timer);
this._timers.clear();
eventsHelper.removeEventListeners(this._listeners);
}
private async _onPage(page: Page) {