summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/portals/portal-activate-data.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /testing/web-platform/tests/portals/portal-activate-data.html
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/portals/portal-activate-data.html')
-rw-r--r--testing/web-platform/tests/portals/portal-activate-data.html94
1 files changed, 94 insertions, 0 deletions
diff --git a/testing/web-platform/tests/portals/portal-activate-data.html b/testing/web-platform/tests/portals/portal-activate-data.html
new file mode 100644
index 0000000000..54fdca5d8c
--- /dev/null
+++ b/testing/web-platform/tests/portals/portal-activate-data.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<title>Tests passing of data along with portal activation</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/open-blank-host.js"></script>
+<body>
+<canvas id="canvas"></canvas>
+<script>
+function nextMessage(target) {
+ return new Promise((resolve, reject) => {
+ target.addEventListener('message', e => resolve(e), {once: true});
+ });
+}
+
+async function openPortalAndActivate(logic, activateOptions, testWindow) {
+ assert_implements("HTMLPortalElement" in self);
+ const w = testWindow || await openBlankPortalHost();
+ try {
+ const portal = w.document.createElement('portal');
+ portal.src = new URL('resources/portal-activate-data-portal.html?logic=' + encodeURIComponent(logic), location.href);
+ w.document.body.appendChild(portal);
+ assert_equals((await nextMessage(portal)).data, 'ready');
+ await portal.activate(activateOptions);
+ return (await nextMessage(w.portalHost)).data;
+ } finally {
+ w.close();
+ }
+}
+
+promise_test(async () => {
+ const {echo} = await openPortalAndActivate(
+ 'return {echo: event.data}',
+ {data: 'banana'});
+ assert_equals(echo, 'banana');
+}, "A string can be passed through activate data.");
+
+promise_test(async () => {
+ let aBuff = new ArrayBuffer(5);
+ let arr = new Int8Array(aBuff);
+ for (var i = 0; i < 5; i++)
+ arr[i] = i;
+ const {array} = await openPortalAndActivate(
+ 'return {array: Array.prototype.slice.call(new Int8Array(event.data))}',
+ {data: aBuff, transfer: [aBuff]});
+ assert_equals(arr.length, 0);
+ assert_array_equals(array, [0, 1, 2, 3, 4]);
+}, "An array buffer can be transferred through activate data.");
+
+promise_test(async () => {
+ let canvas = document.getElementById("canvas");
+ let ctx = canvas.getContext("2d");
+ ctx.fillStyle = "green";
+ ctx.fillRect(0, 0, 150, 100);
+ let imageBitmap = await createImageBitmap(canvas, 0, 0, 150, 100);
+ const {height, width} = await openPortalAndActivate(
+ 'return {height: event.data.height, width: event.data.width}',
+ {data: imageBitmap, transfer: [imageBitmap]});
+ assert_equals(height, 100);
+ assert_equals(width, 150);
+}, "An image bitmap can be transferred through activate data.");
+
+promise_test(async () => {
+ let {port1, port2} = new MessageChannel();
+ let replyViaPort = nextMessage(port1);
+ port1.start();
+ let ok = await openPortalAndActivate(
+ 'let port2 = event.data; port2.postMessage(42); return true;',
+ {data: port2, transfer: [port2]});
+ assert_true(ok);
+ assert_equals((await replyViaPort).data, 42);
+}, "A message port can be passed through activate data.");
+
+promise_test(async t => {
+ const w = await openBlankPortalHost();
+ await promise_rejects_dom(
+ t, 'DataCloneError', w.DOMException,
+ // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()`
+ openPortalAndActivate('', {data: new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer}, w));
+}, "A SharedArrayBuffer cannot be passed through activate data.");
+
+promise_test(async t => {
+ await promise_rejects_js(
+ t, Error,
+ openPortalAndActivate('', {data: {get a() { throw new Error; }}}));
+}, "Uncloneable data has its exception propagated.");
+
+promise_test(async t => {
+ const w = await openBlankPortalHost();
+ await promise_rejects_js(
+ t, w.TypeError,
+ openPortalAndActivate('', {data: null, transfer: [null]}, w));
+}, "Errors during transfer list processing are propagated.");
+</script>
+</body>