diff options
Diffstat (limited to 'components')
-rw-r--r-- | components/script/dom/element.rs | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 3e8dd5f95b3..4fe4f20531c 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -87,6 +87,7 @@ use net_traits::request::CorsSettings; use ref_filter_map::ref_filter_map; use script_layout_interface::message::ReflowGoal; use script_thread::ScriptThread; +use selectors::Element as SelectorsElement; use selectors::attr::{AttrSelectorOperation, NamespaceConstraint, CaseSensitivity}; use selectors::matching::{ElementSelectorFlags, LocalMatchingContext, MatchingContext, MatchingMode}; use selectors::matching::{HAS_EDGE_CHILD_SELECTOR, HAS_SLOW_SELECTOR, HAS_SLOW_SELECTOR_LATER_SIBLINGS}; @@ -2188,10 +2189,12 @@ impl ElementMethods for Element { Err(_) => Err(Error::Syntax), Ok(selectors) => { let quirks_mode = document_from_node(self).quirks_mode(); + let root = DomRoot::from_ref(self); // FIXME(bholley): Consider an nth-index cache here. let mut ctx = MatchingContext::new(MatchingMode::Normal, None, None, quirks_mode); - Ok(matches_selector_list(&selectors, &DomRoot::from_ref(self), &mut ctx)) + ctx.scope_element = Some(root.opaque()); + Ok(matches_selector_list(&selectors, &root, &mut ctx)) } } } @@ -2206,6 +2209,7 @@ impl ElementMethods for Element { match SelectorParser::parse_author_origin_no_namespace(&selectors) { Err(_) => Err(Error::Syntax), Ok(selectors) => { + let self_root = DomRoot::from_ref(self); let root = self.upcast::<Node>(); for element in root.inclusive_ancestors() { if let Some(element) = DomRoot::downcast::<Element>(element) { @@ -2213,6 +2217,7 @@ impl ElementMethods for Element { // FIXME(bholley): Consider an nth-index cache here. let mut ctx = MatchingContext::new(MatchingMode::Normal, None, None, quirks_mode); + ctx.scope_element = Some(self_root.opaque()); if matches_selector_list(&selectors, &element, &mut ctx) { return Ok(Some(element)); } @@ -2497,7 +2502,7 @@ impl VirtualMethods for Element { } } -impl<'a> ::selectors::Element for DomRoot<Element> { +impl<'a> SelectorsElement for DomRoot<Element> { type Impl = SelectorImpl; fn opaque(&self) -> ::selectors::OpaqueElement { |