<head>
<script>
function test()
{
    var queryIndex = document.URL.indexOf('?');
    if (queryIndex == -1) {
        window.scrollTo(500, 500);

        if (window.layoutTestController) {
            layoutTestController.dumpAsText();
            layoutTestController.waitUntilDone();

            eventSender.mouseMoveTo(18, 18);
            eventSender.mouseDown();
            eventSender.mouseUp();
        }
    } else {
        document.write("<div>Form data: " + document.URL.substring(queryIndex + 1) + "</div>");
        document.write("<div>X and Y should both be about 10.</div>");

        if (window.layoutTestController)
            layoutTestController.notifyDone();
    }
}
</script>
</head>
<body onload="test()">
<div style="background:red; width:1000px; height:500px"></div>
<div style="background:blue; height:50px; width:500px; float:left"></div>
<form method="get" action="input-image-scrolled-x-y.html"><input type="image" src="resources/greenbox.png"></form>
<div style="background:orange; width:3000px; height:3000px"></div>
</body>
