<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script>
promise_test(async t => {
  let w = window.open("/common/blank.html");
  await new Promise(resolve => w.onload = resolve);

  await test_driver.bless("navigate", async function() {
    w.navigation.navigate(new URL('resources/navigate-history-traversal-during-onnavigate-helper.html?count=1', location.href).href);
  });

  await new Promise(resolve => onmessage = resolve);
  w.postMessage("start", "*");
  await new Promise(resolve => onmessage = resolve);

  await new Promise(resolve => w.onhashchange = resolve);

  w.onpopstate = () => assert_unreached("No more popstate events");

  assert_equals(w.navigation.currentEntry.index, 1);
  assert_equals(new URL(w.navigation.currentEntry.url).pathname, "/navigation-api/navigate-event/resources/navigate-history-traversal-during-onnavigate-helper.html");
  assert_equals(new URL(w.navigation.currentEntry.url).hash, "");
  w.close();
}, "Test that navigation.back() silently aborts during onnavigate");

promise_test(async t => {
  let w = window.open("/common/blank.html");
  await new Promise(resolve => w.onload = resolve);

  await test_driver.bless("navigate", async function() {
    w.navigation.navigate(new URL('resources/navigate-history-traversal-during-onnavigate-helper.html?count=3', location.href).href);
  });

  await new Promise(resolve => onmessage = resolve);
  w.postMessage("start", "*");
  await new Promise(resolve => onmessage = resolve);

  await new Promise(resolve => w.onhashchange = resolve);
  assert_equals(w.navigation.currentEntry.index, 3);
  assert_equals(new URL(w.navigation.currentEntry.url).pathname, "/navigation-api/navigate-event/resources/navigate-history-traversal-during-onnavigate-helper.html");
  assert_equals(new URL(w.navigation.currentEntry.url).hash, "#1");

  await new Promise(resolve => w.onhashchange = resolve);
  assert_equals(w.navigation.currentEntry.index, 1);
  assert_equals(new URL(w.navigation.currentEntry.url).pathname, "/navigation-api/navigate-event/resources/navigate-history-traversal-during-onnavigate-helper.html");
  assert_equals(new URL(w.navigation.currentEntry.url).hash, "");
  w.close();
}, "Test that navigation.traverseTo() works during onnavigate");
</script>
