<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>History Test Page 2</title>
<script type="text/javascript" src="HistoryHelper.js"></script>
</head>

<body onload="onLoad();">
<div id="statusPanel" style="border: 1px solid red; width: 100%">
History Test Page 2....
</div>
</body>

<script type="text/javascript">

function onLoad() {
  // This page could be visited in the following sequences:-
  // 1. history_length_test_page1->history_length_test_page2.html
  // 2. history_length_test_page1->history_length_test_page2.html->
  //    redirect to history_length_test_page3.html
  //    ->history_length_test_page4.html->history_length_test_page3.html->
  //    history_length_test_page2.html->history_length_test_page1.html->
  //    history_length_test_page2.html
  if (readCookie(navigate_forward_cookie) != null) {
    setTimeout(OnNavigateForward, 0);
  } else if (readCookie(navigate_backward_cookie) != null) {
    setTimeout(OnNavigateBackward, 0);
  } else {
    setTimeout(OnInitialLoad, 0);
  }
  return true;
}

function OnNavigateForward() {
  if (window.history.length != 5) {
    onFailure("History_Length_Test_2", 1,
            "History length mismatch on initial load at page 2: " +
            window.history.length);
    return false;
  }
  window.history.forward();
  return true;
}

function OnNavigateBackward() {
  if (window.history.length != 5) {
    onFailure("History_Length_Test_2", 1,
            "History length mismatch on initial load at page 2: " +
            window.history.length);
    return false;
  }
  window.history.back();
  return true;
}

function OnInitialLoad() {
  if (window.history.length != 2 && window.history.length != 3) {
    onFailure("History_Length_Test_2", 1,
              "History length mismatch on initial load at page 2: " +
              window.history.length);
    return false;
  }
  // Redirect to page 3.
  window.location.href = "history_length_test_page_3.html";
  return true;
}

</script>
</html>