diff --git a/src/server/supplements/debugger.ts b/src/server/supplements/debugger.ts index 46deba7ba3..3a75674ade 100644 --- a/src/server/supplements/debugger.ts +++ b/src/server/supplements/debugger.ts @@ -31,6 +31,7 @@ export class Debugger extends EventEmitter implements InstrumentationListener { static Events = { PausedStateChanged: 'pausedstatechanged' }; + private _muted = false; constructor(context: BrowserContext) { super(); @@ -47,12 +48,20 @@ export class Debugger extends EventEmitter implements InstrumentationListener { return (context as any)[symbol] as Debugger | undefined; } + async setMuted(muted: boolean) { + this._muted = muted; + } + async onBeforeCall(sdkObject: SdkObject, metadata: CallMetadata): Promise { - if (shouldPauseOnCall(sdkObject, metadata) || (this._pauseOnNextStatement && shouldPauseOnStep(sdkObject, metadata))) + if (this._muted) + return; + if (shouldPauseOnCall(sdkObject, metadata) || (this._pauseOnNextStatement && shouldPauseOnNonInputStep(sdkObject, metadata))) await this.pause(sdkObject, metadata); } async onBeforeInputAction(sdkObject: SdkObject, metadata: CallMetadata): Promise { + if (this._muted) + return; if (this._enabled && this._pauseOnNextStatement) await this.pause(sdkObject, metadata); } @@ -62,6 +71,8 @@ export class Debugger extends EventEmitter implements InstrumentationListener { } async pause(sdkObject: SdkObject, metadata: CallMetadata) { + if (this._muted) + return; this._enabled = true; metadata.pauseStartTime = monotonicTime(); const result = new Promise(resolve => { @@ -106,6 +117,8 @@ function shouldPauseOnCall(sdkObject: SdkObject, metadata: CallMetadata): boolea return metadata.method === 'pause'; } -function shouldPauseOnStep(sdkObject: SdkObject, metadata: CallMetadata): boolean { - return metadata.method === 'goto' || metadata.method === 'close'; +const nonInputActionsToStep = new Set(['close', 'evaluate', 'evaluateHandle', 'goto', 'setContent']); + +function shouldPauseOnNonInputStep(sdkObject: SdkObject, metadata: CallMetadata): boolean { + return nonInputActionsToStep.has(metadata.method); } diff --git a/src/server/supplements/recorderSupplement.ts b/src/server/supplements/recorderSupplement.ts index e237fdb2d6..2efb5a1611 100644 --- a/src/server/supplements/recorderSupplement.ts +++ b/src/server/supplements/recorderSupplement.ts @@ -262,6 +262,7 @@ export class RecorderSupplement implements InstrumentationListener { this._mode = mode; this._recorderApp?.setMode(this._mode); this._generator.setEnabled(this._mode === 'recording'); + Debugger.lookup(this._context)!.setMuted(this._mode === 'recording'); if (this._mode !== 'none') this._context.pages()[0].bringToFront().catch(() => {}); }