window.html (1857B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="resources/helpers.js"></script> 6 <script> 7 'use strict'; 8 9 promise_test(t => { 10 const orig = createOriginalReadableStream(); 11 const promise = testMessageEvent(window); 12 postMessage(orig, '*', [orig]); 13 assert_true(orig.locked, 'the original stream should be locked'); 14 return promise; 15 }, 'window.postMessage should be able to transfer a ReadableStream'); 16 17 promise_test(t => { 18 const orig = createOriginalReadableStream(); 19 const mc = new MessageChannel(); 20 const promise = testMessageEvent(mc.port1); 21 mc.port1.start(); 22 23 mc.port2.postMessage(orig, [orig]); 24 mc.port2.close(); 25 assert_true(orig.locked, 'the original stream should be locked'); 26 return promise; 27 }, 'port.postMessage should be able to transfer a ReadableStream'); 28 29 promise_test(t => { 30 const orig = createOriginalReadableStream(); 31 const promise = new Promise(resolve => { 32 addEventListener('message', t.step_func(evt => { 33 const [rs1, rs2] = evt.data; 34 assert_equals(rs1, rs2, 'both ReadableStreams should be the same object'); 35 resolve(); 36 }), {once: true}); 37 }); 38 postMessage([orig, orig], '*', [orig]); 39 return promise; 40 }, 'the same ReadableStream posted multiple times should arrive together'); 41 42 const onloadPromise = new Promise(resolve => onload = resolve); 43 44 promise_test(() => { 45 const orig = createOriginalReadableStream(); 46 const promise = testMessageEvent(window); 47 return onloadPromise.then(() => { 48 const echoIframe = document.querySelector('#echo'); 49 echoIframe.contentWindow.postMessage(orig, '*', [orig]); 50 return promise; 51 }); 52 }, 'transfer to and from an iframe should work'); 53 </script> 54 55 <iframe id=echo src="resources/echo-iframe.html" style="display:none"></iframe>