From 22d85424e8bf8d1060b352e7ea376cb494e8e757 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 9 Aug 2014 11:23:12 +0200 Subject: [PATCH 1/4] Make Range::reflector private. --- src/components/script/dom/range.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/script/dom/range.rs b/src/components/script/dom/range.rs index 16449cabe1a..1aa813e6d0e 100644 --- a/src/components/script/dom/range.rs +++ b/src/components/script/dom/range.rs @@ -11,7 +11,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; #[deriving(Encodable)] pub struct Range { - pub reflector_: Reflector + reflector_: Reflector } impl Range { From 6501dad9e9e1ed6eb94a62fe7793f7d4714f7c56 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 9 Aug 2014 11:41:58 +0200 Subject: [PATCH 2/4] Pass a Document to Range::new. --- src/components/script/dom/range.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/script/dom/range.rs b/src/components/script/dom/range.rs index 1aa813e6d0e..31b6b70671e 100644 --- a/src/components/script/dom/range.rs +++ b/src/components/script/dom/range.rs @@ -4,10 +4,12 @@ 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 { @@ -21,12 +23,16 @@ 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)) } } From de36dd03a1203243ffbf07e2061c59e89faec97b Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 9 Aug 2014 11:50:56 +0200 Subject: [PATCH 3/4] Implement Document.createRange(). --- src/components/script/dom/document.rs | 8 +++++++- src/components/script/dom/webidls/Document.webidl | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) 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/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 */ From 017e59b546298639f05a2c4fddf975b3edd527ee Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 9 Aug 2014 12:00:05 +0200 Subject: [PATCH 4/4] Implement Range.detach(). Incidentally, this allows dom/interfaces.html to actually run. --- src/components/script/dom/range.rs | 4 ++ .../script/dom/webidls/Range.webidl | 2 +- src/test/wpt/metadata/dom/interfaces.html.ini | 44 ++++++++++++++++++- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/components/script/dom/range.rs b/src/components/script/dom/range.rs index 31b6b70671e..3ed02410a1e 100644 --- a/src/components/script/dom/range.rs +++ b/src/components/script/dom/range.rs @@ -37,6 +37,10 @@ impl Range { } 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/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 +