<html>
<head>

<script>

if (window.testRunner) {
    testRunner.dumpDOMAsWebArchive();
    testRunner.waitUntilDone();
}

var otherWindow = null;

function startTest()
{
    otherWindow = window.open("resources/adopt-inline-styled-node-second-window.html", "TestWindow");
    if (!otherWindow) {
        alert("When running this test under Safari, popup blocking must be disabled.");
        return;
    }
    tryAdoptNode();
}

function tryAdoptNode()
{
    var otherSpan = otherWindow.document.getElementById("otherSpan");
    if (!otherSpan) {
        setTimeout("tryAdoptNode()", 10);
        return;
    }
    
    var adoptedSpan = document.adoptNode(otherSpan);
    document.getElementById("testSpan").appendChild(adoptedSpan);
    otherWindow.close();
    
    procedeAfterClosedWindow();
}

function procedeAfterClosedWindow()
{
    if (!otherWindow.closed) {
        setTimeout("procedeAfterClosedWindow()", 10);
        return;
    }
    
    otherWindow = null;
    
    if (window.GCController) {
        GCController.collect();
        if (window.testRunner)
            testRunner.notifyDone();
        else
            alert("How strange - You have window.GCController, but no window.testRunner.  How did this happen?");
    }
    else
        alert("Now wait for garbage collection to have occured, then save the current page as a WebArchive.");
}

</script>
</head>

<body onload="startTest();">
<span id="testSpan">This test takes a node with inline style from a different document, moves it to this document, makes sure the other document has closed,
then makes a WebArchive from this document.  The test passes if it doesn't crash.  If running the test in Safari then garbage collection might get in the
way of fulling testing the bug.  One should wait "awhile" before making the WebArchive.<br></span>
</body>
</html>
