Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 334dd2883a2c25b8ba9839a86db632738101155f
https://github.com/WebKit/WebKit/commit/334dd2883a2c25b8ba9839a86db632738101155f
Author: Alan Baradlay <[email protected]>
Date: 2026-10-01 (Thu, 01 Oct 2026)
Changed paths:
M LayoutTests/TestExpectations
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/animation/calc-size-width-interpolation-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/animation/interpolate-size-logical-properties-interpolation-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/animation/interpolate-size-which-value-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/animation/interpolate-size-width-composition-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/animation/interpolate-size-width-interpolation-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-flex-basis-on-row-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-list-box-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-list-box.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-replaced-element-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-replaced-element.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-table-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-table.html
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-width-box-sizing-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-width-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-iteration-composite-operation-expected.txt
M
LayoutTests/platform/glib/imported/w3c/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-iteration-composite-operation-expected.txt
M Source/WebCore/rendering/RenderBlock.cpp
M Source/WebCore/rendering/RenderBox.cpp
M Source/WebCore/rendering/RenderBox.h
M Source/WebCore/rendering/RenderListBox.cpp
M Source/WebCore/rendering/RenderMenuList.cpp
M Source/WebCore/rendering/RenderReplaced.cpp
M Source/WebCore/rendering/RenderTable.cpp
M Source/WebCore/style/values/primitives/StyleCalcSizeValue+Evaluation.h
M Source/WebCore/style/values/primitives/StyleCalcSizeValue.cpp
M Source/WebCore/style/values/primitives/StyleSizeOrKeyword.h
M Source/WebCore/style/values/primitives/StyleUnevaluatedCalcSize.cpp
M Source/WebCore/style/values/primitives/StyleUnevaluatedCalcSize.h
Log Message:
-----------
[css-values-5 calc-size()] Resolve intrinsic keyword bases at layout time
https://bugs.webkit.org/show_bug.cgi?id=324398
<rdar://problem/187631328>
Reviewed by Antti Koivisto.
<div style="display: inline-block">
<div style="width: calc-size(max-content, size * 2)">
<div style="width: 60px"></div>
</div>
</div>
The middle box's max-content width is 60px, so `size` is 60px and the box
resolves to 120px.
The inline-block sizes to what that box contributes, so it is 120px too.
Layout works out what the basis keyword resolves to and substitutes it for
`size`.
This is the inline axis only.
Tests:
imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-list-box.html
imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-replaced-element.html
imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-table.html
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::RenderBox::computeSizingKeywordLogicalWidthUsingGeneric const):
(WebCore::RenderBox::resolveCalcSizeLogicalWidth const):
Substitutes that used size for `size`, taking a content box width and answering
one, and measuring
the calculation in the box that box-sizing asks for.
* Source/WebCore/rendering/RenderBox.h:
* Source/WebCore/rendering/RenderBlock.cpp:
(WebCore::RenderBlock::computeIntrinsicLogicalWidthContributions):
Contributes the result of the calculation rather than the size of its basis,
for every basis but
`auto`, which has no intrinsic width to stand for.
* Source/WebCore/rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::computeReplacedLogicalWidthUsing const):
Passes the whole value on, since switchOn() hands the visitor the basis keyword
alone.
* Source/WebCore/rendering/RenderTable.cpp:
(WebCore::RenderTable::computeIntrinsicLogicalWidthContributions):
The same, keeping cell spacing inside `size` because a table's used width
includes it.
* Source/WebCore/rendering/RenderListBox.cpp:
(WebCore::RenderListBox::computeIntrinsicLogicalWidthContributions):
The same, for a list box.
* Source/WebCore/rendering/RenderMenuList.cpp:
(WebCore::RenderMenuList::computeIntrinsicLogicalWidthContributions):
The same, for a drop-down box.
* Source/WebCore/style/values/primitives/StyleSizeOrKeyword.h:
(WebCore::Style::SizeOrKeyword::calcSize const):
Hands out the calc-size() a size value holds, so callers need not spell out the
alternative.
* Source/WebCore/style/values/primitives/StyleCalcSizeValue.cpp:
(WebCore::Style::evaluateCalcSize):
Answers a keyword basis with the size layout passed in instead of asserting,
and hands it down to a
nested calc-size() as well.
* Source/WebCore/style/values/primitives/StyleCalcSizeValue+Evaluation.h:
* Source/WebCore/style/values/primitives/StyleUnevaluatedCalcSize.h:
* Source/WebCore/style/values/primitives/StyleUnevaluatedCalcSize.cpp:
(WebCore::Style::UnevaluatedCalcSize::evaluate const):
Takes the size the basis keyword stands for, in an overload of its own so that
a caller either has
one or is resolving a value that cannot mention `size` at all.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/animation/calc-size-width-interpolation-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-width-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-flex-basis-on-row-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-width-box-sizing-expected.txt:
* LayoutTests/TestExpectations:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-replaced-element.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-replaced-element-expected.txt:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-table.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-table-expected.txt:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-list-box.html:
Added.
Covers a list box and a drop-down box, since a UA is free to render either
one as the other.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/calc-size-list-box-expected.txt:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/animation/interpolate-size-logical-properties-interpolation-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/animation/interpolate-size-which-value-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/animation/interpolate-size-width-composition-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-values/calc-size/animation/interpolate-size-width-interpolation-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-iteration-composite-operation-expected.txt:
*
LayoutTests/platform/glib/imported/w3c/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-iteration-composite-operation-expected.txt:
Canonical link: https://commits.webkit.org/322423@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications