aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/messageevent.rs
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-07-16 14:18:52 +0200
committerMs2ger <ms2ger@gmail.com>2014-07-16 14:53:22 +0200
commitd40b97ea73a885479c1fb1d09f44c61ea1fbec3b (patch)
treeb0731b550bc07d29b9fcd0a36a10fbaa0f3f4cc1 /src/components/script/dom/messageevent.rs
parente8996d5ce57c473c33b3bf5c140f7e91dd811e91 (diff)
downloadservo-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.rs90
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()
+ }
+}