<!DOCTYPE html>
<html>
    <head>
        <script src=media-file.js></script>
        <script src=video-test.js></script>
        <script>
            var videoLastTime;
            var lastRealTime;
            var iteration = 0;

            function start()
            {
                findMediaElement();
                video.src = findMediaFile("video", "content/test");
                waitForEventOnce('canplaythrough', canPlayThrough);
            }

            function canPlayThrough()
            {
                video.playbackRate = 4;
                waitForEventOnce('playing', playing);
                video.play();
            }

            function playing()
            {
                videoLastTime = video.currentTime;
                lastRealTime = new Date();
                video.addEventListener('timeupdate', timeupdate);
            }

            function timeupdate()
            {
                var videoTimeDelta = video.currentTime - videoLastTime;
                var realTimeDelta = (new Date() - lastRealTime) / 1000;
                if (Math.abs(videoTimeDelta - realTimeDelta) < realTimeDelta / 10 ) {
                    video.removeEventListener('timeupdate', timeupdate, true);
                    endTest();
                    return;
                }

                if (iteration > 3) {
                    failTest("Playback rate was applied directly to video with media controller.");
                    return;
                }

                videoLastTime = video.currentTime;
                lastRealTime = new Date();
                iteration++;
            }
        </script>
    </head>
    <body onload="start()">
        <video mediaGroup="group"></video>
        <p>Test that setting playbackRate on video with controller is ignored.</p>
    </body>
</html>
