1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-25 16:49:18 -05:00

feat(ext/web): BYOB support for ReadableStream (#12616)

This commit introduces support for BYOB readers in the WHATWG Streams API implementation.
This commit is contained in:
Leo Kettmeir 2021-11-03 10:47:40 +01:00 committed by GitHub
parent 8e31bbbe55
commit 95b2955712
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 1321 additions and 315 deletions

File diff suppressed because it is too large Load diff

View file

@ -17,6 +17,25 @@ interface ReadRequest<R = any> {
errorSteps: (error: any) => void; errorSteps: (error: any) => void;
} }
interface ReadIntoRequest {
chunkSteps: (chunk: ArrayBufferView) => void;
closeSteps: (chunk?: ArrayBufferView) => void;
// deno-lint-ignore no-explicit-any
errorSteps: (error: any) => void;
}
interface PullIntoDescriptor {
buffer: ArrayBuffer;
bufferByteLength: number;
byteOffset: number;
byteLength: number;
bytesFilled: number;
elementSize: number;
// deno-lint-ignore no-explicit-any
viewConstructor: any;
readerType: "default" | "byob";
}
interface ReadableByteStreamQueueEntry { interface ReadableByteStreamQueueEntry {
buffer: ArrayBufferLike; buffer: ArrayBufferLike;
byteOffset: number; byteOffset: number;

View file

@ -416,6 +416,33 @@ interface ReadableStreamDefaultReader<R = any> {
releaseLock(): void; releaseLock(): void;
} }
interface ReadableStreamBYOBReadDoneResult {
done: true;
value?: ArrayBufferView;
}
interface ReadableStreamBYOBReadValueResult {
done: false;
value: ArrayBufferView;
}
type ReadableStreamBYOBReadResult =
| ReadableStreamBYOBReadDoneResult
| ReadableStreamBYOBReadValueResult;
interface ReadableStreamBYOBReader {
readonly closed: Promise<void>;
cancel(reason?: any): Promise<void>;
read(view: ArrayBufferView): Promise<ReadableStreamBYOBReadResult>;
releaseLock(): void;
}
interface ReadableStreamBYOBRequest {
readonly view: ArrayBufferView | null;
respond(bytesWritten: number): void;
respondWithNewView(view: ArrayBufferView): void;
}
declare var ReadableStreamDefaultReader: { declare var ReadableStreamDefaultReader: {
prototype: ReadableStreamDefaultReader; prototype: ReadableStreamDefaultReader;
new <R>(stream: ReadableStream<R>): ReadableStreamDefaultReader<R>; new <R>(stream: ReadableStream<R>): ReadableStreamDefaultReader<R>;
@ -480,7 +507,7 @@ declare var ReadableStreamDefaultController: {
}; };
interface ReadableByteStreamController { interface ReadableByteStreamController {
readonly byobRequest: undefined; readonly byobRequest: ReadableStreamBYOBRequest | null;
readonly desiredSize: number | null; readonly desiredSize: number | null;
close(): void; close(): void;
enqueue(chunk: ArrayBufferView): void; enqueue(chunk: ArrayBufferView): void;

View file

@ -411,6 +411,12 @@ delete Object.prototype.__proto__;
ReadableByteStreamController: util.nonEnumerable( ReadableByteStreamController: util.nonEnumerable(
streams.ReadableByteStreamController, streams.ReadableByteStreamController,
), ),
ReadableStreamBYOBReader: util.nonEnumerable(
streams.ReadableStreamBYOBReader,
),
ReadableStreamBYOBRequest: util.nonEnumerable(
streams.ReadableStreamBYOBRequest,
),
ReadableStreamDefaultController: util.nonEnumerable( ReadableStreamDefaultController: util.nonEnumerable(
streams.ReadableStreamDefaultController, streams.ReadableStreamDefaultController,
), ),

View file

@ -6109,82 +6109,12 @@
}, },
"streams": { "streams": {
"idlharness.any.html": [ "idlharness.any.html": [
"ReadableStreamBYOBReader interface: existence and properties of interface object",
"ReadableStreamBYOBReader interface object length",
"ReadableStreamBYOBReader interface object name",
"ReadableStreamBYOBReader interface: existence and properties of interface prototype object",
"ReadableStreamBYOBReader interface: existence and properties of interface prototype object's \"constructor\" property",
"ReadableStreamBYOBReader interface: existence and properties of interface prototype object's @@unscopables property",
"ReadableStreamBYOBReader interface: operation read(ArrayBufferView)",
"ReadableStreamBYOBReader interface: operation releaseLock()",
"ReadableStreamBYOBReader interface: attribute closed",
"ReadableStreamBYOBReader interface: operation cancel(optional any)",
"ReadableStreamBYOBReader must be primary interface of (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' })",
"Stringification of (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' })",
"ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"read(ArrayBufferView)\" with the proper type",
"ReadableStreamBYOBReader interface: calling read(ArrayBufferView) on (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) with too few arguments must throw TypeError",
"ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"releaseLock()\" with the proper type",
"ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"closed\" with the proper type",
"ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"cancel(optional any)\" with the proper type",
"ReadableStreamBYOBReader interface: calling cancel(optional any) on (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) with too few arguments must throw TypeError",
"ReadableByteStreamController interface: self.readableByteStreamController must inherit property \"byobRequest\" with the proper type",
"ReadableStreamBYOBRequest interface: existence and properties of interface object",
"ReadableStreamBYOBRequest interface object length",
"ReadableStreamBYOBRequest interface object name",
"ReadableStreamBYOBRequest interface: existence and properties of interface prototype object",
"ReadableStreamBYOBRequest interface: existence and properties of interface prototype object's \"constructor\" property",
"ReadableStreamBYOBRequest interface: existence and properties of interface prototype object's @@unscopables property",
"ReadableStreamBYOBRequest interface: attribute view",
"ReadableStreamBYOBRequest interface: operation respond(unsigned long long)",
"ReadableStreamBYOBRequest interface: operation respondWithNewView(ArrayBufferView)",
"ReadableStreamBYOBRequest must be primary interface of self.readableStreamByobRequest",
"Stringification of self.readableStreamByobRequest",
"ReadableStreamBYOBRequest interface: self.readableStreamByobRequest must inherit property \"view\" with the proper type",
"ReadableStreamBYOBRequest interface: self.readableStreamByobRequest must inherit property \"respond(unsigned long long)\" with the proper type",
"ReadableStreamBYOBRequest interface: calling respond(unsigned long long) on self.readableStreamByobRequest with too few arguments must throw TypeError",
"ReadableStreamBYOBRequest interface: self.readableStreamByobRequest must inherit property \"respondWithNewView(ArrayBufferView)\" with the proper type",
"ReadableStreamBYOBRequest interface: calling respondWithNewView(ArrayBufferView) on self.readableStreamByobRequest with too few arguments must throw TypeError",
"WritableStreamDefaultController interface: attribute abortReason", "WritableStreamDefaultController interface: attribute abortReason",
"WritableStreamDefaultController interface: attribute signal", "WritableStreamDefaultController interface: attribute signal",
"WritableStreamDefaultController interface: self.writableStreamDefaultController must inherit property \"abortReason\" with the proper type", "WritableStreamDefaultController interface: self.writableStreamDefaultController must inherit property \"abortReason\" with the proper type",
"WritableStreamDefaultController interface: self.writableStreamDefaultController must inherit property \"signal\" with the proper type" "WritableStreamDefaultController interface: self.writableStreamDefaultController must inherit property \"signal\" with the proper type"
], ],
"idlharness.any.worker.html": [ "idlharness.any.worker.html": [
"ReadableStreamBYOBReader interface: existence and properties of interface object",
"ReadableStreamBYOBReader interface object length",
"ReadableStreamBYOBReader interface object name",
"ReadableStreamBYOBReader interface: existence and properties of interface prototype object",
"ReadableStreamBYOBReader interface: existence and properties of interface prototype object's \"constructor\" property",
"ReadableStreamBYOBReader interface: existence and properties of interface prototype object's @@unscopables property",
"ReadableStreamBYOBReader interface: operation read(ArrayBufferView)",
"ReadableStreamBYOBReader interface: operation releaseLock()",
"ReadableStreamBYOBReader interface: attribute closed",
"ReadableStreamBYOBReader interface: operation cancel(optional any)",
"ReadableStreamBYOBReader must be primary interface of (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' })",
"Stringification of (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' })",
"ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"read(ArrayBufferView)\" with the proper type",
"ReadableStreamBYOBReader interface: calling read(ArrayBufferView) on (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) with too few arguments must throw TypeError",
"ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"releaseLock()\" with the proper type",
"ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"closed\" with the proper type",
"ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"cancel(optional any)\" with the proper type",
"ReadableStreamBYOBReader interface: calling cancel(optional any) on (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) with too few arguments must throw TypeError",
"ReadableByteStreamController interface: self.readableByteStreamController must inherit property \"byobRequest\" with the proper type",
"ReadableStreamBYOBRequest interface: existence and properties of interface object",
"ReadableStreamBYOBRequest interface object length",
"ReadableStreamBYOBRequest interface object name",
"ReadableStreamBYOBRequest interface: existence and properties of interface prototype object",
"ReadableStreamBYOBRequest interface: existence and properties of interface prototype object's \"constructor\" property",
"ReadableStreamBYOBRequest interface: existence and properties of interface prototype object's @@unscopables property",
"ReadableStreamBYOBRequest interface: attribute view",
"ReadableStreamBYOBRequest interface: operation respond(unsigned long long)",
"ReadableStreamBYOBRequest interface: operation respondWithNewView(ArrayBufferView)",
"ReadableStreamBYOBRequest must be primary interface of self.readableStreamByobRequest",
"Stringification of self.readableStreamByobRequest",
"ReadableStreamBYOBRequest interface: self.readableStreamByobRequest must inherit property \"view\" with the proper type",
"ReadableStreamBYOBRequest interface: self.readableStreamByobRequest must inherit property \"respond(unsigned long long)\" with the proper type",
"ReadableStreamBYOBRequest interface: calling respond(unsigned long long) on self.readableStreamByobRequest with too few arguments must throw TypeError",
"ReadableStreamBYOBRequest interface: self.readableStreamByobRequest must inherit property \"respondWithNewView(ArrayBufferView)\" with the proper type",
"ReadableStreamBYOBRequest interface: calling respondWithNewView(ArrayBufferView) on self.readableStreamByobRequest with too few arguments must throw TypeError",
"WritableStreamDefaultController interface: attribute abortReason", "WritableStreamDefaultController interface: attribute abortReason",
"WritableStreamDefaultController interface: attribute signal", "WritableStreamDefaultController interface: attribute signal",
"WritableStreamDefaultController interface: self.writableStreamDefaultController must inherit property \"abortReason\" with the proper type", "WritableStreamDefaultController interface: self.writableStreamDefaultController must inherit property \"abortReason\" with the proper type",
@ -6219,231 +6149,21 @@
"queuing-strategies.any.html": true, "queuing-strategies.any.html": true,
"queuing-strategies.any.worker.html": true, "queuing-strategies.any.worker.html": true,
"readable-byte-streams": { "readable-byte-streams": {
"bad-buffers-and-views.any.html": [ "bad-buffers-and-views.any.html": true,
"ReadableStream with byte source: respond() throws if the BYOB request's buffer has been detached (in the readable state)", "bad-buffers-and-views.any.worker.html": true,
"ReadableStream with byte source: respond() throws if the BYOB request's buffer has been detached (in the closed state)", "construct-byob-request.any.html": true,
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer has been detached (in the readable state)", "construct-byob-request.any.worker.html": true,
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer is zero-length (in the readable state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view is zero-length on a non-zero-length buffer (in the readable state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer has a different length (in the readable state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view has a larger length (in the readable state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer has been detached (in the closed state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer is zero-length (in the closed state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view is non-zero-length (in the closed state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer has a different length (in the closed state)",
"ReadableStream with byte source: enqueue() throws if the BYOB request's buffer has been detached (in the readable state)",
"ReadableStream with byte source: enqueue() throws if the BYOB request's buffer has been detached (in the closed state)",
"ReadableStream with byte source: read()ing from a closed stream still transfers the buffer",
"ReadableStream with byte source: read()ing from a stream with queued chunks still transfers the buffer",
"ReadableStream with byte source: reading into an already-detached buffer rejects",
"ReadableStream with byte source: reading into a zero-length buffer rejects",
"ReadableStream with byte source: reading into a zero-length view on a non-zero-length buffer rejects"
],
"bad-buffers-and-views.any.worker.html": [
"ReadableStream with byte source: respond() throws if the BYOB request's buffer has been detached (in the readable state)",
"ReadableStream with byte source: respond() throws if the BYOB request's buffer has been detached (in the closed state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer has been detached (in the readable state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer is zero-length (in the readable state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view is zero-length on a non-zero-length buffer (in the readable state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer has a different length (in the readable state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view has a larger length (in the readable state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer has been detached (in the closed state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer is zero-length (in the closed state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view is non-zero-length (in the closed state)",
"ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer has a different length (in the closed state)",
"ReadableStream with byte source: enqueue() throws if the BYOB request's buffer has been detached (in the readable state)",
"ReadableStream with byte source: enqueue() throws if the BYOB request's buffer has been detached (in the closed state)",
"ReadableStream with byte source: read()ing from a closed stream still transfers the buffer",
"ReadableStream with byte source: read()ing from a stream with queued chunks still transfers the buffer",
"ReadableStream with byte source: reading into an already-detached buffer rejects",
"ReadableStream with byte source: reading into a zero-length buffer rejects",
"ReadableStream with byte source: reading into a zero-length view on a non-zero-length buffer rejects"
],
"construct-byob-request.any.html": false,
"construct-byob-request.any.worker.html": false,
"general.any.html": [ "general.any.html": [
"getReader({mode: \"byob\"}) throws on non-bytes streams", "ReadableStream with byte source: Respond to multiple pull() by separate enqueue()"
"ReadableStream with byte source can be constructed with no errors",
"getReader({mode}) must perform ToString()",
"ReadableStream with byte source: autoAllocateChunkSize cannot be 0",
"ReadableStreamBYOBReader can be constructed directly",
"ReadableStreamBYOBReader constructor requires a ReadableStream argument",
"ReadableStreamBYOBReader constructor requires an unlocked ReadableStream",
"ReadableStreamBYOBReader constructor requires a ReadableStream with type \"bytes\"",
"ReadableStream with byte source: getReader() with mode set to byob, then releaseLock()",
"ReadableStream with byte source: Test that closing a stream does not release a BYOB reader automatically",
"ReadableStream with byte source: Test that erroring a stream does not release a BYOB reader automatically",
"ReadableStream with byte source: autoAllocateChunkSize",
"ReadableStream with byte source: Mix of auto allocate and BYOB",
"ReadableStream with byte source: enqueue(), read(view) partially, then read()",
"ReadableStream with byte source: Respond to pull() by enqueue()",
"ReadableStream with byte source: Respond to pull() by enqueue() asynchronously",
"ReadableStream with byte source: Respond to multiple pull() by separate enqueue()",
"ReadableStream with byte source: read(view), then respond()",
"ReadableStream with byte source: read(view), then respondWithNewView() with a transferred ArrayBuffer",
"ReadableStream with byte source: read(view), then respond() with too big value",
"ReadableStream with byte source: respond(3) to read(view) with 2 element Uint16Array enqueues the 1 byte remainder",
"ReadableStream with byte source: enqueue(), getReader(), then read(view)",
"ReadableStream with byte source: enqueue(), getReader(), then cancel() (mode = BYOB)",
"ReadableStream with byte source: getReader(), read(view), then cancel()",
"ReadableStream with byte source: cancel() with partially filled pending pull() request",
"ReadableStream with byte source: enqueue(), getReader(), then read(view) where view.buffer is not fully covered by view",
"ReadableStream with byte source: Multiple enqueue(), getReader(), then read(view)",
"ReadableStream with byte source: enqueue(), getReader(), then read(view) with a bigger view",
"ReadableStream with byte source: enqueue(), getReader(), then read(view) with smaller views",
"ReadableStream with byte source: enqueue() 1 byte, getReader(), then read(view) with Uint16Array",
"ReadableStream with byte source: enqueue() 3 byte, getReader(), then read(view) with 2-element Uint16Array",
"ReadableStream with byte source: read(view) with Uint16Array on close()-d stream with 1 byte enqueue()-d must fail",
"ReadableStream with byte source: A stream must be errored if close()-d before fulfilling read(view) with Uint16Array",
"ReadableStream with byte source: read(view), then respond() and close() in pull()",
"ReadableStream with byte source: read(view) with Uint32Array, then fill it by multiple respond() calls",
"ReadableStream with byte source: read(view) with Uint32Array, then fill it by multiple enqueue() calls",
"ReadableStream with byte source: read() twice, then enqueue() twice",
"ReadableStream with byte source: Multiple read(view), close() and respond()",
"ReadableStream with byte source: Multiple read(view), big enqueue()",
"ReadableStream with byte source: Multiple read(view) and multiple enqueue()",
"ReadableStream with byte source: read(view) with passing undefined as view must fail",
"ReadableStream with byte source: read(view) with passing an empty object as view must fail",
"ReadableStream with byte source: Even read(view) with passing ArrayBufferView like object as view must fail",
"ReadableStream with byte source: read(view) on an errored stream",
"ReadableStream with byte source: read(view), then error()",
"ReadableStream with byte source: Throwing in pull function must error the stream",
"ReadableStream with byte source: Throwing in pull in response to read() must be ignored if the stream is errored in it",
"ReadableStream with byte source: Throwing in pull in response to read(view) function must error the stream",
"ReadableStream with byte source: Throwing in pull in response to read(view) must be ignored if the stream is errored in it",
"calling respond() twice on the same byobRequest should throw",
"calling respondWithNewView() twice on the same byobRequest should throw",
"calling respond(0) twice on the same byobRequest should throw even when closed",
"calling respond() should throw when canceled",
"pull() resolving should not make releaseLock() possible",
"ReadableStream with byte source: default reader + autoAllocateChunkSize + byobRequest interaction",
"ReadableStream with byte source: respondWithNewView() with a smaller view",
"ReadableStream with byte source: respondWithNewView() with a zero-length view (in the closed state)",
"ReadableStream with byte source: respondWithNewView() with a transferred non-zero-length view (in the readable state)",
"ReadableStream with byte source: respondWithNewView() with a transferred zero-length view (in the closed state)"
], ],
"general.any.worker.html": [ "general.any.worker.html": [
"getReader({mode: \"byob\"}) throws on non-bytes streams", "ReadableStream with byte source: Respond to multiple pull() by separate enqueue()"
"ReadableStream with byte source can be constructed with no errors",
"getReader({mode}) must perform ToString()",
"ReadableStream with byte source: autoAllocateChunkSize cannot be 0",
"ReadableStreamBYOBReader can be constructed directly",
"ReadableStreamBYOBReader constructor requires a ReadableStream argument",
"ReadableStreamBYOBReader constructor requires an unlocked ReadableStream",
"ReadableStreamBYOBReader constructor requires a ReadableStream with type \"bytes\"",
"ReadableStream with byte source: getReader() with mode set to byob, then releaseLock()",
"ReadableStream with byte source: Test that closing a stream does not release a BYOB reader automatically",
"ReadableStream with byte source: Test that erroring a stream does not release a BYOB reader automatically",
"ReadableStream with byte source: autoAllocateChunkSize",
"ReadableStream with byte source: Mix of auto allocate and BYOB",
"ReadableStream with byte source: enqueue(), read(view) partially, then read()",
"ReadableStream with byte source: Respond to pull() by enqueue()",
"ReadableStream with byte source: Respond to pull() by enqueue() asynchronously",
"ReadableStream with byte source: Respond to multiple pull() by separate enqueue()",
"ReadableStream with byte source: read(view), then respond()",
"ReadableStream with byte source: read(view), then respondWithNewView() with a transferred ArrayBuffer",
"ReadableStream with byte source: read(view), then respond() with too big value",
"ReadableStream with byte source: respond(3) to read(view) with 2 element Uint16Array enqueues the 1 byte remainder",
"ReadableStream with byte source: enqueue(), getReader(), then read(view)",
"ReadableStream with byte source: enqueue(), getReader(), then cancel() (mode = BYOB)",
"ReadableStream with byte source: getReader(), read(view), then cancel()",
"ReadableStream with byte source: cancel() with partially filled pending pull() request",
"ReadableStream with byte source: enqueue(), getReader(), then read(view) where view.buffer is not fully covered by view",
"ReadableStream with byte source: Multiple enqueue(), getReader(), then read(view)",
"ReadableStream with byte source: enqueue(), getReader(), then read(view) with a bigger view",
"ReadableStream with byte source: enqueue(), getReader(), then read(view) with smaller views",
"ReadableStream with byte source: enqueue() 1 byte, getReader(), then read(view) with Uint16Array",
"ReadableStream with byte source: enqueue() 3 byte, getReader(), then read(view) with 2-element Uint16Array",
"ReadableStream with byte source: read(view) with Uint16Array on close()-d stream with 1 byte enqueue()-d must fail",
"ReadableStream with byte source: A stream must be errored if close()-d before fulfilling read(view) with Uint16Array",
"ReadableStream with byte source: read(view), then respond() and close() in pull()",
"ReadableStream with byte source: read(view) with Uint32Array, then fill it by multiple respond() calls",
"ReadableStream with byte source: read(view) with Uint32Array, then fill it by multiple enqueue() calls",
"ReadableStream with byte source: read() twice, then enqueue() twice",
"ReadableStream with byte source: Multiple read(view), close() and respond()",
"ReadableStream with byte source: Multiple read(view), big enqueue()",
"ReadableStream with byte source: Multiple read(view) and multiple enqueue()",
"ReadableStream with byte source: read(view) with passing undefined as view must fail",
"ReadableStream with byte source: read(view) with passing an empty object as view must fail",
"ReadableStream with byte source: Even read(view) with passing ArrayBufferView like object as view must fail",
"ReadableStream with byte source: read(view) on an errored stream",
"ReadableStream with byte source: read(view), then error()",
"ReadableStream with byte source: Throwing in pull function must error the stream",
"ReadableStream with byte source: Throwing in pull in response to read() must be ignored if the stream is errored in it",
"ReadableStream with byte source: Throwing in pull in response to read(view) function must error the stream",
"ReadableStream with byte source: Throwing in pull in response to read(view) must be ignored if the stream is errored in it",
"calling respond() twice on the same byobRequest should throw",
"calling respondWithNewView() twice on the same byobRequest should throw",
"calling respond(0) twice on the same byobRequest should throw even when closed",
"calling respond() should throw when canceled",
"pull() resolving should not make releaseLock() possible",
"ReadableStream with byte source: default reader + autoAllocateChunkSize + byobRequest interaction",
"ReadableStream with byte source: respondWithNewView() with a smaller view",
"ReadableStream with byte source: respondWithNewView() with a zero-length view (in the closed state)",
"ReadableStream with byte source: respondWithNewView() with a transferred non-zero-length view (in the readable state)",
"ReadableStream with byte source: respondWithNewView() with a transferred zero-length view (in the closed state)"
], ],
"non-transferable-buffers.any.html": false, "non-transferable-buffers.any.html": false,
"non-transferable-buffers.any.worker.html": false, "non-transferable-buffers.any.worker.html": false,
"enqueue-with-detached-buffer.window.html": false, "enqueue-with-detached-buffer.window.html": false,
"tee.any.html": [ "tee.any.html": true,
"ReadableStream teeing with byte source: should be able to read one branch to the end without affecting the other", "tee.any.worker.html": true
"ReadableStream teeing with byte source: chunks should be cloned for each branch",
"ReadableStream teeing with byte source: chunks for BYOB requests from branch 1 should be cloned to branch 2",
"ReadableStream teeing with byte source: errors in the source should propagate to both branches",
"ReadableStream teeing with byte source: closing the original should close the branches",
"ReadableStream teeing with byte source: erroring the original should immediately error the branches",
"ReadableStream teeing with byte source: erroring the original should error pending reads from BYOB reader",
"ReadableStream teeing with byte source: canceling branch1 should finish when branch2 reads until end of stream",
"ReadableStream teeing with byte source: canceling branch1 should finish when original stream errors",
"ReadableStream teeing with byte source: should not pull any chunks if no branches are reading",
"ReadableStream teeing with byte source: should only pull enough to fill the emptiest queue",
"ReadableStream teeing with byte source: should not pull when original is already errored",
"ReadableStream teeing with byte source: stops pulling when original stream errors while branch 1 is reading",
"ReadableStream teeing with byte source: stops pulling when original stream errors while branch 2 is reading",
"ReadableStream teeing with byte source: stops pulling when original stream errors while both branches are reading",
"ReadableStream teeing with byte source: canceling both branches in sequence with delay",
"ReadableStream teeing with byte source: failing to cancel when canceling both branches in sequence with delay",
"ReadableStream teeing with byte source: read from branch1 and branch2, cancel branch1, cancel branch2",
"ReadableStream teeing with byte source: read from branch1 and branch2, cancel branch2, cancel branch1",
"ReadableStream teeing with byte source: read from branch1 and branch2, cancel branch2, enqueue to branch1",
"ReadableStream teeing with byte source: read from branch1 and branch2, cancel branch1, respond to branch2",
"ReadableStream teeing with byte source: pull with BYOB reader, then pull with default reader",
"ReadableStream teeing with byte source: pull with default reader, then pull with BYOB reader",
"ReadableStream teeing with byte source: read from branch2, then read from branch1",
"ReadableStream teeing with byte source: read from branch1 with default reader, then close while branch2 has pending BYOB read",
"ReadableStream teeing with byte source: read from branch2 with default reader, then close while branch1 has pending BYOB read",
"ReadableStream teeing with byte source: close when both branches have pending BYOB reads"
],
"tee.any.worker.html": [
"ReadableStream teeing with byte source: should be able to read one branch to the end without affecting the other",
"ReadableStream teeing with byte source: chunks should be cloned for each branch",
"ReadableStream teeing with byte source: chunks for BYOB requests from branch 1 should be cloned to branch 2",
"ReadableStream teeing with byte source: errors in the source should propagate to both branches",
"ReadableStream teeing with byte source: closing the original should close the branches",
"ReadableStream teeing with byte source: erroring the original should immediately error the branches",
"ReadableStream teeing with byte source: erroring the original should error pending reads from BYOB reader",
"ReadableStream teeing with byte source: canceling branch1 should finish when branch2 reads until end of stream",
"ReadableStream teeing with byte source: canceling branch1 should finish when original stream errors",
"ReadableStream teeing with byte source: should not pull any chunks if no branches are reading",
"ReadableStream teeing with byte source: should only pull enough to fill the emptiest queue",
"ReadableStream teeing with byte source: should not pull when original is already errored",
"ReadableStream teeing with byte source: stops pulling when original stream errors while branch 1 is reading",
"ReadableStream teeing with byte source: stops pulling when original stream errors while branch 2 is reading",
"ReadableStream teeing with byte source: stops pulling when original stream errors while both branches are reading",
"ReadableStream teeing with byte source: canceling both branches in sequence with delay",
"ReadableStream teeing with byte source: failing to cancel when canceling both branches in sequence with delay",
"ReadableStream teeing with byte source: read from branch1 and branch2, cancel branch1, cancel branch2",
"ReadableStream teeing with byte source: read from branch1 and branch2, cancel branch2, cancel branch1",
"ReadableStream teeing with byte source: read from branch1 and branch2, cancel branch2, enqueue to branch1",
"ReadableStream teeing with byte source: read from branch1 and branch2, cancel branch1, respond to branch2",
"ReadableStream teeing with byte source: pull with BYOB reader, then pull with default reader",
"ReadableStream teeing with byte source: pull with default reader, then pull with BYOB reader",
"ReadableStream teeing with byte source: read from branch2, then read from branch1",
"ReadableStream teeing with byte source: read from branch1 with default reader, then close while branch2 has pending BYOB read",
"ReadableStream teeing with byte source: read from branch2 with default reader, then close while branch1 has pending BYOB read",
"ReadableStream teeing with byte source: close when both branches have pending BYOB reads"
]
}, },
"readable-streams": { "readable-streams": {
"async-iterator.any.html": false, "async-iterator.any.html": false,