diff options
author | Josh Matthews <josh@joshmatthews.net> | 2014-04-22 17:14:48 -0400 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-05-27 20:43:52 +0200 |
commit | 003e5bcd4674fc0e78b36ecd783f3045cba852d2 (patch) | |
tree | 8206e58c032795db83c392167129483200ff0f2b /src/components/script/dom/window.rs | |
parent | 04931adf70e6dc70d09c2ceb42e2add85f58051d (diff) | |
download | servo-003e5bcd4674fc0e78b36ecd783f3045cba852d2.tar.gz servo-003e5bcd4674fc0e78b36ecd783f3045cba852d2.zip |
Port modern callback handling code from Gecko, and copy related WebIDL parser bits too.
Diffstat (limited to 'src/components/script/dom/window.rs')
-rw-r--r-- | src/components/script/dom/window.rs | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs index ecb08928832..0c71edb69a0 100644 --- a/src/components/script/dom/window.rs +++ b/src/components/script/dom/window.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::codegen::BindingDeclarations::WindowBinding; +use dom::bindings::codegen::EventHandlerBinding::{OnErrorEventHandlerNonNull, EventHandlerNonNull}; use dom::bindings::codegen::InheritTypes::EventTargetCast; use dom::bindings::js::{JS, JSRef, Temporary, OptionalSettable}; use dom::bindings::trace::{Traceable, Untraceable}; @@ -24,7 +25,7 @@ use servo_util::str::DOMString; use servo_util::task::{spawn_named}; use servo_util::url::parse_url; -use js::jsapi::{JSContext, JSObject}; +use js::jsapi::JSContext; use js::jsapi::{JS_GC, JS_GetRuntime}; use js::jsval::{NullValue, JSVal}; @@ -141,12 +142,12 @@ pub trait WindowMethods { fn Window(&self) -> Temporary<Window>; fn Self(&self) -> Temporary<Window>; fn Performance(&mut self) -> Temporary<Performance>; - fn GetOnload(&self, _cx: *mut JSContext) -> *mut JSObject; - fn SetOnload(&mut self, _cx: *mut JSContext, listener: *mut JSObject); - fn GetOnunload(&self, _cx: *mut JSContext) -> *mut JSObject; - fn SetOnunload(&mut self, _cx: *mut JSContext, listener: *mut JSObject); - fn GetOnerror(&self, _cx: *mut JSContext) -> *mut JSObject; - fn SetOnerror(&mut self, _cx: *mut JSContext, listener: *mut JSObject); + fn GetOnload(&self) -> Option<EventHandlerNonNull>; + fn SetOnload(&mut self, listener: Option<EventHandlerNonNull>); + fn GetOnunload(&self) -> Option<EventHandlerNonNull>; + fn SetOnunload(&mut self, listener: Option<EventHandlerNonNull>); + fn GetOnerror(&self) -> Option<OnErrorEventHandlerNonNull>; + fn SetOnerror(&mut self, listener: Option<OnErrorEventHandlerNonNull>); fn Debug(&self, message: DOMString); fn Gc(&self); } @@ -275,32 +276,32 @@ impl<'a> WindowMethods for JSRef<'a, Window> { Temporary::new(self.performance.get_ref().clone()) } - fn GetOnload(&self, _cx: *mut JSContext) -> *mut JSObject { + fn GetOnload(&self) -> Option<EventHandlerNonNull> { let eventtarget: &JSRef<EventTarget> = EventTargetCast::from_ref(self); eventtarget.get_event_handler_common("load") } - fn SetOnload(&mut self, _cx: *mut JSContext, listener: *mut JSObject) { + fn SetOnload(&mut self, listener: Option<EventHandlerNonNull>) { let eventtarget: &mut JSRef<EventTarget> = EventTargetCast::from_mut_ref(self); eventtarget.set_event_handler_common("load", listener) } - fn GetOnunload(&self, _cx: *mut JSContext) -> *mut JSObject { + fn GetOnunload(&self) -> Option<EventHandlerNonNull> { let eventtarget: &JSRef<EventTarget> = EventTargetCast::from_ref(self); eventtarget.get_event_handler_common("unload") } - fn SetOnunload(&mut self, _cx: *mut JSContext, listener: *mut JSObject) { + fn SetOnunload(&mut self, listener: Option<EventHandlerNonNull>) { let eventtarget: &mut JSRef<EventTarget> = EventTargetCast::from_mut_ref(self); eventtarget.set_event_handler_common("unload", listener) } - fn GetOnerror(&self, _cx: *mut JSContext) -> *mut JSObject { + fn GetOnerror(&self) -> Option<OnErrorEventHandlerNonNull> { let eventtarget: &JSRef<EventTarget> = EventTargetCast::from_ref(self); eventtarget.get_event_handler_common("error") } - fn SetOnerror(&mut self, _cx: *mut JSContext, listener: *mut JSObject) { + fn SetOnerror(&mut self, listener: Option<OnErrorEventHandlerNonNull>) { let eventtarget: &mut JSRef<EventTarget> = EventTargetCast::from_mut_ref(self); eventtarget.set_event_handler_common("error", listener) } @@ -429,6 +430,7 @@ impl<'a> PrivateWindowHelpers for JSRef<'a, Window> { handle } } + impl Window { pub fn new(cx: *mut JSContext, page: Rc<Page>, |