<html>
<head>
<script>

if (window.layoutTestController)
    layoutTestController.waitUntilDone();

function test()
{
    window.setTimeout('removeChildLayer()', 0);
}

function removeChildLayer()
{
    // force a layout
    x = document.getElementById('remove').clientX;

    if (window.eventSender) {
        eventSender.mouseMoveTo(100, 100);
        eventSender.mouseDown();
    }

    document.getElementById('remove').style.visibility = "hidden";
    window.setTimeout('moveMouse()', 0);
}

function moveMouse()
{
    if (window.eventSender)
        eventSender.mouseMoveTo(100, 100);
    window.setTimeout('finish()', 0);
}

function finish()
{
    if (window.eventSender)
        eventSender.mouseUp();
    if (window.layoutTestController)
        layoutTestController.notifyDone();
}

</script>
</head>

<body onload="test();">
<div>Mousing over the yellow square below should not cause an
assertion failure or crash. This tests for regressions against
<a href="http://bugzilla.opendarwin.org/show_bug.cgi?id=6931">6931</a>.

</div>
<div style="background: yellow; position: absolute; z-index: 1; top: 50; left: 50; width: 200; height: 200">
<div id="remove" style="z-index: 5; background: red; position: absolute; top: 0; left: 20; width: 100; height: 100">
</div>
</div>
</body>
</body>
