<!-- webkit-test-runner [ enableModernMediaControls=false ] -->
<html>
<head>
    <script src=media-file.js></script>
    <script>
    var video;

    if (window.testRunner)
        testRunner.waitUntilDone();

    function finish()
    {
        video.removeEventListener("seeked", finish);

        if (window.testRunner)
            testRunner.notifyDone();
    }

    function playing()
    {
        video.removeEventListener("playing", playing);

        // Ensure that the frame is always the same in pixel result.
        video.addEventListener("seeked", finish);
        video.pause();
        video.currentTime = 0;
    }

    function canplaythrough()
    {
        video.removeEventListener("canplaythrough", canplaythrough);

        video.src = findMediaFile("video", "content/test");
        video.addEventListener("playing", playing);
        video.play();
    }

    function test()
    {
        video = document.getElementsByTagName('video')[0];
        video.addEventListener("canplaythrough", canplaythrough);
        
        video.src = findMediaFile("video", "content/counting");
    }
    </script>
</head>
<body onload="test()">
<p>Making sure the controller looks ok after a second load().</p>
<video controls></video>
</body>
</html>
