<html>
<head>
<style>

.main_links:hover{ font-size: 11px; }
div.links a:hover span { position: absolute; }

</style>
</head>

<body>

<p>To reproduce this bug outside of DumpRenderTree, mouse over the links below several times. 
The bug is fixed if we don't crash. </p>

<div class="links">
<table>
    <tr>    
        <td width='126' valign='top' >
            <div>
                <a href='javascript:' class='main_links'><span>this is the home page</span>home</a><br>
                <a href='javascript:' class='main_links'><span>this is the about us page</span>about us</a><br>
            </div>
        </td>
    </tr>      
</table>
</div>

<script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
            if (window.eventSender) {
                eventSender.mouseMoveTo(50,75);
                eventSender.mouseDown();
                eventSender.mouseUp();
                eventSender.mouseMoveTo(50,0);
                eventSender.mouseDown();
                eventSender.mouseUp();
                eventSender.mouseMoveTo(50,50);
                eventSender.mouseDown();
                eventSender.mouseUp();
                eventSender.mouseMoveTo(50,75);
                eventSender.mouseDown();
                eventSender.mouseUp();
                eventSender.mouseMoveTo(31,108);
                eventSender.mouseDown();
                eventSender.mouseUp();
                eventSender.mouseMoveTo(35,72);
                eventSender.mouseDown();
                eventSender.mouseUp();
                eventSender.mouseMoveTo(31,108);
                eventSender.mouseDown();
                eventSender.mouseUp();
            }
            testRunner.notifyDone();
        }
</script>

</body>
