<head>
<style type="text/css">
.overflow-hidden {
    width: 100px;
    height: 100px;
    background: #000;
    overflow: hidden;
}
input {
    font-size: 10px;
    height: 20px;
}
button {
    position: relative;
    left: 100px;
    top: 100px;
}
</style>
<script>
function runTest() {
    if (!window.testRunner)
        return;
    if (!window.eventSender)
        return;

    testRunner.dumpAsText();
    testRunner.waitUntilDone();
    setTimeout(startTest, 0);
}

function startTest()
{
    var input = document.getElementById("input");
    var x = input.offsetLeft + input.offsetWidth / 2;
    var y = input.offsetTop + input.offsetHeight / 2;

    eventSender.dragMode = false;
    eventSender.mouseMoveTo(x, y);
    eventSender.mouseDown();

    // We do the dragging/selection in two steps here, because if we move
    // the mouse beyond the input boundary right way, it won't start the autoscroll
    // timer. See early return in AutoscrollController::startAutoscrollForSelection
    // after calling RenderBox::findAutoscrollable.
    eventSender.mouseMoveTo(x + 48, y);
    eventSender.mouseMoveTo(x + 55, y);
    setTimeout(finishTest, 100);
}

function finishTest()
{
    eventSender.mouseUp();
    var div = document.getElementById("div");
    if (div.scrollTop == 0 && div.scrollLeft == 0)
        document.getElementById("result").innerText = "Test succeeded!";
    else
        document.getElementById("result").innerText = "Test failed!";

    testRunner.notifyDone();
}

</script>

<body onload="runTest()">
</head>
<div id="div" class="overflow-hidden">
<input id="input" type="text"  value="any text here!"/>
<button/>
</div>
<p id="result">If the test has completed this sentence should be replaced by a success message.</p>
</body>
