layout: Use the PseudoElement from ServoThreadSafeLayoutNode in NodeAndStyleInfo (#38630)

Instead of storing the non-pseudo version of the node in
`NodeAndStyleInfo`, store the pseudo version and use that to query the
`PseudoElement` that a `NodeAndStyleInfo` refers to.

This is a step on the way toward fixing nested pseudo-elements in Servo.

Testing: This should not change behavior and is thus covered by existing
WPT tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
Martin Robinson 2025-08-13 19:31:57 +02:00 committed by GitHub
parent ee7c1d9109
commit 5ff084a688
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 34 additions and 38 deletions

View file

@ -91,7 +91,7 @@ impl Table {
propagated_data: PropagatedBoxTreeData,
) -> (NodeAndStyleInfo<'dom>, IndependentFormattingContext) {
let table_info = parent_info
.pseudo(context, PseudoElement::ServoAnonymousTable)
.with_pseudo_element(context, PseudoElement::ServoAnonymousTable)
.expect("Should never fail to create anonymous table info.");
let table_style = table_info.style.clone();
let mut table_builder =
@ -688,7 +688,7 @@ impl<'style, 'dom> TableBuilderTraversal<'style, 'dom> {
let row_content = std::mem::take(&mut self.current_anonymous_row_content);
let anonymous_info = self
.info
.pseudo(self.context, PseudoElement::ServoAnonymousTableRow)
.with_pseudo_element(self.context, PseudoElement::ServoAnonymousTableRow)
.expect("Should never fail to create anonymous row info.");
let mut row_builder =
TableRowBuilder::new(self, &anonymous_info, self.current_propagated_data);
@ -957,7 +957,7 @@ impl<'style, 'builder, 'dom, 'a> TableRowBuilder<'style, 'builder, 'dom, 'a> {
let context = self.table_traversal.context;
let anonymous_info = self
.info
.pseudo(context, PseudoElement::ServoAnonymousTableCell)
.with_pseudo_element(context, PseudoElement::ServoAnonymousTableCell)
.expect("Should never fail to create anonymous table cell info");
let propagated_data = self.propagated_data.disallowing_percentage_table_columns();
let mut builder = BlockContainerBuilder::new(context, &anonymous_info, propagated_data);
@ -1027,7 +1027,7 @@ impl<'dom> TraversalHandler<'dom> for TableRowBuilder<'_, '_, 'dom, '_> {
let cell = old_cell.unwrap_or_else(|| {
// This value will already have filtered out rowspan=0
// in quirks mode, so we don't have to worry about that.
let (rowspan, colspan) = if info.pseudo_element_type.is_none() {
let (rowspan, colspan) = if info.pseudo_element().is_none() {
let rowspan = info.node.get_rowspan().unwrap_or(1) as usize;
let colspan = info.node.get_colspan().unwrap_or(1) as usize;
@ -1148,7 +1148,7 @@ fn add_column(
is_anonymous: bool,
old_column: Option<ArcRefCell<TableTrack>>,
) -> ArcRefCell<TableTrack> {
let span = if column_info.pseudo_element_type.is_none() {
let span = if column_info.pseudo_element().is_none() {
column_info.node.get_span().unwrap_or(1)
} else {
1