diff options
-rw-r--r-- | components/style/gecko/pseudo_element.rs | 9 | ||||
-rw-r--r-- | components/style/stylist.rs | 6 | ||||
-rw-r--r-- | ports/geckolib/glue.rs | 6 |
3 files changed, 17 insertions, 4 deletions
diff --git a/components/style/gecko/pseudo_element.rs b/components/style/gecko/pseudo_element.rs index b15e17e6f38..93da2b589d0 100644 --- a/components/style/gecko/pseudo_element.rs +++ b/components/style/gecko/pseudo_element.rs @@ -49,6 +49,15 @@ impl PseudoElement { PseudoElementCascadeType::Lazy } + /// Whether the pseudo-element should inherit from the default computed + /// values instead of from the parent element. + /// + /// This is not the common thing, but there are some pseudos (namely: + /// ::backdrop), that shouldn't inherit from the parent element. + pub fn inherits_from_default_values(&self) -> bool { + !matches!(*self, PseudoElement::Backdrop) + } + /// Gets the canonical index of this eagerly-cascaded pseudo-element. #[inline] pub fn eager_index(&self) -> usize { diff --git a/components/style/stylist.rs b/components/style/stylist.rs index 24f9ec31b17..3189defd7b1 100644 --- a/components/style/stylist.rs +++ b/components/style/stylist.rs @@ -628,7 +628,7 @@ impl Stylist { guards: &StylesheetGuards, element: &E, pseudo: &PseudoElement, - parent: &Arc<ComputedValues>, + parent_style: &ComputedValues, font_metrics: &FontMetricsProvider) -> Option<ComputedStyle> where E: TElement, @@ -647,8 +647,8 @@ impl Stylist { properties::cascade(&self.device, &rule_node, guards, - Some(&**parent), - Some(&**parent), + Some(parent_style), + Some(parent_style), None, &RustLogReporter, font_metrics, diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 4a1da29a071..572a523a59d 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -1203,7 +1203,11 @@ fn get_pseudo_style(guard: &SharedRwLockReadGuard, PseudoElementCascadeType::Precomputed => unreachable!("No anonymous boxes"), PseudoElementCascadeType::Lazy => { let d = doc_data.borrow_mut(); - let base = styles.primary.values(); + let base = if pseudo.inherits_from_default_values() { + d.default_computed_values() + } else { + styles.primary.values() + }; let guards = StylesheetGuards::same(guard); let metrics = get_metrics_provider_for_product(); d.stylist.lazily_compute_pseudo_element_style(&guards, |