diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/document.rs | 1 | ||||
-rw-r--r-- | components/script/dom/element.rs | 12 | ||||
-rw-r--r-- | components/script/dom/node.rs | 11 | ||||
-rw-r--r-- | components/script/layout_wrapper.rs | 7 |
4 files changed, 19 insertions, 12 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 1ce504308f7..8211830e9eb 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -209,6 +209,7 @@ pub struct Document { is_html_document: bool, activity: Cell<DocumentActivity>, url: DOMRefCell<ServoUrl>, + #[ignore_heap_size_of = "defined in selectors"] quirks_mode: Cell<QuirksMode>, /// Caches for the getElement methods id_map: DOMRefCell<HashMap<Atom, Vec<JS<Element>>>>, diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index b4e7be3203a..3d7b0676fb8 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -86,7 +86,7 @@ use ref_filter_map::ref_filter_map; use script_layout_interface::message::ReflowQueryType; use script_thread::Runnable; use selectors::attr::{AttrSelectorOperation, NamespaceConstraint}; -use selectors::matching::{ElementSelectorFlags, MatchingContext, MatchingMode}; +use selectors::matching::{ElementSelectorFlags, LocalMatchingContext, MatchingContext, MatchingMode}; use selectors::matching::{HAS_EDGE_CHILD_SELECTOR, HAS_SLOW_SELECTOR, HAS_SLOW_SELECTOR_LATER_SIBLINGS}; use selectors::matching::{RelevantLinkStatus, matches_selector_list}; use servo_atoms::Atom; @@ -2063,7 +2063,9 @@ impl ElementMethods for Element { match SelectorParser::parse_author_origin_no_namespace(&selectors) { Err(_) => Err(Error::Syntax), Ok(selectors) => { - let mut ctx = MatchingContext::new(MatchingMode::Normal, None); + let quirks_mode = document_from_node(self).quirks_mode(); + let mut ctx = MatchingContext::new(MatchingMode::Normal, None, + quirks_mode); Ok(matches_selector_list(&selectors, &Root::from_ref(self), &mut ctx)) } } @@ -2082,7 +2084,9 @@ impl ElementMethods for Element { let root = self.upcast::<Node>(); for element in root.inclusive_ancestors() { if let Some(element) = Root::downcast::<Element>(element) { - let mut ctx = MatchingContext::new(MatchingMode::Normal, None); + let quirks_mode = document_from_node(self).quirks_mode(); + let mut ctx = MatchingContext::new(MatchingMode::Normal, None, + quirks_mode); if matches_selector_list(&selectors, &element, &mut ctx) { return Ok(Some(element)); } @@ -2432,7 +2436,7 @@ impl<'a> ::selectors::Element for Root<Element> { fn match_non_ts_pseudo_class<F>(&self, pseudo_class: &NonTSPseudoClass, - _: &mut MatchingContext, + _: &mut LocalMatchingContext<Self::Impl>, _: &RelevantLinkStatus, _: &mut F) -> bool diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index ec0a1117669..32cb8054ee7 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -347,11 +347,11 @@ impl<'a> Iterator for QuerySelectorIterator { fn next(&mut self) -> Option<Root<Node>> { let selectors = &self.selectors; - // TODO(cgaebel): Is it worth it to build a bloom filter here - // (instead of passing `None`)? Probably. - let mut ctx = MatchingContext::new(MatchingMode::Normal, None); - self.iterator.by_ref().filter_map(|node| { + // TODO(cgaebel): Is it worth it to build a bloom filter here + // (instead of passing `None`)? Probably. + let mut ctx = MatchingContext::new(MatchingMode::Normal, None, + node.owner_doc().quirks_mode()); if let Some(element) = Root::downcast(node) { if matches_selector_list(selectors, &element, &mut ctx) { return Some(Root::upcast(element)); @@ -720,7 +720,8 @@ impl Node { Err(_) => Err(Error::Syntax), // Step 3. Ok(selectors) => { - let mut ctx = MatchingContext::new(MatchingMode::Normal, None); + let mut ctx = MatchingContext::new(MatchingMode::Normal, None, + self.owner_doc().quirks_mode()); Ok(self.traverse_preorder().filter_map(Root::downcast).find(|element| { matches_selector_list(&selectors, element, &mut ctx) })) diff --git a/components/script/layout_wrapper.rs b/components/script/layout_wrapper.rs index bd4d74dcfec..15589619e17 100644 --- a/components/script/layout_wrapper.rs +++ b/components/script/layout_wrapper.rs @@ -50,7 +50,8 @@ use script_layout_interface::{OpaqueStyleAndLayoutData, StyleData}; use script_layout_interface::wrapper_traits::{DangerousThreadSafeLayoutNode, GetLayoutData, LayoutNode}; use script_layout_interface::wrapper_traits::{PseudoElementType, ThreadSafeLayoutElement, ThreadSafeLayoutNode}; use selectors::attr::{AttrSelectorOperation, NamespaceConstraint}; -use selectors::matching::{ElementSelectorFlags, MatchingContext, RelevantLinkStatus, VisitedHandlingMode}; +use selectors::matching::{ElementSelectorFlags, LocalMatchingContext, MatchingContext, RelevantLinkStatus}; +use selectors::matching::VisitedHandlingMode; use servo_atoms::Atom; use servo_url::ServoUrl; use std::fmt; @@ -721,7 +722,7 @@ impl<'le> ::selectors::Element for ServoLayoutElement<'le> { fn match_non_ts_pseudo_class<F>(&self, pseudo_class: &NonTSPseudoClass, - _: &mut MatchingContext, + _: &mut LocalMatchingContext<Self::Impl>, _: &RelevantLinkStatus, _: &mut F) -> bool @@ -1232,7 +1233,7 @@ impl<'le> ::selectors::Element for ServoThreadSafeLayoutElement<'le> { fn match_non_ts_pseudo_class<F>(&self, _: &NonTSPseudoClass, - _: &mut MatchingContext, + _: &mut LocalMatchingContext<Self::Impl>, _: &RelevantLinkStatus, _: &mut F) -> bool |