Implement MicrotaskRunnable for DefaultTeeReadRequestMicrotask (#37404)

Implement `MicrotaskRunnable` for `DefaultTeeReadRequestMicrotask` to
run the microtask, instead of using its own ad-hoc mechanism via
`DefaultTeeReadRequestMicrotask::microtask_chunk_steps`.

Testing: No need for this refactoring.
Fixes: #37246

---------

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
This commit is contained in:
Kingsley Yung 2025-06-12 18:46:31 +08:00 committed by GitHub
parent 41bed9840a
commit b28e796647
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 13 additions and 6 deletions

View file

@ -6,7 +6,7 @@ use std::cell::Cell;
use std::rc::Rc;
use dom_struct::dom_struct;
use js::jsapi::Heap;
use js::jsapi::{Heap, JSAutoRealm};
use js::jsval::{JSVal, UndefinedValue};
use js::rust::HandleValue as SafeHandleValue;
@ -20,7 +20,8 @@ use crate::dom::defaultteeunderlyingsource::DefaultTeeUnderlyingSource;
use crate::dom::globalscope::GlobalScope;
use crate::dom::promise::Promise;
use crate::dom::readablestream::ReadableStream;
use crate::microtask::Microtask;
use crate::microtask::{Microtask, MicrotaskRunnable};
use crate::realms::enter_realm;
use crate::script_runtime::{CanGc, JSContext as SafeJSContext};
#[derive(JSTraceable, MallocSizeOf)]
@ -31,9 +32,14 @@ pub(crate) struct DefaultTeeReadRequestMicrotask {
tee_read_request: Dom<DefaultTeeReadRequest>,
}
impl DefaultTeeReadRequestMicrotask {
pub(crate) fn microtask_chunk_steps(&self, cx: SafeJSContext, can_gc: CanGc) {
self.tee_read_request.chunk_steps(cx, &self.chunk, can_gc)
impl MicrotaskRunnable for DefaultTeeReadRequestMicrotask {
fn handler(&self, can_gc: CanGc) {
let cx = GlobalScope::get_cx();
self.tee_read_request.chunk_steps(cx, &self.chunk, can_gc);
}
fn enter_realm(&self) -> JSAutoRealm {
enter_realm(&*self.tee_read_request)
}
}

View file

@ -147,7 +147,8 @@ impl MicrotaskQueue {
MutationObserver::notify_mutation_observers(can_gc);
},
Microtask::ReadableStreamTeeReadRequest(ref task) => {
task.microtask_chunk_steps(cx, can_gc)
let _realm = task.enter_realm();
task.handler(can_gc);
},
}
}