summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/portals/predecessor-fires-unload.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/portals/predecessor-fires-unload.html')
-rw-r--r--testing/web-platform/tests/portals/predecessor-fires-unload.html40
1 files changed, 40 insertions, 0 deletions
diff --git a/testing/web-platform/tests/portals/predecessor-fires-unload.html b/testing/web-platform/tests/portals/predecessor-fires-unload.html
new file mode 100644
index 0000000000..cb6d98c01d
--- /dev/null
+++ b/testing/web-platform/tests/portals/predecessor-fires-unload.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/open-blank-host.js"></script>
+<script>
+function nextEvent(target, type) {
+ return new Promise((resolve, reject) => target.addEventListener(type, e => resolve(e), {once: true}));
+}
+
+function timePasses(delay) {
+ return new Promise((resolve, reject) => step_timeout(() => resolve(), delay));
+}
+
+promise_test(async () => {
+ assert_implements("HTMLPortalElement" in self);
+ const w = await openBlankPortalHost();
+ try {
+ const portal = w.document.createElement('portal');
+ portal.src = new URL('resources/simple-portal.html', location.href);
+ w.document.body.appendChild(portal);
+ await nextEvent(portal, 'load');
+ const pagehideFired = nextEvent(w, 'pagehide');
+ const unloadFired = nextEvent(w, 'unload');
+ await portal.activate();
+ assert_true((await pagehideFired) instanceof w.PageTransitionEvent);
+ assert_true((await unloadFired) instanceof w.Event);
+ } finally {
+ w.close();
+ }
+}, "pagehide and unload should fire if the predecessor is not adopted");
+
+promise_test(async () => {
+ assert_implements("HTMLPortalElement" in self);
+ localStorage.setItem('predecessor-fires-unload-events', '');
+ window.open('resources/predecessor-fires-unload-watch-unload.html', '_blank', 'noopener');
+ while (localStorage.getItem('predecessor-fires-unload-events') != 'pagehide unload') {
+ await timePasses(50);
+ }
+}, "pagehide and unload should fire if the predecessor is not adopted, even without a window/opener association");
+</script>