From 2896fc6cb4f6f35df4b0a0c22c9be55ad3c8e19a Mon Sep 17 00:00:00 2001 From: Kagami Sascha Rosylight <saschanaz@outlook.com> Date: Sun, 13 Aug 2023 05:29:13 +0200 Subject: [PATCH] fix(frontend/MkUrlPreview): allow fullscreen from tweets (#11712) * fix(frontend/MkUrlPreview): allow fullscreen from tweets * Update url-preview.test.ts --- packages/frontend/src/components/MkUrlPreview.vue | 9 ++++++++- packages/frontend/test/url-preview.test.ts | 11 ++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue index 1a194ae9db..1f9c336eee 100644 --- a/packages/frontend/src/components/MkUrlPreview.vue +++ b/packages/frontend/src/components/MkUrlPreview.vue @@ -28,7 +28,14 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <template v-else-if="tweetId && tweetExpanded"> <div ref="twitter"> - <iframe ref="tweet" scrolling="no" frameborder="no" :style="{ position: 'relative', width: '100%', height: `${tweetHeight}px` }" :src="`https://platform.twitter.com/embed/index.html?embedId=${embedId}&hideCard=false&hideThread=false&lang=en&theme=${defaultStore.state.darkMode ? 'dark' : 'light'}&id=${tweetId}`"></iframe> + <iframe + ref="tweet" + allow="fullscreen;web-share" + sandbox="allow-popups allow-scripts allow-same-origin" + scrolling="no" + :style="{ position: 'relative', width: '100%', height: `${tweetHeight}px`, border: 0 }" + :src="`https://platform.twitter.com/embed/index.html?embedId=${embedId}&hideCard=false&hideThread=false&lang=en&theme=${defaultStore.state.darkMode ? 'dark' : 'light'}&id=${tweetId}`" + ></iframe> </div> <div :class="$style.action"> <MkButton :small="true" inline @click="tweetExpanded = false"> diff --git a/packages/frontend/test/url-preview.test.ts b/packages/frontend/test/url-preview.test.ts index 1d43a628f2..b5fcf9bece 100644 --- a/packages/frontend/test/url-preview.test.ts +++ b/packages/frontend/test/url-preview.test.ts @@ -13,7 +13,7 @@ import MkUrlPreview from '@/components/MkUrlPreview.vue'; type SummalyResult = Awaited<ReturnType<typeof summaly>>; -describe('MkMediaImage', () => { +describe('MkUrlPreview', () => { const renderPreviewBy = async (summary: Partial<SummalyResult>): Promise<RenderResult> => { if (!summary.player) { summary.player = { @@ -143,4 +143,13 @@ describe('MkMediaImage', () => { assert.exists(iframe, 'iframe should exist'); assert.strictEqual(iframe?.parentElement?.style.paddingTop, '200px'); }); + + test('Loading a tweet in iframe', async () => { + const iframe = await renderAndOpenPreview({ + url: 'https://twitter.com/i/web/status/1685072521782325249', + }); + assert.exists(iframe, 'iframe should exist'); + assert.strictEqual(iframe?.getAttribute('allow'), 'fullscreen;web-share'); + assert.strictEqual(iframe?.getAttribute('sandbox'), 'allow-popups allow-scripts allow-same-origin'); + }); });