<!doctype html> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script> async_test(t => { let start_length = navigation.entries().length; let start_index = navigation.currentEntry.index; // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. window.onload = () => t.step_timeout(() => { assert_equals(navigation.entries().length, start_length); let onnavigate_count = 0; navigation.onnavigate = () => onnavigate_count++; let key = navigation.currentEntry.key; navigation.navigate("#").committed .then(t.step_func(() => { assert_equals(navigation.entries().length, start_length + 1); assert_equals(navigation.currentEntry, navigation.entries()[start_index + 1]); assert_not_equals(key, navigation.currentEntry.key); return navigation.traverseTo(key).committed; })) .then(t.step_func(() => { assert_equals(navigation.entries().length, start_length + 1); assert_equals(navigation.currentEntry, navigation.entries()[start_index]); assert_equals(key, navigation.currentEntry.key); assert_true(navigation.canGoForward); return navigation.forward().committed; })) .then(t.step_func(() => { assert_equals(navigation.entries().length, start_length + 1); assert_equals(navigation.currentEntry, navigation.entries()[start_index + 1]); assert_true(navigation.canGoBack); return navigation.back().committed; })) .then(t.step_func_done(() => { assert_equals(navigation.entries().length, start_length + 1); assert_equals(navigation.currentEntry, navigation.entries()[start_index]); assert_equals(key, navigation.currentEntry.key); assert_equals(onnavigate_count, 4); })); }, 0); }, "same-document navigate.traverseTo(), back(), and forward()"); </script>