Test that navigateEvent.defaultPrevented remains false if the navigation is cancelled after event dispatch
Fixed: 1426994
Change-Id: I6581d820f0212c5186b54cb52f4a7d9c481b8148
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4375509
Auto-Submit: Nate Chapin <japhet@chromium.org>
Reviewed-by: Domenic Denicola <domenic@chromium.org>
Commit-Queue: Domenic Denicola <domenic@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1122797}
diff --git a/navigation-api/navigate-event/defaultPrevented-navigation-preempted.html b/navigation-api/navigate-event/defaultPrevented-navigation-preempted.html
new file mode 100644
index 0000000..1df4f56
--- /dev/null
+++ b/navigation-api/navigate-event/defaultPrevented-navigation-preempted.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+test(() => {
+ let navigateEvent;
+ let navigateError_called = false;
+ navigation.onnavigate = e => navigateEvent = e;
+ navigation.onnavigateerror = () => navigateError_called = true;
+
+ navigation.navigate("#1");
+ assert_false(navigateEvent.defaultPrevented);
+ assert_false(navigateError_called);
+
+ navigation.navigate("#2");
+ assert_false(navigateEvent.defaultPrevented);
+ assert_true(navigateError_called);
+}, "navigateEvent.defaultPrevented isn't affected when the navigation is preempted after dispatch");
+</script>
diff --git a/navigation-api/navigate-event/defaultPrevented-window-stop-after-dispatch.html b/navigation-api/navigate-event/defaultPrevented-window-stop-after-dispatch.html
new file mode 100644
index 0000000..da5de10
--- /dev/null
+++ b/navigation-api/navigate-event/defaultPrevented-window-stop-after-dispatch.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+async_test(t => {
+ window.onload = t.step_func_done(() => {
+ let navigateEvent;
+ navigation.onnavigate = e => navigateEvent = e;
+ navigation.navigate("?1");
+ assert_false(navigateEvent.defaultPrevented);
+
+ window.stop();
+ assert_false(navigateEvent.defaultPrevented);
+ });
+}, "window.stop() doesn't affect navigateEvent.defaultPrevented after dispatch");
+</script>