diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index e71db9bf578..eb9eb3d3929 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -38,15 +38,16 @@ use dom::htmlelement::HTMLElement; use dom::htmlheadelement::HTMLHeadElement; use dom::htmlhtmlelement::HTMLHtmlElement; use dom::htmltitleelement::HTMLTitleElement; +use dom::location::Location; use dom::mouseevent::MouseEvent; use dom::node::{Node, ElementNodeTypeId, DocumentNodeTypeId, NodeHelpers}; use dom::node::{CloneChildren, DoNotCloneChildren}; use dom::nodelist::NodeList; use dom::text::Text; use dom::processinginstruction::ProcessingInstruction; +use dom::range::Range; use dom::uievent::UIEvent; use dom::window::{Window, WindowHelpers}; -use dom::location::Location; use html::hubbub_html_parser::build_element_from_tag; use hubbub::hubbub::{QuirksMode, NoQuirks, LimitedQuirks, FullQuirks}; use layout_interface::{DocumentDamageLevel, ContentChangedDocumentDamage}; @@ -504,6 +505,11 @@ impl<'a> DocumentMethods for JSRef<'a, Document> { } } + // http://dom.spec.whatwg.org/#dom-document-createrange + fn CreateRange(&self) -> Temporary { + Range::new(self) + } + // http://www.whatwg.org/specs/web-apps/current-work/#document.title fn Title(&self) -> DOMString { let mut title = String::new(); diff --git a/src/components/script/dom/range.rs b/src/components/script/dom/range.rs index 16449cabe1a..3ed02410a1e 100644 --- a/src/components/script/dom/range.rs +++ b/src/components/script/dom/range.rs @@ -4,14 +4,16 @@ use dom::bindings::codegen::Bindings::RangeBinding; use dom::bindings::codegen::Bindings::RangeBinding::RangeMethods; +use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use dom::bindings::error::Fallible; -use dom::bindings::global::GlobalRef; +use dom::bindings::global::{GlobalRef, Window}; use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; +use dom::document::Document; #[deriving(Encodable)] pub struct Range { - pub reflector_: Reflector + reflector_: Reflector } impl Range { @@ -21,16 +23,24 @@ impl Range { } } - pub fn new(global: &GlobalRef) -> Temporary { - reflect_dom_object(box Range::new_inherited(), global, RangeBinding::Wrap) + pub fn new(document: &JSRef) -> Temporary { + let window = document.window.root(); + reflect_dom_object(box Range::new_inherited(), + &Window(*window), + RangeBinding::Wrap) } pub fn Constructor(global: &GlobalRef) -> Fallible> { - Ok(Range::new(global)) + let document = global.as_window().Document().root(); + Ok(Range::new(&*document)) } } impl<'a> RangeMethods for JSRef<'a, Range> { + /// http://dom.spec.whatwg.org/#dom-range-detach + fn Detach(&self) { + // This method intentionally left blank. + } } impl Reflectable for Range { diff --git a/src/components/script/dom/webidls/Document.webidl b/src/components/script/dom/webidls/Document.webidl index 79ef4c1fa47..0a58227cdbe 100644 --- a/src/components/script/dom/webidls/Document.webidl +++ b/src/components/script/dom/webidls/Document.webidl @@ -43,6 +43,8 @@ interface Document : Node { [Throws] Event createEvent(DOMString interface_); + + Range createRange(); }; /* http://www.whatwg.org/specs/web-apps/current-work/#the-document-object */ diff --git a/src/components/script/dom/webidls/Range.webidl b/src/components/script/dom/webidls/Range.webidl index c0e8f630546..d74411b1dd9 100644 --- a/src/components/script/dom/webidls/Range.webidl +++ b/src/components/script/dom/webidls/Range.webidl @@ -59,7 +59,7 @@ interface Range { // void surroundContents(Node newParent); // Range cloneRange(); - // void detach(); + void detach(); // [Throws] // boolean isPointInRange(Node node, unsigned long offset); diff --git a/src/test/wpt/metadata/dom/interfaces.html.ini b/src/test/wpt/metadata/dom/interfaces.html.ini index 507b00d92de..a5c7e783ce2 100644 --- a/src/test/wpt/metadata/dom/interfaces.html.ini +++ b/src/test/wpt/metadata/dom/interfaces.html.ini @@ -1,3 +1,45 @@ [interfaces.html] type: testharness - expected: ERROR + expected: TIMEOUT + [DOMException exception: existence and properties of exception interface prototype object] + expected: FAIL + + [DOMException exception: existence and properties of exception interface prototype object\'s "name" property] + expected: FAIL + + [DOMError interface: existence and properties of interface object] + expected: FAIL + + [DOMError interface object length] + expected: FAIL + + [DOMError interface: existence and properties of interface prototype object] + expected: FAIL + + [DOMError interface: existence and properties of interface prototype object\'s "constructor" property] + expected: FAIL + + [DOMError interface: attribute name] + expected: FAIL + + [DOMError interface: attribute message] + expected: FAIL + + [Event interface object length] + expected: FAIL + + [Event interface: document.createEvent("Event") must have own property "isTrusted"] + expected: FAIL + + [Event interface: new Event("foo") must have own property "isTrusted"] + expected: FAIL + + [CustomEvent interface object length] + expected: FAIL + + [Event interface: new CustomEvent("foo") must have own property "isTrusted"] + expected: FAIL + + [EventTarget interface: existence and properties of interface object] + expected: TIMEOUT +