aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/node.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/node.rs')
-rw-r--r--components/script/dom/node.rs38
1 files changed, 22 insertions, 16 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 86d952146a4..9a683f00698 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -293,7 +293,7 @@ impl Node {
let parent_in_shadow_tree = self.is_in_shadow_tree();
let parent_is_connected = self.is_connected();
- for node in new_child.traverse_preorder(/* shadow including */ false) {
+ for node in new_child.traverse_preorder(ShadowIncluding::No) {
if parent_in_shadow_tree {
if let Some(shadow_root) = self.downcast::<ShadowRoot>() {
node.set_owner_shadow_root(&*shadow_root);
@@ -351,7 +351,7 @@ impl Node {
child.composed_parent_node.set(None);
self.children_count.set(self.children_count.get() - 1);
- for node in child.traverse_preorder(/* shadow including */ true) {
+ for node in child.traverse_preorder(ShadowIncluding::Yes) {
// Out-of-document elements never have the descendants flag set.
node.set_flag(
NodeFlags::IS_IN_DOC |
@@ -362,7 +362,7 @@ impl Node {
false,
);
}
- for node in child.traverse_preorder(/* shadow including */ true) {
+ for node in child.traverse_preorder(ShadowIncluding::Yes) {
// This needs to be in its own loop, because unbind_from_tree may
// rely on the state of IS_IN_DOC of the context node's descendants,
// e.g. when removing a <form>.
@@ -625,7 +625,7 @@ impl Node {
}
/// Iterates over this node and all its descendants, in preorder.
- pub fn traverse_preorder(&self, shadow_including: bool) -> TreeIterator {
+ pub fn traverse_preorder(&self, shadow_including: ShadowIncluding) -> TreeIterator {
TreeIterator::new(self, shadow_including)
}
@@ -873,7 +873,7 @@ impl Node {
self.owner_doc().quirks_mode(),
);
Ok(self
- .traverse_preorder(/* shadow including */ false)
+ .traverse_preorder(ShadowIncluding::No)
.filter_map(DomRoot::downcast)
.find(|element| matches_selector_list(&selectors, element, &mut ctx)))
},
@@ -891,7 +891,7 @@ impl Node {
Err(_) => Err(Error::Syntax),
// Step 3.
Ok(selectors) => {
- let mut descendants = self.traverse_preorder(/* shadow including */ false);
+ let mut descendants = self.traverse_preorder(ShadowIncluding::No);
// Skip the root of the tree.
assert!(&*descendants.next().unwrap() == self);
Ok(QuerySelectorIterator::new(descendants, selectors))
@@ -1510,6 +1510,13 @@ where
}
}
+/// Whether a tree traversal should pass shadow tree boundaries.
+#[derive(PartialEq)]
+pub enum ShadowIncluding {
+ No,
+ Yes,
+}
+
pub struct TreeIterator {
current: Option<DomRoot<Node>>,
depth: usize,
@@ -1517,11 +1524,11 @@ pub struct TreeIterator {
}
impl TreeIterator {
- fn new(root: &Node, shadow_including: bool) -> TreeIterator {
+ fn new(root: &Node, shadow_including: ShadowIncluding) -> TreeIterator {
TreeIterator {
current: Some(DomRoot::from_ref(root)),
depth: 0,
- shadow_including,
+ shadow_including: shadow_including == ShadowIncluding::Yes,
}
}
@@ -1655,11 +1662,11 @@ impl Node {
// Step 3.
if &*old_doc != document {
// Step 3.1.
- for descendant in node.traverse_preorder(/* shadow including */ true) {
+ for descendant in node.traverse_preorder(ShadowIncluding::Yes) {
descendant.set_owner_doc(document);
}
for descendant in node
- .traverse_preorder(/* shadow including */ true)
+ .traverse_preorder(ShadowIncluding::Yes)
.filter_map(|d| d.as_custom_element())
{
// Step 3.2.
@@ -1669,7 +1676,7 @@ impl Node {
None,
);
}
- for descendant in node.traverse_preorder(/* shadow including */ true) {
+ for descendant in node.traverse_preorder(ShadowIncluding::Yes) {
// Step 3.3.
vtable_for(&descendant).adopting_steps(&old_doc);
}
@@ -1890,7 +1897,7 @@ impl Node {
parent.add_child(*kid, child);
// Step 7.7.
for descendant in kid
- .traverse_preorder(/* shadow including */ true)
+ .traverse_preorder(ShadowIncluding::Yes)
.filter_map(DomRoot::downcast::<Element>)
{
// Step 7.7.2.
@@ -2335,9 +2342,8 @@ impl NodeMethods for Node {
fn GetTextContent(&self) -> Option<DOMString> {
match self.type_id() {
NodeTypeId::DocumentFragment(_) | NodeTypeId::Element(..) => {
- let content = Node::collect_text_contents(
- self.traverse_preorder(/* shadow including */ false),
- );
+ let content =
+ Node::collect_text_contents(self.traverse_preorder(ShadowIncluding::No));
Some(content)
},
NodeTypeId::CharacterData(..) => {
@@ -3190,7 +3196,7 @@ where
let elem_node = elem.upcast::<Node>();
let mut head: usize = 0;
- for node in tree_root.traverse_preorder(/* shadow including */ false) {
+ for node in tree_root.traverse_preorder(ShadowIncluding::No) {
let head_node = DomRoot::upcast::<Node>(DomRoot::from_ref(&*self[head]));
if head_node == node {
head += 1;