%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
<!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 src="../resources/test-utils.js"></script> <script> 'use strict'; promise_test(t => { const orig = createOriginalReadableStream(); const w = new Worker('resources/receiving-worker.js'); t.add_cleanup(() => { w.terminate(); }); const promise = new Promise((resolve, reject) => { checkTestResults(w).then(resolve, reject); w.onerror = () => reject('error in worker'); }); w.postMessage(orig, [orig]); assert_true(orig.locked, 'the original stream should be locked'); return promise; }, 'worker.postMessage should be able to transfer a ReadableStream'); promise_test(t => { const w = new Worker('resources/sending-worker.js'); t.add_cleanup(() => { w.terminate(); }); return new Promise((resolve, reject) => { testMessageEvent(w).then(resolve, reject); w.onerror = () => reject('error in worker'); }); }, 'postMessage in a worker should be able to transfer a ReadableStream'); promise_test(async t => { const w = new Worker('resources/echo-worker.js'); let controller; const orig = new ReadableStream({ start(c) { controller = c; } }); const targetStream = await new Promise((resolve, reject) => { w.onmessage = evt => resolve(evt.data); w.onerror = () => reject('error in worker'); w.postMessage(orig, [orig]); }); const reader = targetStream.getReader(); const reads = []; // Place a lot of chunks "in transit". This should increase the likelihood // that they is a chunk at each relevant step when the worker is terminated. for (let i = 0; i < 50; ++i) { await delay(0); controller.enqueue(i); const expected = i; reads.push(reader.read().then(({value, done}) => { assert_false(done, 'we should not be done'); assert_equals(value, expected, 'value should match expectation'); })); } w.terminate(); for (let i = 50; i < 60; ++i) { controller.enqueue(i); reads.push( reader.read().then(t.unreached_func('read() should not resolve'))); await delay(0); } // We don't expect every read() to complete, but we want to give them a chance // to reject if they're going to. return Promise.race([ Promise.all(reads), flushAsyncEvents() ]); }, 'terminating a worker should not error the stream'); </script>