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

Reply via email to