LibWeb: Properly parse attributes for CSS-connected FontFace

Previously we would just set the attributes to the serialized
descriptors, even if they were the empty string.

We now apply defaults when we have empty descriptors and apply parsing
logic from the various `set_*` methods (only applicable to `font-family`
so far where we now extract the value from either a string or a
custom-ident)

Fixes an issue in some css/css-shapes WPT tests where we weren't
properly matching fonts.
This commit is contained in:
Callum Law
2026-01-11 00:17:50 +13:00
committed by Sam Atkins
parent bbfe7c64fe
commit 668d3afde0
Notes: github-actions[bot] 2026-01-13 10:41:03 +00:00
10 changed files with 238 additions and 136 deletions

View File

@@ -2,8 +2,8 @@ Harness status: OK
Found 780 tests
690 Pass
90 Fail
720 Pass
60 Fail
Pass test unit (inline): cm - circle(at 50cm)
Pass test unit (inline): cm - circle(at 50% 50cm)
Pass test unit (inline): cm - circle(at 50cm 50%)
@@ -604,36 +604,36 @@ Fail test unit (computed): ex - circle(at right 80% bottom 70ex)
Fail test unit (computed): ex - circle(at right 80ex top 50%)
Fail test unit (computed): ex - circle(at right 80ex bottom 70%)
Fail test unit (computed): ex - circle(at right 80ex bottom 70ex)
Fail test unit (computed): ch - circle(at 50ch)
Fail test unit (computed): ch - circle(at 50% 50ch)
Fail test unit (computed): ch - circle(at 50ch 50%)
Fail test unit (computed): ch - circle(at 50ch 50ch)
Fail test unit (computed): ch - circle(at left 50ch)
Fail test unit (computed): ch - circle(at 50ch top)
Fail test unit (computed): ch - circle(at right 80ch)
Fail test unit (computed): ch - circle(at 70ch bottom)
Fail test unit (computed): ch - circle(at center 60ch)
Fail test unit (computed): ch - circle(at 60ch center)
Fail test unit (computed): ch - circle(at left 50% top 50ch)
Fail test unit (computed): ch - circle(at left 50% bottom 70ch)
Fail test unit (computed): ch - circle(at left 50ch top 50%)
Fail test unit (computed): ch - circle(at left 50ch top 50ch)
Fail test unit (computed): ch - circle(at left 50ch bottom 70%)
Fail test unit (computed): ch - circle(at top 50% left 50ch)
Fail test unit (computed): ch - circle(at top 50% right 80ch)
Fail test unit (computed): ch - circle(at top 50ch left 50%)
Fail test unit (computed): ch - circle(at top 50ch left 50ch)
Fail test unit (computed): ch - circle(at top 50ch right 80%)
Fail test unit (computed): ch - circle(at bottom 70% left 50ch)
Fail test unit (computed): ch - circle(at bottom 70% right 80ch)
Fail test unit (computed): ch - circle(at bottom 70ch left 50%)
Fail test unit (computed): ch - circle(at bottom 70ch right 50%)
Fail test unit (computed): ch - circle(at bottom 70ch right 80ch)
Fail test unit (computed): ch - circle(at right 80% top 50ch)
Fail test unit (computed): ch - circle(at right 80% bottom 70ch)
Fail test unit (computed): ch - circle(at right 80ch top 50%)
Fail test unit (computed): ch - circle(at right 80ch bottom 70%)
Fail test unit (computed): ch - circle(at right 80ch bottom 70ch)
Pass test unit (computed): ch - circle(at 50ch)
Pass test unit (computed): ch - circle(at 50% 50ch)
Pass test unit (computed): ch - circle(at 50ch 50%)
Pass test unit (computed): ch - circle(at 50ch 50ch)
Pass test unit (computed): ch - circle(at left 50ch)
Pass test unit (computed): ch - circle(at 50ch top)
Pass test unit (computed): ch - circle(at right 80ch)
Pass test unit (computed): ch - circle(at 70ch bottom)
Pass test unit (computed): ch - circle(at center 60ch)
Pass test unit (computed): ch - circle(at 60ch center)
Pass test unit (computed): ch - circle(at left 50% top 50ch)
Pass test unit (computed): ch - circle(at left 50% bottom 70ch)
Pass test unit (computed): ch - circle(at left 50ch top 50%)
Pass test unit (computed): ch - circle(at left 50ch top 50ch)
Pass test unit (computed): ch - circle(at left 50ch bottom 70%)
Pass test unit (computed): ch - circle(at top 50% left 50ch)
Pass test unit (computed): ch - circle(at top 50% right 80ch)
Pass test unit (computed): ch - circle(at top 50ch left 50%)
Pass test unit (computed): ch - circle(at top 50ch left 50ch)
Pass test unit (computed): ch - circle(at top 50ch right 80%)
Pass test unit (computed): ch - circle(at bottom 70% left 50ch)
Pass test unit (computed): ch - circle(at bottom 70% right 80ch)
Pass test unit (computed): ch - circle(at bottom 70ch left 50%)
Pass test unit (computed): ch - circle(at bottom 70ch right 50%)
Pass test unit (computed): ch - circle(at bottom 70ch right 80ch)
Pass test unit (computed): ch - circle(at right 80% top 50ch)
Pass test unit (computed): ch - circle(at right 80% bottom 70ch)
Pass test unit (computed): ch - circle(at right 80ch top 50%)
Pass test unit (computed): ch - circle(at right 80ch bottom 70%)
Pass test unit (computed): ch - circle(at right 80ch bottom 70ch)
Pass test unit (computed): rem - circle(at 50rem)
Pass test unit (computed): rem - circle(at 50% 50rem)
Pass test unit (computed): rem - circle(at 50rem 50%)

View File

@@ -2,8 +2,8 @@ Harness status: OK
Found 52 tests
48 Pass
4 Fail
50 Pass
2 Fail
Pass test unit: cm - circle(50cm at 50% 50%) - inline
Pass test unit: cm - circle(50cm) - inline
Pass test unit: mm - circle(50mm at 50% 50%) - inline
@@ -44,8 +44,8 @@ Pass test unit: em - circle(50em at 50% 50%) - computed
Pass test unit: em - circle(50em) - computed
Fail test unit: ex - circle(50ex at 50% 50%) - computed
Fail test unit: ex - circle(50ex) - computed
Fail test unit: ch - circle(50ch at 50% 50%) - computed
Fail test unit: ch - circle(50ch) - computed
Pass test unit: ch - circle(50ch at 50% 50%) - computed
Pass test unit: ch - circle(50ch) - computed
Pass test unit: rem - circle(50rem at 50% 50%) - computed
Pass test unit: rem - circle(50rem) - computed
Pass test unit: vw - circle(50vw at 50% 50%) - computed

View File

@@ -2,8 +2,8 @@ Harness status: OK
Found 780 tests
690 Pass
90 Fail
720 Pass
60 Fail
Pass test unit (inline): cm - ellipse(at 50cm)
Pass test unit (inline): cm - ellipse(at 50% 50cm)
Pass test unit (inline): cm - ellipse(at 50cm 50%)
@@ -604,36 +604,36 @@ Fail test unit (computed): ex - ellipse(at right 80% bottom 70ex)
Fail test unit (computed): ex - ellipse(at right 80ex top 50%)
Fail test unit (computed): ex - ellipse(at right 80ex bottom 70%)
Fail test unit (computed): ex - ellipse(at right 80ex bottom 70ex)
Fail test unit (computed): ch - ellipse(at 50ch)
Fail test unit (computed): ch - ellipse(at 50% 50ch)
Fail test unit (computed): ch - ellipse(at 50ch 50%)
Fail test unit (computed): ch - ellipse(at 50ch 50ch)
Fail test unit (computed): ch - ellipse(at left 50ch)
Fail test unit (computed): ch - ellipse(at 50ch top)
Fail test unit (computed): ch - ellipse(at right 80ch)
Fail test unit (computed): ch - ellipse(at 70ch bottom)
Fail test unit (computed): ch - ellipse(at center 60ch)
Fail test unit (computed): ch - ellipse(at 60ch center)
Fail test unit (computed): ch - ellipse(at left 50% top 50ch)
Fail test unit (computed): ch - ellipse(at left 50% bottom 70ch)
Fail test unit (computed): ch - ellipse(at left 50ch top 50%)
Fail test unit (computed): ch - ellipse(at left 50ch top 50ch)
Fail test unit (computed): ch - ellipse(at left 50ch bottom 70%)
Fail test unit (computed): ch - ellipse(at top 50% left 50ch)
Fail test unit (computed): ch - ellipse(at top 50% right 80ch)
Fail test unit (computed): ch - ellipse(at top 50ch left 50%)
Fail test unit (computed): ch - ellipse(at top 50ch left 50ch)
Fail test unit (computed): ch - ellipse(at top 50ch right 80%)
Fail test unit (computed): ch - ellipse(at bottom 70% left 50ch)
Fail test unit (computed): ch - ellipse(at bottom 70% right 80ch)
Fail test unit (computed): ch - ellipse(at bottom 70ch left 50%)
Fail test unit (computed): ch - ellipse(at bottom 70ch right 50%)
Fail test unit (computed): ch - ellipse(at bottom 70ch right 80ch)
Fail test unit (computed): ch - ellipse(at right 80% top 50ch)
Fail test unit (computed): ch - ellipse(at right 80% bottom 70ch)
Fail test unit (computed): ch - ellipse(at right 80ch top 50%)
Fail test unit (computed): ch - ellipse(at right 80ch bottom 70%)
Fail test unit (computed): ch - ellipse(at right 80ch bottom 70ch)
Pass test unit (computed): ch - ellipse(at 50ch)
Pass test unit (computed): ch - ellipse(at 50% 50ch)
Pass test unit (computed): ch - ellipse(at 50ch 50%)
Pass test unit (computed): ch - ellipse(at 50ch 50ch)
Pass test unit (computed): ch - ellipse(at left 50ch)
Pass test unit (computed): ch - ellipse(at 50ch top)
Pass test unit (computed): ch - ellipse(at right 80ch)
Pass test unit (computed): ch - ellipse(at 70ch bottom)
Pass test unit (computed): ch - ellipse(at center 60ch)
Pass test unit (computed): ch - ellipse(at 60ch center)
Pass test unit (computed): ch - ellipse(at left 50% top 50ch)
Pass test unit (computed): ch - ellipse(at left 50% bottom 70ch)
Pass test unit (computed): ch - ellipse(at left 50ch top 50%)
Pass test unit (computed): ch - ellipse(at left 50ch top 50ch)
Pass test unit (computed): ch - ellipse(at left 50ch bottom 70%)
Pass test unit (computed): ch - ellipse(at top 50% left 50ch)
Pass test unit (computed): ch - ellipse(at top 50% right 80ch)
Pass test unit (computed): ch - ellipse(at top 50ch left 50%)
Pass test unit (computed): ch - ellipse(at top 50ch left 50ch)
Pass test unit (computed): ch - ellipse(at top 50ch right 80%)
Pass test unit (computed): ch - ellipse(at bottom 70% left 50ch)
Pass test unit (computed): ch - ellipse(at bottom 70% right 80ch)
Pass test unit (computed): ch - ellipse(at bottom 70ch left 50%)
Pass test unit (computed): ch - ellipse(at bottom 70ch right 50%)
Pass test unit (computed): ch - ellipse(at bottom 70ch right 80ch)
Pass test unit (computed): ch - ellipse(at right 80% top 50ch)
Pass test unit (computed): ch - ellipse(at right 80% bottom 70ch)
Pass test unit (computed): ch - ellipse(at right 80ch top 50%)
Pass test unit (computed): ch - ellipse(at right 80ch bottom 70%)
Pass test unit (computed): ch - ellipse(at right 80ch bottom 70ch)
Pass test unit (computed): rem - ellipse(at 50rem)
Pass test unit (computed): rem - ellipse(at 50% 50rem)
Pass test unit (computed): rem - ellipse(at 50rem 50%)

View File

@@ -2,8 +2,8 @@ Harness status: OK
Found 416 tests
380 Pass
36 Fail
396 Pass
20 Fail
Pass test unit: cm - ellipse(50cm 100cm at 50% 50%) - inline
Pass test unit: cm - ellipse(100cm 100px at 50% 50%) - inline
Pass test unit: cm - ellipse(50cm 25% at 50% 50%) - inline
@@ -324,22 +324,22 @@ Fail test unit: ex - ellipse(25ex closest-side) - computed
Fail test unit: ex - ellipse(closest-side 75ex) - computed
Fail test unit: ex - ellipse(25ex farthest-side) - computed
Fail test unit: ex - ellipse(farthest-side 75ex) - computed
Fail test unit: ch - ellipse(50ch 100ch at 50% 50%) - computed
Fail test unit: ch - ellipse(100ch 100px at 50% 50%) - computed
Fail test unit: ch - ellipse(50ch 25% at 50% 50%) - computed
Fail test unit: ch - ellipse(25% 50ch at 50% 50%) - computed
Fail test unit: ch - ellipse(25ch closest-side at 50% 50%) - computed
Fail test unit: ch - ellipse(closest-side 75ch at 50% 50%) - computed
Fail test unit: ch - ellipse(25ch farthest-side at 50% 50%) - computed
Fail test unit: ch - ellipse(farthest-side 75ch at 50% 50%) - computed
Fail test unit: ch - ellipse(50ch 100ch) - computed
Fail test unit: ch - ellipse(100ch 100px) - computed
Fail test unit: ch - ellipse(50ch 25%) - computed
Fail test unit: ch - ellipse(25% 50ch) - computed
Fail test unit: ch - ellipse(25ch closest-side) - computed
Fail test unit: ch - ellipse(closest-side 75ch) - computed
Fail test unit: ch - ellipse(25ch farthest-side) - computed
Fail test unit: ch - ellipse(farthest-side 75ch) - computed
Pass test unit: ch - ellipse(50ch 100ch at 50% 50%) - computed
Pass test unit: ch - ellipse(100ch 100px at 50% 50%) - computed
Pass test unit: ch - ellipse(50ch 25% at 50% 50%) - computed
Pass test unit: ch - ellipse(25% 50ch at 50% 50%) - computed
Pass test unit: ch - ellipse(25ch closest-side at 50% 50%) - computed
Pass test unit: ch - ellipse(closest-side 75ch at 50% 50%) - computed
Pass test unit: ch - ellipse(25ch farthest-side at 50% 50%) - computed
Pass test unit: ch - ellipse(farthest-side 75ch at 50% 50%) - computed
Pass test unit: ch - ellipse(50ch 100ch) - computed
Pass test unit: ch - ellipse(100ch 100px) - computed
Pass test unit: ch - ellipse(50ch 25%) - computed
Pass test unit: ch - ellipse(25% 50ch) - computed
Pass test unit: ch - ellipse(25ch closest-side) - computed
Pass test unit: ch - ellipse(closest-side 75ch) - computed
Pass test unit: ch - ellipse(25ch farthest-side) - computed
Pass test unit: ch - ellipse(farthest-side 75ch) - computed
Pass test unit: rem - ellipse(50rem 100rem at 50% 50%) - computed
Pass test unit: rem - ellipse(100rem 100px at 50% 50%) - computed
Pass test unit: rem - ellipse(50rem 25% at 50% 50%) - computed

View File

@@ -2,8 +2,8 @@ Harness status: OK
Found 520 tests
480 Pass
40 Fail
500 Pass
20 Fail
Pass inset(10cm round 10cm) - inline
Pass inset(10cm round 10cm / 10cm) - inline
Pass inset(10cm round 10cm / 10cm 20cm) - inline
@@ -404,26 +404,26 @@ Fail inset(10ex round 10ex 20ex 30ex 40ex / 10ex) - computed
Fail inset(10ex round 10ex 20ex 30ex 40ex / 10ex 20ex) - computed
Fail inset(10ex round 10ex 20ex 30ex 40ex / 10ex 20ex 30ex) - computed
Fail inset(10ex round 10ex 20ex 30ex 40ex / 10ex 20ex 30ex 40ex) - computed
Fail inset(10ch round 10ch) - computed
Fail inset(10ch round 10ch / 10ch) - computed
Fail inset(10ch round 10ch / 10ch 20ch) - computed
Fail inset(10ch round 10ch / 10ch 20ch 30ch) - computed
Fail inset(10ch round 10ch / 10ch 20ch 30ch 40ch) - computed
Fail inset(10ch round 10ch 20ch) - computed
Fail inset(10ch round 10ch 20ch / 10ch) - computed
Fail inset(10ch round 10ch 20ch / 10ch 20ch) - computed
Fail inset(10ch round 10ch 20ch / 10ch 20ch 30ch) - computed
Fail inset(10ch round 10ch 20ch / 10ch 20ch 30ch 40ch) - computed
Fail inset(10ch round 10ch 20ch 30ch) - computed
Fail inset(10ch round 10ch 20ch 30ch / 10ch) - computed
Fail inset(10ch round 10ch 20ch 30ch / 10ch 20ch) - computed
Fail inset(10ch round 10ch 20ch 30ch / 10ch 20ch 30ch) - computed
Fail inset(10ch round 10ch 20ch 30ch / 10ch 20ch 30ch 40ch) - computed
Fail inset(10ch round 10ch 20ch 30ch 40ch) - computed
Fail inset(10ch round 10ch 20ch 30ch 40ch / 10ch) - computed
Fail inset(10ch round 10ch 20ch 30ch 40ch / 10ch 20ch) - computed
Fail inset(10ch round 10ch 20ch 30ch 40ch / 10ch 20ch 30ch) - computed
Fail inset(10ch round 10ch 20ch 30ch 40ch / 10ch 20ch 30ch 40ch) - computed
Pass inset(10ch round 10ch) - computed
Pass inset(10ch round 10ch / 10ch) - computed
Pass inset(10ch round 10ch / 10ch 20ch) - computed
Pass inset(10ch round 10ch / 10ch 20ch 30ch) - computed
Pass inset(10ch round 10ch / 10ch 20ch 30ch 40ch) - computed
Pass inset(10ch round 10ch 20ch) - computed
Pass inset(10ch round 10ch 20ch / 10ch) - computed
Pass inset(10ch round 10ch 20ch / 10ch 20ch) - computed
Pass inset(10ch round 10ch 20ch / 10ch 20ch 30ch) - computed
Pass inset(10ch round 10ch 20ch / 10ch 20ch 30ch 40ch) - computed
Pass inset(10ch round 10ch 20ch 30ch) - computed
Pass inset(10ch round 10ch 20ch 30ch / 10ch) - computed
Pass inset(10ch round 10ch 20ch 30ch / 10ch 20ch) - computed
Pass inset(10ch round 10ch 20ch 30ch / 10ch 20ch 30ch) - computed
Pass inset(10ch round 10ch 20ch 30ch / 10ch 20ch 30ch 40ch) - computed
Pass inset(10ch round 10ch 20ch 30ch 40ch) - computed
Pass inset(10ch round 10ch 20ch 30ch 40ch / 10ch) - computed
Pass inset(10ch round 10ch 20ch 30ch 40ch / 10ch 20ch) - computed
Pass inset(10ch round 10ch 20ch 30ch 40ch / 10ch 20ch 30ch) - computed
Pass inset(10ch round 10ch 20ch 30ch 40ch / 10ch 20ch 30ch 40ch) - computed
Pass inset(10rem round 10rem) - computed
Pass inset(10rem round 10rem / 10rem) - computed
Pass inset(10rem round 10rem / 10rem 20rem) - computed