Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<title>navigateEvent.deferPageSwap: rejecting a handler does not stop navigation</title>
<script>
switch (new URLSearchParams(location.search).get("phase") || "test") {
case "test":
promise_test(async (t) => {
await new Promise((resolve) => {
window.onload = resolve;
});
window.step_timeout = t.step_timeout;
const done = Promise.withResolvers();
window.did_load = done.resolve;
const popup = window.open("?phase=initial");
const events = await done.promise;
assert_array_equals(events, [
"navigate",
"handler",
"reject",
"pagehide",
]);
});
break;
case "initial":
window.onload = () => {
const events = [];
navigation.addEventListener("navigate", (navigate_event) => {
events.push("navigate");
navigate_event.deferPageSwap({
handler: () =>
new Promise((resolve, reject) => {
events.push("handler");
window.step_timeout(() => {
events.push("reject");
reject();
}, 100);
}),
});
});
window.addEventListener("pagehide", () => {
events.push("pagehide");
window.opener.did_load(events);
});
window.navigation.navigate("?phase=done");
};
break;
case "done":
break;
}
</script>