<!DOCTYPE html>
<html>
<body>
<script src="../../../resources/js-test-pre.js"></script>
<iframe src="http://localhost:8000/security/resources/iframe-with-element.html"></iframe>
<script>
description("Test security checking for access to Location.");
jsTestIsAsync = true;

onload = function() {
    shouldThrowErrorName("frames[0].location.protocol", "SecurityError");
    shouldThrowErrorName("frames[0].location.host", "SecurityError");
    shouldThrowErrorName("frames[0].location.hostname", "SecurityError");
    shouldThrowErrorName("frames[0].location.port", "SecurityError");
    shouldThrowErrorName("frames[0].location.pathname", "SecurityError");
    shouldThrowErrorName("frames[0].location.search", "SecurityError");
    shouldThrowErrorName("frames[0].location.hash", "SecurityError");
    shouldThrowErrorName("frames[0].location.origin", "SecurityError");
    shouldThrowErrorName("frames[0].location.ancestorOrigins", "SecurityError");
    shouldThrowErrorName("frames[0].location.toString()", "SecurityError");
    shouldThrowErrorName("frames[0].location.reload()", "SecurityError");
    shouldThrowErrorName("frames[0].location.assign('about:blank')", "SecurityError");
    shouldThrowErrorName("frames[0].location.href", "SecurityError");

    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'protocol').get.call(frames[0].location)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'host').get.call(frames[0].location)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'hostname').get.call(frames[0].location)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'port').get.call(frames[0].location)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'pathname').get.call(frames[0].location)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'search').get.call(frames[0].location)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'hash').get.call(frames[0].location)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'origin').get.call(frames[0].location)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'ancestorOrigins').get.call(frames[0].location)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'toString').value.call(frames[0].location)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'href').get.call(frames[0].location)", "SecurityError");

    shouldThrowErrorName("frames[0].location.protocol = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.host = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.hostname = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.port = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.pathname = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.search = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.hash = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.origin = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.ancestorOrigins = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.toString = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.reload = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.replace = 1", "SecurityError");
    shouldThrowErrorName("frames[0].location.assign = 1", "SecurityError");

    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'protocol').set.call(frames[0].location, 1)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'host').set.call(frames[0].location, 1)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'hostname').set.call(frames[0].location, 1)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'port').set.call(frames[0].location, 1)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'pathname').set.call(frames[0].location, 1)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'search').set.call(frames[0].location, 1)", "SecurityError");
    shouldThrowErrorName("Object.getOwnPropertyDescriptor(window.location, 'hash').set.call(frames[0].location, 1)", "SecurityError");

    shouldThrowErrorName("Object.defineProperty(frames[0].location, 'foo', { value: 1 })", "SecurityError");

    // Setting 'href' cross origin should be allowed.
    shouldNotThrow("frames[0].location.href = 'about:blank'");
    handle = setInterval(function() {
        try {
            frames[0].location.href; // Should throw if still cross-origin.

            shouldBeEqualToString("frames[0].location.href", "about:blank");
            clearInterval(handle);
            finishJSTest();
        } catch (e) { }
    }, 5);
};
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
