mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-08 06:09:58 +00:00
LibWeb/CSS: Parse media-feature values forgivingly
Instead of rejecting invalid media-feature values at parse time, we are expected to parse them, and then treat them as Unknown when evaluating their media query. To implement this, we first try to parse a valid value as before. If that fails, or we have any trailing tokens that could be part of a value, we then scoop up all the possible ComponentValues and treat that as an "unknown"-type MediaFeatureValue. This gets us 66 WPT passes.
This commit is contained in:
parent
72f50217b0
commit
9b8dc6b8d0
Notes:
github-actions[bot]
2025-05-23 09:19:18 +00:00
Author: https://github.com/AtkinsSJ
Commit: 9b8dc6b8d0
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4817
15 changed files with 228 additions and 146 deletions
|
|
@ -2,22 +2,21 @@ Harness status: OK
|
|||
|
||||
Found 17 tests
|
||||
|
||||
12 Pass
|
||||
5 Fail
|
||||
17 Pass
|
||||
Pass Should be known: '(display-mode)'
|
||||
Pass Should be known: '(display-mode: standalone)'
|
||||
Pass Should be known: '(display-mode: browser)'
|
||||
Pass Should be known: '(display-mode: minimal-ui)'
|
||||
Pass Should be known: '(display-mode: fullscreen)'
|
||||
Pass Should be known: '(display-mode: picture-in-picture)'
|
||||
Fail Should be parseable: '(display-mode: 0)'
|
||||
Pass Should be parseable: '(display-mode: 0)'
|
||||
Pass Should be unknown: '(display-mode: 0)'
|
||||
Fail Should be parseable: '(display-mode: none)'
|
||||
Pass Should be parseable: '(display-mode: none)'
|
||||
Pass Should be unknown: '(display-mode: none)'
|
||||
Fail Should be parseable: '(display-mode: random)'
|
||||
Pass Should be parseable: '(display-mode: random)'
|
||||
Pass Should be unknown: '(display-mode: random)'
|
||||
Fail Should be parseable: '(display-mode: 10px)'
|
||||
Pass Should be parseable: '(display-mode: 10px)'
|
||||
Pass Should be unknown: '(display-mode: 10px)'
|
||||
Fail Should be parseable: '(display-mode: 1%)'
|
||||
Pass Should be parseable: '(display-mode: 1%)'
|
||||
Pass Should be unknown: '(display-mode: 1%)'
|
||||
Pass Check that display-mode evaluates to true in the boolean context
|
||||
|
|
@ -2,25 +2,25 @@ Harness status: OK
|
|||
|
||||
Found 23 tests
|
||||
|
||||
15 Pass
|
||||
8 Fail
|
||||
21 Pass
|
||||
2 Fail
|
||||
Pass Should be known: '(dynamic-range: standard)'
|
||||
Pass Should be known: '(dynamic-range: high)'
|
||||
Pass Should be known: '(video-dynamic-range: standard)'
|
||||
Pass Should be known: '(video-dynamic-range: high)'
|
||||
Pass Should be known: '(dynamic-range)'
|
||||
Pass Should be known: '(video-dynamic-range)'
|
||||
Fail Should be parseable: '(dynamic-range: 0)'
|
||||
Pass Should be parseable: '(dynamic-range: 0)'
|
||||
Pass Should be unknown: '(dynamic-range: 0)'
|
||||
Fail Should be parseable: '(dynamic-range: 10px)'
|
||||
Pass Should be parseable: '(dynamic-range: 10px)'
|
||||
Pass Should be unknown: '(dynamic-range: 10px)'
|
||||
Fail Should be parseable: '(dynamic-range: invalid)'
|
||||
Pass Should be parseable: '(dynamic-range: invalid)'
|
||||
Pass Should be unknown: '(dynamic-range: invalid)'
|
||||
Fail Should be parseable: '(video-dynamic-range: 0)'
|
||||
Pass Should be parseable: '(video-dynamic-range: 0)'
|
||||
Pass Should be unknown: '(video-dynamic-range: 0)'
|
||||
Fail Should be parseable: '(video-dynamic-range: 10px)'
|
||||
Pass Should be parseable: '(video-dynamic-range: 10px)'
|
||||
Pass Should be unknown: '(video-dynamic-range: 10px)'
|
||||
Fail Should be parseable: '(video-dynamic-range: invalid)'
|
||||
Pass Should be parseable: '(video-dynamic-range: invalid)'
|
||||
Pass Should be unknown: '(video-dynamic-range: invalid)'
|
||||
Fail Check that dynamic-range evaluates to false in the boolean context
|
||||
Fail Check that video-dynamic-range evaluates to false in the boolean context
|
||||
|
|
|
|||
|
|
@ -2,21 +2,20 @@ Harness status: OK
|
|||
|
||||
Found 16 tests
|
||||
|
||||
10 Pass
|
||||
6 Fail
|
||||
16 Pass
|
||||
Pass Should be known: '(forced-colors)'
|
||||
Pass Should be known: '(forced-colors: none)'
|
||||
Pass Should be known: '(forced-colors: active)'
|
||||
Fail Should be parseable: '(forced-colors: 0)'
|
||||
Pass Should be parseable: '(forced-colors: 0)'
|
||||
Pass Should be unknown: '(forced-colors: 0)'
|
||||
Fail Should be parseable: '(forced-colors: no-preference)'
|
||||
Pass Should be parseable: '(forced-colors: no-preference)'
|
||||
Pass Should be unknown: '(forced-colors: no-preference)'
|
||||
Fail Should be parseable: '(forced-colors: 10px)'
|
||||
Pass Should be parseable: '(forced-colors: 10px)'
|
||||
Pass Should be unknown: '(forced-colors: 10px)'
|
||||
Fail Should be parseable: '(forced-colors: active 0)'
|
||||
Pass Should be parseable: '(forced-colors: active 0)'
|
||||
Pass Should be unknown: '(forced-colors: active 0)'
|
||||
Fail Should be parseable: '(forced-colors: none active)'
|
||||
Pass Should be parseable: '(forced-colors: none active)'
|
||||
Pass Should be unknown: '(forced-colors: none active)'
|
||||
Fail Should be parseable: '(forced-colors: active/none)'
|
||||
Pass Should be parseable: '(forced-colors: active/none)'
|
||||
Pass Should be unknown: '(forced-colors: active/none)'
|
||||
Pass Check that none evaluates to false in the boolean context
|
||||
|
|
@ -2,20 +2,19 @@ Harness status: OK
|
|||
|
||||
Found 15 tests
|
||||
|
||||
10 Pass
|
||||
5 Fail
|
||||
15 Pass
|
||||
Pass Should be known: '(inverted-colors)'
|
||||
Pass Should be known: '(inverted-colors: none)'
|
||||
Pass Should be known: '(inverted-colors: inverted)'
|
||||
Fail Should be parseable: '(inverted-colors: 0)'
|
||||
Pass Should be parseable: '(inverted-colors: 0)'
|
||||
Pass Should be unknown: '(inverted-colors: 0)'
|
||||
Fail Should be parseable: '(inverted-colors: no-preference)'
|
||||
Pass Should be parseable: '(inverted-colors: no-preference)'
|
||||
Pass Should be unknown: '(inverted-colors: no-preference)'
|
||||
Fail Should be parseable: '(inverted-colors: 10px)'
|
||||
Pass Should be parseable: '(inverted-colors: 10px)'
|
||||
Pass Should be unknown: '(inverted-colors: 10px)'
|
||||
Fail Should be parseable: '(inverted-colors: none inverted)'
|
||||
Pass Should be parseable: '(inverted-colors: none inverted)'
|
||||
Pass Should be unknown: '(inverted-colors: none inverted)'
|
||||
Fail Should be parseable: '(inverted-colors: none/inverted)'
|
||||
Pass Should be parseable: '(inverted-colors: none/inverted)'
|
||||
Pass Should be unknown: '(inverted-colors: none/inverted)'
|
||||
Pass Check that none evaluates to false in the boolean context
|
||||
Pass Check that invalid evaluates to false
|
||||
|
|
@ -2,18 +2,18 @@ Harness status: OK
|
|||
|
||||
Found 28 tests
|
||||
|
||||
20 Pass
|
||||
8 Fail
|
||||
26 Pass
|
||||
2 Fail
|
||||
Pass Should be known: '(overflow-inline)'
|
||||
Pass Should be known: '(overflow-inline: none)'
|
||||
Pass Should be known: '(overflow-inline: scroll)'
|
||||
Pass Should be parseable: 'overflow-inline'
|
||||
Fail Should be unknown: 'overflow-inline'
|
||||
Fail Should be parseable: '(overflow-inline: ?)'
|
||||
Pass Should be parseable: '(overflow-inline: ?)'
|
||||
Pass Should be unknown: '(overflow-inline: ?)'
|
||||
Fail Should be parseable: '(overflow-inline: 10px)'
|
||||
Pass Should be parseable: '(overflow-inline: 10px)'
|
||||
Pass Should be unknown: '(overflow-inline: 10px)'
|
||||
Fail Should be parseable: '(overflow-inline: 0)'
|
||||
Pass Should be parseable: '(overflow-inline: 0)'
|
||||
Pass Should be unknown: '(overflow-inline: 0)'
|
||||
Pass Should be known: '(overflow-block)'
|
||||
Pass Should be known: '(overflow-block: none)'
|
||||
|
|
@ -21,11 +21,11 @@ Pass Should be known: '(overflow-block: scroll)'
|
|||
Pass Should be known: '(overflow-block: paged)'
|
||||
Pass Should be parseable: 'overflow-block'
|
||||
Fail Should be unknown: 'overflow-block'
|
||||
Fail Should be parseable: '(overflow-block: ?)'
|
||||
Pass Should be parseable: '(overflow-block: ?)'
|
||||
Pass Should be unknown: '(overflow-block: ?)'
|
||||
Fail Should be parseable: '(overflow-block: 10px)'
|
||||
Pass Should be parseable: '(overflow-block: 10px)'
|
||||
Pass Should be unknown: '(overflow-block: 10px)'
|
||||
Fail Should be parseable: '(overflow-block: 0)'
|
||||
Pass Should be parseable: '(overflow-block: 0)'
|
||||
Pass Should be unknown: '(overflow-block: 0)'
|
||||
Pass Check that overflow-inline: scroll always matches non printing documents
|
||||
Pass Check that overflow-block: scroll always matches non printing documents
|
||||
|
|
|
|||
|
|
@ -2,23 +2,22 @@ Harness status: OK
|
|||
|
||||
Found 18 tests
|
||||
|
||||
11 Pass
|
||||
7 Fail
|
||||
18 Pass
|
||||
Pass Should be known: '(prefers-color-scheme)'
|
||||
Pass Should be known: '(prefers-color-scheme: light)'
|
||||
Pass Should be known: '(prefers-color-scheme: dark)'
|
||||
Fail Should be parseable: '(prefers-color-scheme: 0)'
|
||||
Pass Should be parseable: '(prefers-color-scheme: 0)'
|
||||
Pass Should be unknown: '(prefers-color-scheme: 0)'
|
||||
Fail Should be parseable: '(prefers-color-scheme: none)'
|
||||
Pass Should be parseable: '(prefers-color-scheme: none)'
|
||||
Pass Should be unknown: '(prefers-color-scheme: none)'
|
||||
Fail Should be parseable: '(prefers-color-scheme: 10px)'
|
||||
Pass Should be parseable: '(prefers-color-scheme: 10px)'
|
||||
Pass Should be unknown: '(prefers-color-scheme: 10px)'
|
||||
Fail Should be parseable: '(prefers-color-scheme: dark 0)'
|
||||
Pass Should be parseable: '(prefers-color-scheme: dark 0)'
|
||||
Pass Should be unknown: '(prefers-color-scheme: dark 0)'
|
||||
Fail Should be parseable: '(prefers-color-scheme: dark light)'
|
||||
Pass Should be parseable: '(prefers-color-scheme: dark light)'
|
||||
Pass Should be unknown: '(prefers-color-scheme: dark light)'
|
||||
Fail Should be parseable: '(prefers-color-scheme: light/dark)'
|
||||
Pass Should be parseable: '(prefers-color-scheme: light/dark)'
|
||||
Pass Should be unknown: '(prefers-color-scheme: light/dark)'
|
||||
Fail Should be parseable: '(prefers-color-scheme: no-preference)'
|
||||
Pass Should be parseable: '(prefers-color-scheme: no-preference)'
|
||||
Pass Should be unknown: '(prefers-color-scheme: no-preference)'
|
||||
Pass Check that prefer-color-scheme evaluates to true in the boolean context
|
||||
|
|
@ -2,20 +2,20 @@ Harness status: OK
|
|||
|
||||
Found 26 tests
|
||||
|
||||
18 Pass
|
||||
8 Fail
|
||||
25 Pass
|
||||
1 Fail
|
||||
Pass Should be known: '(prefers-contrast)'
|
||||
Pass Should be known: '(prefers-contrast: no-preference)'
|
||||
Pass Should be known: '(prefers-contrast: more)'
|
||||
Pass Should be known: '(prefers-contrast: less)'
|
||||
Pass Should be known: '(prefers-contrast: custom)'
|
||||
Fail Should be parseable: '(prefers-contrast: increase)'
|
||||
Pass Should be parseable: '(prefers-contrast: increase)'
|
||||
Pass Should be unknown: '(prefers-contrast: increase)'
|
||||
Fail Should be parseable: '(prefers-contrast: none)'
|
||||
Pass Should be parseable: '(prefers-contrast: none)'
|
||||
Pass Should be unknown: '(prefers-contrast: none)'
|
||||
Fail Should be parseable: '(prefers-contrast: forced high)'
|
||||
Pass Should be parseable: '(prefers-contrast: forced high)'
|
||||
Pass Should be unknown: '(prefers-contrast: forced high)'
|
||||
Fail Should be parseable: '(prefers-contrast: forced low)'
|
||||
Pass Should be parseable: '(prefers-contrast: forced low)'
|
||||
Pass Should be unknown: '(prefers-contrast: forced low)'
|
||||
Fail Should be parseable: '(prefers-contrast > increase)'
|
||||
Pass Should be unknown: '(prefers-contrast > increase)'
|
||||
|
|
@ -23,10 +23,10 @@ Pass Should be parseable: '(prefers-increased-contrast)'
|
|||
Pass Should be unknown: '(prefers-increased-contrast)'
|
||||
Pass Should be parseable: '(prefers-decreased-contrast)'
|
||||
Pass Should be unknown: '(prefers-decreased-contrast)'
|
||||
Fail Should be parseable: '(prefers-contrast: high)'
|
||||
Pass Should be parseable: '(prefers-contrast: high)'
|
||||
Pass Should be unknown: '(prefers-contrast: high)'
|
||||
Fail Should be parseable: '(prefers-contrast: low)'
|
||||
Pass Should be parseable: '(prefers-contrast: low)'
|
||||
Pass Should be unknown: '(prefers-contrast: low)'
|
||||
Fail Should be parseable: '(prefers-contrast: forced)'
|
||||
Pass Should be parseable: '(prefers-contrast: forced)'
|
||||
Pass Should be unknown: '(prefers-contrast: forced)'
|
||||
Pass Check boolean context evaluation.
|
||||
|
|
@ -2,22 +2,21 @@ Harness status: OK
|
|||
|
||||
Found 17 tests
|
||||
|
||||
11 Pass
|
||||
6 Fail
|
||||
17 Pass
|
||||
Pass Should be known: '(prefers-reduced-data)'
|
||||
Pass Should be known: '(prefers-reduced-data: no-preference)'
|
||||
Pass Should be known: '(prefers-reduced-data: reduce)'
|
||||
Fail Should be parseable: '(prefers-reduced-data: 0)'
|
||||
Pass Should be parseable: '(prefers-reduced-data: 0)'
|
||||
Pass Should be unknown: '(prefers-reduced-data: 0)'
|
||||
Fail Should be parseable: '(prefers-reduced-data: none)'
|
||||
Pass Should be parseable: '(prefers-reduced-data: none)'
|
||||
Pass Should be unknown: '(prefers-reduced-data: none)'
|
||||
Fail Should be parseable: '(prefers-reduced-data: 10px)'
|
||||
Pass Should be parseable: '(prefers-reduced-data: 10px)'
|
||||
Pass Should be unknown: '(prefers-reduced-data: 10px)'
|
||||
Fail Should be parseable: '(prefers-reduced-data: no-preference reduce)'
|
||||
Pass Should be parseable: '(prefers-reduced-data: no-preference reduce)'
|
||||
Pass Should be unknown: '(prefers-reduced-data: no-preference reduce)'
|
||||
Fail Should be parseable: '(prefers-reduced-data: reduced)'
|
||||
Pass Should be parseable: '(prefers-reduced-data: reduced)'
|
||||
Pass Should be unknown: '(prefers-reduced-data: reduced)'
|
||||
Fail Should be parseable: '(prefers-reduced-data: no-preference/reduce)'
|
||||
Pass Should be parseable: '(prefers-reduced-data: no-preference/reduce)'
|
||||
Pass Should be unknown: '(prefers-reduced-data: no-preference/reduce)'
|
||||
Pass Check that no-preference evaluates to false in the boolean context
|
||||
Pass Check that invalid evaluates to false
|
||||
|
|
@ -2,21 +2,20 @@ Harness status: OK
|
|||
|
||||
Found 16 tests
|
||||
|
||||
10 Pass
|
||||
6 Fail
|
||||
16 Pass
|
||||
Pass Should be known: '(prefers-reduced-motion)'
|
||||
Pass Should be known: '(prefers-reduced-motion: no-preference)'
|
||||
Pass Should be known: '(prefers-reduced-motion: reduce)'
|
||||
Fail Should be parseable: '(prefers-reduced-motion: 0)'
|
||||
Pass Should be parseable: '(prefers-reduced-motion: 0)'
|
||||
Pass Should be unknown: '(prefers-reduced-motion: 0)'
|
||||
Fail Should be parseable: '(prefers-reduced-motion: none)'
|
||||
Pass Should be parseable: '(prefers-reduced-motion: none)'
|
||||
Pass Should be unknown: '(prefers-reduced-motion: none)'
|
||||
Fail Should be parseable: '(prefers-reduced-motion: 10px)'
|
||||
Pass Should be parseable: '(prefers-reduced-motion: 10px)'
|
||||
Pass Should be unknown: '(prefers-reduced-motion: 10px)'
|
||||
Fail Should be parseable: '(prefers-reduced-motion: no-preference reduce)'
|
||||
Pass Should be parseable: '(prefers-reduced-motion: no-preference reduce)'
|
||||
Pass Should be unknown: '(prefers-reduced-motion: no-preference reduce)'
|
||||
Fail Should be parseable: '(prefers-reduced-motion: reduced)'
|
||||
Pass Should be parseable: '(prefers-reduced-motion: reduced)'
|
||||
Pass Should be unknown: '(prefers-reduced-motion: reduced)'
|
||||
Fail Should be parseable: '(prefers-reduced-motion: no-preference/reduce)'
|
||||
Pass Should be parseable: '(prefers-reduced-motion: no-preference/reduce)'
|
||||
Pass Should be unknown: '(prefers-reduced-motion: no-preference/reduce)'
|
||||
Pass Check that no-preference evaluates to false in the boolean context
|
||||
|
|
@ -2,22 +2,21 @@ Harness status: OK
|
|||
|
||||
Found 17 tests
|
||||
|
||||
11 Pass
|
||||
6 Fail
|
||||
17 Pass
|
||||
Pass Should be known: '(prefers-reduced-transparency)'
|
||||
Pass Should be known: '(prefers-reduced-transparency: no-preference)'
|
||||
Pass Should be known: '(prefers-reduced-transparency: reduce)'
|
||||
Fail Should be parseable: '(prefers-reduced-transparency: 0)'
|
||||
Pass Should be parseable: '(prefers-reduced-transparency: 0)'
|
||||
Pass Should be unknown: '(prefers-reduced-transparency: 0)'
|
||||
Fail Should be parseable: '(prefers-reduced-transparency: none)'
|
||||
Pass Should be parseable: '(prefers-reduced-transparency: none)'
|
||||
Pass Should be unknown: '(prefers-reduced-transparency: none)'
|
||||
Fail Should be parseable: '(prefers-reduced-transparency: 10px)'
|
||||
Pass Should be parseable: '(prefers-reduced-transparency: 10px)'
|
||||
Pass Should be unknown: '(prefers-reduced-transparency: 10px)'
|
||||
Fail Should be parseable: '(prefers-reduced-transparency: no-preference reduce)'
|
||||
Pass Should be parseable: '(prefers-reduced-transparency: no-preference reduce)'
|
||||
Pass Should be unknown: '(prefers-reduced-transparency: no-preference reduce)'
|
||||
Fail Should be parseable: '(prefers-reduced-transparency: reduced)'
|
||||
Pass Should be parseable: '(prefers-reduced-transparency: reduced)'
|
||||
Pass Should be unknown: '(prefers-reduced-transparency: reduced)'
|
||||
Fail Should be parseable: '(prefers-reduced-transparency: no-preference/reduce)'
|
||||
Pass Should be parseable: '(prefers-reduced-transparency: no-preference/reduce)'
|
||||
Pass Should be unknown: '(prefers-reduced-transparency: no-preference/reduce)'
|
||||
Pass Check that no-preference evaluates to false in the boolean context
|
||||
Pass Check that invalid evaluates to false
|
||||
|
|
@ -2,17 +2,16 @@ Harness status: OK
|
|||
|
||||
Found 12 tests
|
||||
|
||||
9 Pass
|
||||
3 Fail
|
||||
12 Pass
|
||||
Pass Should be known: '(scripting)'
|
||||
Pass Should be known: '(scripting: enabled)'
|
||||
Pass Should be known: '(scripting: initial-only)'
|
||||
Pass Should be known: '(scripting: none)'
|
||||
Fail Should be parseable: '(scripting: 0)'
|
||||
Pass Should be parseable: '(scripting: 0)'
|
||||
Pass Should be unknown: '(scripting: 0)'
|
||||
Fail Should be parseable: '(scripting: 10px)'
|
||||
Pass Should be parseable: '(scripting: 10px)'
|
||||
Pass Should be unknown: '(scripting: 10px)'
|
||||
Fail Should be parseable: '(scripting: invalid)'
|
||||
Pass Should be parseable: '(scripting: invalid)'
|
||||
Pass Should be unknown: '(scripting: invalid)'
|
||||
Pass Check that scripting currently matches 'enabled'
|
||||
Pass Check that scripting currently evaluates to true in the boolean context
|
||||
|
|
@ -2,17 +2,16 @@ Harness status: OK
|
|||
|
||||
Found 14 tests
|
||||
|
||||
11 Pass
|
||||
3 Fail
|
||||
14 Pass
|
||||
Pass Should be known: '(update)'
|
||||
Pass Should be known: '(update: none)'
|
||||
Pass Should be known: '(update: slow)'
|
||||
Pass Should be known: '(update: fast)'
|
||||
Fail Should be parseable: '(update: ?)'
|
||||
Pass Should be parseable: '(update: ?)'
|
||||
Pass Should be unknown: '(update: ?)'
|
||||
Fail Should be parseable: '(update: 10px)'
|
||||
Pass Should be parseable: '(update: 10px)'
|
||||
Pass Should be unknown: '(update: 10px)'
|
||||
Fail Should be parseable: '(update: 0)'
|
||||
Pass Should be parseable: '(update: 0)'
|
||||
Pass Should be unknown: '(update: 0)'
|
||||
Pass Check that update: fast always matches fast displays
|
||||
Pass Check that update: slow doesn't match fast displays
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue