diff options
author | Ms2ger <ms2ger@gmail.com> | 2014-07-16 14:18:52 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-07-16 14:53:22 +0200 |
commit | d40b97ea73a885479c1fb1d09f44c61ea1fbec3b (patch) | |
tree | b0731b550bc07d29b9fcd0a36a10fbaa0f3f4cc1 /src/components/script/dom/messageevent.rs | |
parent | e8996d5ce57c473c33b3bf5c140f7e91dd811e91 (diff) | |
download | servo-d40b97ea73a885479c1fb1d09f44c61ea1fbec3b.tar.gz servo-d40b97ea73a885479c1fb1d09f44c61ea1fbec3b.zip |
Implement MessageEvent.
Diffstat (limited to 'src/components/script/dom/messageevent.rs')
-rw-r--r-- | src/components/script/dom/messageevent.rs | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/components/script/dom/messageevent.rs b/src/components/script/dom/messageevent.rs new file mode 100644 index 00000000000..a9d536fad06 --- /dev/null +++ b/src/components/script/dom/messageevent.rs @@ -0,0 +1,90 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use dom::bindings::codegen::Bindings::MessageEventBinding; +use dom::bindings::codegen::InheritTypes::{EventCast, MessageEventDerived}; +use dom::bindings::error::Fallible; +use dom::bindings::global::GlobalRef; +use dom::bindings::js::{JSRef, Temporary}; +use dom::bindings::trace::Traceable; +use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; +use dom::event::{Event, EventMethods, MessageEventTypeId}; + +use servo_util::str::DOMString; + +use js::jsapi::JSContext; +use js::jsval::JSVal; + +#[deriving(Encodable)] +pub struct MessageEvent { + event: Event, + data: Traceable<JSVal>, + origin: DOMString, + lastEventId: DOMString, +} + +impl MessageEventDerived for Event { + fn is_messageevent(&self) -> bool { + self.type_id == MessageEventTypeId + } +} + +impl MessageEvent { + pub fn new_inherited(data: JSVal, origin: DOMString, lastEventId: DOMString) + -> MessageEvent { + MessageEvent { + event: Event::new_inherited(MessageEventTypeId), + data: Traceable::new(data), + origin: origin, + lastEventId: lastEventId, + } + } + + pub fn new(global: &GlobalRef, type_: DOMString, + bubbles: bool, cancelable: bool, + data: JSVal, origin: DOMString, lastEventId: DOMString) + -> Temporary<MessageEvent> { + let ev = reflect_dom_object(box MessageEvent::new_inherited(data, origin, lastEventId), + global, + MessageEventBinding::Wrap).root(); + let event: &JSRef<Event> = EventCast::from_ref(&*ev); + event.InitEvent(type_, bubbles, cancelable); + Temporary::from_rooted(&*ev) + } + + pub fn Constructor(global: &GlobalRef, + type_: DOMString, + init: &MessageEventBinding::MessageEventInit) + -> Fallible<Temporary<MessageEvent>> { + let ev = MessageEvent::new(global, type_, init.parent.bubbles, init.parent.cancelable, + init.data, init.origin.clone(), init.lastEventId.clone()); + Ok(ev) + } +} + +pub trait MessageEventMethods { + fn Data(&self, cx: *mut JSContext) -> JSVal; + fn Origin(&self) -> DOMString; + fn LastEventId(&self) -> DOMString; +} + +impl<'a> MessageEventMethods for JSRef<'a, MessageEvent> { + fn Data(&self, _cx: *mut JSContext) -> JSVal { + *self.data + } + + fn Origin(&self) -> DOMString { + self.origin.clone() + } + + fn LastEventId(&self) -> DOMString { + self.lastEventId.clone() + } +} + +impl Reflectable for MessageEvent { + fn reflector<'a>(&'a self) -> &'a Reflector { + self.event.reflector() + } +} |