<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
       <title></title>
       <style type="text/css">
           h1
           {
               /* required for crash */
               position: relative;
           }
           
           h1:before
           {
               /* required for crash */
               content: "";
               position: absolute;
               
               /* Width and height so we can drag over it, values not important */
               height: 200px;
               width: 200px;
               
               /* border so we can see it */
               border: 1px solid red;
           }       
        </style>
        <script type="text/javascript">
            if (window.testRunner)
                testRunner.dumpAsText();

            function finishTest()
            {
                eventSender.mouseUp();
                getSelection().removeAllRanges();
                testRunner.notifyDone();
            }

            function test()
            {
                if (!window.testRunner)
                    return;
                testRunner.waitUntilDone();
                eventSender.dragMode = false;
                eventSender.mouseMoveTo(1, 1);
                eventSender.mouseDown();
                // Start autoscroll.
                eventSender.mouseMoveTo(2, 2);
                // Move into position.
                eventSender.mouseMoveTo(50, 50);
                // Wait for the autoscroll timer to fire.
                setTimeout(finishTest, 200);
            }
        </script>
   </head>
   <body onload="test()">
       <h1 id="heading">No crash means PASS</h1>
   </body>
</html>
