diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-04-11 20:36:31 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-04-11 20:36:31 +0530 |
commit | f9f3b7529ba2c66b6203b0742c4cd89d03ddd772 (patch) | |
tree | 4d071f72b90cf17eb3406681e233b7abe22144c0 | |
parent | 6939ff53c40d31fe96acca9f0e62641a59dbc086 (diff) | |
parent | 2c9b00ef6b5e0bc12acf100fd653b4612c2e5c56 (diff) | |
download | servo-f9f3b7529ba2c66b6203b0742c4cd89d03ddd772.tar.gz servo-f9f3b7529ba2c66b6203b0742c4cd89d03ddd772.zip |
Auto merge of #10513 - frewsxcv:is_the_html_body_element, r=Ms2ger
Extract out 'is the html body element' CSSOM concept.
<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10513)
<!-- Reviewable:end -->
-rw-r--r-- | components/script/dom/htmlbodyelement.rs | 10 | ||||
-rw-r--r-- | components/script/dom/node.rs | 8 |
2 files changed, 12 insertions, 6 deletions
diff --git a/components/script/dom/htmlbodyelement.rs b/components/script/dom/htmlbodyelement.rs index 8ac184ea51d..ca133b88dbb 100644 --- a/components/script/dom/htmlbodyelement.rs +++ b/components/script/dom/htmlbodyelement.rs @@ -47,6 +47,16 @@ impl HTMLBodyElement { let element = HTMLBodyElement::new_inherited(localName, prefix, document); Node::reflect_node(box element, document, HTMLBodyElementBinding::Wrap) } + + /// https://drafts.csswg.org/cssom-view/#the-html-body-element + pub fn is_the_html_body_element(&self) -> bool { + let self_node = self.upcast::<Node>(); + let root_elem = self.upcast::<Element>().root_element(); + let root_node = root_elem.upcast::<Node>(); + root_node.is_parent_of(self_node) && + self_node.preceding_siblings().all(|n| !n.is::<HTMLBodyElement>()) + } + } impl HTMLBodyElementMethods for HTMLBodyElement { diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 748b7b8249e..1e71966e4e7 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -594,12 +594,8 @@ impl Node { let html_element = document.GetDocumentElement(); - let is_body_element = html_element.r().and_then(|root| { - let node = root.upcast::<Node>(); - node.children().find(|child| { child.is::<HTMLBodyElement>() }).map(|node| { - *node.r() == *self - }) - }).unwrap_or(false); + let is_body_element = self.downcast::<HTMLBodyElement>() + .map_or(false, |e| e.is_the_html_body_element()); let scroll_area = window.scroll_area_query(self.to_trusted_node_address()); |