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