blob: 092e817da130764ed61c180f2c32f00f7fd05634 [file] [log] [blame]
<!DOCTYPE html>
<head>
<title>Cobalt suspend state visibility test</title>
<script src='black_box_js_test_utils.js'></script>
</head>
<body>
<h1>
<span>ID element</span>
</h1>
<script>
// In started mode, visibility should be "visible" and window/document
// should have focus.
assertEqual("visible", document.visibilityState);
assertTrue(document.hasFocus());
let suspendStateVerified = false;
// Success callback for verifying visibility and focus in suspend.
function intoSuspendCallback() {
suspendStateVerified = true;
}
// Success callback for verifying visibility and focus after suspend in
// started.
function outOfSuspendCallback() {
if (suspendStateVerified){
onEndTest();
} else {
// By now, it is in Started state and Suspend state behavior
// verification will never succeed.
notReached();
}
}
function verifyVisibilityAndFocusInterval(shouldBeVisible, shouldHaveFocus) {
visibility_str = shouldBeVisible ? "visible" : "hidden";
if (document.hasFocus() === shouldHaveFocus && document.visibilityState === visibility_str) {
return true;
}
}
// Post periodic timer to check desired visibility and focus settings.
function verifyVisibilityAndFocus(shouldBeVisible, shouldHaveFocus, successCallback) {
if (verifyVisibilityAndFocusInterval(shouldBeVisible, shouldHaveFocus)) {
successCallback();
return true;
}
time_elapsed = 0;
set_interval_id = setInterval(() => {
if (verifyVisibilityAndFocusInterval(shouldBeVisible, shouldHaveFocus)){
successCallback()
clearInterval(set_interval_id);
}else {
if (time_elapsed > EFFECT_AFTER_VISIBILITY_CHANGE_TIMEOUT_SECONDS){
console.log("Waiting for visibilityState and focus change timed out")
notReached();
}
time_elapsed += 0.1;
}
}, 50);
}
// Wait for visibility change to verify visibilityState and focus status.
let visibilityChangeCalledBefore = false;
function handleVisibilityChange() {
if (!visibilityChangeCalledBefore) {
verifyVisibilityAndFocus(false, false, intoSuspendCallback);
visibilityChangeCalledBefore = true;
} else {
verifyVisibilityAndFocus(true, true, outOfSuspendCallback);
}
}
document.addEventListener("visibilitychange", handleVisibilityChange);
setupFinished();
</script>
</body>