WPT
wpt / streams / readable-byte-streams / general.any.worker.html
Spec: Streams ↗
Runs: Chrome 155.0.8039.0 (wpt@47d833bbc, 2026-09-03) | Firefox 157.0a1 (wpt@47d833bbc, 2026-09-03) | Safari 251 preview (wpt@5ce815a83, 2026-08-27) | Ladybird 1.0-3d220 (wpt@476394464, 2026-09-03) | Servo Servo 0.6 (wpt@7e3d005d7, 2026-09-03) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 101/101 | 101/101 | 101/101 | 101/101 | 101/101 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| getReader({mode: "byob"}) throws on non-bytes streams | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source can be constructed with no errors | PASS | PASS | PASS | PASS | PASS | — |
| getReader({mode}) must perform ToString() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Construct and expect start and pull being called | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: No automatic pull call if start doesn't finish | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: start() throws an exception | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Construct with highWaterMark of 0 | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: desiredSize when closed | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: desiredSize when errored | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: getReader(), then releaseLock() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: getReader() with mode set to byob, then releaseLock() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Test that closing a stream does not release a reader automatically | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Test that closing a stream does not release a BYOB reader automatically | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Test that erroring a stream does not release a reader automatically | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Test that erroring a stream does not release a BYOB reader automatically | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: cannot use an already-released BYOB reader to unlock a stream again | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: releaseLock() on ReadableStreamDefaultReader must reject pending read() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: releaseLock() on ReadableStreamBYOBReader must reject pending read() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Automatic pull() after start() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Automatic pull() after start() and read() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: autoAllocateChunkSize | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Mix of auto allocate and BYOB | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Automatic pull() after start() and read(view) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue(), getReader(), then read() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Push source that doesn't understand pull signal | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: pull() function is not callable | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue() with Uint16Array, getReader(), then read() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue(), read(view) partially, then read() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: getReader(), enqueue(), close(), then read() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue(), close(), getReader(), then read() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Respond to pull() by enqueue() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Respond to pull() by enqueue() asynchronously | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Respond to multiple pull() by separate enqueue() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view), then respond() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view), then respondWithNewView() with a transferred ArrayBuffer | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view), then respond() with too big value | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: respond(3) to read(view) with 2 element Uint16Array enqueues the 1 byte remainder | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: respond(3) to read(view) with 2 element Uint16Array fulfills second read(view) with the 1 byte remainder | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue(), getReader(), then read(view) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue(), getReader(), then cancel() (mode = not BYOB) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue(), getReader(), then cancel() (mode = BYOB) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: getReader(), read(view), then cancel() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: cancel() with partially filled pending pull() request | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue(), getReader(), then read(view) where view.buffer is not fully covered by view | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Multiple enqueue(), getReader(), then read(view) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue(), getReader(), then read(view) with a bigger view | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue(), getReader(), then read(view) with smaller views | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue() 1 byte, getReader(), then read(view) with Uint16Array | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue() 3 byte, getReader(), then read(view) with 2-element Uint16Array | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view) with Uint16Array on close()-d stream with 1 byte enqueue()-d must fail | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: A stream must be errored if close()-d before fulfilling read(view) with Uint16Array | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Throw if close()-ed more than once | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Throw on enqueue() after close() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view), then respond() and close() in pull() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view) with Uint32Array, then fill it by multiple respond() calls | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view) with Uint32Array, then fill it by multiple enqueue() calls | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read() twice, then enqueue() twice | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Multiple read(view), close() and respond() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Multiple read(view), big enqueue() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Multiple read(view) and multiple enqueue() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view) with passing undefined as view must fail | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view) with passing an empty object as view must fail | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Even read(view) with passing ArrayBufferView like object as view must fail | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read() on an errored stream | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(), then error() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view) on an errored stream | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view), then error() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Throwing in pull function must error the stream | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Throwing in pull in response to read() must be ignored if the stream is errored in it | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Throwing in pull in response to read(view) function must error the stream | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: Throwing in pull in response to read(view) must be ignored if the stream is errored in it | PASS | PASS | PASS | PASS | PASS | — |
| calling respond() twice on the same byobRequest should throw | PASS | PASS | PASS | PASS | PASS | — |
| calling respondWithNewView() twice on the same byobRequest should throw | PASS | PASS | PASS | PASS | PASS | — |
| calling respond(0) twice on the same byobRequest should throw even when closed | PASS | PASS | PASS | PASS | PASS | — |
| calling respond() should throw when canceled | PASS | PASS | PASS | PASS | PASS | — |
| pull() resolving should not resolve read() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: default reader + autoAllocateChunkSize + byobRequest interaction | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: autoAllocateChunkSize cannot be 0 | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStreamBYOBReader can be constructed directly | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStreamBYOBReader constructor requires a ReadableStream argument | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStreamBYOBReader constructor requires an unlocked ReadableStream | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStreamBYOBReader constructor requires a ReadableStream with type "bytes" | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream constructor should not accept a strategy with a size defined if type is "bytes" | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: respondWithNewView() with a smaller view | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: respondWithNewView() with a zero-length view (in the closed state) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: respondWithNewView() with a transferred non-zero-length view (in the readable state) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: respondWithNewView() with a transferred zero-length view (in the closed state) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: enqueue() discards auto-allocated BYOB request | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: releaseLock() with pending read(view), read(view) on second reader, respond() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: releaseLock() with pending read(view), read(view) on second reader with 1 element Uint16Array, respond(1) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: releaseLock() with pending read(view), read(view) on second reader with 2 element Uint8Array, respond(3) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: releaseLock() with pending read(view), read(view) on second reader, respondWithNewView() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: releaseLock() with pending read(view), read(view) on second reader, enqueue() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: releaseLock() with pending read(view), read(view) on second reader, close(), respond(0) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: autoAllocateChunkSize, releaseLock() with pending read(), read() on second reader, respond() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: autoAllocateChunkSize, releaseLock() with pending read(), read() on second reader, enqueue() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: autoAllocateChunkSize, releaseLock() with pending read(), read(view) on second reader, respond() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: autoAllocateChunkSize, releaseLock() with pending read(), read(view) on second reader, enqueue() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view) with 1 element Uint16Array, respond(1), releaseLock(), read(view) on second reader with 1 element Uint16Array, respond(1) | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: read(view) with 1 element Uint16Array, respond(1), releaseLock(), read() on second reader, enqueue() | PASS | PASS | PASS | PASS | PASS | — |
| ReadableStream with byte source: autoAllocateChunkSize, read(), respondWithNewView() | PASS | PASS | PASS | PASS | PASS | — |