summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/navigation-api/ordering-and-transition/navigate-cross-document-double.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/navigation-api/ordering-and-transition/navigate-cross-document-double.html')
-rw-r--r--testing/web-platform/tests/navigation-api/ordering-and-transition/navigate-cross-document-double.html52
1 files changed, 52 insertions, 0 deletions
diff --git a/testing/web-platform/tests/navigation-api/ordering-and-transition/navigate-cross-document-double.html b/testing/web-platform/tests/navigation-api/ordering-and-transition/navigate-cross-document-double.html
new file mode 100644
index 0000000000..262809a0ad
--- /dev/null
+++ b/testing/web-platform/tests/navigation-api/ordering-and-transition/navigate-cross-document-double.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<iframe id="i"></iframe>
+
+
+<script type="module">
+import { Recorder } from "./resources/helpers.mjs";
+
+promise_test(async t => {
+ await new Promise(resolve => {
+ i.src = "/common/blank.html";
+ i.onload = () => t.step_timeout(resolve, 0)
+ });
+
+ const fromStart = i.contentWindow.navigation.currentEntry;
+
+ const recorder = new Recorder({
+ window: i.contentWindow,
+ finalExpectedEvent: "promise microtask"
+ });
+
+ recorder.setUpNavigationAPIListeners();
+
+ // Use https://web-platform-tests.org/writing-tests/server-pipes.html to make
+ // sure the response doesn't come back quickly, since once the response comes
+ // back the page would be unloaded and that would break our test.
+ const result1 = i.contentWindow.navigation.navigate("?pipe=trickle(d100)");
+ recorder.setUpResultListeners(result1, " 1");
+
+ const result2 = i.contentWindow.navigation.navigate("?2");
+ recorder.setUpResultListeners(result2, " 2");
+
+ Promise.resolve().then(() => recorder.record("promise microtask"));
+
+ await recorder.readyToAssert;
+
+ recorder.assert([
+ /* event name, location.hash value, navigation.transition properties */
+ ["navigate", "", null],
+ ["AbortSignal abort", "", null],
+ ["navigateerror", "", null],
+
+ ["navigate", "", null],
+ ["committed rejected 1", "", null],
+ ["finished rejected 1", "", null],
+ ["promise microtask", "", null]
+ ]);
+
+ recorder.assertErrorsAreAbortErrors();
+}, "event and promise ordering when navigate() is called to a cross-document destination, interrupting another navigate() to a cross-document destination");
+</script>