LibWeb: Allow anonymous layer block rule with no declarations

This commit is contained in:
Tim Ledbetter 2025-06-17 08:01:49 +01:00 committed by Sam Atkins
commit 701fcb9e87
Notes: github-actions[bot] 2025-06-17 07:59:15 +00:00
6 changed files with 51 additions and 2 deletions

View file

@ -441,6 +441,7 @@ Optional<AtRule> Parser::consume_an_at_rule(TokenStream<T>& input, Nested nested
.name = ((Token)input.consume_a_token()).at_keyword(),
.prelude = {},
.child_rules_and_lists_of_declarations = {},
.is_block_rule = false,
};
// Process input:
@ -479,6 +480,7 @@ Optional<AtRule> Parser::consume_an_at_rule(TokenStream<T>& input, Nested nested
// Consume a block from input, and assign the result to rules child rules.
m_rule_context.append(rule_context_type_for_at_rule(rule.name));
rule.child_rules_and_lists_of_declarations = consume_a_block(input);
rule.is_block_rule = true;
m_rule_context.take_last();
// If rule is valid in the current context, return it. Otherwise, return nothing.

View file

@ -288,7 +288,7 @@ Optional<FlyString> Parser::parse_layer_name(TokenStream<ComponentValue>& tokens
GC::Ptr<CSSRule> Parser::convert_to_layer_rule(AtRule const& rule, Nested nested)
{
// https://drafts.csswg.org/css-cascade-5/#at-layer
if (!rule.child_rules_and_lists_of_declarations.is_empty()) {
if (rule.is_block_rule) {
// CSSLayerBlockRule
// @layer <layer-name>? {
// <rule-list>

View file

@ -31,6 +31,7 @@ struct AtRule {
FlyString name;
Vector<ComponentValue> prelude;
Vector<RuleOrListOfDeclarations> child_rules_and_lists_of_declarations;
bool is_block_rule { false };
void for_each(AtRuleVisitor&& visit_at_rule, QualifiedRuleVisitor&& visit_qualified_rule, DeclarationVisitor&& visit_declaration) const;
void for_each_as_declaration_list(DeclarationVisitor&& visit) const;