style/invalidation/
media_queries.rs1use crate::context::QuirksMode;
8use crate::derives::*;
9use crate::media_queries::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 EffectiveMediaQueryResults {
60 pub fn new() -> Self {
62 Self {
63 set: FxHashSet::default(),
64 }
65 }
66
67 pub fn clear(&mut self) {
69 self.set.clear()
70 }
71
72 pub fn was_effective<T>(&self, item: &T) -> bool
75 where
76 T: ToMediaListKey,
77 {
78 self.set.contains(&item.to_media_list_key())
79 }
80
81 pub fn saw_effective<T>(&mut self, item: &T)
83 where
84 T: ToMediaListKey,
85 {
86 self.set.insert(item.to_media_list_key());
89 }
90}
91
92pub struct PotentiallyEffectiveMediaRules;
95
96impl NestedRuleIterationCondition for PotentiallyEffectiveMediaRules {
97 fn process_import(
98 _: &SharedRwLockReadGuard,
99 _: &Device,
100 _: QuirksMode,
101 _: &CustomMediaMap,
102 _: &ImportRule,
103 ) -> bool {
104 true
105 }
106
107 fn process_media(
108 _: &SharedRwLockReadGuard,
109 _: &Device,
110 _: QuirksMode,
111 _: &CustomMediaMap,
112 _: &MediaRule,
113 ) -> bool {
114 true
115 }
116
117 fn process_document(
119 guard: &SharedRwLockReadGuard,
120 device: &Device,
121 quirks_mode: QuirksMode,
122 rule: &DocumentRule,
123 ) -> bool {
124 use crate::stylesheets::EffectiveRules;
125 EffectiveRules::process_document(guard, device, quirks_mode, rule)
126 }
127
128 fn process_supports(
130 guard: &SharedRwLockReadGuard,
131 device: &Device,
132 quirks_mode: QuirksMode,
133 rule: &SupportsRule,
134 ) -> bool {
135 use crate::stylesheets::EffectiveRules;
136 EffectiveRules::process_supports(guard, device, quirks_mode, rule)
137 }
138}