<!DOCTYPE HTML>
<script src="../../../../resources/js-test.js"></script>
<script>
description("Updating window.location after the window has been closed, without crashing.");

// This tests opens a new window, sets a timeout to close it, then
// sets a timeout to navigate it via window.location. We pass if we
// don't crash when setting the location of the already closed window,
// or when shutting down just after.

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

var w = window.open('../../../../resources/window-postmessage-open-close.html');

window.addEventListener("message", processMessage, false);

function finish() {
    // Clear out window and force a GC to finalize the Window
    // object and its wrapper. Verifies that the shutdown is
    // done in an orderly manner.
    w = null;
    gc();
    if (window.testRunner)
        testRunner.notifyDone();
}

function processMessage(event) {
    if (event.data == "opened")
        w.close();
    else if (event.data == "closed") {
        w.location = '';
        setInterval(finish, 0);
    }
}
</script>
