From 5e5fed1deb6ba963a9e905711de5827696ccb248 Mon Sep 17 00:00:00 2001 From: Johan Bay Date: Fri, 23 Oct 2020 12:45:47 +0200 Subject: [PATCH] fix: ignore spurious bindingCalled events (#6538) --- src/common/DOMWorld.ts | 10 +++++++++- src/common/Page.ts | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/common/DOMWorld.ts b/src/common/DOMWorld.ts index 825d0c53..de09fe36 100644 --- a/src/common/DOMWorld.ts +++ b/src/common/DOMWorld.ts @@ -537,7 +537,15 @@ export class DOMWorld { private async _onBindingCalled( event: Protocol.Runtime.BindingCalledEvent ): Promise { - const { type, name, seq, args } = JSON.parse(event.payload); + let payload: { type: string; name: string; seq: number; args: unknown[] }; + try { + payload = JSON.parse(event.payload); + } catch { + // The binding was either called by something in the page or it was + // called before our wrapper was initialized. + return; + } + const { type, name, seq, args } = payload; if (type !== 'internal' || !this._ctxBindings.has(name)) return; if (!this._hasContext()) return; const context = await this.executionContext(); diff --git a/src/common/Page.ts b/src/common/Page.ts index 215e4857..e805e2e7 100644 --- a/src/common/Page.ts +++ b/src/common/Page.ts @@ -1132,7 +1132,15 @@ export class Page extends EventEmitter { private async _onBindingCalled( event: Protocol.Runtime.BindingCalledEvent ): Promise { - const { type, name, seq, args } = JSON.parse(event.payload); + let payload: { type: string; name: string; seq: number; args: unknown[] }; + try { + payload = JSON.parse(event.payload); + } catch { + // The binding was either called by something in the page or it was + // called before our wrapper was initialized. + return; + } + const { type, name, seq, args } = payload; if (type !== 'exposedFun' || !this._pageBindings.has(name)) return; let expression = null; try {