aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/domimplementation.rs
diff options
context:
space:
mode:
authorJulian Viereck <julian.viereck@gmail.com>2014-07-05 12:49:37 +0200
committerJulian Viereck <julian.viereck@gmail.com>2014-07-13 16:14:45 +0200
commit88b3998d59bf435c67e30ca9a0c16e273e114361 (patch)
tree2db2a8991700651c79ef537cc889b8ece5445012 /src/components/script/dom/domimplementation.rs
parent07db2d32732225b6dff73e22213434456fde640f (diff)
downloadservo-88b3998d59bf435c67e30ca9a0c16e273e114361.tar.gz
servo-88b3998d59bf435c67e30ca9a0c16e273e114361.zip
Fix DOMImplementation should be linked to the Document
This fixes issues 2230.
Diffstat (limited to 'src/components/script/dom/domimplementation.rs')
-rw-r--r--src/components/script/dom/domimplementation.rs24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/components/script/dom/domimplementation.rs b/src/components/script/dom/domimplementation.rs
index f8460275705..2ab75dd5f11 100644
--- a/src/components/script/dom/domimplementation.rs
+++ b/src/components/script/dom/domimplementation.rs
@@ -16,25 +16,26 @@ use dom::htmlhtmlelement::HTMLHtmlElement;
use dom::htmltitleelement::HTMLTitleElement;
use dom::node::{Node, NodeMethods};
use dom::text::Text;
-use dom::window::{Window, WindowMethods};
use servo_util::str::DOMString;
#[deriving(Encodable)]
pub struct DOMImplementation {
- owner: JS<Window>,
+ document: JS<Document>,
reflector_: Reflector,
}
impl DOMImplementation {
- pub fn new_inherited(owner: &JSRef<Window>) -> DOMImplementation {
+ pub fn new_inherited(document: &JSRef<Document>) -> DOMImplementation {
DOMImplementation {
- owner: JS::from_rooted(owner),
+ document: JS::from_rooted(document),
reflector_: Reflector::new(),
}
}
- pub fn new(owner: &JSRef<Window>) -> Temporary<DOMImplementation> {
- reflect_dom_object(box DOMImplementation::new_inherited(owner), owner,
+ pub fn new(document: &JSRef<Document>) -> Temporary<DOMImplementation> {
+ let window = document.window.root();
+ reflect_dom_object(box DOMImplementation::new_inherited(document),
+ &*window,
DOMImplementationBinding::Wrap)
}
}
@@ -63,8 +64,7 @@ impl<'a> DOMImplementationMethods for JSRef<'a, DOMImplementation> {
Name => Err(NamespaceError),
// Step 3.
QName => {
- let owner = self.owner.root();
- let document = owner.deref().Document().root();
+ let document = self.document.root();
Ok(DocumentType::new(qname, Some(pubid), Some(sysid), &*document))
}
}
@@ -73,7 +73,8 @@ impl<'a> DOMImplementationMethods for JSRef<'a, DOMImplementation> {
// http://dom.spec.whatwg.org/#dom-domimplementation-createdocument
fn CreateDocument(&self, namespace: Option<DOMString>, qname: DOMString,
maybe_doctype: Option<JSRef<DocumentType>>) -> Fallible<Temporary<Document>> {
- let win = self.owner.root();
+ let doc = self.document.root();
+ let win = doc.window.root();
// Step 1.
let doc = Document::new(&win.root_ref(), None, NonHTMLDocument, None).root();
@@ -117,10 +118,11 @@ impl<'a> DOMImplementationMethods for JSRef<'a, DOMImplementation> {
// http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument
fn CreateHTMLDocument(&self, title: Option<DOMString>) -> Temporary<Document> {
- let owner = self.owner.root();
+ let document = self.document.root();
+ let win = document.window.root();
// Step 1-2.
- let doc = Document::new(&owner.root_ref(), None, HTMLDocument, None).root();
+ let doc = Document::new(&win.root_ref(), None, HTMLDocument, None).root();
let doc_node: &JSRef<Node> = NodeCast::from_ref(&*doc);
{