<html>
<head>
<script>

if (window.testRunner)
    testRunner.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.testRunner)
        testRunner.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="https://bugs.webkit.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>
