11cb0ef41Sopenharmony_ci<!DOCTYPE html> 21cb0ef41Sopenharmony_ci<meta charset="utf-8"> 31cb0ef41Sopenharmony_ci<script src="/resources/testharness.js"></script> 41cb0ef41Sopenharmony_ci<script src="/resources/testharnessreport.js"></script> 51cb0ef41Sopenharmony_ci<script src="resources/helpers.js"></script> 61cb0ef41Sopenharmony_ci<script> 71cb0ef41Sopenharmony_ci'use strict'; 81cb0ef41Sopenharmony_ci 91cb0ef41Sopenharmony_cipromise_test(t => { 101cb0ef41Sopenharmony_ci const orig = createOriginalReadableStream(); 111cb0ef41Sopenharmony_ci const promise = testMessageEvent(window); 121cb0ef41Sopenharmony_ci postMessage(orig, '*', [orig]); 131cb0ef41Sopenharmony_ci assert_true(orig.locked, 'the original stream should be locked'); 141cb0ef41Sopenharmony_ci return promise; 151cb0ef41Sopenharmony_ci}, 'window.postMessage should be able to transfer a ReadableStream'); 161cb0ef41Sopenharmony_ci 171cb0ef41Sopenharmony_cipromise_test(t => { 181cb0ef41Sopenharmony_ci const orig = createOriginalReadableStream(); 191cb0ef41Sopenharmony_ci const mc = new MessageChannel(); 201cb0ef41Sopenharmony_ci const promise = testMessageEvent(mc.port1); 211cb0ef41Sopenharmony_ci mc.port1.start(); 221cb0ef41Sopenharmony_ci 231cb0ef41Sopenharmony_ci mc.port2.postMessage(orig, [orig]); 241cb0ef41Sopenharmony_ci mc.port2.close(); 251cb0ef41Sopenharmony_ci assert_true(orig.locked, 'the original stream should be locked'); 261cb0ef41Sopenharmony_ci return promise; 271cb0ef41Sopenharmony_ci}, 'port.postMessage should be able to transfer a ReadableStream'); 281cb0ef41Sopenharmony_ci 291cb0ef41Sopenharmony_cipromise_test(t => { 301cb0ef41Sopenharmony_ci const orig = createOriginalReadableStream(); 311cb0ef41Sopenharmony_ci const promise = new Promise(resolve => { 321cb0ef41Sopenharmony_ci addEventListener('message', t.step_func(evt => { 331cb0ef41Sopenharmony_ci const [rs1, rs2] = evt.data; 341cb0ef41Sopenharmony_ci assert_equals(rs1, rs2, 'both ReadableStreams should be the same object'); 351cb0ef41Sopenharmony_ci resolve(); 361cb0ef41Sopenharmony_ci }), {once: true}); 371cb0ef41Sopenharmony_ci }); 381cb0ef41Sopenharmony_ci postMessage([orig, orig], '*', [orig]); 391cb0ef41Sopenharmony_ci return promise; 401cb0ef41Sopenharmony_ci}, 'the same ReadableStream posted multiple times should arrive together'); 411cb0ef41Sopenharmony_ci 421cb0ef41Sopenharmony_ciconst onloadPromise = new Promise(resolve => onload = resolve); 431cb0ef41Sopenharmony_ci 441cb0ef41Sopenharmony_cipromise_test(() => { 451cb0ef41Sopenharmony_ci const orig = createOriginalReadableStream(); 461cb0ef41Sopenharmony_ci const promise = testMessageEvent(window); 471cb0ef41Sopenharmony_ci return onloadPromise.then(() => { 481cb0ef41Sopenharmony_ci const echoIframe = document.querySelector('#echo'); 491cb0ef41Sopenharmony_ci echoIframe.contentWindow.postMessage(orig, '*', [orig]); 501cb0ef41Sopenharmony_ci return promise; 511cb0ef41Sopenharmony_ci }); 521cb0ef41Sopenharmony_ci}, 'transfer to and from an iframe should work'); 531cb0ef41Sopenharmony_ci</script> 541cb0ef41Sopenharmony_ci 551cb0ef41Sopenharmony_ci<iframe id=echo src="resources/echo-iframe.html" style="display:none"></iframe> 56