diff options
Diffstat (limited to 'components/style/gecko/wrapper.rs')
-rw-r--r-- | components/style/gecko/wrapper.rs | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/components/style/gecko/wrapper.rs b/components/style/gecko/wrapper.rs index e774b1cfb33..db3188bd0bf 100644 --- a/components/style/gecko/wrapper.rs +++ b/components/style/gecko/wrapper.rs @@ -1822,13 +1822,22 @@ impl<'le> ::selectors::Element for GeckoElement<'le> { #[inline] fn parent_element(&self) -> Option<Self> { - // FIXME(emilio): This will need to jump across if the parent node is a - // shadow root to get the shadow host. let parent_node = self.as_node().parent_node(); parent_node.and_then(|n| n.as_element()) } #[inline] + fn parent_node_is_shadow_root(&self) -> bool { + self.as_node().parent_node().map_or(false, |p| p.is_shadow_root()) + } + + #[inline] + fn containing_shadow_host(&self) -> Option<Self> { + let shadow = self.containing_shadow()?; + Some(shadow.host()) + } + + #[inline] fn pseudo_element_originating_element(&self) -> Option<Self> { debug_assert!(self.implemented_pseudo_element().is_some()); self.closest_non_native_anonymous_ancestor() |