page-visibility-manual.html (3553B)
1 <!DOCTYPE html> 2 <html> 3 <body> 4 <meta name="timeout" content="long"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <meta name='flags' content='interact'> 8 <p>Switch the page to background, then switch back in a minute.</p> 9 <iframe src='about:blank'></iframe> 10 <script> 11 12 var eventVisibleTest = async_test("Test that a change event is fired when the page is visible."); 13 var noEventHiddenTest = async_test("Test that change event is not fired when the page is not visible."); 14 var orientationUnchangeHiddenTest = async_test("Test that screen.orientation keeps returning the same orientation when the page is not visible."); 15 var orientationUpdateVisibleTest = async_test("Test that screen.orientation is updated once the page is visible again."); 16 var frameEventsTest = async_test("Test that the iframe got as many events as the main frame."); 17 18 var orientationChangeContinuation = null; 19 var orientationChangeEventListenerCalls = 0; 20 var orientationChangeEventListenerCallsForFrame = 0; 21 22 screen.orientation.addEventListener('change', function() { 23 orientationChangeEventListenerCalls++; 24 if (orientationChangeEventContinuation) { 25 setTimeout(orientationChangeEventContinuation); 26 orientationChangeEventContinuation = null; 27 } 28 }); 29 30 window.frames[0].screen.orientation.addEventListener('change', function() { 31 orientationChangeEventListenerCallsForFrame++; 32 }); 33 34 document.addEventListener("visibilitychange", function () { 35 if(document.hidden) 36 runNoEventHiddenTest(); 37 else 38 runOrientationUpdateVisibleTest(); 39 }); 40 41 function runEventVisibleTest() { 42 eventVisibleTest.step(function() { 43 assert_false(document.hidden); 44 }); 45 46 screen.orientation.lock("landscape-primary").then(function() {}, function() {}); 47 48 orientationChangeEventContinuation = function() { 49 eventVisibleTest.step(function() { 50 assert_equals(orientationChangeEventListenerCalls, 1); 51 assert_equals(screen.orientation.type, "landscape-primary"); 52 }); 53 eventVisibleTest.done(); 54 55 }; 56 } 57 58 function runNoEventHiddenTest() { 59 60 noEventHiddenTest.step(function() { 61 assert_true(document.hidden); 62 }); 63 64 screen.orientation.lock("portrait-primary").then(function() {}, function() {}); 65 66 noEventHiddenTest.step(function() { 67 assert_equals(orientationChangeEventListenerCalls, 1); 68 }); 69 noEventHiddenTest.done(); 70 71 runOrientationUnchangeHiddenTest(); 72 } 73 74 function runOrientationUnchangeHiddenTest() { 75 orientationUnchangeHiddenTest.step(function() { 76 assert_equals(screen.orientation.type, "landscape-primary"); 77 }); 78 orientationUnchangeHiddenTest.done(); 79 80 } 81 82 function runOrientationUpdateVisibleTest() { 83 84 orientationChangeEventContinuation = function() { 85 orientationUpdateVisibleTest.step(function() { 86 assert_false(document.hidden); 87 // A change event should have been fired. 88 assert_equals(orientationChangeEventListenerCalls, 2); 89 // Should keep returning the start returning the orientation value. 90 assert_equals(screen.orientation.type, "portrait-primary"); 91 }); 92 93 orientationUpdateVisibleTest.done(); 94 95 runFrameEventsTest(); 96 }; 97 } 98 99 function runFrameEventsTest() { 100 frameEventsTest.step(function() { 101 assert_equals(orientationChangeEventListenerCallsForFrame, orientationChangeEventListenerCalls); 102 }); 103 frameEventsTest.done(); 104 } 105 106 runEventVisibleTest(); 107 108 </script> 109 </body> 110 </html>