From ccb4e8b273aca2379a05c8405853bfa9f33d9aef Mon Sep 17 00:00:00 2001 From: Jonathan Hao Date: Fri, 5 Dec 2014 13:54:07 -0800 Subject: [PATCH 1/2] Implement the "messageevent" argument to Document#createEvent. #4008 --- components/script/dom/document.rs | 3 +++ components/script/dom/messageevent.rs | 16 ++++++++++++---- .../dom/nodes/Document-createEvent.html.ini | 18 ------------------ 3 files changed, 15 insertions(+), 22 deletions(-) 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 From 8b8eea15c71d3f2e68f58f6273c5c0de14b7cf86 Mon Sep 17 00:00:00 2001 From: Jonathan Hao Date: Sat, 6 Dec 2014 02:04:55 -0800 Subject: [PATCH 2/2] Remove an expected failure from tests/wpt/metadata/dom/events/EventTarget-dispatchEvent.html.ini --- .../wpt/metadata/dom/events/EventTarget-dispatchEvent.html.ini | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/wpt/metadata/dom/events/EventTarget-dispatchEvent.html.ini b/tests/wpt/metadata/dom/events/EventTarget-dispatchEvent.html.ini index cd9c31f59ac..bd5871d71e3 100644 --- a/tests/wpt/metadata/dom/events/EventTarget-dispatchEvent.html.ini +++ b/tests/wpt/metadata/dom/events/EventTarget-dispatchEvent.html.ini @@ -1,8 +1,5 @@ [EventTarget-dispatchEvent.html] type: testharness - [If the event\'s initialized flag is not set, an InvalidStateError must be thrown (MessageEvent).] - expected: FAIL - [If the event\'s initialized flag is not set, an InvalidStateError must be thrown (TouchEvent).] expected: FAIL