summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/unit/response_test.ts10
-rw-r--r--ext/fetch/22_body.js4
-rw-r--r--ext/web/06_streams.js10
3 files changed, 24 insertions, 0 deletions
diff --git a/cli/tests/unit/response_test.ts b/cli/tests/unit/response_test.ts
index c46218b62..c2a230138 100644
--- a/cli/tests/unit/response_test.ts
+++ b/cli/tests/unit/response_test.ts
@@ -90,3 +90,13 @@ Deno.test(function customInspectFunction() {
);
assertStringIncludes(Deno.inspect(Response.prototype), "Response");
});
+
+Deno.test(async function responseBodyUsed() {
+ const response = new Response("body");
+ assert(!response.bodyUsed);
+ await response.text();
+ assert(response.bodyUsed);
+ // .body getter is needed so we can test the faulty code path
+ response.body;
+ assert(response.bodyUsed);
+});
diff --git a/ext/fetch/22_body.js b/ext/fetch/22_body.js
index 97a8a8db1..6e9a57447 100644
--- a/ext/fetch/22_body.js
+++ b/ext/fetch/22_body.js
@@ -28,6 +28,8 @@
const {
isReadableStreamDisturbed,
errorReadableStream,
+ readableStreamClose,
+ readableStreamDisturb,
createProxy,
ReadableStreamPrototype,
} = globalThis.__bootstrap.streams;
@@ -92,6 +94,8 @@
if (consumed) {
this.streamOrStatic = new ReadableStream();
this.streamOrStatic.getReader();
+ readableStreamDisturb(this.streamOrStatic);
+ readableStreamClose(this.streamOrStatic);
} else {
this.streamOrStatic = new ReadableStream({
start(controller) {
diff --git a/ext/web/06_streams.js b/ext/web/06_streams.js
index bd1714964..bd3b79149 100644
--- a/ext/web/06_streams.js
+++ b/ext/web/06_streams.js
@@ -1153,6 +1153,15 @@
reader[_closedPromise].resolve(undefined);
}
+ /**
+ * @template R
+ * @param {ReadableStream<R>} stream
+ * @returns {void}
+ */
+ function readableStreamDisturb(stream) {
+ stream[_disturbed] = true;
+ }
+
/** @param {ReadableStreamDefaultController<any>} controller */
function readableStreamDefaultControllerCallPullIfNeeded(controller) {
const shouldPull = readableStreamDefaultcontrollerShouldCallPull(
@@ -5910,6 +5919,7 @@
createProxy,
writableStreamClose,
readableStreamClose,
+ readableStreamDisturb,
readableStreamForRid,
getReadableStreamRid,
Deferred,