blob: a081bec514e5e46537e30c7643d12537c698df83 [file] [log] [blame]
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
promise_test(async t => {
// Wait for after the load event so that the navigation doesn't get converted
// into a replace navigation.
await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0));
location.hash = "#1";
assert_equals(location.hash, "#1");
location.hash = "#2";
assert_equals(location.hash, "#2");
let anchor = document.createElement("a");
anchor.href = "#3";
anchor.onclick = () => {
history.back();
};
let navigations = [];
let navigationsPromise = new Promise(resolve => {
onpopstate = () => {
navigations.push(location.hash);
if (navigations.length === 2) {
resolve();
}
}
});
anchor.click();
await navigationsPromise;
// We were on #2 when history.back() was called so we should be on #1 now.
assert_equals(location.hash, "#1");
// While the history navigation back to "#1" was pending, we should have navigated to "#3".
assert_array_equals(navigations, ["#3", "#1"]);
}, "Anchor with a fragment href and a click handler that navigates back");
</script>