aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/document.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/document.rs')
-rw-r--r--components/script/dom/document.rs29
1 files changed, 17 insertions, 12 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 841b196ed3f..a8568eb04c7 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -901,9 +901,9 @@ impl<'a> DocumentMethods for JSRef<'a, Document> {
fn GetDoctype(self) -> Option<Temporary<DocumentType>> {
let node: JSRef<Node> = NodeCast::from_ref(self);
node.children()
- .filter_map(DocumentTypeCast::to_ref)
+ .map(|c| c.root())
+ .filter_map(|c| DocumentTypeCast::to_ref(c.r()).map(Temporary::from_rooted))
.next()
- .map(Temporary::from_rooted)
}
// http://dom.spec.whatwg.org/#dom-document-documentelement
@@ -1127,7 +1127,8 @@ impl<'a> DocumentMethods for JSRef<'a, Document> {
let mut title = String::new();
if let Some(title_element) = title_element {
for child in title_element.children() {
- if let Some(text) = TextCast::to_ref(child) {
+ let child = child.root();
+ if let Some(text) = TextCast::to_ref(child.r()) {
title.push_str(&text.characterdata().data());
}
}
@@ -1146,18 +1147,19 @@ impl<'a> DocumentMethods for JSRef<'a, Document> {
child.type_id() == NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLHeadElement))
});
head_node.map(|head| {
- let title_node = head.children().find(|child| {
- child.type_id() == NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTitleElement))
+ let title_node = head.children().map(|c| c.root()).find(|child| {
+ child.r().type_id() == NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTitleElement))
});
match title_node {
Some(ref title_node) => {
- for title_child in title_node.children() {
- assert!(title_node.RemoveChild(title_child).is_ok());
+ for title_child in title_node.r().children() {
+ let title_child = title_child.root();
+ assert!(title_node.r().RemoveChild(title_child.r()).is_ok());
}
if !title.is_empty() {
let new_text = self.CreateTextNode(title.clone()).root();
- assert!(title_node.AppendChild(NodeCast::from_ref(new_text.r())).is_ok());
+ assert!(title_node.r().AppendChild(NodeCast::from_ref(new_text.r())).is_ok());
}
},
None => {
@@ -1181,7 +1183,10 @@ impl<'a> DocumentMethods for JSRef<'a, Document> {
self.get_html_element().and_then(|root| {
let root = root.root();
let node: JSRef<Node> = NodeCast::from_ref(root.r());
- node.children().filter_map(HTMLHeadElementCast::to_ref).next().map(Temporary::from_rooted)
+ node.children()
+ .map(|c| c.root())
+ .filter_map(|c| HTMLHeadElementCast::to_ref(c.r()).map(Temporary::from_rooted))
+ .next()
})
}
@@ -1195,14 +1200,14 @@ impl<'a> DocumentMethods for JSRef<'a, Document> {
self.get_html_element().and_then(|root| {
let root = root.root();
let node: JSRef<Node> = NodeCast::from_ref(root.r());
- node.children().find(|child| {
- match child.type_id() {
+ node.children().map(|c| c.root()).find(|child| {
+ match child.r().type_id() {
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLBodyElement)) |
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLFrameSetElement)) => true,
_ => false
}
}).map(|node| {
- Temporary::from_rooted(HTMLElementCast::to_ref(node).unwrap())
+ Temporary::from_rooted(HTMLElementCast::to_ref(node.r()).unwrap())
})
})
}