diff --git a/components/style/properties/cascade.rs b/components/style/properties/cascade.rs index 3edee32237a..dfd063ba8a5 100644 --- a/components/style/properties/cascade.rs +++ b/components/style/properties/cascade.rs @@ -55,6 +55,7 @@ pub fn cascade( pseudo: Option<&PseudoElement>, rule_node: &StrongRuleNode, guards: &StylesheetGuards, + originating_element_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>, parent_style_ignoring_first_line: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>, @@ -73,6 +74,7 @@ where pseudo, rule_node, guards, + originating_element_style, parent_style, parent_style_ignoring_first_line, layout_parent_style, @@ -173,6 +175,7 @@ fn cascade_rules( pseudo: Option<&PseudoElement>, rule_node: &StrongRuleNode, guards: &StylesheetGuards, + originating_element_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>, parent_style_ignoring_first_line: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>, @@ -196,6 +199,7 @@ where rule_node, guards, DeclarationIterator::new(rule_node, guards, pseudo), + originating_element_style, parent_style, parent_style_ignoring_first_line, layout_parent_style, @@ -232,6 +236,7 @@ pub fn apply_declarations<'a, E, I>( rules: &StrongRuleNode, guards: &StylesheetGuards, iter: I, + originating_element_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>, parent_style_ignoring_first_line: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>, @@ -246,6 +251,10 @@ where E: TElement, I: Iterator, { + 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_eq!( parent_style.is_some(), @@ -282,7 +291,7 @@ where let is_root_element = pseudo.is_none() && element.map_or(false, |e| e.is_root()); 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( // We'd really like to own the rules here to avoid refcount traffic, but @@ -339,6 +348,7 @@ where if let Some(visited_rules) = visited_rules { cascade.compute_visited_style_if_needed( element, + originating_element_style, parent_style, parent_style_ignoring_first_line, layout_parent_style, @@ -725,6 +735,7 @@ impl<'a, 'b: 'a> Cascade<'a, 'b> { fn compute_visited_style_if_needed( &mut self, element: Option, + originating_element_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>, parent_style_ignoring_first_line: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>, @@ -755,6 +766,7 @@ impl<'a, 'b: 'a> Cascade<'a, 'b> { self.context.builder.pseudo, visited_rules, guards, + visited_parent!(originating_element_style), visited_parent!(parent_style), visited_parent!(parent_style_ignoring_first_line), visited_parent!(layout_parent_style), diff --git a/components/style/style_resolver.rs b/components/style/style_resolver.rs index eba94c78629..e2ad792eb0e 100644 --- a/components/style/style_resolver.rs +++ b/components/style/style_resolver.rs @@ -349,6 +349,7 @@ where pseudo, inputs, &self.context.shared.guards, + pseudo.and(parent_style), parent_style, parent_style, layout_parent_style, diff --git a/components/style/stylist.rs b/components/style/stylist.rs index e6456058528..68b01ae6538 100644 --- a/components/style/stylist.rs +++ b/components/style/stylist.rs @@ -895,8 +895,9 @@ impl Stylist { }, pseudo, guards, + /* originating_element_style */ None, parent, - None, + /* element */ None, ) } @@ -989,6 +990,7 @@ impl Stylist { cascade_inputs, pseudo, guards, + Some(originating_element_style), Some(parent_style), Some(element), )) @@ -1003,6 +1005,7 @@ impl Stylist { inputs: CascadeInputs, pseudo: &PseudoElement, guards: &StylesheetGuards, + originating_element_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>, element: Option, ) -> Arc @@ -1026,6 +1029,7 @@ impl Stylist { Some(pseudo), inputs, guards, + originating_element_style, parent_style, parent_style, parent_style, @@ -1052,6 +1056,7 @@ impl Stylist { pseudo: Option<&PseudoElement>, inputs: CascadeInputs, guards: &StylesheetGuards, + originating_element_style: Option<&ComputedValues>, parent_style: Option<&ComputedValues>, parent_style_ignoring_first_line: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>, @@ -1087,6 +1092,7 @@ impl Stylist { pseudo, inputs.rules.as_ref().unwrap_or(self.rule_tree.root()), guards, + originating_element_style, parent_style, parent_style_ignoring_first_line, layout_parent_style, @@ -1505,6 +1511,7 @@ impl Stylist { ), ) }), + /* originating_element_style */ None, Some(parent_style), Some(parent_style), Some(parent_style),