diff options
author | Patrick Shaughnessy <pshaughn@comcast.net> | 2020-01-27 15:03:28 -0500 |
---|---|---|
committer | Patrick Shaughnessy <pshaughn@comcast.net> | 2020-01-27 15:03:28 -0500 |
commit | ee53e10f70fab02bfd3b29e3ef83f32c5f292c3d (patch) | |
tree | aaa3301a29502c876b96bec433dce4e9bc760327 /components/script/dom | |
parent | d0f64d9d56979f66a0de2f239c3fc691b45535d6 (diff) | |
download | servo-ee53e10f70fab02bfd3b29e3ef83f32c5f292c3d.tar.gz servo-ee53e10f70fab02bfd3b29e3ef83f32c5f292c3d.zip |
Errors only pass the special bonus arguments to globals
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/eventtarget.rs | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index 396ffb75441..5de65567595 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -33,6 +33,7 @@ use crate::dom::htmlformelement::FormControlElementHelpers; use crate::dom::node::document_from_node; use crate::dom::virtualmethods::VirtualMethods; use crate::dom::window::Window; +use crate::dom::workerglobalscope::WorkerGlobalScope; use crate::realms::enter_realm; use dom_struct::dom_struct; use fnv::FnvHasher; @@ -152,9 +153,9 @@ pub enum CompiledEventListener { impl CompiledEventListener { // https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm - pub fn call_or_handle_event<T: DomObject>( + pub fn call_or_handle_event( &self, - object: &T, + object: &EventTarget, event: &Event, exception_handle: ExceptionHandling, ) { @@ -167,27 +168,29 @@ impl CompiledEventListener { match *handler { CommonEventHandler::ErrorEventHandler(ref handler) => { if let Some(event) = event.downcast::<ErrorEvent>() { - let cx = object.global().get_cx(); - rooted!(in(*cx) let error = event.Error(cx)); - let return_value = handler.Call_( - object, - EventOrString::String(event.Message()), - Some(event.Filename()), - Some(event.Lineno()), - Some(event.Colno()), - Some(error.handle()), - exception_handle, - ); - // Step 4 - if let Ok(return_value) = return_value { - rooted!(in(*cx) let return_value = return_value); - if return_value.handle().is_boolean() && - return_value.handle().to_boolean() == true - { - event.upcast::<Event>().PreventDefault(); + if object.is::<Window>() || object.is::<WorkerGlobalScope>() { + let cx = object.global().get_cx(); + rooted!(in(*cx) let error = event.Error(cx)); + let return_value = handler.Call_( + object, + EventOrString::String(event.Message()), + Some(event.Filename()), + Some(event.Lineno()), + Some(event.Colno()), + Some(error.handle()), + exception_handle, + ); + // Step 4 + if let Ok(return_value) = return_value { + rooted!(in(*cx) let return_value = return_value); + if return_value.handle().is_boolean() && + return_value.handle().to_boolean() == true + { + event.upcast::<Event>().PreventDefault(); + } } + return; } - return; } let _ = handler.Call_( |