summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/portals/portals-navigate-after-adoption.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/portals/portals-navigate-after-adoption.html')
-rw-r--r--testing/web-platform/tests/portals/portals-navigate-after-adoption.html41
1 files changed, 41 insertions, 0 deletions
diff --git a/testing/web-platform/tests/portals/portals-navigate-after-adoption.html b/testing/web-platform/tests/portals/portals-navigate-after-adoption.html
new file mode 100644
index 0000000000..1ca1cfb79f
--- /dev/null
+++ b/testing/web-platform/tests/portals/portals-navigate-after-adoption.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/open-blank-host.js"></script>
+<script>
+function nextMessage(target) {
+ return new Promise((resolve, reject) => {
+ target.addEventListener('message', e => resolve(e), {once: true});
+ });
+}
+
+async function openPortalAndActivate(logic) {
+ let {port1, port2} = new MessageChannel();
+ const w = await openBlankPortalHost();
+ try {
+ const portal = w.document.createElement('portal');
+ portal.src = new URL('resources/eval-portal.html?logic=' + encodeURIComponent(logic), location.href);
+ w.document.body.appendChild(portal);
+ assert_equals((await nextMessage(portal)).data, 'ready');
+ const replyPromise = nextMessage(port2);
+ await portal.activate({data: {replyPort: port1}, transfer: [port1]});
+ port2.start();
+ return (await nextMessage(port2)).data;
+ } finally {
+ w.close();
+ }
+}
+
+promise_test(async () => {
+ assert_implements("HTMLPortalElement" in self);
+ let messageFromNewSrc = await openPortalAndActivate(
+ 'let predecessor = event.adoptPredecessor();' +
+ 'let readyPromise = new Promise((resolve, reject) => {' +
+ ' predecessor.onmessage = e => resolve(e.data + " via new src");' +
+ '});' +
+ 'predecessor.src = "/portals/resources/eval-portal.html";' +
+ 'document.body.appendChild(predecessor);' +
+ 'return readyPromise;');
+ assert_equals(messageFromNewSrc, 'ready via new src');
+}, "can set portal src during portalactivate");
+</script>