style: Don't look at user and author rules if the element can't be affected by them.

Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
This commit is contained in:
Emilio Cobos Álvarez 2017-10-21 18:55:27 +02:00
parent 1b32709d95
commit bd2a82334b
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C
2 changed files with 15 additions and 8 deletions

View file

@ -22,6 +22,7 @@ use selectors::attr::CaseSensitivity;
use selectors::matching::{MatchingContext, MatchingMode, VisitedHandlingMode};
use selectors::matching::matches_selector;
use smallvec::SmallVec;
use stylesheets::origin::{Origin, OriginSet};
use stylist::Stylist;
#[derive(Debug, PartialEq)]
@ -188,10 +189,16 @@ where
invalidates_self: false,
};
// TODO(emilio): We could use the cut_off_inheritance from XBL to
// skip user and author stuff in here if it's true.
self.shared_context.stylist.each_invalidation_map(|invalidation_map| {
collector.collect_dependencies_in_invalidation_map(invalidation_map);
let document_origins = if self.cut_off_inheritance {
Origin::UserAgent.into()
} else {
OriginSet::all()
};
self.shared_context.stylist.each_invalidation_map(|invalidation_map, origin| {
if document_origins.contains(origin.into()) {
collector.collect_dependencies_in_invalidation_map(invalidation_map);
}
});
for stylist in self.xbl_stylists {
@ -199,7 +206,7 @@ where
// figure out what to do with the quirks mode mismatches
// (that is, when bug 1406875 is properly fixed).
collector.quirks_mode = stylist.quirks_mode();
stylist.each_invalidation_map(|invalidation_map| {
stylist.each_invalidation_map(|invalidation_map, _| {
collector.collect_dependencies_in_invalidation_map(invalidation_map);
})
}

View file

@ -486,10 +486,10 @@ impl Stylist {
/// create a whole new iterator type.
pub fn each_invalidation_map<'a, F>(&'a self, mut f: F)
where
F: FnMut(&'a InvalidationMap)
F: FnMut(&'a InvalidationMap, Origin)
{
for (data, _) in self.cascade_data.iter_origins() {
f(&data.invalidation_map)
for (data, origin) in self.cascade_data.iter_origins() {
f(&data.invalidation_map, origin)
}
}