Further changes required by Servo

This commit is contained in:
Oriol Brufau 2023-05-17 00:12:28 +02:00
parent e23a8bf0ad
commit b5dcb5c961
3 changed files with 14 additions and 3 deletions

View file

@ -488,12 +488,18 @@ where
Component::Class(ref class) if quirks_mode != QuirksMode::Quirks => { Component::Class(ref class) if quirks_mode != QuirksMode::Quirks => {
class.precomputed_hash() class.precomputed_hash()
}, },
Component::AttributeInNoNamespace { ref local_name, .. } if Impl::should_collect_attr_hash(local_name) => { Component::AttributeInNoNamespace { ref local_name, .. }
if Impl::should_collect_attr_hash(local_name) =>
{
// AttributeInNoNamespace is only used when local_name == // AttributeInNoNamespace is only used when local_name ==
// local_name_lower. // local_name_lower.
local_name.precomputed_hash() local_name.precomputed_hash()
}, },
Component::AttributeInNoNamespaceExists { ref local_name, ref local_name_lower, .. } => { Component::AttributeInNoNamespaceExists {
ref local_name,
ref local_name_lower,
..
} => {
// Only insert the local-name into the filter if it's all // Only insert the local-name into the filter if it's all
// lowercase. Otherwise we would need to test both hashes, and // lowercase. Otherwise we would need to test both hashes, and
// our data structures aren't really set up for that. // our data structures aren't really set up for that.
@ -503,7 +509,9 @@ where
local_name.precomputed_hash() local_name.precomputed_hash()
}, },
Component::AttributeOther(ref selector) => { Component::AttributeOther(ref selector) => {
if selector.local_name != selector.local_name_lower || !Impl::should_collect_attr_hash(&selector.local_name) { if selector.local_name != selector.local_name_lower ||
!Impl::should_collect_attr_hash(&selector.local_name)
{
continue; continue;
} }
selector.local_name.precomputed_hash() selector.local_name.precomputed_hash()

View file

@ -107,6 +107,7 @@ impl<E: TElement> PushedElement<E> {
/// We do this for attributes that are very common but not commonly used in /// We do this for attributes that are very common but not commonly used in
/// selectors. /// selectors.
#[inline] #[inline]
#[cfg(feature = "gecko")]
pub fn is_attr_name_excluded_from_filter(atom: &crate::Atom) -> bool { pub fn is_attr_name_excluded_from_filter(atom: &crate::Atom) -> bool {
*atom == atom!("class") || *atom == atom!("id") || *atom == atom!("style") *atom == atom!("class") || *atom == atom!("id") || *atom == atom!("style")
} }
@ -125,6 +126,7 @@ where
element.each_class(|class| f(class.get_hash())); element.each_class(|class| f(class.get_hash()));
#[cfg(feature = "gecko")]
if static_prefs::pref!("layout.css.bloom-filter-attribute-names.enabled") { if static_prefs::pref!("layout.css.bloom-filter-attribute-names.enabled") {
element.each_attr_name(|name| { element.each_attr_name(|name| {
if !is_attr_name_excluded_from_filter(name) { if !is_attr_name_excluded_from_filter(name) {

View file

@ -520,6 +520,7 @@ pub trait TElement:
} }
/// Internal iterator for the attribute names of this element. /// Internal iterator for the attribute names of this element.
#[cfg(feature = "gecko")]
fn each_attr_name<F>(&self, callback: F) fn each_attr_name<F>(&self, callback: F)
where where
F: FnMut(&AtomIdent); F: FnMut(&AtomIdent);