minimize.html (2378B)
1 <!DOCTYPE HTML> 2 <title>Test different scenarios of how browser interactions are reflected by page visibility</title> 3 <link rel="author" title="Noam Rosenthal" href="mailto:noam@webkit.org"> 4 <link rel="help" href="https://www.w3.org/TR/page-visibility-2/"> 5 <meta name="timeout" content="long"> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="/resources/testdriver.js"></script> 9 <script src="/resources/testdriver-vendor.js"></script> 10 <script src="resources/window_state_context.js"></script> 11 <script> 12 13 const iframePath = 'resources/blank_page_green.html' 14 15 promise_test(async t => { 16 const {minimize, restore} = window_state_context(t); 17 assert_equals(document.visibilityState, "visible"); 18 assert_equals(document.hidden, false); 19 await minimize(); 20 assert_equals(document.visibilityState, "hidden"); 21 assert_equals(document.hidden, true); 22 await restore() 23 assert_equals(document.visibilityState, "visible"); 24 assert_equals(document.hidden, false); 25 }, "visibilityState & hidden should be affected by window being minimized/restored"); 26 27 promise_test(async t => { 28 const {minimize, restore} = window_state_context(t); 29 const events = []; 30 const callback = () => events.push(document.visibilityState); 31 document.addEventListener('visibilitychange', callback); 32 t.add_cleanup(() => document.removeEventListener('visibilitychange', callback)); 33 await minimize(); 34 await restore(); 35 assert_array_equals(events, ['hidden', 'visible']); 36 }, "visibilitychange event should be fired when minimized/restored") 37 38 promise_test(async t => { 39 const {minimize, restore} = window_state_context(t); 40 const events = []; 41 const iframe = document.createElement('iframe'); 42 iframe.src = iframePath; 43 document.body.appendChild(iframe); 44 t.add_cleanup(() => iframe.remove()); 45 await new Promise(resolve => iframe.onload = resolve); 46 const callback = () => events.push(iframe.contentWindow.document.visibilityState); 47 iframe.contentWindow.addEventListener('visibilitychange', callback); 48 await minimize(); 49 await restore(); 50 iframe.contentWindow.removeEventListener('visibilitychange', callback); 51 assert_array_equals(events, ['hidden', 'visible']); 52 }, "iframe should receive visibility events when top level window is shown/hidden"); 53 </script>