summaryrefslogtreecommitdiffstats
path: root/servo/components/style/stylist.rs
diff options
context:
space:
mode:
Diffstat (limited to 'servo/components/style/stylist.rs')
-rw-r--r--servo/components/style/stylist.rs17
1 files changed, 16 insertions, 1 deletions
diff --git a/servo/components/style/stylist.rs b/servo/components/style/stylist.rs
index 06cbe6276b..bef4e569cd 100644
--- a/servo/components/style/stylist.rs
+++ b/servo/components/style/stylist.rs
@@ -577,11 +577,12 @@ impl From<StyleRuleInclusion> for RuleInclusion {
}
/// A struct containing state from ancestor rules like @layer / @import /
-/// @container / nesting.
+/// @container / @starting-style / nesting.
struct ContainingRuleState {
layer_name: LayerName,
layer_id: LayerId,
container_condition_id: ContainerConditionId,
+ in_starting_style: bool,
ancestor_selector_lists: SmallVec<[SelectorList<SelectorImpl>; 2]>,
}
@@ -591,6 +592,7 @@ impl Default for ContainingRuleState {
layer_name: LayerName::new_empty(),
layer_id: LayerId::root(),
container_condition_id: ContainerConditionId::none(),
+ in_starting_style: false,
ancestor_selector_lists: Default::default(),
}
}
@@ -601,6 +603,7 @@ struct SavedContainingRuleState {
layer_name_len: usize,
layer_id: LayerId,
container_condition_id: ContainerConditionId,
+ in_starting_style: bool,
}
impl ContainingRuleState {
@@ -610,6 +613,7 @@ impl ContainingRuleState {
layer_name_len: self.layer_name.0.len(),
layer_id: self.layer_id,
container_condition_id: self.container_condition_id,
+ in_starting_style: self.in_starting_style,
}
}
@@ -621,6 +625,7 @@ impl ContainingRuleState {
self.layer_name.0.truncate(saved.layer_name_len);
self.layer_id = saved.layer_id;
self.container_condition_id = saved.container_condition_id;
+ self.in_starting_style = saved.in_starting_style;
}
}
@@ -1258,6 +1263,7 @@ impl Stylist {
None,
&mut selector_caches,
VisitedHandlingMode::RelevantLinkVisited,
+ selectors::matching::IncludeStartingStyle::No,
self.quirks_mode,
needs_selector_flags,
MatchingForInvalidation::No,
@@ -2858,6 +2864,7 @@ impl CascadeData {
self.rules_source_order,
containing_rule_state.layer_id,
containing_rule_state.container_condition_id,
+ containing_rule_state.in_starting_style,
);
if collect_replaced_selectors {
@@ -3146,6 +3153,9 @@ impl CascadeData {
});
containing_rule_state.container_condition_id = id;
},
+ CssRule::StartingStyle(..) => {
+ containing_rule_state.in_starting_style = true;
+ },
// We don't care about any other rule.
_ => {},
}
@@ -3434,6 +3444,9 @@ pub struct Rule {
/// The current @container rule id.
pub container_condition_id: ContainerConditionId,
+ /// True if this rule is inside @starting-style.
+ pub is_starting_style: bool,
+
/// The actual style rule.
#[cfg_attr(
feature = "gecko",
@@ -3480,6 +3493,7 @@ impl Rule {
source_order: u32,
layer_id: LayerId,
container_condition_id: ContainerConditionId,
+ is_starting_style: bool,
) -> Self {
Rule {
selector,
@@ -3488,6 +3502,7 @@ impl Rule {
source_order,
layer_id,
container_condition_id,
+ is_starting_style,
}
}
}