<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.layoutTestController) {
            layoutTestController.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();
            }
            layoutTestController.notifyDone();
        }
</script>

</body>