<!DOCTYPE html>
<html>
<body>
<script src="../resources/js-test-pre.js"></script>
<script>
description("Tests that silent WebAudio rendering gets interrupted in hidden pages.");
jsTestIsAsync = true;

document.onvisibilitychange = function() {
    if (document.hidden) {
        shouldBecomeEqual("context.state", "'interrupted'", showPage);
    } else {
        shouldBecomeEqual("context.state", "'running'", finishJSTest);
    }
}

function showPage()
{
    debug("* Setting page visibility to visible");
    if (window.testRunner)
        testRunner.setPageVisibility("visible");
}

function hidePage()
{
    debug("* Setting page visibility to hidden");
    if (window.testRunner)
        testRunner.setPageVisibility("hidden");
}

onload = function() {
    context = new AudioContext();

    audioElement = document.createElement("audio");
    audioElement.loop = true;
    audioElement.muted = true;
    audioElement.src = "../media/content/test.wav";
    source = context.createMediaElementSource(audioElement);

    var gainNode = context.createGain();
    source.connect(gainNode);
    gainNode.connect(context.destination);
    gainNode.gain.value = 0; // Mute.

    shouldBecomeEqual("context.state", "'running'", hidePage);
}
</script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>
