LibWeb/CSS: Serialize Supports::Declaration as original representation

Fixes some WPT tests that expected `supports(foo:bar)` to serialize as
`supports(foo:bar)`, instead of `supports(foo: bar)` with a space
between.

Reading the original_full_text directly also lets us delete
Declaration::to_string(), which was only used here.
This commit is contained in:
Sam Atkins 2025-12-01 14:27:50 +00:00
parent db910c68a3
commit b376ab4e81
Notes: github-actions[bot] 2025-12-02 09:50:44 +00:00
4 changed files with 8 additions and 28 deletions

View file

@ -398,11 +398,11 @@ OwnPtr<Supports::Declaration> Parser::parse_supports_declaration(TokenStream<Com
// NB: Here, we only care about the <declaration> part.
auto transaction = tokens.begin_transaction();
tokens.discard_whitespace();
if (auto declaration = consume_a_declaration(tokens); declaration.has_value()) {
if (auto declaration = consume_a_declaration(tokens, Nested::No, SaveOriginalText::Yes); declaration.has_value()) {
tokens.discard_whitespace();
if (!tokens.has_next_token()) {
transaction.commit();
return Supports::Declaration::create(declaration->to_string(), convert_to_style_property(*declaration).has_value());
return Supports::Declaration::create(declaration->original_full_text.release_value(), convert_to_style_property(*declaration).has_value());
}
}
return {};

View file

@ -12,23 +12,6 @@
namespace Web::CSS::Parser {
String Declaration::to_string() const
{
if (original_value_text.has_value())
return original_value_text.value();
StringBuilder builder;
serialize_an_identifier(builder, name);
builder.append(": "sv);
builder.join(' ', value);
if (important == Important::Yes)
builder.append(" !important"sv);
return MUST(builder.to_string());
}
String SimpleBlock::to_string() const
{
StringBuilder builder;

View file

@ -58,9 +58,6 @@ struct Declaration {
Important important = Important::No;
Optional<String> original_value_text = {};
Optional<String> original_full_text = {};
// FIXME: Only needed by our janky @supports re-serialization-re-parse code.
String to_string() const;
};
struct SubstitutionFunctionsPresence {

View file

@ -2,12 +2,12 @@ Harness status: OK
Found 22 tests
16 Pass
6 Fail
20 Pass
2 Fail
Pass @import url("nonexist.css") supports(); should be an invalid import rule due to an invalid supports() declaration
Pass @import url("nonexist.css") supports(foo: bar); should be an invalid import rule due to an invalid supports() declaration
Fail @import url("nonexist.css") supports(display:block); should be a valid supports() import rule
Fail @import url("nonexist.css") supports((display:flex)); should be a valid supports() import rule
Pass @import url("nonexist.css") supports(display:block); should be a valid supports() import rule
Pass @import url("nonexist.css") supports((display:flex)); should be a valid supports() import rule
Pass @import url("nonexist.css") supports(not (display: flex)); should be a valid supports() import rule
Pass @import url("nonexist.css") supports((display: flex) and (display: block)); should be a valid supports() import rule
Pass @import url("nonexist.css") supports((display: flex) or (display: block)); should be a valid supports() import rule
@ -23,6 +23,6 @@ Pass @import url("nonexist.css") supports(selector(p > a)); should be a valid su
Pass @import url("nonexist.css") supports(selector(p + a)); should be a valid supports() import rule
Pass @import url("nonexist.css") supports(font-tech(color-colrv1)); should be a valid supports() import rule
Pass @import url("nonexist.css") supports(font-format(opentype)); should be a valid supports() import rule
Fail @import url(nonexist.css) supports(display:block); should be a valid supports() import rule
Fail @import "nonexist.css" supports(display:block); should be a valid supports() import rule
Pass @import url(nonexist.css) supports(display:block); should be a valid supports() import rule
Pass @import "nonexist.css" supports(display:block); should be a valid supports() import rule
Pass @import url("nonexist.css") supports; should still be a valid import rule with an invalid supports() declaration