diff options
Diffstat (limited to 'components/layout_thread/dom_wrapper.rs')
-rw-r--r-- | components/layout_thread/dom_wrapper.rs | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/components/layout_thread/dom_wrapper.rs b/components/layout_thread/dom_wrapper.rs index d738ef1151f..a0c1a8b7a61 100644 --- a/components/layout_thread/dom_wrapper.rs +++ b/components/layout_thread/dom_wrapper.rs @@ -715,6 +715,14 @@ impl<'le> TElement for ServoLayoutElement<'le> { .map(ServoShadowRoot::from_layout_js) } } + + fn local_name(&self) -> &LocalName { + self.element.local_name() + } + + fn namespace(&self) -> &Namespace { + self.element.namespace() + } } impl<'le> PartialEq for ServoLayoutElement<'le> { @@ -879,13 +887,19 @@ impl<'le> ::selectors::Element for ServoLayoutElement<'le> { } #[inline] - fn local_name(&self) -> &LocalName { - self.element.local_name() + fn has_local_name(&self, name: &LocalName) -> bool { + self.element.local_name() == name } #[inline] - fn namespace(&self) -> &Namespace { - self.element.namespace() + fn has_namespace(&self, ns: &Namespace) -> bool { + self.element.namespace() == ns + } + + #[inline] + fn is_same_type(&self, other: &Self) -> bool { + self.element.local_name() == other.element.local_name() && + self.element.namespace() == other.element.namespace() } fn is_pseudo_element(&self) -> bool { @@ -1266,8 +1280,8 @@ where loop { let next_node = if let Some(ref node) = current_node { if let Some(element) = node.as_element() { - if element.local_name() == &local_name!("summary") && - element.namespace() == &ns!(html) + if element.has_local_name(&local_name!("summary")) && + element.has_namespace(&ns!(html)) { self.current_node = None; return Some(node.clone()); @@ -1286,8 +1300,10 @@ where let node = self.current_node.clone(); let node = node.and_then(|node| { if node.is_element() && - node.as_element().unwrap().local_name() == &local_name!("summary") && - node.as_element().unwrap().namespace() == &ns!(html) + node.as_element() + .unwrap() + .has_local_name(&local_name!("summary")) && + node.as_element().unwrap().has_namespace(&ns!(html)) { unsafe { node.dangerous_next_sibling() } } else { @@ -1437,13 +1453,19 @@ impl<'le> ::selectors::Element for ServoThreadSafeLayoutElement<'le> { } #[inline] - fn local_name(&self) -> &LocalName { - self.element.local_name() + fn has_local_name(&self, name: &LocalName) -> bool { + self.element.local_name() == name } #[inline] - fn namespace(&self) -> &Namespace { - self.element.namespace() + fn has_namespace(&self, ns: &Namespace) -> bool { + self.element.namespace() == ns + } + + #[inline] + fn is_same_type(&self, other: &Self) -> bool { + self.element.local_name() == other.element.local_name() && + self.element.namespace() == other.element.namespace() } fn match_pseudo_element( |