fune/testing/web-platform/tests/navigation-api/ordering-and-transition/navigate-commit-after-transition-intercept.html
Weizhong Xia 4903f1a304 Bug 1843176 [wpt PR 41002] - [navigation-api] WPT variant name should not be an empty string, a=testonly
Automatic update from web-platform-tests
[navigation-api] WPT variant name should not be an empty string

An empty variant name can confuse Wptrunner about what are the tests
intended to be run when passed in through command line args or
--include. Unlike other variants, Wptrunner can not run the empty
name variant alone.

Update the existing tests to make it ready for a system side change.

Bug: 1464004
Change-Id: I97e4afb8b1e59799eb8a6b693d3816381b360478
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4681912
Auto-Submit: Weizhong Xia <weizhong@google.com>
Reviewed-by: Domenic Denicola <domenic@chromium.org>
Commit-Queue: Domenic Denicola <domenic@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1169726}

--

wpt-commits: 9cb8504068432940627a0662b41a6a67805f6f93
wpt-pr: 41002
2023-07-22 01:43:43 +00:00

60 lines
2.4 KiB
HTML

<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<meta name="variant" content="?no-currententrychange">
<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));
const from = navigation.currentEntry;
const recorder = new Recorder({
skipCurrentChange: !hasVariant("currententrychange"),
finalExpectedEvent: "transition.finished fulfilled"
});
recorder.setUpNavigationAPIListeners();
navigation.addEventListener("navigate", e => {
e.intercept({ commit: "after-transition",
async handler() {
recorder.record("handler start");
await new Promise(r => t.step_timeout(r, 0));
recorder.record("handler async step 1a");
e.commit();
recorder.record("handler async step 1b");
await new Promise(r => t.step_timeout(r, 0));
recorder.record("handler async step 2");
}
});
});
const result = navigation.navigate("#1");
recorder.setUpResultListeners(result);
Promise.resolve().then(() => recorder.record("promise microtask"));
await recorder.readyToAssert;
recorder.assert([
/* event name, location.hash value, navigation.transition properties */
["navigate", "", null],
["handler start", "", { from, navigationType: "push" }],
["promise microtask", "", { from, navigationType: "push" }],
["handler async step 1a", "", { from, navigationType: "push" }],
["currententrychange", "#1", { from, navigationType: "push" }],
["handler async step 1b", "#1", { from, navigationType: "push" }],
["committed fulfilled", "#1", { from, navigationType: "push" }],
["handler async step 2", "#1", { from, navigationType: "push" }],
["navigatesuccess", "#1", { from, navigationType: "push" }],
["finished fulfilled", "#1", null],
["transition.finished fulfilled", "#1", null],
]);
}, "event and promise ordering for same-document navigation.navigate() intercepted by intercept() with { commit: 'after-transition' }");
</script>