diff options
Diffstat (limited to 'testing/web-platform/tests/streams/readable-byte-streams/respond-after-enqueue.any.js')
-rw-r--r-- | testing/web-platform/tests/streams/readable-byte-streams/respond-after-enqueue.any.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/testing/web-platform/tests/streams/readable-byte-streams/respond-after-enqueue.any.js b/testing/web-platform/tests/streams/readable-byte-streams/respond-after-enqueue.any.js new file mode 100644 index 0000000000..b93cec9739 --- /dev/null +++ b/testing/web-platform/tests/streams/readable-byte-streams/respond-after-enqueue.any.js @@ -0,0 +1,55 @@ +// META: global=window,worker + +'use strict'; + +// Repro for Blink bug https://crbug.com/1255762. +promise_test(async () => { + const rs = new ReadableStream({ + type: 'bytes', + autoAllocateChunkSize: 10, + pull(controller) { + controller.enqueue(new Uint8Array([1, 2, 3])); + controller.byobRequest.respond(10); + } + }); + + const reader = rs.getReader(); + const {value, done} = await reader.read(); + assert_false(done, 'done should not be true'); + assert_array_equals(value, [1, 2, 3], 'value should be 3 bytes'); +}, 'byobRequest.respond() after enqueue() should not crash'); + +promise_test(async () => { + const rs = new ReadableStream({ + type: 'bytes', + autoAllocateChunkSize: 10, + pull(controller) { + const byobRequest = controller.byobRequest; + controller.enqueue(new Uint8Array([1, 2, 3])); + byobRequest.respond(10); + } + }); + + const reader = rs.getReader(); + const {value, done} = await reader.read(); + assert_false(done, 'done should not be true'); + assert_array_equals(value, [1, 2, 3], 'value should be 3 bytes'); +}, 'byobRequest.respond() with cached byobRequest after enqueue() should not crash'); + +promise_test(async () => { + const rs = new ReadableStream({ + type: 'bytes', + autoAllocateChunkSize: 10, + pull(controller) { + controller.enqueue(new Uint8Array([1, 2, 3])); + controller.byobRequest.respond(2); + } + }); + + const reader = rs.getReader(); + const [read1, read2] = await Promise.all([reader.read(), reader.read()]); + assert_false(read1.done, 'read1.done should not be true'); + assert_array_equals(read1.value, [1, 2, 3], 'read1.value should be 3 bytes'); + assert_false(read2.done, 'read2.done should not be true'); + assert_array_equals(read2.value, [0, 0], 'read2.value should be 2 bytes'); +}, 'byobRequest.respond() after enqueue() with double read should not crash'); |