diff options
-rw-r--r-- | components/style/invalidation/mod.rs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/components/style/invalidation/mod.rs b/components/style/invalidation/mod.rs index b720126b405..864f53db93b 100644 --- a/components/style/invalidation/mod.rs +++ b/components/style/invalidation/mod.rs @@ -182,6 +182,9 @@ impl StylesheetInvalidationSet { } /// Collects invalidations for a given list of CSS rules. + /// + /// TODO(emilio): Convert stylesheet.effective_rules into an iterator to + /// share code. This needs the ability to stop ASAP. fn collect_invalidations_for_rule_list( &mut self, rules: &CssRules, @@ -294,8 +297,20 @@ impl StylesheetInvalidationSet { Namespace(..) => { // Irrelevant to which selector scopes match. } - Import(..) => { - // We'll visit the appropriate stylesheet if/when it matters. + // NB: We need to do it here, we won't visit the appropriate sheet + // otherwise! + Import(ref lock) => { + let import_rule = lock.read_with(guard); + + let mq = import_rule.stylesheet.media.read_with(guard); + if !mq.evaluate(stylist.device(), stylist.quirks_mode()) { + return true; + } + + self.collect_invalidations_for_rule_list( + import_rule.stylesheet.rules.read_with(guard), + stylist, + guard); } Media(ref lock) => { let media_rule = lock.read_with(guard); |