auto merge of #4257 : johnathan79717/servo/4008, r=jdm

This is a fix for issue #4008.
This commit is contained in:
bors-servo 2014-12-08 01:55:08 -07:00
commit bdb3a2538b
4 changed files with 15 additions and 25 deletions

View file

@ -47,6 +47,7 @@ use dom::htmltitleelement::HTMLTitleElement;
use dom::location::Location; use dom::location::Location;
use dom::mouseevent::MouseEvent; use dom::mouseevent::MouseEvent;
use dom::keyboardevent::KeyboardEvent; use dom::keyboardevent::KeyboardEvent;
use dom::messageevent::MessageEvent;
use dom::node::{Node, ElementNodeTypeId, DocumentNodeTypeId, NodeHelpers}; use dom::node::{Node, ElementNodeTypeId, DocumentNodeTypeId, NodeHelpers};
use dom::node::{CloneChildren, DoNotCloneChildren}; use dom::node::{CloneChildren, DoNotCloneChildren};
use dom::nodelist::NodeList; use dom::nodelist::NodeList;
@ -711,6 +712,8 @@ impl<'a> DocumentMethods for JSRef<'a, Document> {
global::Window(*window))), global::Window(*window))),
"keyboardevent" | "keyevents" => Ok(EventCast::from_temporary( "keyboardevent" | "keyevents" => Ok(EventCast::from_temporary(
KeyboardEvent::new_uninitialized(*window))), KeyboardEvent::new_uninitialized(*window))),
"messageevent" => Ok(EventCast::from_temporary(
MessageEvent::new_uninitialized(global::Window(*window)))),
_ => Err(NotSupported) _ => Err(NotSupported)
} }
} }

View file

@ -16,7 +16,7 @@ use dom::eventtarget::{EventTarget, EventTargetHelpers};
use servo_util::str::DOMString; use servo_util::str::DOMString;
use js::jsapi::JSContext; use js::jsapi::JSContext;
use js::jsval::JSVal; use js::jsval::{JSVal, UndefinedValue};
#[dom_struct] #[dom_struct]
pub struct MessageEvent { pub struct MessageEvent {
@ -43,13 +43,21 @@ impl MessageEvent {
} }
} }
pub fn new_uninitialized(global: GlobalRef) -> Temporary<MessageEvent> {
MessageEvent::new_initialized(global, UndefinedValue(), "".to_string(), "".to_string())
}
pub fn new_initialized(global: GlobalRef, data: JSVal, origin: DOMString, lastEventId: DOMString) -> Temporary<MessageEvent> {
reflect_dom_object(box MessageEvent::new_inherited(data, origin, lastEventId),
global,
MessageEventBinding::Wrap)
}
pub fn new(global: GlobalRef, type_: DOMString, pub fn new(global: GlobalRef, type_: DOMString,
bubbles: bool, cancelable: bool, bubbles: bool, cancelable: bool,
data: JSVal, origin: DOMString, lastEventId: DOMString) data: JSVal, origin: DOMString, lastEventId: DOMString)
-> Temporary<MessageEvent> { -> Temporary<MessageEvent> {
let ev = reflect_dom_object(box MessageEvent::new_inherited(data, origin, lastEventId), let ev = MessageEvent::new_initialized(global, data, origin, lastEventId).root();
global,
MessageEventBinding::Wrap).root();
let event: JSRef<Event> = EventCast::from_ref(*ev); let event: JSRef<Event> = EventCast::from_ref(*ev);
event.InitEvent(type_, bubbles, cancelable); event.InitEvent(type_, bubbles, cancelable);
Temporary::from_rooted(*ev) Temporary::from_rooted(*ev)

View file

@ -1,8 +1,5 @@
[EventTarget-dispatchEvent.html] [EventTarget-dispatchEvent.html]
type: testharness 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).] [If the event\'s initialized flag is not set, an InvalidStateError must be thrown (TouchEvent).]
expected: FAIL expected: FAIL

View file

@ -1,23 +1,5 @@
[Document-createEvent.html] [Document-createEvent.html]
type: testharness 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.] [TouchEvent should be an alias for TouchEvent.]
expected: FAIL expected: FAIL