blob: 50c336e2902639b109aeed66b2e711260f0dec56 [file] [log] [blame]
<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>