| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/helpers.js"></script> |
| <script> |
| 'use strict'; |
| |
| promise_test(t => { |
| const orig = createOriginalReadableStream(); |
| const promise = testMessageEvent(window); |
| postMessage(orig, '*', [orig]); |
| assert_true(orig.locked, 'the original stream should be locked'); |
| return promise; |
| }, 'window.postMessage should be able to transfer a ReadableStream'); |
| |
| promise_test(t => { |
| const orig = createOriginalReadableStream(); |
| const mc = new MessageChannel(); |
| const promise = testMessageEvent(mc.port1); |
| mc.port1.start(); |
| |
| mc.port2.postMessage(orig, [orig]); |
| mc.port2.close(); |
| assert_true(orig.locked, 'the original stream should be locked'); |
| return promise; |
| }, 'port.postMessage should be able to transfer a ReadableStream'); |
| |
| promise_test(t => { |
| const orig = createOriginalReadableStream(); |
| const promise = new Promise(resolve => { |
| addEventListener('message', t.step_func(evt => { |
| const [rs1, rs2] = evt.data; |
| assert_equals(rs1, rs2, 'both ReadableStreams should be the same object'); |
| resolve(); |
| }), {once: true}); |
| }); |
| postMessage([orig, orig], '*', [orig]); |
| return promise; |
| }, 'the same ReadableStream posted multiple times should arrive together'); |
| |
| const onloadPromise = new Promise(resolve => onload = resolve); |
| |
| promise_test(() => { |
| const orig = createOriginalReadableStream(); |
| const promise = testMessageEvent(window); |
| return onloadPromise.then(() => { |
| const echoIframe = document.querySelector('#echo'); |
| echoIframe.contentWindow.postMessage(orig, '*', [orig]); |
| return promise; |
| }); |
| }, 'transfer to and from an iframe should work'); |
| </script> |
| |
| <iframe id=echo src="resources/echo-iframe.html" style="display:none"></iframe> |