Test that history traversal is disallowed during unload + beforeunload
Follows https://github.com/whatwg/html/pull/5666.
diff --git a/html/browsers/history/the-history-interface/resources/message-opener.sub.html b/html/browsers/history/the-history-interface/resources/message-opener.sub.html
new file mode 100644
index 0000000..441c08c
--- /dev/null
+++ b/html/browsers/history/the-history-interface/resources/message-opener.sub.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+
+<script>
+"use strict";
+
+opener.postMessage("{{GET[id]}}", "*");
+</script>
diff --git a/html/browsers/history/the-history-interface/resources/traverse-during-beforeunload.html b/html/browsers/history/the-history-interface/resources/traverse-during-beforeunload.html
new file mode 100644
index 0000000..53a4a18
--- /dev/null
+++ b/html/browsers/history/the-history-interface/resources/traverse-during-beforeunload.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+
+<script>
+"use strict";
+
+window.addEventListener("beforeunload", () => {
+ history.back();
+});
+
+location.href = "message-opener.sub.html?id=destination";
+</script>
diff --git a/html/browsers/history/the-history-interface/resources/traverse-during-unload.html b/html/browsers/history/the-history-interface/resources/traverse-during-unload.html
new file mode 100644
index 0000000..d5ffb7a
--- /dev/null
+++ b/html/browsers/history/the-history-interface/resources/traverse-during-unload.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+
+<script>
+"use strict";
+
+window.addEventListener("unload", () => {
+ history.back();
+});
+
+location.href = "message-opener.sub.html?id=destination";
+</script>
diff --git a/html/browsers/history/the-history-interface/traverse-during-beforeunload.html b/html/browsers/history/the-history-interface/traverse-during-beforeunload.html
new file mode 100644
index 0000000..cb8cdca
--- /dev/null
+++ b/html/browsers/history/the-history-interface/traverse-during-beforeunload.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Traversing the history during beforeunload</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+<script>
+"use strict";
+
+async_test(t => {
+ const w = window.open("resources/message-opener.sub.html?id=start");
+ t.add_cleanup(() => w.close());
+
+ const messages = [];
+ window.addEventListener("message", t.step_func(({ data }) => {
+ messages.push(data);
+
+ if (messages.length === 1) {
+ assert_array_equals(messages, ["start"]);
+ w.location.href = "resources/traverse-during-beforeunload.html";
+ } else if (messages.length === 2) {
+ assert_array_equals(messages, ["start", "destination"]);
+ t.done();
+ }
+ }));
+});
+</script>
diff --git a/html/browsers/history/the-history-interface/traverse-during-unload.html b/html/browsers/history/the-history-interface/traverse-during-unload.html
new file mode 100644
index 0000000..6f6e984
--- /dev/null
+++ b/html/browsers/history/the-history-interface/traverse-during-unload.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Traversing the history during unload</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+<script>
+"use strict";
+
+async_test(t => {
+ const w = window.open("resources/message-opener.sub.html?id=start");
+ t.add_cleanup(() => w.close());
+
+ const messages = [];
+ window.addEventListener("message", t.step_func(({ data }) => {
+ messages.push(data);
+
+ if (messages.length === 1) {
+ assert_array_equals(messages, ["start"]);
+ w.location.href = "resources/traverse-during-unload.html";
+ } else if (messages.length === 2) {
+ assert_array_equals(messages, ["start", "destination"]);
+ t.done();
+ }
+ }));
+});
+</script>