<html>
<script>

var w1, w2;
var iframeXHRCount = 0;

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
    testRunner.setCanOpenWindows(true);
}

function log(message)
{
    document.getElementById("log").innerText += message + "\n";
}

iframeXHRFinished = function()
{
    log("FAIL: Iframe XHR request should never finish loading!");
    notifyDone();
}

iframeXHRStarted = function()
{
    log("Started loading iframe XHR request.");
    ++iframeXHRCount;

    if (iframeXHRCount < 2)
        return;

    log("Beginning adoption sequence.");

    // First adoptNode will have an id collision if resource ids are not
    // unique across pages.
    var f = w1.document.getElementsByTagName("iframe")[0];
    w2.document.adoptNode(f);
    w2.document.body.appendChild(f);

    log("PASS: adopted node without id collision");

    // Adopt node back to its original page to verify that the resource id
    // for the iframe was properly removed from its original page.
    w1.document.adoptNode(f);
    w1.document.body.appendChild(f);

    log("PASS: adopted back to original page without id collision");

    notifyDone();
}

function notifyDone()
{
    w1.close();
    w2.close();

    if (window.testRunner)
        testRunner.notifyDone();
}

function test()
{
    w1 = window.open("resources/iframe-reparenting-id-collision-page.html");
    w2 = window.open("resources/iframe-reparenting-id-collision-page.html");
}

</script>
<body onload="test()">
<p>This test checks that resource ids are unique across pages by opening
two pages that both contain an iframe that loads the same number of
resources, then adopting the iframe from one page to the other. If resource
ids are not unique across pages, these pages will have the same resource ids 
and the adoptNode will fail due to an id collision. The iframe is then 
adopted back into its original page to check for id collision from failure
to properly remove its resource id from the original page. </p>
<pre id=log></pre>
</body>
</html>
