<html>
<head>
<script>
if (window.testRunner)
     testRunner.dumpEditingCallbacks();
</script>

<style>
body { margin: 0; padding: 0 }
</style>
<script type="text/javascript">
function step4()
{
    eventSender.mouseUp();
    testRunner.notifyDone();
}

function step3()
{
    eventSender.mouseDown();
    window.setTimeout(step4, 1);
}

function step2()
{
    eventSender.mouseUp();
    window.setTimeout(step3, 100);
}

function step1()
{
    eventSender.mouseDown();
    window.setTimeout(step2, 1);
}

function step0()
{
    eventSender.mouseMoveTo(10, 10);
    window.setTimeout(step1, 1);
}

step0();
testRunner.waitUntilDone();
</script>
</head>
<body>
<div contenteditable>Select me, select me, select me</div>
</body>
</html>
