<!-- webkit-test-runner [ enableModernMediaControls=false ] -->
<html>
    <head>
        <title>right click on timebar test</title>
        <script src=media-controls.js></script>
        <script src=media-file.js></script>
        <script src=video-test.js></script>
        <script>
            if (window.testRunner)
                testRunner.dumpAsText();

            function click()
            {
                if (window.eventSender) {
                    var seekCoords;
                    try {
                        seekCoords = mediaControlsButtonCoordinates(video, "timeline");
                    } catch (exception) {
                        failTest(exception.description);
                        return;
                    }
                    var x = seekCoords[0];
                    var y = seekCoords[1];

                    eventSender.mouseMoveTo(x, y);
                    eventSender.contextClick();
                }
                window.setTimeout("endTest()", 200);
            }

            function playing()
            {
                window.setTimeout("click()", 100);
            }

            function seeked()
            {
                failTest("Should not seek.");
            }

            function start()
            {
                findMediaElement();
                waitForEvent('playing', playing);
                waitForEvent('seeked', seeked);
                run("video.autoplay = true");
                disableFullTestDetailsPrinting();
                runSilently("video.src = '" + findMediaFile("video", "content/test") + "'");
                enableFullTestDetailsPrinting();
            }    
        </script>
    </head>

    <body onload="start()">
    <p>Test that right clicking on the timebar does not cause a seek.</p>
    <video controls></video>
    </body>
</html>
