Skip to content

Generalize anonymous box creation to table box kinds - #786

Open
nicoburns wants to merge 1 commit into
devin/1787604682-table-anonymous-cellsfrom
devin/1787612328-anon-node-generalization
Open

nicoburns wants to merge 1 commit into
devin/1787604682-table-anonymous-cellsfrom
devin/1787612328-anon-node-generalization

Conversation

@nicoburns

@nicoburns nicoburns commented Aug 24, 2026 •

Copy link
Copy Markdown
Member

Summary

Step 0 of the anonymous table box fixup work (split out from #783; based on #781's branch): generalizes anonymous node creation without changing behavior.

LayoutChildren::create_anonymous_block's body is extracted into a free function parameterized by kind:

pub(crate) enum AnonKind { Block, Table, TableRow, TableCell }

pub(crate) fn create_anonymous_node(doc, container_node_id, kind: AnonKind) -> NodeId
// kind selects the precomputed pseudo: ServoAnonymousBox / ServoAnonymousTable /
// ServoAnonymousTableRow / ServoAnonymousTableCell

Since precomputed pseudos take their declarations from UA stylesheet rules, default.css gains

*|*::-servo-anonymous-table { display: table; }
*|*::-servo-anonymous-table-row { display: table-row; }
*|*::-servo-anonymous-table-cell { display: table-cell; }

so the table-kind anonymous boxes (used by #783 on top of this) carry honest computed displays. The Block path is a pure refactor; the table variants are unused here (#[allow(dead_code)] until #783 lands on top).

cargo fmt / clippy clean; existing table/anonymous-cell tests pass.

Link to Devin session: https://dioxus.staging.devinenterprise.com/sessions/e0b69caedcd34e829ff73fb7ff216a75
Open in Devin Desktop: https://dioxus.staging.devinenterprise.com/desktop/session/e0b69caedcd34e829ff73fb7ff216a75?variant=devin-insiders
Requested by: @nicoburns

WPT results

71 newly passing, 19 newly failing (net +52).

Full diff (90 changed tests)
+ Fail => Pass css/CSS2/backgrounds/background-applies-to-015.xht
+ Fail => Pass css/CSS2/backgrounds/background-attachment-applies-to-015.xht
+ Fail => Pass css/CSS2/backgrounds/background-color-applies-to-015.xht
+ Fail => Pass css/CSS2/backgrounds/background-image-applies-to-015.xht
+ Fail => Pass css/CSS2/backgrounds/background-repeat-applies-to-015.xht
- Pass => Fail css/CSS2/bidi-text/bidi-008a.xht
- Pass => Fail css/CSS2/bidi-text/bidi-008b.xht
+ Fail => Pass css/CSS2/borders/border-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-bottom-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-bottom-color-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-bottom-width-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-color-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-left-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-left-color-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-left-width-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-right-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-right-color-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-right-width-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-top-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-top-color-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-top-width-applies-to-015.xht
+ Fail => Pass css/CSS2/borders/border-width-applies-to-015.xht
+ Fail => Pass css/CSS2/colors/color-applies-to-015.xht
- Pass => Fail css/CSS2/css21-errata/s-11-1-1b-001.html
- Pass => Fail css/CSS2/css21-errata/s-11-1-1b-008.html
- Pass => Fail css/CSS2/css21-errata/s-11-1-1b-009.html
+ Fail => Pass css/CSS2/fonts/font-applies-to-015.xht
+ Fail => Pass css/CSS2/fonts/font-variant-applies-to-015.xht
+ Fail => Pass css/CSS2/fonts/font-weight-applies-to-015.xht
+ Fail => Pass css/CSS2/linebox/vertical-align-applies-to-015.xht
+ Fail => Pass css/CSS2/lists/list-style-applies-to-015.xht
+ Fail => Pass css/CSS2/lists/list-style-image-applies-to-015.xht
+ Fail => Pass css/CSS2/lists/list-style-type-applies-to-015.xht
+ Fail => Pass css/CSS2/margin-padding-clear/margin-applies-to-015.xht
+ Fail => Pass css/CSS2/margin-padding-clear/margin-left-applies-to-015.xht
+ Fail => Pass css/CSS2/margin-padding-clear/margin-right-applies-to-015.xht
+ Fail => Pass css/CSS2/margin-padding-clear/margin-top-applies-to-015.xht
+ Fail => Pass css/CSS2/margin-padding-clear/padding-applies-to-015.xht
+ Fail => Pass css/CSS2/margin-padding-clear/padding-bottom-applies-to-015.xht
+ Fail => Pass css/CSS2/margin-padding-clear/padding-left-applies-to-015.xht
+ Fail => Pass css/CSS2/margin-padding-clear/padding-right-applies-to-015.xht
+ Fail => Pass css/CSS2/margin-padding-clear/padding-top-applies-to-015.xht
+ Fail => Pass css/CSS2/normal-flow/height-applies-to-015.xht
- Pass => Fail css/CSS2/normal-flow/inline-table-002a.xht
- Pass => Fail css/CSS2/normal-flow/inline-table-width-002b.xht
+ Fail => Pass css/CSS2/normal-flow/inline-table-zorder-002.xht
+ Fail => Pass css/CSS2/normal-flow/max-height-applies-to-015.xht
+ Fail => Pass css/CSS2/normal-flow/max-width-applies-to-015.xht
+ Fail => Pass css/CSS2/normal-flow/min-height-applies-to-015.xht
+ Fail => Pass css/CSS2/normal-flow/min-width-applies-to-015.xht
+ Fail => Pass css/CSS2/normal-flow/width-applies-to-015.xht
+ Fail => Pass css/CSS2/tables/anonymous-table-box-width-001.xht
+ Fail => Pass css/CSS2/text/letter-spacing-applies-to-015.xht
+ Fail => Pass css/CSS2/text/text-decoration-applies-to-015.xht
+ Fail => Pass css/CSS2/text/text-indent-applies-to-015.xht
+ Fail => Pass css/CSS2/text/white-space-applies-to-015.xht
+ Fail => Pass css/CSS2/text/word-spacing-applies-to-015.xht
- Pass => Fail css/CSS2/ui/outline-applies-to-016.xht
- Pass => Fail css/CSS2/ui/outline-applies-to-017.xht
- Pass => Fail css/css-break/table/break-before-second-row.html
- Pass => Fail css/css-break/table/caption-margin-002.html
- Pass => Fail css/css-break/table/caption-margin-005.html
+ Fail => Pass css/css-break/table/inside-flex-001.html
+ Fail => Pass css/css-break/table/monolithic-overflow-002.tentative.html
+ Fail => Pass css/css-break/table/monolithic-overflow-004.tentative.html
+ Fail => Pass css/css-break/table/repeated-section/image.tentative.html
+ Fail => Pass css/css-contain/contain-inline-size-table.html
- Pass => Fail css/css-contain/contain-size-056.html
- Pass => Fail css/css-contain/contain-size-table-caption-001.html
- Pass => Fail css/css-contain/content-visibility/content-visibility-094.html
- Pass => Fail css/css-contain/content-visibility/content-visibility-095.html
+ Fail => Pass css/css-flexbox/flexbox_flex-formatting-interop.html
+ Fail => Pass css/css-flexbox/flexbox_stf-table-singleline-2.html
+ Fail => Pass css/css-flexbox/flexbox_stf-table-singleline.html
- Pass => Fail css/css-flexbox/table-as-item-flex-cross-size.html
+ Fail => Pass css/css-flexbox/table-as-item-narrow-content.html
- Pass => Fail css/css-flexbox/table-as-item-stretch-cross-size-2.html
- Pass => Fail css/css-flexbox/table-as-item-stretch-cross-size.html
+ Fail => Pass css/css-flexbox/table-with-float-paint.html
+ Fail => Pass css/css-grid/grid-items/explicitly-sized-grid-item-as-table.html
+ Fail => Pass css/css-page/monolithic-overflow-009-print.html
+ Fail => Pass css/css-page/monolithic-overflow-010-print.html
+ Fail => Pass css/css-page/monolithic-overflow-011-print.html
+ Fail => Pass css/css-page/monolithic-overflow-017-print.html
+ Fail => Pass css/css-sizing/calc-margins-table-caption.html
+ Fail => Pass css/css-sizing/table-child-percentage-height-with-border-box.html
+ Fail => Pass css/css-sizing/table-percentage-max-width-beside-float.html
+ Fail => Pass css/css-tables/html-display-table.html
+ Fail => Pass css/css-tables/percent-height-overflow-auto-in-restricted-block-size-cell.html
+ Fail => Pass css/css-tables/percent-height-overflow-auto-in-unrestricted-block-size-cell.tentative.html

Generated by the WPT workflow.

@staging-devin-ai-integration

Copy link
Copy Markdown
Contributor

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR that start with 'DevinAI' or '@devin'.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant