<html>
<head>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

gc = window.gc || function()
{
    if (window.GCController)
        return GCController.collect();
    
    for (var i = 0; i < 10000; ++i)
        var s = new String("AAAA");
}

window.onload = function()
{
    parent = document.createElement("div");
    parent.innerHTML = "<iframe></iframe><element id='element'/>";

    iframe = parent.firstChild;
    iframe.src = "javascript:top.document.body.removeChild(top.parent)";
    
    document.body.appendChild(parent);

    parent = iframe = null;
    gc();
    
    setTimeout(finishTest, 0);
}

finishTest = function()
{
    document.getElementById("element");
    
    if (window.testRunner)
        testRunner.notifyDone();
}
</script>
</head>
<body>PASS</body>
</html>
