/third_party/blink/web_tests/external/wpt/portals/portal-activate-data.html
HTML | 94 lines | 86 code | 8 blank | 0 comment | 0 complexity | 7a50b2773bfb748fea591761e6109bbc MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, Apache-2.0, BSD-3-Clause
- <!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>