<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     xmlns:xhtml="http://www.w3.org/1999/xhtml">
<foreignObject width="200" height="80">
    <xhtml:div>
        <xhtml:input id="src" type="text" value="Select and drag this text"></xhtml:input>
        <xhtml:input id="dst" type="text" value="to here"></xhtml:input>
    </xhtml:div>
</foreignObject>
<text>PASS without crash in Debug mode.</text>
<script>
(function runTest()
{
    if (!window.testRunner)
        return;

    testRunner.dumpAsText();
    testRunner.waitUntilDone();

    var sourceInput = document.getElementById("src");
    sourceInput.focus();
    sourceInput.setSelectionRange(0, 6);
    var x = sourceInput.offsetLeft + 10;
    var y = sourceInput.offsetTop + sourceInput.offsetHeight / 2;
    eventSender.mouseMoveTo(x, y);
    eventSender.mouseDown();

    eventSender.leapForward(500);

    var destinationInput = document.getElementById("dst");
    eventSender.mouseMoveTo(destinationInput.offsetLeft + 10, destinationInput.offsetTop + destinationInput.offsetHeight / 2);
    eventSender.mouseUp();

    sourceInput.parentNode.removeChild(sourceInput);
    destinationInput.parentNode.removeChild(destinationInput);

    testRunner.notifyDone();
})();
</script>
</svg>
