mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +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
|
@ -9,6 +9,7 @@ use crate::dom::dedicatedworkerglobalscope::{AutoWorkerReset, DedicatedWorkerScr
|
|||
use crate::dom::globalscope::GlobalScope;
|
||||
use crate::dom::worker::TrustedWorkerAddress;
|
||||
use crate::dom::workerglobalscope::WorkerGlobalScope;
|
||||
use crate::realms::enter_realm;
|
||||
use crate::script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort};
|
||||
use crate::task_queue::{QueuedTaskConversion, TaskQueue};
|
||||
use crossbeam_channel::{Receiver, Sender};
|
||||
|
@ -140,6 +141,7 @@ pub fn run_worker_event_loop<T, WorkerMsg, Event>(
|
|||
}
|
||||
// Step 3
|
||||
for event in sequential {
|
||||
let _realm = enter_realm(&*worker_scope);
|
||||
if !worker_scope.handle_event(event) {
|
||||
// Shutdown
|
||||
return;
|
||||
|
|
|
@ -46,6 +46,7 @@ use crate::fetch::create_a_potential_cors_request;
|
|||
use crate::image_listener::{generate_cache_listener_for_element, ImageCacheListener};
|
||||
use crate::microtask::{Microtask, MicrotaskRunnable};
|
||||
use crate::network_listener::{self, NetworkListener, PreInvoke, ResourceTimingListener};
|
||||
use crate::realms::enter_realm;
|
||||
use crate::script_thread::ScriptThread;
|
||||
use crate::task_source::TaskSource;
|
||||
use app_units::{Au, AU_PER_PX};
|
||||
|
@ -56,6 +57,7 @@ use html5ever::{LocalName, Prefix, QualName};
|
|||
use ipc_channel::ipc;
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use ipc_channel::router::ROUTER;
|
||||
use js::jsapi::JSAutoRealm;
|
||||
use mime::{self, Mime};
|
||||
use msg::constellation_msg::PipelineId;
|
||||
use net_traits::image::base::{Image, ImageMetadata};
|
||||
|
@ -1353,6 +1355,13 @@ impl MicrotaskRunnable for ImageElementMicrotask {
|
|||
},
|
||||
}
|
||||
}
|
||||
|
||||
fn enter_realm(&self) -> JSAutoRealm {
|
||||
match self {
|
||||
&ImageElementMicrotask::StableStateUpdateImageDataTask { ref elem, .. } |
|
||||
&ImageElementMicrotask::EnvironmentChangesTask { ref elem, .. } => enter_realm(&**elem),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub trait LayoutHTMLImageElementHelpers {
|
||||
|
|
|
@ -62,7 +62,7 @@ use crate::dom::virtualmethods::VirtualMethods;
|
|||
use crate::fetch::{create_a_potential_cors_request, FetchCanceller};
|
||||
use crate::microtask::{Microtask, MicrotaskRunnable};
|
||||
use crate::network_listener::{self, NetworkListener, PreInvoke, ResourceTimingListener};
|
||||
use crate::realms::InRealm;
|
||||
use crate::realms::{enter_realm, InRealm};
|
||||
use crate::script_thread::ScriptThread;
|
||||
use crate::task_source::TaskSource;
|
||||
use dom_struct::dom_struct;
|
||||
|
@ -74,6 +74,7 @@ use html5ever::{LocalName, Prefix};
|
|||
use http::header::{self, HeaderMap, HeaderValue};
|
||||
use ipc_channel::ipc;
|
||||
use ipc_channel::router::ROUTER;
|
||||
use js::jsapi::JSAutoRealm;
|
||||
use media::{glplayer_channel, GLPlayerMsg, GLPlayerMsgForward, WindowGLContext};
|
||||
use net_traits::image::base::Image;
|
||||
use net_traits::request::Destination;
|
||||
|
@ -2506,6 +2507,14 @@ impl MicrotaskRunnable for MediaElementMicrotask {
|
|||
},
|
||||
}
|
||||
}
|
||||
|
||||
fn enter_realm(&self) -> JSAutoRealm {
|
||||
match self {
|
||||
&MediaElementMicrotask::ResourceSelectionTask { ref elem, .. } |
|
||||
&MediaElementMicrotask::PauseIfNotInDocumentTask { ref elem } |
|
||||
&MediaElementMicrotask::SeekedTask { ref elem, .. } => enter_realm(&**elem),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum Resource {
|
||||
|
|
|
@ -34,6 +34,7 @@ use crate::dom::processinginstruction::ProcessingInstruction;
|
|||
use crate::dom::text::Text;
|
||||
use crate::dom::virtualmethods::vtable_for;
|
||||
use crate::network_listener::PreInvoke;
|
||||
use crate::realms::enter_realm;
|
||||
use crate::script_thread::ScriptThread;
|
||||
use content_security_policy::{self as csp, CspList};
|
||||
use dom_struct::dom_struct;
|
||||
|
@ -828,6 +829,8 @@ impl FetchResponseListener for ParserContext {
|
|||
return;
|
||||
}
|
||||
|
||||
let _realm = enter_realm(&*parser.document);
|
||||
|
||||
parser.document.set_csp_list(csp_list);
|
||||
self.parser = Some(Trusted::new(&*parser));
|
||||
self.submit_resource_timing();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue