From d8a498fe833df9ffdb70f521cc09a17670fd4a7d Mon Sep 17 00:00:00 2001 From: Billy Vong Date: Mon, 25 Mar 2024 14:31:29 -0400 Subject: [PATCH 1/2] fix(canvas): `createImageBitmap` throws when canvas size is 0 Fixes https://sentry.sentry.io/issues/4747137532/?project=11276 --- packages/rrweb/src/record/observers/canvas/canvas-manager.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/rrweb/src/record/observers/canvas/canvas-manager.ts b/packages/rrweb/src/record/observers/canvas/canvas-manager.ts index c6e29a2e47..700bde23d3 100644 --- a/packages/rrweb/src/record/observers/canvas/canvas-manager.ts +++ b/packages/rrweb/src/record/observers/canvas/canvas-manager.ts @@ -343,6 +343,9 @@ export class CanvasManager implements CanvasManagerInterface { getCanvas(canvasElement).forEach((canvas: HTMLCanvasElement) => { const id = this.mirror.getId(canvas); if (snapshotInProgressMap.get(id)) return; + // Don't do anything if canvas height/width is 0, otherwise causes + // `createImageBitmap()` to throw + if (canvas.width === 0 || canvas.height === 0) return; snapshotInProgressMap.set(id, true); if ( !isManualSnapshot && From 19eca3faf17dc33f9ca92c345cce5cc384c19737 Mon Sep 17 00:00:00 2001 From: Billy Vong Date: Tue, 26 Mar 2024 18:21:45 -0400 Subject: [PATCH 2/2] Update packages/rrweb/src/record/observers/canvas/canvas-manager.ts Co-authored-by: Francesco Novy --- packages/rrweb/src/record/observers/canvas/canvas-manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rrweb/src/record/observers/canvas/canvas-manager.ts b/packages/rrweb/src/record/observers/canvas/canvas-manager.ts index 700bde23d3..1945725bb4 100644 --- a/packages/rrweb/src/record/observers/canvas/canvas-manager.ts +++ b/packages/rrweb/src/record/observers/canvas/canvas-manager.ts @@ -345,7 +345,7 @@ export class CanvasManager implements CanvasManagerInterface { if (snapshotInProgressMap.get(id)) return; // Don't do anything if canvas height/width is 0, otherwise causes // `createImageBitmap()` to throw - if (canvas.width === 0 || canvas.height === 0) return; + if (!canvas.width || !canvas.height) return; snapshotInProgressMap.set(id, true); if ( !isManualSnapshot &&