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