PageRenderTime 41ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/third_party/blink/web_tests/external/wpt/portals/portal-activate-data.html

https://github.com/chromium/chromium
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
  1. <!DOCTYPE html>
  2. <title>Tests passing of data along with portal activation</title>
  3. <script src="/resources/testharness.js"></script>
  4. <script src="/resources/testharnessreport.js"></script>
  5. <script src="resources/open-blank-host.js"></script>
  6. <body>
  7. <canvas id="canvas"></canvas>
  8. <script>
  9. function nextMessage(target) {
  10. return new Promise((resolve, reject) => {
  11. target.addEventListener('message', e => resolve(e), {once: true});
  12. });
  13. }
  14. async function openPortalAndActivate(logic, activateOptions, testWindow) {
  15. assert_implements("HTMLPortalElement" in self);
  16. const w = testWindow || await openBlankPortalHost();
  17. try {
  18. const portal = w.document.createElement('portal');
  19. portal.src = new URL('resources/portal-activate-data-portal.html?logic=' + encodeURIComponent(logic), location.href);
  20. w.document.body.appendChild(portal);
  21. assert_equals((await nextMessage(portal)).data, 'ready');
  22. await portal.activate(activateOptions);
  23. return (await nextMessage(w.portalHost)).data;
  24. } finally {
  25. w.close();
  26. }
  27. }
  28. promise_test(async () => {
  29. const {echo} = await openPortalAndActivate(
  30. 'return {echo: event.data}',
  31. {data: 'banana'});
  32. assert_equals(echo, 'banana');
  33. }, "A string can be passed through activate data.");
  34. promise_test(async () => {
  35. let aBuff = new ArrayBuffer(5);
  36. let arr = new Int8Array(aBuff);
  37. for (var i = 0; i < 5; i++)
  38. arr[i] = i;
  39. const {array} = await openPortalAndActivate(
  40. 'return {array: Array.prototype.slice.call(new Int8Array(event.data))}',
  41. {data: aBuff, transfer: [aBuff]});
  42. assert_equals(arr.length, 0);
  43. assert_array_equals(array, [0, 1, 2, 3, 4]);
  44. }, "An array buffer can be transferred through activate data.");
  45. promise_test(async () => {
  46. let canvas = document.getElementById("canvas");
  47. let ctx = canvas.getContext("2d");
  48. ctx.fillStyle = "green";
  49. ctx.fillRect(0, 0, 150, 100);
  50. let imageBitmap = await createImageBitmap(canvas, 0, 0, 150, 100);
  51. const {height, width} = await openPortalAndActivate(
  52. 'return {height: event.data.height, width: event.data.width}',
  53. {data: imageBitmap, transfer: [imageBitmap]});
  54. assert_equals(height, 100);
  55. assert_equals(width, 150);
  56. }, "An image bitmap can be transferred through activate data.");
  57. promise_test(async () => {
  58. let {port1, port2} = new MessageChannel();
  59. let replyViaPort = nextMessage(port1);
  60. port1.start();
  61. let ok = await openPortalAndActivate(
  62. 'let port2 = event.data; port2.postMessage(42); return true;',
  63. {data: port2, transfer: [port2]});
  64. assert_true(ok);
  65. assert_equals((await replyViaPort).data, 42);
  66. }, "A message port can be passed through activate data.");
  67. promise_test(async t => {
  68. const w = await openBlankPortalHost();
  69. await promise_rejects_dom(
  70. t, 'DataCloneError', w.DOMException,
  71. // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()`
  72. openPortalAndActivate('', {data: new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer}, w));
  73. }, "A SharedArrayBuffer cannot be passed through activate data.");
  74. promise_test(async t => {
  75. await promise_rejects_js(
  76. t, Error,
  77. openPortalAndActivate('', {data: {get a() { throw new Error; }}}));
  78. }, "Uncloneable data has its exception propagated.");
  79. promise_test(async t => {
  80. const w = await openBlankPortalHost();
  81. await promise_rejects_js(
  82. t, w.TypeError,
  83. openPortalAndActivate('', {data: null, transfer: [null]}, w));
  84. }, "Errors during transfer list processing are propagated.");
  85. </script>
  86. </body>