mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Enter realms more consistently during the script event loop.
This commit is contained in:
parent
9ea1399c30
commit
864e072d5c
6 changed files with 52 additions and 5 deletions
|
@ -15,9 +15,10 @@ use crate::dom::globalscope::GlobalScope;
|
|||
use crate::dom::htmlimageelement::ImageElementMicrotask;
|
||||
use crate::dom::htmlmediaelement::MediaElementMicrotask;
|
||||
use crate::dom::mutationobserver::MutationObserver;
|
||||
use crate::realms::enter_realm;
|
||||
use crate::script_runtime::{notify_about_rejected_promises, JSContext};
|
||||
use crate::script_thread::ScriptThread;
|
||||
use js::jsapi::{JobQueueIsEmpty, JobQueueMayNotBeEmpty};
|
||||
use js::jsapi::{JSAutoRealm, JobQueueIsEmpty, JobQueueMayNotBeEmpty};
|
||||
use msg::constellation_msg::PipelineId;
|
||||
use std::cell::Cell;
|
||||
use std::mem;
|
||||
|
@ -44,6 +45,7 @@ pub enum Microtask {
|
|||
|
||||
pub trait MicrotaskRunnable {
|
||||
fn handler(&self) {}
|
||||
fn enter_realm(&self) -> JSAutoRealm;
|
||||
}
|
||||
|
||||
/// A promise callback scheduled to run during the next microtask checkpoint (#4283).
|
||||
|
@ -108,19 +110,23 @@ impl MicrotaskQueue {
|
|||
if let Some(target) = target_provider(job.pipeline) {
|
||||
let was_interacting = ScriptThread::is_user_interacting();
|
||||
ScriptThread::set_user_interacting(job.is_user_interacting);
|
||||
let _realm = enter_realm(&*target);
|
||||
let _ = job.callback.Call_(&*target, ExceptionHandling::Report);
|
||||
ScriptThread::set_user_interacting(was_interacting);
|
||||
}
|
||||
},
|
||||
Microtask::User(ref job) => {
|
||||
if let Some(target) = target_provider(job.pipeline) {
|
||||
let _realm = enter_realm(&*target);
|
||||
let _ = job.callback.Call_(&*target, ExceptionHandling::Report);
|
||||
}
|
||||
},
|
||||
Microtask::MediaElement(ref task) => {
|
||||
let _realm = task.enter_realm();
|
||||
task.handler();
|
||||
},
|
||||
Microtask::ImageElement(ref task) => {
|
||||
let _realm = task.enter_realm();
|
||||
task.handler();
|
||||
},
|
||||
Microtask::CustomElementReaction => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue