<!DOCTYPE HTML>

<html>
<body>

<p>Tests that we don't garbage collect playing audio object or event listener.</p>
<p>According to http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html,<br />
"4.8.10.8 Playing the media resource",<br />
"Media elements must not stop playing just because all references to them have
been removed; only once a media element is in a state where no further audio
could ever be played by that element may the element be garbage collected."<br /><br />
(see https://bugs.webkit.org/show_bug.cgi?id=66878, https://bugs.webkit.org/show_bug.cgi?id=70421, and http://crbug.com/62604 for more details).</p>
<p id="result">
FAIL: Test either still running or stopped prematurely.
</p>

<script src=../resources/gc.js></script>
<script src=media-file.js></script>
<script src=video-test.js></script>
<script type="text/javascript">

var num_players = 4;
var play_times = 5;

function finish() {
    document.getElementById("result").innerText = "PASS";
    if (window.testRunner) {
        testRunner.notifyDone();
    }
}

function start() {
    var num_played = 0;
    var audioFile = findMediaFile("audio", "content/silence");
    var a = new Audio(audioFile);
    a.addEventListener('ended', function() {
        num_played ++;
        if (num_played < play_times) {
            a.currentTime = a.duration - 0.35;
            a.play();
            if (num_played == play_times - 1) {
                a = null;
                gc();
            }
        } else {
            num_players --;
            if (num_players == 0)
                start();
            else
                finish();
        }
    });
    a.addEventListener('canplaythrough', function() {
        a.currentTime = a.duration - 0.35;
        a.play();
    });
}

start();

</script>
</body>
</html>
