<html>
<head>
<script>
function print(message) {
    var paragraph = document.createElement("p");
    paragraph.appendChild(document.createTextNode(message));
    document.getElementById("console").appendChild(paragraph);
}

function test() {
    var count = 0;
    var o = window;
    do {
        if (o.x)
            print("FAIL: element " + count + " in the window's prototype chain was not cleared");
        else
            print("PASS: element " + count + " in the window's prototype chain was cleared");

        ++count;
        o = o.__proto__;
    } while(o);
    
    if (window.layoutTestController)
        layoutTestController.notifyDone();
}
</script>
</head>
<body onload="test();">
<p>This test checks to ensure that the window object is cleared during a navigation.</p>
<p>If the test passes, you will see only PASS messages below.</p>
<hr>
<div id='console'/>
</body>
</html>
