diff --git a/components/script/dom/defaultteereadrequest.rs b/components/script/dom/defaultteereadrequest.rs index 94e285da72b..54cb4921470 100644 --- a/components/script/dom/defaultteereadrequest.rs +++ b/components/script/dom/defaultteereadrequest.rs @@ -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, } -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) } } diff --git a/components/script/microtask.rs b/components/script/microtask.rs index 453e587e892..3f5969e7b7f 100644 --- a/components/script/microtask.rs +++ b/components/script/microtask.rs @@ -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); }, } }