Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: aa31f29c3a430559a383f708cb40164926265087
      
https://github.com/WebKit/WebKit/commit/aa31f29c3a430559a383f708cb40164926265087
  Author: Kiet Ho <[email protected]>
  Date:   2026-07-30 (Thu, 30 Jul 2026)

  Changed paths:
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-conditional/container-queries/at-container-parsing-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-conditional/container-queries/at-container-serialization-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-conditional/container-queries/multiple-size-containers-comma-separated-queries-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-conditional/container-queries/multiple-style-containers-comma-separated-queries-expected.txt
    M LayoutTests/inspector/css/setGroupingHeaderText-expected.txt
    M LayoutTests/inspector/css/setGroupingHeaderText.html
    M Source/WebCore/css/CSSContainerRule.cpp
    M Source/WebCore/css/parser/CSSParser.cpp
    M Source/WebCore/css/query/ContainerQuery.cpp
    M Source/WebCore/css/query/ContainerQuery.h
    M Source/WebCore/css/query/ContainerQueryParser.cpp
    M Source/WebCore/css/query/ContainerQueryParser.h
    M Source/WebCore/css/query/GenericMediaQueryParser.h
    M Source/WebCore/style/ContainerQueryEvaluator.cpp
    M Source/WebCore/style/ContainerQueryEvaluator.h
    M Source/WebCore/style/StyleScopeRuleSets.cpp

  Log Message:
  -----------
  [css-conditional-5] @container: support comma-separated list of conditions
rdar://182249814
https://bugs.webkit.org/show_bug.cgi?id=319429

Reviewed by Tim Nguyen.

Per spec [1], @container accepts a "container query", which is a list of
"container conditions", at least one of which must evaluate to true for
the @container rule to apply. WebKit currently only supports one condition,
so this patch implements support for a list of conditions.

NOTE: WebCore used to call the "container condition" in the spec as
"container query" (e.g ContainerQuery struct). This patch renames all
mentions of "container query" to "container condition", and make
"container query" mean the list of container conditions.

[1]: https://drafts.csswg.org/css-conditional-5/#container-rule

Tests: 
imported/w3c/web-platform-tests/css/css-conditional/container-queries/at-container-parsing.html
       
imported/w3c/web-platform-tests/css/css-conditional/container-queries/at-container-serialization.html
       
imported/w3c/web-platform-tests/css/css-conditional/container-queries/multiple-size-containers-comma-separated-queries.html
       
imported/w3c/web-platform-tests/css/css-conditional/container-queries/multiple-style-containers-comma-separated-queries-expected.html
       inspector/css/setGroupingHeaderText.html

* 
LayoutTests/imported/w3c/web-platform-tests/css/css-conditional/container-queries/at-container-parsing-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-conditional/container-queries/at-container-serialization-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-conditional/container-queries/multiple-size-containers-comma-separated-queries-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-conditional/container-queries/multiple-style-containers-comma-separated-queries-expected.txt:
    - Test progression.

* LayoutTests/inspector/css/setGroupingHeaderText-expected.txt:
* LayoutTests/inspector/css/setGroupingHeaderText.html:
    - This test sets @container condition to a list of valid/invalid conditions,
      and check whether the condition is correctly accepted/rejected. Some 
invalid
      conditions tested (e.g "screen, (max-width: 9999px)") are now valid as we
      support comma-separated list now, so mark them as valid in the test.

* Source/WebCore/css/CSSContainerRule.cpp:
(WebCore::CSSContainerRule::cssText const):
    - Re-use the condition serialization logic in conditionText()

(WebCore::CSSContainerRule::containerName const):
(WebCore::CSSContainerRule::containerQuery const):
    - Per spec, change these two methods to return an empty string if more than
      one conditions are specified.

* Source/WebCore/css/parser/CSSParser.cpp:
(WebCore::CSSParser::consumeContainerRule):
    - Don't need to check that the prelude is entirely consumed, that's done in
      ContainerQueryParser::consumeContainerQuery.

* Source/WebCore/css/query/ContainerQuery.cpp:
(WebCore::CQ::serialize):
* Source/WebCore/css/query/ContainerQuery.h:
    - Rename ContainerQuery to ContainerCondition, as it represents a 
"container condition"
    - Add a ContainerQuery, which is a Vector of ContainerCondition.
    - Add a serialize() method method to serialize the new ContainerQuery.

* Source/WebCore/css/query/ContainerQueryParser.cpp:
(WebCore::CQ::ContainerQueryParser::consumeContainerQuery):
(WebCore::CQ::ContainerQueryParser::consumeContainerCondition):
* Source/WebCore/css/query/ContainerQueryParser.h:
    - Rename consumeContainerQuery to consumeContainerCondition
    - Add consumeContainerQuery that uses consumeContainerCondition to parse the
      container query.

* Source/WebCore/css/query/GenericMediaQueryParser.h:
(WebCore::MQ::GenericMediaQueryParser<ConcreteParser>::consumeCondition):
    - Tweak the method to not reject the parsed condition if there're still 
tokens
      to be consumed. ContainerQueryParser::consumeContainerQuery can then use 
this
      to repeatedly consume a comma-separated list of conditions until the token
      range is exhausted.

(WebCore::MQ::GenericMediaQueryParser<ConcreteParser>::consumeQueryInParens):
    - Try to consume <query-in-parens> as feature first before consuming it as
      a recursive condition.

* Source/WebCore/style/ContainerQueryEvaluator.cpp:
(WebCore::Style::ContainerQueryEvaluator::evaluate const):
    - Change this method to evaluate a container query. A container query is 
true
      if any container conditions is true.

(WebCore::Style::ContainerQueryEvaluator::featureEvaluationContextForCondition 
const):
(WebCore::Style::ContainerQueryEvaluator::featureEvaluationContextForQuery 
const): Deleted.
* Source/WebCore/style/ContainerQueryEvaluator.h:
    - Rename featureEvaluationContextForQuery to 
featureEvaluationContextForCondition.

* Source/WebCore/style/StyleScopeRuleSets.cpp:
(WebCore::Style::ScopeRuleSets::customPropertyNamesInStyleContainerQueries 
const):
    - Tweak the method to collect custom property names from all conditions
      in the container query.

Canonical link: https://commits.webkit.org/318233@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to