Propagate CanGc when interacting with readable streams. (#33975)

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
This commit is contained in:
Josh Matthews 2024-10-23 07:49:59 -04:00 committed by GitHub
parent f553bda7eb
commit 12e6ec25aa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 80 additions and 57 deletions

View file

@ -576,7 +576,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
};
let total_bytes = bytes.len();
let global = self.global();
let stream = ReadableStream::new_from_bytes(&global, bytes);
let stream = ReadableStream::new_from_bytes(&global, bytes, can_gc);
Some(ExtractedBody {
stream,
total_bytes: Some(total_bytes),
@ -585,7 +585,9 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
})
},
Some(DocumentOrXMLHttpRequestBodyInit::Blob(ref b)) => {
let extracted_body = b.extract(&self.global()).expect("Couldn't extract body.");
let extracted_body = b
.extract(&self.global(), can_gc)
.expect("Couldn't extract body.");
if !extracted_body.in_memory() && self.sync.get() {
warn!("Sync XHR with not in-memory Blob as body not supported");
None
@ -595,22 +597,23 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
},
Some(DocumentOrXMLHttpRequestBodyInit::FormData(ref formdata)) => Some(
formdata
.extract(&self.global())
.extract(&self.global(), can_gc)
.expect("Couldn't extract body."),
),
Some(DocumentOrXMLHttpRequestBodyInit::String(ref str)) => Some(
str.extract(&self.global(), can_gc)
.expect("Couldn't extract body."),
),
Some(DocumentOrXMLHttpRequestBodyInit::String(ref str)) => {
Some(str.extract(&self.global()).expect("Couldn't extract body."))
},
Some(DocumentOrXMLHttpRequestBodyInit::URLSearchParams(ref urlsp)) => Some(
urlsp
.extract(&self.global())
.extract(&self.global(), can_gc)
.expect("Couldn't extract body."),
),
Some(DocumentOrXMLHttpRequestBodyInit::ArrayBuffer(ref typedarray)) => {
let bytes = typedarray.to_vec();
let total_bytes = bytes.len();
let global = self.global();
let stream = ReadableStream::new_from_bytes(&global, bytes);
let stream = ReadableStream::new_from_bytes(&global, bytes, can_gc);
Some(ExtractedBody {
stream,
total_bytes: Some(total_bytes),
@ -622,7 +625,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
let bytes = typedarray.to_vec();
let total_bytes = bytes.len();
let global = self.global();
let stream = ReadableStream::new_from_bytes(&global, bytes);
let stream = ReadableStream::new_from_bytes(&global, bytes, can_gc);
Some(ExtractedBody {
stream,
total_bytes: Some(total_bytes),