<!DOCTYPE html>
<html>
    <head>
        <title>'stalled' event test</title>
        <script src=../../media-resources/media-file.js></script>
        <script src=../../media-resources/video-test.js></script>
        <script>

            var playCount = 0;

            function start() 
            {
                findMediaElement();
                waitForEvent('durationchange');
                waitForEvent('loadedmetadata');
                waitForEvent('loadeddata');

                mediaElement.addEventListener('canplay', function () {
                    // 'stalled' takes three seconds to fire, so 'canplay' may fire more than once
                    // depending on how the engine parses incoming media data.
                    if (++playCount > 1)
                        return;
                    consoleWrite("EVENT(canplay)");
                    run("video.play()");
                } );

                waitForEvent('stalled', function () {
                    testExpected("video.currentTime", 0, "!=");
                    testExpected("video.playbackRate", 1, "===");
                    testExpected("video.paused", false, "===");
                    endTest();
                } );

                var mediaFile = findMediaFile("video", "../../../../media/content/long-test");
                var mimeType = mimeTypeForFile(mediaFile);
                video.src = "http://127.0.0.1:8000/media/resources/serve-video.php?name=" + mediaFile + "&type=" + mimeType + "&stallOffset=100000&stallDuration=60&chunkSize=1024";
            }

        </script>
    </head>
    <body onload="setTimeout(start, 0)">
        <video controls></video>
        <p>Test that a stalled event is sent when media loading stalls.</p>
    </body>
</html>
