Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 8ffb76a8529413df5a14343f91fd615271befdc7
https://github.com/WebKit/WebKit/commit/8ffb76a8529413df5a14343f91fd615271befdc7
Author: Antti Koivisto <[email protected]>
Date: 2026-07-08 (Wed, 08 Jul 2026)
Changed paths:
M
LayoutTests/imported/w3c/web-platform-tests/css/css-mixins/function-parameter-types.tentative-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-mixins/local-if-substitution-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/attr-security-if-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-conditionals-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-conditionals.html
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-cycle-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-function-revert-rule-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-initial-unregistered-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-invalidation-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-media-invalidation-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-style-invalidation-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-supports-quirks-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/inherit-function-basic-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/random-in-if.tentative-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/viewport-units-scroll-no-cycles-001.tentative-expected.txt
M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M
Source/WebCore/css/CSSValueKeywords.in
M Source/WebCore/css/parser/CSSParserContext.cpp
M Source/WebCore/css/parser/CSSParserContext.h
M Source/WebCore/css/parser/CSSSubstitutionParser.cpp
M Source/WebCore/css/parser/CSSSupportsParser.h
A Source/WebCore/style/IfConditionEvaluator.cpp
A Source/WebCore/style/IfConditionEvaluator.h
M Source/WebCore/style/StyleSubstitutionResolver.cpp
M Source/WebCore/style/StyleSubstitutionResolver.h
Log Message:
-----------
[css-values-5] Implement if() arbitrary substitution function
https://bugs.webkit.org/show_bug.cgi?id=296995
rdar://158221024
Reviewed by Sam Weinig.
"The if() function is an arbitrary substitution function that represents
conditional values. Its argument
consists of an ordered semi-colon–separated list of statements, each consisting
of a condition followed by
a colon followed by a value. An if() function represents the value
corresponding to the first condition in
its
argument list to be true; if no condition matches, then the if() function
represents an empty token stream."
https://drafts.csswg.org/css-values-5/#if-notation
For example:
color: if(style(--foo > 100px): red; else: blue);
At parse time if() is validated only against a very permissive argument grammar.
The actual logic is in Style::SubstitutionResolver and runs from style builder.
The condition in each branch
is evaluated using IfConditionEvaluator until one matches. The if() function is
then substituted with the
content tokens of that branch.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-mixins/function-parameter-types.tentative-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-mixins/local-if-substitution-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/attr-security-if-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-conditionals-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-cycle-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-function-revert-rule-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-initial-unregistered-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-invalidation-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-media-invalidation-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-style-invalidation-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/if-supports-quirks-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/inherit-function-basic-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/random-in-if.tentative-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/viewport-units-scroll-no-cycles-001.tentative-expected.txt:
PASS->FAIL
cases were spurious passes in feature interaction tests.
* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/css/CSSValueKeywords.in:
* Source/WebCore/css/parser/CSSParserContext.cpp:
(WebCore::add):
* Source/WebCore/css/parser/CSSParserContext.h:
* Source/WebCore/css/parser/CSSSubstitutionParser.cpp:
(WebCore::classifyBlock):
Validate according to argument grammar.
(WebCore::isValidIfReference):
* Source/WebCore/style/IfConditionEvaluator.cpp: Added.
(WebCore::Style::IfConditionEvaluator::evaluate):
(WebCore::Style::IfConditionEvaluator::evaluateQueryInParens const):
(WebCore::Style::IfConditionEvaluator::evaluateFeature const):
* Source/WebCore/style/IfConditionEvaluator.h: Added.
(WebCore::Style::IfConditionEvaluator::IfConditionEvaluator):
Introduce IfConditionEvaluator for evaluating the condition. It uses the
existing container query
machinery.
* Source/WebCore/style/StyleSubstitutionResolver.cpp:
(WebCore::Style::SubstitutionResolver::substituteIfArgumentGrammar):
(WebCore::Style::SubstitutionResolver::substituteIfFunction):
Pick a branch to substitute based on evaluation result.
(WebCore::Style::SubstitutionResolver::substituteTokenRange):
* Source/WebCore/style/StyleSubstitutionResolver.h:
Canonical link:
https://flagged.apple.com:443/proxy?t2=Df8Q5z4uZ8&o=aHR0cHM6Ly9jb21taXRzLndlYmtpdC5vcmcvMzE2NzUyQG1haW4=&emid=50483cb3-9580-4531-aa89-08e74d43a804&c=11
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications