<!DOCTYPE html><!-- webkit-test-runner [ ProcessSwapOnCrossSiteWindowOpenEnabled=true ] -->
<html>
<body>
<script src="/js-test-resources/js-test.js"></script>
<script>
description("Basic testing for the window returning window.open() becoming remote when navigating cross-origin.");
jsTestIsAsync = true;

function wasWindowNavigatedCrossOrigin()
{
    try {
        w.name;
        return false;
    } catch (e) {
        return true;
    }
}

function runTest() {
    forbiddenProperties = ["name", "location.href", "document", "history", "locationbar", "status", "frameElement", "navigator", "alert", "localStorage", "sessionStorage", "event"];
    for (forbiddenProperty of forbiddenProperties)
        shouldThrowErrorName("w." + forbiddenProperty, "SecurityError");

    shouldBe("w.window", "w");
    shouldBe("w.self", "w");
    shouldBe("w.top", "w");
    shouldBe("w.parent", "w");
    shouldBe("w.frames", "w");
    shouldBeFalse("w.closed");
    shouldBe("w.length", "0");
    shouldBe("w.opener", "window");
    shouldBeType("w.close", "Function");
    shouldBeType("w.focus", "Function");
    shouldBeType("w.blur", "Function");
    shouldBeType("w.postMessage", "Function");
    shouldBe("w.close", "w.close");
    shouldBe("w.focus", "w.focus");
    shouldBe("w.blur", "w.blur");
    shouldBe("w.postMessage", "w.postMessage");
    shouldBe("w.postMessage.length", "1");
    shouldNotThrow("w.postMessage('test', '*')");
    shouldNotThrow("w.focus()");
    shouldNotThrow("w.blur()");
    shouldBe("w.then", "undefined");

    shouldNotThrow("w.location");
    shouldNotBe("w.location", "null");

    expected_property_names = ["blur", "close", "closed", "focus", "frames", "length", "location", "opener", "parent", "postMessage", "self", "top", "window", "then"];
    actual_properties = Object.getOwnPropertyNames(w);
    shouldBeTrue("areArraysEqual(actual_properties, expected_property_names)");

    shouldThrowErrorName("Object.getPrototype(w)", "TypeError");
    shouldThrowErrorName("Object.setPrototype(w, {})", "TypeError");
    shouldThrowErrorName("Object.preventExtensions(w)", "TypeError");
    shouldThrowErrorName("Object.defineProperty(w, 'foo', {value: 1})", "SecurityError");
    shouldThrowErrorName("delete w.closed", "SecurityError");

    shouldThrowErrorName("w.foo = 1", "SecurityError");

    finishJSTest();
}

onload = function() {
    w = window.open("http://localhost:8000/navigation/resources/success.html");
    shouldBeEqualToString("w.location.href", "about:blank");

    handle = setInterval(function() {
        if (wasWindowNavigatedCrossOrigin()) {
            clearInterval(handle);
            runTest();
        }
    }, 5);
}
</script>
</body>
</html>
