diff options
Diffstat (limited to 'components/script/dom/eventtarget.rs')
-rw-r--r-- | components/script/dom/eventtarget.rs | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index 09cafb65bac..1023b97600f 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -441,13 +441,13 @@ impl EventTarget { assert!(!funobj.is_null()); // Step 1.14 if is_error { - Some(CommonEventHandler::ErrorEventHandler(OnErrorEventHandlerNonNull::new(funobj))) + Some(CommonEventHandler::ErrorEventHandler(OnErrorEventHandlerNonNull::new(cx, funobj))) } else { if ty == &atom!("beforeunload") { Some(CommonEventHandler::BeforeUnloadEventHandler( - OnBeforeUnloadEventHandlerNonNull::new(funobj))) + OnBeforeUnloadEventHandlerNonNull::new(cx, funobj))) } else { - Some(CommonEventHandler::EventHandler(EventHandlerNonNull::new(funobj))) + Some(CommonEventHandler::EventHandler(EventHandlerNonNull::new(cx, funobj))) } } } @@ -455,36 +455,47 @@ impl EventTarget { pub fn set_event_handler_common<T: CallbackContainer>( &self, ty: &str, listener: Option<Rc<T>>) { + let cx = self.global().get_cx(); + let event_listener = listener.map(|listener| InlineEventListener::Compiled( CommonEventHandler::EventHandler( - EventHandlerNonNull::new(listener.callback())))); + EventHandlerNonNull::new(cx, listener.callback())))); self.set_inline_event_listener(Atom::from(ty), event_listener); } pub fn set_error_event_handler<T: CallbackContainer>( &self, ty: &str, listener: Option<Rc<T>>) { + let cx = self.global().get_cx(); + let event_listener = listener.map(|listener| InlineEventListener::Compiled( CommonEventHandler::ErrorEventHandler( - OnErrorEventHandlerNonNull::new(listener.callback())))); + OnErrorEventHandlerNonNull::new(cx, listener.callback())))); self.set_inline_event_listener(Atom::from(ty), event_listener); } pub fn set_beforeunload_event_handler<T: CallbackContainer>(&self, ty: &str, - listener: Option<Rc<T>>) { + listener: Option<Rc<T>>) { + let cx = self.global().get_cx(); + let event_listener = listener.map(|listener| InlineEventListener::Compiled( CommonEventHandler::BeforeUnloadEventHandler( - OnBeforeUnloadEventHandlerNonNull::new(listener.callback()))) + OnBeforeUnloadEventHandlerNonNull::new(cx, listener.callback()))) ); self.set_inline_event_listener(Atom::from(ty), event_listener); } + #[allow(unsafe_code)] pub fn get_event_handler_common<T: CallbackContainer>(&self, ty: &str) -> Option<Rc<T>> { + let cx = self.global().get_cx(); let listener = self.get_inline_event_listener(&Atom::from(ty)); - listener.map(|listener| CallbackContainer::new(listener.parent().callback_holder().get())) + unsafe { + listener.map(|listener| + CallbackContainer::new(cx, listener.parent().callback_holder().get())) + } } pub fn has_handlers(&self) -> bool { |