<html>
<head>
    <script>
        function test()
        {
            if (!window.testRunner)
                return;
            testRunner.dumpAsText();
            document.body.offsetTop;
            eventSender.mouseMoveTo(50, 50);
            eventSender.mouseDown();
            eventSender.mouseMoveTo(125, 125);
            eventSender.mouseMoveTo(135, 135);
            eventSender.mouseUp();
            testRunner.notifyDone();
        }
    </script>
</head>
<body style="margin: 0" onload="test()">
    <div id="q" style="width: 50px; height: 50px; overflow: hidden; resize: both; border: solid;"></div>
    <div style="position: absolute; left: 120px; top: 120px; height: 100px; width: 20px; height: 20px; background-color: blue;" onmouseover="q.style.display='none';"></div>
    <div style="position: absolute; left: 8px; right: 8p; top: 150px;">
        <p>
            Test for <i><a href="http://bugs.webkit.org/show_bug.cgi?id=16603">http://bugs.webkit.org/show_bug.cgi?id=16603</a>
            Crash when resizing text field</i>.
        </p>
        <p>
            Drag the bottom right corner of the black box over the blue square.
            The black box should disappear but the browser should not crash.
        </p>
    </div>
</body>
</html>
