style/invalidation/
media_queries.rs1use crate::context::QuirksMode;
8use crate::derives::*;
9use crate::device::Device;
10use crate::shared_lock::SharedRwLockReadGuard;
11use crate::stylesheets::{CustomMediaMap, DocumentRule, ImportRule, MediaRule};
12use crate::stylesheets::{NestedRuleIterationCondition, StylesheetContents, SupportsRule};
13use rustc_hash::FxHashSet;
14
15#[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq)]
28pub struct MediaListKey(usize);
29
30impl MediaListKey {
31 pub fn from_raw(k: usize) -> Self {
33 MediaListKey(k)
34 }
35}
36
37pub trait ToMediaListKey: Sized {
40 fn to_media_list_key(&self) -> MediaListKey {
43 MediaListKey(self as *const Self as usize)
44 }
45}
46
47impl ToMediaListKey for StylesheetContents {}
48impl ToMediaListKey for ImportRule {}
49impl ToMediaListKey for MediaRule {}
50
51#[derive(Clone, Debug, MallocSizeOf, PartialEq)]
54pub struct EffectiveMediaQueryResults {
55 set: FxHashSet<MediaListKey>,
57}
58
59impl Default for EffectiveMediaQueryResults {
60 fn default() -> Self {
61 Self::new()
62 }
63}
64
65impl EffectiveMediaQueryResults {
66 pub fn new() -> Self {
68 Self {
69 set: FxHashSet::default(),
70 }
71 }
72
73 pub fn clear(&mut self) {
75 self.set.clear()
76 }
77
78 pub fn was_effective<T>(&self, item: &T) -> bool
81 where
82 T: ToMediaListKey,
83 {
84 self.set.contains(&item.to_media_list_key())
85 }
86
87 pub fn saw_effective<T>(&mut self, item: &T)
89 where
90 T: ToMediaListKey,
91 {
92 self.set.insert(item.to_media_list_key());
95 }
96}
97
98pub struct PotentiallyEffectiveMediaRules;
101
102impl NestedRuleIterationCondition for PotentiallyEffectiveMediaRules {
103 fn process_import(
104 _: &SharedRwLockReadGuard,
105 _: &Device,
106 _: QuirksMode,
107 _: &CustomMediaMap,
108 _: &ImportRule,
109 ) -> bool {
110 true
111 }
112
113 fn process_media(
114 _: &SharedRwLockReadGuard,
115 _: &Device,
116 _: QuirksMode,
117 _: &CustomMediaMap,
118 _: &MediaRule,
119 ) -> bool {
120 true
121 }
122
123 fn process_document(
125 guard: &SharedRwLockReadGuard,
126 device: &Device,
127 quirks_mode: QuirksMode,
128 rule: &DocumentRule,
129 ) -> bool {
130 use crate::stylesheets::EffectiveRules;
131 EffectiveRules::process_document(guard, device, quirks_mode, rule)
132 }
133
134 fn process_supports(
136 guard: &SharedRwLockReadGuard,
137 device: &Device,
138 quirks_mode: QuirksMode,
139 rule: &SupportsRule,
140 ) -> bool {
141 use crate::stylesheets::EffectiveRules;
142 EffectiveRules::process_supports(guard, device, quirks_mode, rule)
143 }
144}