diff options
Diffstat (limited to 'testing/web-platform/tests/webmessaging/broadcastchannel/blobs.html')
-rw-r--r-- | testing/web-platform/tests/webmessaging/broadcastchannel/blobs.html | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webmessaging/broadcastchannel/blobs.html b/testing/web-platform/tests/webmessaging/broadcastchannel/blobs.html new file mode 100644 index 0000000000..ab5096b63c --- /dev/null +++ b/testing/web-platform/tests/webmessaging/broadcastchannel/blobs.html @@ -0,0 +1,82 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/gc.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'])}); + })(); + garbageCollect(); + }, '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> |