<html>
<head>
<script>
function ok(b,m) {
    return external.ok(b, m);
}

function nav_parent_test() {
    external.trace("Running _parent navigation tests...");

    var iframe = document.getElementById("testframe");
    var subframe = iframe.contentWindow.document.createElement("iframe");

    subframe.onload = function() {
        var doc = subframe.contentWindow.document;
        doc.body.innerHTML = '<a href="blank2.html" id="aid" target="_parent">test</a>';
        doc.getElementById("aid").click();
    }

    iframe.onload = function() {
        iframe.onload = null;
        var href = iframe.contentWindow.location.href;
	ok(/.*blank2.html/.test(href), "Unexpected href " + href);
	next_test();
    }

    iframe.contentWindow.document.body.appendChild(subframe);
    subframe.src = "blank.html";
}

function window_navigate_test() {
    external.trace("Running window.navigate() tests...");

    var iframe = document.getElementById("testframe");

    iframe.onload = function() {
        iframe.onload = null;
        var href = iframe.contentWindow.location.href;
	ok(href === "about:blank", "Unexpected href " + href);
	next_test();
    }

    iframe.contentWindow.navigate("about:blank");
}

function window_open_self_test() {
    external.trace("Running window.open(_self) tests...");

    var iframe = document.getElementById("testframe");
    var iframe_window = iframe.contentWindow;

    iframe.onload = function() {
        iframe.onload = null;
        var href = iframe.contentWindow.location.href;
        ok(/.*blank.html\?window_open_self/.test(href), "Unexpected href " + href);
        ok(iframe.contentWindow === iframe_window, "iframe.contentWindow !== iframe_window");
	next_test();
    }

    iframe_window.open("blank.html?window_open_self", "_self");
}

function detached_src_test() {
    var iframe = document.createElement("iframe");
    var onload_called = false;

    iframe.onload = function() {
        onload_called = true;
        next_test();
    }

    iframe.src = "blank.html";
    document.body.appendChild(iframe);
    ok(onload_called === false, "called onload too early?");
}

var tests = [
    nav_parent_test,
    window_navigate_test,
    window_open_self_test,
    detached_src_test,
    function() { external.reportSuccess(); }
];

function next_test() {
   window.setTimeout(tests.shift(), 0);
}
</script>
<body onload="next_test()">
<iframe src="about:blank" id="testframe"></iframe>
</body>
</html>
