<html>
<head>
    <script>
    var i = 0;
    function test() {
        if (window.testRunner) {
            testRunner.setCanOpenWindows();
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
            var button = document.getElementById("button");
            eventSender.mouseMoveTo(button.offsetParent.offsetLeft + button.offsetLeft + button.offsetWidth / 2, button.offsetParent.offsetTop +  button.offsetTop + button.offsetHeight / 2);
            eventSender.mouseDown();
            eventSender.mouseUp();
        }
    }
    function openWindow() {
        var newWindow = window.open('resources/history_reload_window.html');
    }

    </script>
</head>
<body onload="test()">
    This tests that history.go(0) will force a page reload.<br>
    <input id="button" type="button" onclick="openWindow()" value="click"></input>
    <div id="console"></div>
</body>
</html>
