From 1f5a3b5b0f11f8673618ec8a982a404d194d64be Mon Sep 17 00:00:00 2001 From: Damien Fetis Date: Wed, 26 Nov 2025 15:35:23 +0100 Subject: [PATCH] fix(recording): allow samesite iframe embeds to work with local recording * fix(recording): allow samesite iframe embeds to work with local recording Skip capture handle validation when inside an iframe to ensure local recording works. This only applies if the iframe is served from the same domain. * fix(recording): add missing line breaks for better readability in LocalRecordingManager --- .../Recording/LocalRecordingManager.web.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/react/features/recording/components/Recording/LocalRecordingManager.web.ts b/react/features/recording/components/Recording/LocalRecordingManager.web.ts index c6f21693a5..fce51aabe5 100644 --- a/react/features/recording/components/Recording/LocalRecordingManager.web.ts +++ b/react/features/recording/components/Recording/LocalRecordingManager.web.ts @@ -213,13 +213,16 @@ const LocalRecordingManager: ILocalRecordingManager = { }); const gdmVideoTrack = gdmStream.getVideoTracks()[0]; - const isBrowser = gdmVideoTrack.getSettings().displaySurface === 'browser'; - const matchesHandle = (supportsCaptureHandle // @ts-ignore - && gdmVideoTrack.getCaptureHandle()?.handle === `JitsiMeet-${tabId}`); - if (!isBrowser || !matchesHandle) { - gdmStream.getTracks().forEach((track: MediaStreamTrack) => track.stop()); - throw new Error('WrongSurfaceSelected'); + if (supportsCaptureHandle) { + const isBrowser = gdmVideoTrack.getSettings().displaySurface === 'browser'; + const matchesHandle = (supportsCaptureHandle // @ts-ignore + && gdmVideoTrack.getCaptureHandle()?.handle === `JitsiMeet-${tabId}`); + + if (!isBrowser || !matchesHandle) { + gdmStream.getTracks().forEach((track: MediaStreamTrack) => track.stop()); + throw new Error('WrongSurfaceSelected'); + } } this.initializeAudioMixer();