propagate-user-activation-from-opener.https.html (3698B)
1 <!DOCTYPE html> 2 <title>Test that a user activation in window that owns a document picture-in-picture window is usable in the 3 document picture-in-picture window</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/resources/testdriver.js"></script> 7 <script src="/resources/testdriver-vendor.js"></script> 8 <iframe id="cross-origin-iframe" src="https://{{hosts[alt][www]}}:{{ports[https][0]}}/common/blank.html"></iframe> 9 <body> 10 <script> 11 promise_test(async (t) => { 12 await test_driver.bless('request PiP window'); 13 const pipWindow = await documentPictureInPicture.requestWindow(); 14 15 assert_false(navigator.userActivation.isActive, 'the opener should initially not have user activation'); 16 assert_false(pipWindow.navigator.userActivation.isActive, 'the PiP window should initially not have user activation'); 17 18 // Activating this window should also activate the picture-in-picture window. 19 await test_driver.bless('activate opener window'); 20 assert_true(navigator.userActivation.isActive, 'the opener should be activated'); 21 assert_true(pipWindow.navigator.userActivation.isActive, 'the PiP window should be activated when the opener is activated'); 22 23 // Consuming activation in the opener should also consume it in the picture-in-picture window. 24 window.open().close(); 25 assert_false(navigator.userActivation.isActive, 'the opener should no longer be active once it consumes activation'); 26 assert_false(pipWindow.navigator.userActivation.isActive, 'the PiP window should no longer be active once the opener consumes activation'); 27 }, 'user activation propagates from opener to PiP'); 28 29 promise_test(async (t) => { 30 await test_driver.bless('request PiP window'); 31 const pipWindow = await documentPictureInPicture.requestWindow(); 32 33 assert_false(navigator.userActivation.isActive, 'opener initially not active'); 34 assert_false(pipWindow.navigator.userActivation.isActive, 'PiP initially not active'); 35 36 const ifr = document.getElementById("cross-origin-iframe"); 37 await test_driver.bless('activate cross-origin iframe', null, ifr.contentWindow); 38 39 assert_true(pipWindow.navigator.userActivation.isActive, 'activation propagated to PiP'); 40 41 window.open().close(); 42 43 assert_false(navigator.userActivation.isActive, 'activation was consumed in opener'); 44 assert_false(pipWindow.navigator.userActivation.isActive, 'activation was consumed in PiP'); 45 46 }, 'user activation propagates from cross-origin iframe in opener to PiP'); 47 48 promise_test(async (t) => { 49 await test_driver.bless('request PiP window'); 50 const pipWindow = await documentPictureInPicture.requestWindow(); 51 52 const ifr = pipWindow.document.createElement("iframe"); 53 pipWindow.document.body.append(ifr); 54 55 assert_false(navigator.userActivation.isActive, 'opener initially not active'); 56 assert_false(pipWindow.navigator.userActivation.isActive, 'PiP initially not active'); 57 assert_false(ifr.contentWindow.navigator.userActivation.isActive, 'iframe in PiP initially not active'); 58 59 await test_driver.bless('activate opener window'); 60 61 assert_true(pipWindow.navigator.userActivation.isActive, 'activation propagated to PiP'); 62 assert_true(ifr.contentWindow.navigator.userActivation.isActive, 'activation propagated to iframe in PiP'); 63 64 ifr.contentWindow.open().close(); 65 66 assert_false(navigator.userActivation.isActive, 'activation was consumed in opener'); 67 assert_false(pipWindow.navigator.userActivation.isActive, 'activation was consumed in PiP'); 68 assert_false(ifr.contentWindow.navigator.userActivation.isActive, 'activation was consumed in iframe in PiP'); 69 }, 'user activation propagates from opener to iframe PiP'); 70 </script>