<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
async_test(t => {
  // Wait for after the load event so that the navigation doesn't get converted
  // into a replace navigation.
  window.onload = () => t.step_timeout(() => {
    let target_key = navigation.currentEntry.key;
    let target_id = navigation.currentEntry.id;
    let target_index = navigation.currentEntry.index;
    navigation.navigate("#foo").committed.then(t.step_func(() => {
      navigation.onnavigate = t.step_func_done(e => {
        assert_equals(e.navigationType, "traverse");
        assert_true(e.cancelable);
        assert_true(e.canIntercept);
        assert_false(e.userInitiated);
        assert_true(e.hashChange);
        assert_equals(e.downloadRequest, null);
        assert_equals(new URL(e.destination.url).hash, "");
        assert_true(e.destination.sameDocument);
        assert_equals(e.destination.key, target_key);
        assert_equals(e.destination.id, target_id);
        assert_equals(e.destination.index, target_index);
        assert_equals(e.formData, null);
        assert_equals(e.info, "hi");
        assert_not_equals(e.hasUAVisualTransition, undefined);
        assert_equals(e.sourceElement, null);
      });
      assert_true(navigation.canGoBack);
      navigation.back({ info: "hi" });
    }));
  }, 0);
}, "navigate event for navigation.back() - same-document");
</script>
