diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index f282aa3b483..c4e7e28b8a4 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -47,6 +47,7 @@ use dom::htmltitleelement::HTMLTitleElement; use dom::location::Location; use dom::mouseevent::MouseEvent; use dom::keyboardevent::KeyboardEvent; +use dom::messageevent::MessageEvent; use dom::node::{Node, ElementNodeTypeId, DocumentNodeTypeId, NodeHelpers}; use dom::node::{CloneChildren, DoNotCloneChildren}; use dom::nodelist::NodeList; @@ -711,6 +712,8 @@ impl<'a> DocumentMethods for JSRef<'a, Document> { global::Window(*window))), "keyboardevent" | "keyevents" => Ok(EventCast::from_temporary( KeyboardEvent::new_uninitialized(*window))), + "messageevent" => Ok(EventCast::from_temporary( + MessageEvent::new_uninitialized(global::Window(*window)))), _ => Err(NotSupported) } } diff --git a/components/script/dom/messageevent.rs b/components/script/dom/messageevent.rs index f2540a4bb85..32842fd2897 100644 --- a/components/script/dom/messageevent.rs +++ b/components/script/dom/messageevent.rs @@ -16,7 +16,7 @@ use dom::eventtarget::{EventTarget, EventTargetHelpers}; use servo_util::str::DOMString; use js::jsapi::JSContext; -use js::jsval::JSVal; +use js::jsval::{JSVal, UndefinedValue}; #[dom_struct] pub struct MessageEvent { @@ -43,13 +43,21 @@ impl MessageEvent { } } + pub fn new_uninitialized(global: GlobalRef) -> Temporary { + MessageEvent::new_initialized(global, UndefinedValue(), "".to_string(), "".to_string()) + } + + pub fn new_initialized(global: GlobalRef, data: JSVal, origin: DOMString, lastEventId: DOMString) -> Temporary { + reflect_dom_object(box MessageEvent::new_inherited(data, origin, lastEventId), + global, + MessageEventBinding::Wrap) + } + pub fn new(global: GlobalRef, type_: DOMString, bubbles: bool, cancelable: bool, data: JSVal, origin: DOMString, lastEventId: DOMString) -> Temporary { - let ev = reflect_dom_object(box MessageEvent::new_inherited(data, origin, lastEventId), - global, - MessageEventBinding::Wrap).root(); + let ev = MessageEvent::new_initialized(global, data, origin, lastEventId).root(); let event: JSRef = EventCast::from_ref(*ev); event.InitEvent(type_, bubbles, cancelable); Temporary::from_rooted(*ev) diff --git a/tests/wpt/metadata/dom/nodes/Document-createEvent.html.ini b/tests/wpt/metadata/dom/nodes/Document-createEvent.html.ini index 90869a4c6d9..3abecfc45e2 100644 --- a/tests/wpt/metadata/dom/nodes/Document-createEvent.html.ini +++ b/tests/wpt/metadata/dom/nodes/Document-createEvent.html.ini @@ -1,23 +1,5 @@ [Document-createEvent.html] type: testharness - [MessageEvent should be an alias for MessageEvent.] - expected: FAIL - - [createEvent(\'MessageEvent\') should be initialized correctly.] - expected: FAIL - - [messageevent should be an alias for MessageEvent.] - expected: FAIL - - [createEvent(\'messageevent\') should be initialized correctly.] - expected: FAIL - - [MESSAGEEVENT should be an alias for MessageEvent.] - expected: FAIL - - [createEvent(\'MESSAGEEVENT\') should be initialized correctly.] - expected: FAIL - [TouchEvent should be an alias for TouchEvent.] expected: FAIL