<html>
<script>
if (window.testRunner) {
    testRunner.setCanOpenWindows();
    testRunner.dumpBackForwardList();
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function createNewWindow() {
    var newWindow = window.open('');
    newWindow.focus();
    newWindow.document.write('<html><meta http-equiv="refresh" content="0;url=resources/redirect-1.html"></html>');
    newWindow.document.close();
}
</script>
<body onload="createNewWindow();">
This test will open a new window to an empty url and fill its contents with a document.write()<br>
That document will then redirect to another url called redirect-1.html.<br>
That document will redirect to yet another url called redirect-2.html<br>
The back/forward history of the new window should contain both redirect-1.html and redirect-2.html<br><br>
The test will run automatically with popup blocking disabled, or you can click the button.<br><br>
<input type="button" value="Run Test" onclick="createNewWindow();">
</body>
</html>
