| <!DOCTYPE html> |
| <title>Test request Picture-in-Picture</title> |
| <script src="/common/media.js"></script> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-vendor.js"></script> |
| <script src="resources/picture-in-picture-helpers.js"></script> |
| <body></body> |
| <script> |
| promise_test(async t => { |
| const video = await loadVideo(); |
| return promise_rejects(t, 'NotAllowedError', video.requestPictureInPicture()); |
| }, 'request Picture-in-Picture requires a user gesture'); |
| |
| promise_test(t => { |
| const video = document.createElement('video'); |
| return promise_rejects(t, 'InvalidStateError', |
| requestPictureInPictureWithTrustedClick(video)); |
| }, 'request Picture-in-Picture requires loaded metadata for the video element'); |
| |
| promise_test(async t => { |
| const video = document.createElement('video'); |
| await new Promise(resolve => { |
| video.src = getAudioURI('/media/sound_5'); |
| video.onloadeddata = resolve; |
| }).then(() => { |
| return promise_rejects(t, 'InvalidStateError', |
| requestPictureInPictureWithTrustedClick(video)); |
| }) |
| }, 'request Picture-in-Picture requires video track for the video element'); |
| |
| promise_test(async t => { |
| const video = await loadVideo(); |
| return requestPictureInPictureWithTrustedClick(video); |
| }, 'request Picture-in-Picture resolves on user click'); |
| </script> |