| <!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> |