<html>
<script>

// Navigation steps:
// 1- loads this page
// 2- loads this page + hash (doesn't call onload)
// 3- loads a data URL that just navigates back
// 4- loads this page + hash (calls onload, triggering completion)

function navigateToHash(field) {
  location.hash = 'hash';
  field.value = 'test';
}

function navigateAwayAndBack() {
  // Assigning to location does not create a history entry, so
  // instead we simulate a link click.
  var evt = document.createEvent("MouseEvents"); 
  evt.initMouseEvent("click", true, true, window,
      0, 0, 0, 0, 0, false, false, false, false, 0, null); 
  document.getElementById('anchor').dispatchEvent(evt);
}

function runTestStep() {
  var hash = location.hash;
  var field = document.getElementById('field');

  if (hash == "") {
    if (window.testRunner) {
      testRunner.dumpAsText();
      testRunner.waitUntilDone();
    }
    // Location changes need to happen outside the onload handler to generate history entries.
    setTimeout(function() {
      navigateToHash(field);
      navigateAwayAndBack();
    }, 0);
  } else {
    document.body.innerHTML = (field.value == '') ? 'FAIL' : 'PASS';
    if (window.testRunner)
      testRunner.notifyDone();
  }
}

</script>
<body onload='runTestStep()' onunload='/*suppress page cache*/'>
  <input id='field'></input>
  <a id='anchor' href='data:text/html,<body onload="history.back()"></body>'>go away and come back</a>
</body>
</html>
