diff --git a/typo3/sysext/core/Classes/Resource/Rendering/VideoTagRenderer.php b/typo3/sysext/core/Classes/Resource/Rendering/VideoTagRenderer.php index 37b1a22c99f0f6196b9b256a8d45bd1c306a5976..8ec797c2748f401df54bc03e8dc509f9cf94869f 100644 --- a/typo3/sysext/core/Classes/Resource/Rendering/VideoTagRenderer.php +++ b/typo3/sysext/core/Classes/Resource/Rendering/VideoTagRenderer.php @@ -98,6 +98,8 @@ class VideoTagRenderer implements FileRendererInterface } if (!empty($options['autoplay'])) { $attributes[] = 'autoplay'; + // If autoplay is enabled, enforce muted, see https://developer.chrome.com/blog/autoplay/ + $attributes[] = 'muted'; } if (!empty($options['muted'])) { $attributes[] = 'muted'; diff --git a/typo3/sysext/core/Classes/Resource/Rendering/VimeoRenderer.php b/typo3/sysext/core/Classes/Resource/Rendering/VimeoRenderer.php index 9a834ef8a66b346f6f284b269273f4d0b0f3c9b0..ca6bc9f8a995b462568f825f34d2ae2f848dc20a 100644 --- a/typo3/sysext/core/Classes/Resource/Rendering/VimeoRenderer.php +++ b/typo3/sysext/core/Classes/Resource/Rendering/VimeoRenderer.php @@ -138,6 +138,8 @@ class VimeoRenderer implements FileRendererInterface $urlParams = []; if (!empty($options['autoplay'])) { $urlParams[] = 'autoplay=1'; + // If autoplay is enabled, enforce muted=1, see https://developer.chrome.com/blog/autoplay/ + $urlParams[] = 'muted=1'; } if (!empty($options['loop'])) { $urlParams[] = 'loop=1'; diff --git a/typo3/sysext/core/Tests/Unit/Resource/Rendering/VideoTagRendererTest.php b/typo3/sysext/core/Tests/Unit/Resource/Rendering/VideoTagRendererTest.php index c4b706127bee4a2af26c8c4749ba2cd526518946..96b24e2531a374b4687ca772d7343b1b7e4eb16d 100644 --- a/typo3/sysext/core/Tests/Unit/Resource/Rendering/VideoTagRendererTest.php +++ b/typo3/sysext/core/Tests/Unit/Resource/Rendering/VideoTagRendererTest.php @@ -90,12 +90,12 @@ class VideoTagRendererTest extends UnitTestCase [ '//:path/myVideoFile', ['autoplay' => 1], - '<video width="300" height="200" controls autoplay><source src="//:path/myVideoFile" type="video/mp4"></video>', + '<video width="300" height="200" controls autoplay muted><source src="//:path/myVideoFile" type="video/mp4"></video>', ], [ '//:path/myVideoFile', ['controls' => 0, 'autoplay' => 1], - '<video width="300" height="200" autoplay><source src="//:path/myVideoFile" type="video/mp4"></video>', + '<video width="300" height="200" autoplay muted><source src="//:path/myVideoFile" type="video/mp4"></video>', ], [ '//:path/myVideoFile', diff --git a/typo3/sysext/core/Tests/Unit/Resource/Rendering/VimeoRendererTest.php b/typo3/sysext/core/Tests/Unit/Resource/Rendering/VimeoRendererTest.php index 17ed78f865fd9afc9271667893e38b743bc22cec..44f47df458db2d88c6ee22a99aa39c07eaaa9c9e 100644 --- a/typo3/sysext/core/Tests/Unit/Resource/Rendering/VimeoRendererTest.php +++ b/typo3/sysext/core/Tests/Unit/Resource/Rendering/VimeoRendererTest.php @@ -117,7 +117,7 @@ class VimeoRendererTest extends UnitTestCase $fileResourceMock = $this->createMock(File::class); self::assertSame( - '<iframe src="https://player.vimeo.com/video/7331?autoplay=1&title=0&byline=0&portrait=0" allowfullscreen width="300" height="200" allow="autoplay; fullscreen"></iframe>', + '<iframe src="https://player.vimeo.com/video/7331?autoplay=1&muted=1&title=0&byline=0&portrait=0" allowfullscreen width="300" height="200" allow="autoplay; fullscreen"></iframe>', $this->subject->render($fileResourceMock, '300m', '200', ['autoplay' => 1]) ); } @@ -134,7 +134,7 @@ class VimeoRendererTest extends UnitTestCase $fileReferenceMock->method('getOriginalFile')->willReturn($fileResourceMock); self::assertSame( - '<iframe src="https://player.vimeo.com/video/7331?autoplay=1&title=0&byline=0&portrait=0" allowfullscreen width="300" height="200" allow="autoplay; fullscreen"></iframe>', + '<iframe src="https://player.vimeo.com/video/7331?autoplay=1&muted=1&title=0&byline=0&portrait=0" allowfullscreen width="300" height="200" allow="autoplay; fullscreen"></iframe>', $this->subject->render($fileReferenceMock, '300m', '200') ); } @@ -147,7 +147,7 @@ class VimeoRendererTest extends UnitTestCase $fileResourceMock = $this->createMock(File::class); self::assertSame( - '<iframe src="https://player.vimeo.com/video/7331?autoplay=1&title=0&byline=0&portrait=0" allowfullscreen width="300" height="200" allow="autoplay; fullscreen"></iframe>', + '<iframe src="https://player.vimeo.com/video/7331?autoplay=1&muted=1&title=0&byline=0&portrait=0" allowfullscreen width="300" height="200" allow="autoplay; fullscreen"></iframe>', $this->subject->render($fileResourceMock, '300m', '200', ['autoplay' => 1]) ); } @@ -212,7 +212,7 @@ class VimeoRendererTest extends UnitTestCase $fileResourceMock = $this->createMock(File::class); self::assertSame( - '<iframe src="https://player.vimeo.com/video/7331?autoplay=1&title=0&byline=0&portrait=0" allowfullscreen width="300" height="200" allow="foo; bar"></iframe>', + '<iframe src="https://player.vimeo.com/video/7331?autoplay=1&muted=1&title=0&byline=0&portrait=0" allowfullscreen width="300" height="200" allow="foo; bar"></iframe>', $this->subject->render($fileResourceMock, '300m', '200', ['allow' => 'foo; bar', 'autoplay' => 1]) ); }