<pre id="console"></pre>
<script>
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.setCanOpenWindows();
        testRunner.setCloseRemainingWindowsWhenComplete();
        testRunner.waitUntilDone();
    }

    var logString = "";
    function log(s)
    {
        logString += s + "<br />";
    }

    function logTitle(s)
    {
        log("<b>" + s + "<b>");
    }

    // Open test window
    var win = window.open("resources/closure-access-after-navigation-window-child-1.html");

    function done()
    {
        document.getElementById("console").innerHTML = logString;
        if (window.testRunner)
            testRunner.notifyDone();
    }

    Object.prototype.myVal = "parent";
    var myGlobal = {
        myGlobalVal: "parent"
    };

    getObjectOfParent = function()
    {
        return {};
    };

    getGlobalOfParent = function()
    {
        return myGlobal;
    };

    test = function(p, val)
    {
        try {
            log(p + "()." + val + " = " + window[p]()[val]);
        } catch(e) {
            log(e.message);
        }
    };
</script>
