| <!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> |