<!DOCTYPE html> <title>Test disable 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> test(t => { const video = document.createElement('video'); assert_false(video.disablePictureInPicture); // default value video.setAttribute('disablepictureinpicture', 'foo'); assert_true(video.disablePictureInPicture); video.removeAttribute('disablepictureinpicture'); assert_false(video.disablePictureInPicture); video.disablePictureInPicture = true; assert_equals(video.getAttribute('disablepictureinpicture'), ''); video.disablePictureInPicture = false; assert_equals(video.getAttribute('disablepictureinpicture'), null); }, 'Test disablePictureInPicture IDL attribute'); promise_test(async t => { const video = await loadVideo(); video.disablePictureInPicture = true; return promise_rejects_dom(t, 'InvalidStateError', requestPictureInPictureWithTrustedClick(video)); }, 'Request Picture-in-Picture rejects if disablePictureInPicture is true'); promise_test(async t => { const video = await loadVideo(); await test_driver.bless('request Picture-in-Picture'); const promise = video.requestPictureInPicture(); video.disablePictureInPicture = true; await promise_rejects_dom(t, 'InvalidStateError', promise); assert_equals(document.pictureInPictureElement, null); }, 'Request Picture-in-Picture rejects if disablePictureInPicture becomes ' + 'true before promise resolves.'); promise_test(async t => { const video = await loadVideo(); return requestPictureInPictureWithTrustedClick(video) .then(() => { video.disablePictureInPicture = true; video.addEventListener('leavepictureinpicture', t.step_func(() => { assert_equals(document.pictureInPictureElement, null); })); }); }, 'pictureInPictureElement is unset if disablePictureInPicture becomes true'); promise_test(async t => { const video = await loadVideo(); return requestPictureInPictureWithTrustedClick(video) .then(() => { video.disablePictureInPicture = false; assert_equals(document.pictureInPictureElement, video); }); }, 'pictureInPictureElement is unchanged if disablePictureInPicture becomes false'); promise_test(async t => { const video = await loadVideo(); return requestPictureInPictureWithTrustedClick(video) .then(() => { document.createElement('video').disablePictureInPicture = true; assert_equals(document.pictureInPictureElement, video); }); }, 'pictureInPictureElement is unchanged if disablePictureInPicture becomes ' + 'true for another video'); </script>