style/invalidation/
media_queries.rs1use crate::context::QuirksMode;
8use crate::media_queries::Device;
9use crate::shared_lock::SharedRwLockReadGuard;
10use crate::stylesheets::{DocumentRule, ImportRule, MediaRule};
11use crate::stylesheets::{NestedRuleIterationCondition, StylesheetContents, SupportsRule};
12use fxhash::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 _: &ImportRule,
101 ) -> bool {
102 true
103 }
104
105 fn process_media(_: &SharedRwLockReadGuard, _: &Device, _: QuirksMode, _: &MediaRule) -> bool {
106 true
107 }
108
109 fn process_document(
111 guard: &SharedRwLockReadGuard,
112 device: &Device,
113 quirks_mode: QuirksMode,
114 rule: &DocumentRule,
115 ) -> bool {
116 use crate::stylesheets::EffectiveRules;
117 EffectiveRules::process_document(guard, device, quirks_mode, rule)
118 }
119
120 fn process_supports(
122 guard: &SharedRwLockReadGuard,
123 device: &Device,
124 quirks_mode: QuirksMode,
125 rule: &SupportsRule,
126 ) -> bool {
127 use crate::stylesheets::EffectiveRules;
128 EffectiveRules::process_supports(guard, device, quirks_mode, rule)
129 }
130}