<!doctype html> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <meta name="variant" content=""> <meta name="variant" content="?currententrychange"> <script type="module"> import { Recorder, hasVariant } from "./resources/helpers.mjs"; 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)); await navigation.navigate("#1").finished; const from = navigation.currentEntry; const expectedError = new Error("boo"); const recorder = new Recorder({ skipCurrentChange: !hasVariant("currententrychange"), finalExpectedEvent: "transition.finished rejected" }); recorder.setUpNavigationAPIListeners(); navigation.addEventListener("navigate", e => { e.intercept({ handler() { recorder.record("handler run"); return Promise.reject(expectedError); }}); }); const result = navigation.back(); recorder.setUpResultListeners(result); Promise.resolve().then(() => recorder.record("promise microtask")); await recorder.readyToAssert; recorder.assert([ /* event name, location.hash value, navigation.transition properties */ ["promise microtask", "#1", null], ["navigate", "#1", null], ["currententrychange", "", { from, navigationType: "traverse" }], ["handler run", "", { from, navigationType: "traverse" }], ["committed fulfilled", "", { from, navigationType: "traverse" }], ["navigateerror", "", { from, navigationType: "traverse" }], ["finished rejected", "", null], ["transition.finished rejected", "", null] ]); recorder.assertErrorsAre(expectedError); }, "event and promise ordering for same-document navigation.back() intercepted by passing a rejected promise to intercept()"); </script>