2 <script src=
"/resources/testharness.js"></script>
3 <script src=
"/resources/testharnessreport.js"></script>
4 <meta name=
"variant" content=
"">
5 <meta name=
"variant" content=
"?currententrychange">
8 import { Recorder, hasVariant } from
"./resources/helpers.mjs";
10 promise_test(async t =
> {
11 // Wait for after the load event so that the navigation doesn't get converted
12 // into a replace navigation.
13 await new Promise(resolve =
> window.onload = () =
> t.step_timeout(resolve,
0));
15 const from = navigation.currentEntry;
16 const expectedError = new Error(
"boo");
18 const recorder = new Recorder({
19 skipCurrentChange: !hasVariant(
"currententrychange"),
20 finalExpectedEvent:
"transition.finished rejected"
23 recorder.setUpAppHistoryListeners();
25 navigation.addEventListener(
"navigate", e =
> {
26 e.transitionWhile(Promise.reject(expectedError));
29 location.href =
"/common/blank.html#1";
31 Promise.resolve().then(() =
> recorder.record(
"promise microtask"));
33 await recorder.readyToAssert;
36 /* event name, location.hash value, navigation.transition properties */
37 [
"navigate",
"", null],
38 [
"currententrychange",
"#1", { from, navigationType:
"push" }],
39 [
"promise microtask",
"#1", { from, navigationType:
"push" }],
40 [
"navigateerror",
"#1", { from, navigationType:
"push" }],
41 [
"transition.finished rejected",
"#1", null],
44 recorder.assertErrorsAre(expectedError);
45 },
"event and promise ordering for location.href setter intercepted by passing a rejected promise to transitionWhile()");