| <html> |
| <body> |
| |
| <script src="../../resources/js-test-pre.js"></script> |
| |
| <script> |
| |
| description("This test checks that Page Visibility state events are propagated to child frames."); |
| |
| var jsTestIsAsync = true; |
| |
| function makePageVisible() { |
| if (window.testRunner) |
| testRunner.setPageVisibility("visible"); |
| } |
| |
| function makePageHidden() { |
| if (window.testRunner) |
| testRunner.setPageVisibility("hidden"); |
| } |
| |
| function checkIsPageVisible() { |
| debug("Main Page:"); |
| shouldBeEqualToString("document.visibilityState", "visible"); |
| shouldBeFalse("document.hidden"); |
| } |
| |
| function checkIsPageHidden() { |
| debug("Main Page:"); |
| shouldBeEqualToString("document.visibilityState", "hidden"); |
| shouldBeTrue("document.hidden"); |
| } |
| |
| function checkIsChildFrameVisible() { |
| debug("Child Frame:"); |
| shouldBeEqualToString("childFrame.contentDocument.visibilityState", |
| "visible"); |
| shouldBeFalse("childFrame.contentDocument.hidden"); |
| } |
| |
| function checkIsChildFrameHidden() { |
| debug("Child Frame:"); |
| shouldBeEqualToString("childFrame.contentDocument.visibilityState", |
| "hidden"); |
| shouldBeTrue("childFrame.contentDocument.hidden"); |
| } |
| |
| // We will try to change the visibility states as: |
| // 0 - visible. (Initial - i.e. on load). |
| // 1 - hidden |
| // 2 - visible |
| var numVisibilityChanges = 0; |
| |
| var childFrame; |
| |
| function startTest() { |
| childFrame = document.getElementById("childFrame"); |
| childFrame.contentDocument.addEventListener( |
| "visibilitychange", onChildFrameVisibilityChange, false); |
| document.addEventListener("visibilitychange", |
| onVisibilityChange, false); |
| |
| checkIsPageVisible(); |
| checkIsChildFrameVisible(); |
| |
| numVisibilityChanges++; |
| makePageHidden(); |
| } |
| |
| var numFinishes = 0; |
| function finishTest() { |
| numFinishes++; |
| if (numFinishes < 2) { |
| return; |
| } |
| |
| if (window.testRunner) { |
| testRunner.resetPageVisibility(); |
| } |
| finishJSTest(); |
| } |
| |
| function onVisibilityChange() { |
| if (numVisibilityChanges == 1) { |
| checkIsPageHidden(); |
| return; |
| } else if (numVisibilityChanges == 2) { |
| checkIsPageVisible(); |
| finishTest(); |
| return; |
| } else { |
| testFailed("Too many visibility transitions"); |
| finishTest(); |
| return; |
| } |
| } |
| |
| function onChildFrameVisibilityChange() { |
| if (numVisibilityChanges == 1) { |
| checkIsChildFrameHidden(); |
| numVisibilityChanges++; |
| makePageVisible(); |
| return; |
| } else if (numVisibilityChanges == 2) { |
| checkIsChildFrameVisible(); |
| finishTest(); |
| return; |
| } else { |
| testFailed("Child Frame: Too many visibility transitions"); |
| finishTest(); |
| } |
| } |
| |
| </script> |
| |
| <script src="../../resources/js-test-post.js"></script> |
| |
| <iframe id="childFrame" onload="startTest()"></iframe> |
| </body> |
| </html> |