Bug 1807645 - Fix container units on ::backdrop. r=emilio

Differential Revision: https://phabricator.services.mozilla.com/D165542
This commit is contained in:
Oriol Brufau 2022-12-27 14:34:27 +00:00
parent b2f82ca462
commit 4c86c51a4f
7 changed files with 27 additions and 11 deletions

View file

@ -56,6 +56,7 @@ pub fn cascade<E>(
pseudo: Option<&PseudoElement>, pseudo: Option<&PseudoElement>,
rule_node: &StrongRuleNode, rule_node: &StrongRuleNode,
guards: &StylesheetGuards, guards: &StylesheetGuards,
originating_element_style: Option<&ComputedValues>,
parent_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>,
parent_style_ignoring_first_line: Option<&ComputedValues>, parent_style_ignoring_first_line: Option<&ComputedValues>,
layout_parent_style: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>,
@ -74,6 +75,7 @@ where
pseudo, pseudo,
rule_node, rule_node,
guards, guards,
originating_element_style,
parent_style, parent_style,
parent_style_ignoring_first_line, parent_style_ignoring_first_line,
layout_parent_style, layout_parent_style,
@ -174,6 +176,7 @@ fn cascade_rules<E>(
pseudo: Option<&PseudoElement>, pseudo: Option<&PseudoElement>,
rule_node: &StrongRuleNode, rule_node: &StrongRuleNode,
guards: &StylesheetGuards, guards: &StylesheetGuards,
originating_element_style: Option<&ComputedValues>,
parent_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>,
parent_style_ignoring_first_line: Option<&ComputedValues>, parent_style_ignoring_first_line: Option<&ComputedValues>,
layout_parent_style: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>,
@ -197,6 +200,7 @@ where
rule_node, rule_node,
guards, guards,
DeclarationIterator::new(rule_node, guards, pseudo), DeclarationIterator::new(rule_node, guards, pseudo),
originating_element_style,
parent_style, parent_style,
parent_style_ignoring_first_line, parent_style_ignoring_first_line,
layout_parent_style, layout_parent_style,
@ -233,6 +237,7 @@ pub fn apply_declarations<'a, E, I>(
rules: &StrongRuleNode, rules: &StrongRuleNode,
guards: &StylesheetGuards, guards: &StylesheetGuards,
iter: I, iter: I,
originating_element_style: Option<&ComputedValues>,
parent_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>,
parent_style_ignoring_first_line: Option<&ComputedValues>, parent_style_ignoring_first_line: Option<&ComputedValues>,
layout_parent_style: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>,
@ -247,6 +252,10 @@ where
E: TElement, E: TElement,
I: Iterator<Item = (&'a PropertyDeclaration, CascadePriority)>, I: Iterator<Item = (&'a PropertyDeclaration, CascadePriority)>,
{ {
debug_assert_eq!(
originating_element_style.is_some(),
element.is_some() && pseudo.is_some()
);
debug_assert!(layout_parent_style.is_none() || parent_style.is_some()); debug_assert!(layout_parent_style.is_none() || parent_style.is_some());
debug_assert_eq!( debug_assert_eq!(
parent_style.is_some(), parent_style.is_some(),
@ -283,7 +292,7 @@ where
let is_root_element = pseudo.is_none() && element.map_or(false, |e| e.is_root()); let is_root_element = pseudo.is_none() && element.map_or(false, |e| e.is_root());
let container_size_query = let container_size_query =
ContainerSizeQuery::for_option_element(element, pseudo.and(parent_style)); ContainerSizeQuery::for_option_element(element, originating_element_style);
let mut context = computed::Context::new( let mut context = computed::Context::new(
// We'd really like to own the rules here to avoid refcount traffic, but // We'd really like to own the rules here to avoid refcount traffic, but
@ -340,6 +349,7 @@ where
if let Some(visited_rules) = visited_rules { if let Some(visited_rules) = visited_rules {
cascade.compute_visited_style_if_needed( cascade.compute_visited_style_if_needed(
element, element,
originating_element_style,
parent_style, parent_style,
parent_style_ignoring_first_line, parent_style_ignoring_first_line,
layout_parent_style, layout_parent_style,
@ -726,6 +736,7 @@ impl<'a, 'b: 'a> Cascade<'a, 'b> {
fn compute_visited_style_if_needed<E>( fn compute_visited_style_if_needed<E>(
&mut self, &mut self,
element: Option<E>, element: Option<E>,
originating_element_style: Option<&ComputedValues>,
parent_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>,
parent_style_ignoring_first_line: Option<&ComputedValues>, parent_style_ignoring_first_line: Option<&ComputedValues>,
layout_parent_style: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>,
@ -756,6 +767,7 @@ impl<'a, 'b: 'a> Cascade<'a, 'b> {
self.context.builder.pseudo, self.context.builder.pseudo,
visited_rules, visited_rules,
guards, guards,
visited_parent!(originating_element_style),
visited_parent!(parent_style), visited_parent!(parent_style),
visited_parent!(parent_style_ignoring_first_line), visited_parent!(parent_style_ignoring_first_line),
visited_parent!(layout_parent_style), visited_parent!(layout_parent_style),

View file

@ -349,6 +349,7 @@ where
pseudo, pseudo,
inputs, inputs,
&self.context.shared.guards, &self.context.shared.guards,
pseudo.and(parent_style),
parent_style, parent_style,
parent_style, parent_style,
layout_parent_style, layout_parent_style,

View file

@ -894,8 +894,9 @@ impl Stylist {
}, },
pseudo, pseudo,
guards, guards,
/* originating_element_style */ None,
parent, parent,
None, /* element */ None,
) )
} }
@ -988,6 +989,7 @@ impl Stylist {
cascade_inputs, cascade_inputs,
pseudo, pseudo,
guards, guards,
Some(originating_element_style),
Some(parent_style), Some(parent_style),
Some(element), Some(element),
)) ))
@ -1002,6 +1004,7 @@ impl Stylist {
inputs: CascadeInputs, inputs: CascadeInputs,
pseudo: &PseudoElement, pseudo: &PseudoElement,
guards: &StylesheetGuards, guards: &StylesheetGuards,
originating_element_style: Option<&ComputedValues>,
parent_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>,
element: Option<E>, element: Option<E>,
) -> Arc<ComputedValues> ) -> Arc<ComputedValues>
@ -1025,6 +1028,7 @@ impl Stylist {
Some(pseudo), Some(pseudo),
inputs, inputs,
guards, guards,
originating_element_style,
parent_style, parent_style,
parent_style, parent_style,
parent_style, parent_style,
@ -1051,6 +1055,7 @@ impl Stylist {
pseudo: Option<&PseudoElement>, pseudo: Option<&PseudoElement>,
inputs: CascadeInputs, inputs: CascadeInputs,
guards: &StylesheetGuards, guards: &StylesheetGuards,
originating_element_style: Option<&ComputedValues>,
parent_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>,
parent_style_ignoring_first_line: Option<&ComputedValues>, parent_style_ignoring_first_line: Option<&ComputedValues>,
layout_parent_style: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>,
@ -1086,6 +1091,7 @@ impl Stylist {
pseudo, pseudo,
inputs.rules.as_ref().unwrap_or(self.rule_tree.root()), inputs.rules.as_ref().unwrap_or(self.rule_tree.root()),
guards, guards,
originating_element_style,
parent_style, parent_style,
parent_style_ignoring_first_line, parent_style_ignoring_first_line,
layout_parent_style, layout_parent_style,
@ -1504,6 +1510,7 @@ impl Stylist {
), ),
) )
}), }),
/* originating_element_style */ None,
Some(parent_style), Some(parent_style),
Some(parent_style), Some(parent_style),
Some(parent_style), Some(parent_style),

View file

@ -4131,6 +4131,7 @@ fn get_pseudo_style(
inputs, inputs,
pseudo, pseudo,
&guards, &guards,
Some(styles.primary()),
Some(inherited_styles), Some(inherited_styles),
Some(element), Some(element),
) )
@ -5942,6 +5943,10 @@ pub extern "C" fn Servo_ReparentStyle(
pseudo.as_ref(), pseudo.as_ref(),
inputs, inputs,
&StylesheetGuards::same(&guard), &StylesheetGuards::same(&guard),
match element.is_some() && pseudo.is_some() {
true => Some(parent_style),
false => None,
},
Some(parent_style), Some(parent_style),
Some(parent_style_ignoring_first_line), Some(parent_style_ignoring_first_line),
Some(layout_parent_style), Some(layout_parent_style),

View file

@ -4,6 +4,3 @@
[Originating element container for ::marker] [Originating element container for ::marker]
expected: FAIL expected: FAIL
[Originating element container for ::backdrop]
expected: FAIL

View file

@ -1,3 +0,0 @@
[pseudo-elements-007.html]
[font-size for ::backdrop depending on container]
expected: FAIL

View file

@ -1,3 +0,0 @@
[pseudo-elements-008.html]
[Originating element container for ::backdrop]
expected: FAIL