window-iframe-messagechannel.https.html (3357B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>Structured cloning of SharedArrayBuffers into windows using MessageChannel</title> 4 <link rel="help" href="https://html.spec.whatwg.org/multipage/#structuredserialize"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src="resources/test-incrementer.js"></script> 8 <script src="/common/get-host-info.sub.js"></script> 9 10 <div id="log"></div> 11 12 <script> 13 promise_test(t => { 14 return new Promise(resolve => { 15 const iframe = document.createElement("iframe"); 16 window.onmessage = t.step_func((message) => { 17 // data will be a MessagePort 18 resolve(testSharingViaIncrementerScript(t, message.data, "window", message.data, "iframe")); 19 }); 20 iframe.src = "resources/incrementer-iframe-messagechannel.html"; 21 document.body.appendChild(iframe); 22 }); 23 }, `postMessaging to a same-origin iframe via MessageChannel allows them to see each others' modifications`); 24 25 promise_test(t => { 26 return new Promise(resolve => { 27 const iframe = document.createElement("iframe"); 28 window.onmessage = t.step_func((message) => { 29 // data will be a MessagePort 30 message.data.postMessage(new SharedArrayBuffer(10)); 31 message.data.onmessage = t.step_func(message => { 32 assert_equals(message.data, "messageerror event received"); 33 resolve(); 34 }); 35 }); 36 iframe.src = get_host_info().HTTPS_REMOTE_ORIGIN + new URL("resources/iframe-messagechannel-site-failure.html", window.location).pathname; 37 document.body.appendChild(iframe); 38 }); 39 }, "postMessaging to a same-site iframe via MessageChannel should fail"); 40 41 promise_test(t => { 42 return new Promise(resolve => { 43 const iframe = document.createElement("iframe"); 44 window.onmessage = t.step_func(message => { 45 // data will be a MessagePort 46 message.data.postMessage(new SharedArrayBuffer(10)); 47 message.data.onmessage = t.step_func(message => { 48 assert_equals(message.data, "messageerror event received"); 49 resolve(); 50 }); 51 }); 52 iframe.src = get_host_info().HTTPS_NOTSAMESITE_ORIGIN + new URL("resources/iframe-messagechannel-failure.html", window.location).pathname; 53 document.body.append(iframe); 54 }); 55 }, "postMessaging to a cross-site iframe via MessageChannel should fail"); 56 57 promise_test(t => { 58 return new Promise(resolve => { 59 const iframe = document.createElement("iframe"); 60 let port = null; 61 window.onmessage = t.step_func(message => { 62 if (message.data.state === "port1") { 63 port = message.data.data; 64 port.postMessage(new SharedArrayBuffer(10)); 65 message.source.postMessage("send port2", "*"); 66 } else if (message.data.state === "port2") { 67 // Note that onmessage calls start() 68 message.data.data.onmessage = t.step_func(message => { 69 assert_true(message.data instanceof SharedArrayBuffer); 70 assert_equals(message.data.byteLength, 10); 71 resolve(); 72 }); 73 message.data.data.onmessageerror = t.unreached_func(); 74 } 75 }); 76 iframe.src = get_host_info().HTTPS_NOTSAMESITE_ORIGIN + new URL("resources/iframe-messagechannel-complex.html", window.location).pathname; 77 document.body.append(iframe); 78 }); 79 }, "postMessaging with a MessageChannel that's been cross-site should succeed"); 80 </script>