<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<pre id="console"></pre>
<script>
description('Verifies that we can go back and forward from the top level of a frame set where a window changes its name after the initial load.');

var testWindow;

onload = function()
{
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }
    
    testWindow = window.open('resources/history-subframe-with-name-container.html');
    if (!testWindow)
        testFailed('Could not open test window');    
}

var State = {
  0: 'INITIAL',
  1: 'FRAME_LOADED_INITIAL',
  2: 'FRAME_LOADED_NAV',
  3: 'FRAME_LOADED_BACK',
  4: 'FRAME_LOADED_FORWARD'
};

var currentState = 0;
var currentPageId;

function onFrameLoaded(pageId)
{
    // The page ID is put in a global so that the eval() inside of shouldBe can
    // see it
    currentPageId = pageId;    
    currentState++;
    
    switch (currentState) {
      case 1:
          shouldBe('2', 'currentPageId');
          // Make sure we generate a history entry.
          setTimeout(function() { testWindow.frames[0].location.href = 'resources/history-subframe-with-name-3.html' }, 0);
          break;
      case 2:
          shouldBe('3', 'currentPageId');
          testWindow.history.back();
          break;
      case 3:
          shouldBe('2', 'currentPageId');
          testWindow.history.forward();
          break;
      case 4:
          shouldBe('3', 'currentPageId');
          break;
      default:
          testFailed('Should not be in state ' + currentState + ". currentPageId is " + currentPageId);
          break;
    }
    
    if (currentState == 4) {
        testPassed('Complete: navigated through all the states');
        if (window.testRunner)
            testRunner.notifyDone();
    }
}
</script>
</body>
