%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> async_test(t => { const c1 = new BroadcastChannel('blob'); const c2 = new BroadcastChannel('blob'); const c3 = new BroadcastChannel('blob'); let readCount = 0; c2.onmessage = t.step_func(e => { // check blob assert_true('blob' in e.data); assert_true(e.data.blob instanceof Blob); assert_equals(e.data.blob.size, 6); const reader = new FileReader(); reader.onerror = t.unreached_func(); reader.onload = t.step_func(() => { assert_equals(reader.result, 'foobar'); if (++readCount == 2) t.done(); }); reader.readAsText(e.data.blob); }); c3.onmessage = c2.onmessage; (() => { c1.postMessage({blob: new Blob(['foo', 'bar'])}); })(); // TODO(https://github.com/web-platform-tests/wpt/issues/7899): Change to // some sort of cross-browser GC trigger. if (self.gc) self.gc(); }, 'Blobs work on BroadcastChannel'); async_test(t => { const c1 = new BroadcastChannel('blobworker'); const c2 = new BroadcastChannel('blobworker'); const events = []; const verifyEvents = function() { assert_equals(events.length, 5); assert_equals(events[0], 'from worker'); assert_equals(events[1], 'from worker'); assert_true(events[2].blob instanceof Blob); assert_equals(events[2].blob.size, 11); assert_true(events[3].blob instanceof Blob); assert_equals(events[3].blob.size, 11); assert_equals(events[4], 'done'); const reader = new FileReader(); reader.onerror = t.unreached_func(); reader.onload = t.step_func(() => { assert_equals(reader.result, 'hello-world'); t.done(); }); reader.readAsText(events[3].blob); }; let receivedDone = false; let receivedWorkerDone = false; c1.onmessage = e => events.push(e.data); c2.onmessage = e => events.push(e.data); c2.addEventListener('message', t.step_func(e => { if (e.data.blob) c1.postMessage('done'); if (e.data === 'done') receivedDone = true; if (receivedDone && receivedWorkerDone) verifyEvents(); })); const worker = new Worker('resources/worker.js'); worker.onmessage = t.step_func(e => { receivedWorkerDone = true; if (receivedDone && receivedWorkerDone) verifyEvents(); }); worker.postMessage({channel: 'blobworker'}); worker.postMessage({blob: ['hello-world']}); }, 'Blobs work with workers on BroadcastChannel'); </script>