<p>
This page tests whether global declarations are cleared after a navigation.
If the test passes, you'll see a series of PASS messages below.
</p>
<pre id="console"></pre>

<script>
function log(s)
{
    document.getElementById("console").appendChild(document.createTextNode(s + "\r\n"));
}

function shouldBe(evalA, a, b)
{
    if (evalA === b) {
        log("PASS: " + a + " should be " + b + " and is.");
    } else {
        log("FAIL: " + a + " should be " + b + " but instead is " + evalA + ".");
    }
}

var count = 0;
function didFinishLoading(childWindow) // called by subframes
{
    log("\r\nPage " + count + ":");
    if (!count) {
        shouldBe('x' in childWindow, "'x' in childWindow", true);
        shouldBe(childWindow.x, "childWindow.x", 1);
        shouldBe('f' in childWindow, "'f' in childWindow", true);
        shouldBe(typeof childWindow.f, "childWindow.f", "function");
        
        childWindow.name = "test";
        
        childWindow.location = "window-property-clearing-iframe1.html";
        
        ++count;
    } else {
        shouldBe('x' in childWindow, "'x' in childWindow", false);
        shouldBe(childWindow.x, "childWindow.x", undefined);
        shouldBe('f' in childWindow, "'f' in childWindow", false);
        shouldBe(typeof childWindow.f, "typeof childWindow.f", "undefined");
        shouldBe('name' in childWindow, "'name' in childWindow", true);
        shouldBe(childWindow.name, "childWindow.name", "test");
    
        if (window.layoutTestController)
            layoutTestController.notifyDone();
    }
}

function test()
{
    if (window.layoutTestController) {
        layoutTestController.dumpAsText();
        layoutTestController.waitUntilDone();
    }
}

test();
</script>

<iframe src="resources/window-property-clearing-iframe0.html"></iframe>
