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>