<html>
    <head>
        <script src=media-file.js></script>
        <script src=video-test.js></script>
        <script>
            var state = 0;
            var resumeCount = 0;

            function checkState()
            {
                switch (state) {
                case "playing":
                    testExpected("video.paused", false);
                    state = "interrupted";
                    run("internals.beginMediaSessionInterruption('System')");;
                    setTimeout(checkState, 100);
                    consoleWrite("");
                    break;

                case "interrupted":
                    consoleWrite("100ms timer fired...");
                    testExpected("video.paused", true);
                    state = "resuming";
                    run("internals.endMediaSessionInterruption('MayResumePlaying')");
                    consoleWrite("");
                    break;

                case "resuming":
                    testExpected("video.paused", false);
                    consoleWrite("");
                    if (++resumeCount == 2)
                        endTest();
                    state = "playing";
                    setTimeout(checkState, 100);
                    break;
                }
            }

            function canplaythrough()
            {
                state = "playing";
                run("video.play()");
                consoleWrite("");
            }

            function start()
            {
                if (!window.internals) {
                    failTest('This test requires window.internals.');
                    return;
                }

                findMediaElement();
                waitForEvent('canplaythrough', canplaythrough);
                waitForEvent('playing', checkState);
                video.src = findMediaFile("video", "content/test");
            }
        </script>
    </head>

    <body onload="start()">
        <video controls ></video>
        <p>Test that play() during interruption does nothing, ending interruption allows playback to resume.</p>
    </body>
</html>
