diff options
author | Jack Moffitt <jack@metajack.im> | 2014-08-28 09:34:23 -0600 |
---|---|---|
committer | Jack Moffitt <jack@metajack.im> | 2014-09-08 20:21:42 -0600 |
commit | c6ab60dbfc6da7b4f800c9e40893c8b58413960c (patch) | |
tree | d1d74076cf7fa20e4f77ec7cb82cae98b67362cb /components/script/dom/messageevent.rs | |
parent | db2f642c32fc5bed445bb6f2e45b0f6f0b4342cf (diff) | |
download | servo-c6ab60dbfc6da7b4f800c9e40893c8b58413960c.tar.gz servo-c6ab60dbfc6da7b4f800c9e40893c8b58413960c.zip |
Cargoify servo
Diffstat (limited to 'components/script/dom/messageevent.rs')
-rw-r--r-- | components/script/dom/messageevent.rs | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/components/script/dom/messageevent.rs b/components/script/dom/messageevent.rs new file mode 100644 index 00000000000..13c8cf52dfd --- /dev/null +++ b/components/script/dom/messageevent.rs @@ -0,0 +1,99 @@ +/* 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::EventBinding::EventMethods; +use dom::bindings::codegen::Bindings::MessageEventBinding; +use dom::bindings::codegen::Bindings::MessageEventBinding::MessageEventMethods; +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, MessageEventTypeId}; +use dom::eventtarget::{EventTarget, EventTargetHelpers}; + +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) + } +} + +impl MessageEvent { + pub fn dispatch_jsval(target: &JSRef<EventTarget>, + scope: &GlobalRef, + message: JSVal) { + let messageevent = MessageEvent::new( + scope, "message".to_string(), false, false, message, + "".to_string(), "".to_string()).root(); + let event: &JSRef<Event> = EventCast::from_ref(&*messageevent); + target.dispatch_event_with_target(None, &*event).unwrap(); + } +} + +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() + } +} |