diff options
3 files changed, 24 insertions, 31 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_( diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html.ini deleted file mode 100644 index 67c24d130f5..00000000000 --- a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[document-synthetic-errorevent.html] - type: testharness - [error event is normal (return true does not cancel; one arg) on Document, with a synthetic ErrorEvent] - expected: FAIL - diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-processing-algorithm-error/script-element.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-processing-algorithm-error/script-element.html.ini deleted file mode 100644 index 1f751be39a2..00000000000 --- a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-processing-algorithm-error/script-element.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[script-element.html] - type: testharness - [error event behaves normally (return true does not cancel; one arg) on a script element, with a synthetic ErrorEvent] - expected: FAIL - |