visibility-state-entry.tentative.html (3018B)
1 <!DOCTYPE HTML> 2 <title>Test VisibleStateEntry</title> 3 <link rel="author" title="Noam Rosenthal" href="mailto:nrosenthal@chromium.org"> 4 <link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#page-visibility"> 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 setup(() => { 14 assert_implements(window.VisibilityStateEntry, 'VisibilityStateEntry is not supported.'); 15 }); 16 17 promise_test(async t => { 18 const {minimizeAndWait, restoreAndWait} = window_state_context(t); 19 const all = performance.getEntries(); 20 let entries = performance.getEntriesByType("visibility-state"); 21 assert_equals(entries.length, 1); 22 assert_equals(entries[0].name, "visible"); 23 assert_equals(entries[0].startTime, 0); 24 assert_equals(entries[0].duration, 0); 25 await minimizeAndWait(); 26 entries = performance.getEntriesByType("visibility-state"); 27 assert_equals(entries.length, 2); 28 assert_equals(entries[1].name, "hidden"); 29 assert_equals(entries[1].duration, 0); 30 await restoreAndWait(); 31 entries = performance.getEntriesByType("visibility-state"); 32 assert_equals(entries.length, 3); 33 assert_equals(entries[2].name, "visible"); 34 assert_equals(entries[2].duration, 0); 35 }, "Hiding/showing the page should create visibility-state entries"); 36 37 promise_test(async t => { 38 const {minimizeAndWait} = window_state_context(t); 39 await minimizeAndWait(); 40 const iframe = document.createElement("iframe"); 41 iframe.src = "resources/blank_page_green.html"; 42 const loaded = new Promise(resolve => iframe.addEventListener("load", resolve)); 43 t.add_cleanup(() => iframe.remove()); 44 document.body.appendChild(iframe); 45 await loaded; 46 const entries = iframe.contentWindow.performance.getEntriesByType("visibility-state"); 47 assert_equals(entries[0].name, "hidden"); 48 assert_equals(entries[0].startTime, 0); 49 }, "If a page starts as hidden, the first visibility-state entry should be hidden"); 50 51 promise_test(async t => { 52 const {minimize, restore} = window_state_context(t); 53 const observed = new Promise(resolve => new PerformanceObserver(list => { 54 if (list.getEntries()[0].name === "visible") 55 resolve(); 56 }).observe({entryTypes: ['visibility-state']})); 57 await minimize(); 58 await restore(); 59 await observed; 60 }, "Visibility state entries should be queued to performance observers"); 61 62 promise_test(async t => { 63 const entry = await new Promise(resolve => new PerformanceObserver( 64 (list, observer) => { 65 observer.disconnect(); 66 resolve(list.getEntries()[0]); 67 }).observe({type: "visibility-state", buffered: true})); 68 assert_equals(entry.name, "visible"); 69 }, "Visibility state observers should respect the buffered flag"); 70 </script>