| <!DOCTYPE html> |
| <title>Same-origin prerendering can trigger autoplay</title> |
| <meta name="timeout" content="long"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/utils.js"></script> |
| <script src="/common/dispatcher/dispatcher.js"></script> |
| <script src="../resources/utils.js"></script> |
| <script src="resources/utils.js"></script> |
| |
| <body> |
| <script> |
| setup(() => assertSpeculationRulesIsSupported()); |
| |
| promise_test(async t => { |
| const {exec, activate} = await create_prerendered_page(t); |
| await exec(() => { |
| const video = document.createElement('video'); |
| video.src = '/media/A4.mp4'; |
| video.autoplay = true; |
| video.muted = true; |
| window.video = video; |
| document.body.appendChild(video); |
| }); |
| |
| await new Promise(resolve => t.step_timeout(resolve, 500)); |
| |
| const before_activation = await exec(() => ({ |
| readyState: video.readyState, |
| paused: video.paused, |
| currentTime: video.currentTime |
| })); |
| |
| await activate(); |
| await new Promise(resolve => t.step_timeout(resolve, 500)); |
| const after_activation = await exec(() => ({ |
| readyState: video.readyState, |
| paused: video.paused, |
| currentTime: video.currentTime |
| })); |
| |
| assert_equals(before_activation.paused, false); |
| assert_equals(before_activation.currentTime, 0); |
| assert_equals(after_activation.paused, false); |
| assert_greater_than(before_activation.currentTime, 0); |
| }, "media autoplay should defer playaback"); |
| </script> |