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 9promise_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 17promise_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 29promise_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 42const onloadPromise = new Promise(resolve => onload = resolve); 43 44promise_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> 56