page-visibility.html 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <script src="../resources/testharness.js"></script>
  5. <script src="../resources/testharnessreport.js"></script>
  6. <script src="../resources/visibility.js"></script>
  7. <iframe src='about:blank'></iframe>
  8. <script>
  9. var eventVisibleTest = async_test("Test that a change event is fired when the page is visible.");
  10. var noEventHiddenTest = async_test("Test that change event is not fired when the page is not visible.");
  11. var orientationUnchangeHiddenTest = async_test("Test that screen.orientation keeps returning the same orientation when the page is not visible.");
  12. var orientationUpdateVisibleTest = async_test("Test that screen.orientation is updated once the page is visible again.");
  13. var frameEventsTest = async_test("Test that the iframe got as many events as the main frame.");
  14. var orientationChangeContinuation = null;
  15. var orientationChangeEventListenerCalls = 0;
  16. var orientationChangeEventListenerCallsForFrame = 0;
  17. screen.orientation.addEventListener('change', function() {
  18. orientationChangeEventListenerCalls++;
  19. if (orientationChangeEventContinuation) {
  20. setTimeout(orientationChangeEventContinuation);
  21. orientationChangeEventContinuation = null;
  22. }
  23. });
  24. window.frames[0].screen.orientation.addEventListener('change', function() {
  25. orientationChangeEventListenerCallsForFrame++;
  26. });
  27. function runEventVisibleTest() {
  28. eventVisibleTest.step(function() {
  29. assert_false(document.hidden);
  30. });
  31. orientationChangeEventContinuation = function() {
  32. eventVisibleTest.step(function() {
  33. assert_equals(orientationChangeEventListenerCalls, 1);
  34. assert_equals(screen.orientation.type, "landscape-primary");
  35. });
  36. eventVisibleTest.done();
  37. setMainWindowHidden(true).then(runNoEventHiddenTest);
  38. };
  39. if (window.testRunner)
  40. testRunner.setMockScreenOrientation("landscape-primary");
  41. }
  42. function runNoEventHiddenTest() {
  43. noEventHiddenTest.step(function() {
  44. assert_true(document.hidden);
  45. });
  46. noEventHiddenTest.step(function() {
  47. assert_equals(orientationChangeEventListenerCalls, 1);
  48. });
  49. if (window.testRunner)
  50. testRunner.setMockScreenOrientation("portrait-primary");
  51. noEventHiddenTest.done();
  52. runOrientationUnchangeHiddenTest();
  53. }
  54. function runOrientationUnchangeHiddenTest() {
  55. orientationUnchangeHiddenTest.step(function() {
  56. assert_equals(screen.orientation.type, "landscape-primary");
  57. });
  58. orientationUnchangeHiddenTest.done();
  59. runOrientationUpdateVisibleTest();
  60. }
  61. function runOrientationUpdateVisibleTest() {
  62. orientationChangeEventContinuation = function() {
  63. orientationUpdateVisibleTest.step(function() {
  64. assert_false(document.hidden);
  65. // A change event should have been fired.
  66. assert_equals(orientationChangeEventListenerCalls, 2);
  67. // Should keep returning the start returning the orientation value.
  68. assert_equals(screen.orientation.type, "portrait-primary");
  69. });
  70. orientationUpdateVisibleTest.done();
  71. runFrameEventsTest();
  72. };
  73. setMainWindowHidden(false);
  74. }
  75. function runFrameEventsTest() {
  76. frameEventsTest.step(function() {
  77. assert_equals(orientationChangeEventListenerCallsForFrame, orientationChangeEventListenerCalls);
  78. });
  79. frameEventsTest.done();
  80. }
  81. runEventVisibleTest();
  82. </script>
  83. </body>
  84. </html>