blob: 1602bb27c9d628930c0c0ffd7c549878813e6524 [file] [log] [blame]
<html>
<body onload='startTest()'>
<script src="../../resources/js-test-pre.js"></script>
<script>
description("This test checks that Page Visibility state values are correct and the event changes are fired correctly.");
var jsTestIsAsync = true;
function makePageVisible() {
if (window.testRunner)
testRunner.setPageVisibility("visible");
}
function makePageHidden() {
if (window.testRunner)
testRunner.setPageVisibility("hidden");
}
function makePagePrerender() {
if (window.testRunner)
testRunner.setPageVisibility("prerender");
}
function makePageUnloaded() {
if (window.testRunner)
testRunner.setPageVisibility("unloaded");
}
function checkIsPageVisible() {
shouldBeEqualToString("document.visibilityState", "visible");
shouldBeFalse("document.hidden");
}
function checkIsPageHidden() {
shouldBeEqualToString("document.visibilityState", "hidden");
shouldBeTrue("document.hidden");
}
function checkIsPagePrerendering() {
shouldBeEqualToString("document.visibilityState", "prerender");
shouldBeTrue("document.hidden");
}
function checkIsPageInUnloaded() {
shouldBeEqualToString("document.visibilityState", "unloaded");
shouldBeTrue("document.hidden");
}
// We will try to change the visibility states as:
// 0 - visible. (Initial - i.e. on load).
// 1 - hidden (should fire event).
// 2 - hidden (no event).
// 3 - prerender (should fire event).
// 4 - visible (should fire event).
// 5 - unloaded (should fire event).
// 6 - visible (should fire event).
var numVisibilityChanges = 0;
function startTest() {
document.addEventListener(
"visibilitychange", onVisibilityChange, false);
checkIsPageVisible();
numVisibilityChanges++;
makePageHidden();
}
function finishTest() {
if (window.testRunner) {
testRunner.resetPageVisibility();
}
finishJSTest();
}
function onVisibilityChange() {
if (numVisibilityChanges == 1) {
checkIsPageHidden();
numVisibilityChanges++;
makePageHidden();
checkIsPageHidden();
numVisibilityChanges++;
makePagePrerender();
return;
} else if (numVisibilityChanges == 2) {
testFailed("Invalid event fired on same state change.");
finishTest();
return;
} else if (numVisibilityChanges == 3) {
checkIsPagePrerendering();
numVisibilityChanges++;
makePageVisible();
return;
} else if (numVisibilityChanges == 4) {
checkIsPageVisible();
numVisibilityChanges++;
makePageUnloaded();
return;
} else if (numVisibilityChanges == 5) {
checkIsPageInUnloaded();
numVisibilityChanges++;
makePageVisible();
return;
} else if (numVisibilityChanges == 6) {
checkIsPageVisible();
numVisibilityChanges++;
finishTest();
return;
} else {
testFailed("Too many visibility transitions");
finishTest();
return;
}
}
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>