[webkit-changes] [WebKit/WebKit] 7ed83a: Implement css property contain-intrinsic-size

cathiechen noreply at github.com
Tue Oct 25 11:40:17 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 7ed83ab2929f7a2be55fb40888fea7ff02909f56
      https://github.com/WebKit/WebKit/commit/7ed83ab2929f7a2be55fb40888fea7ff02909f56
  Author: Cathie Chen <cathiechen at igalia.com>
  Date:   2022-10-25 (Tue, 25 Oct 2022)

  Changed paths:
    M LayoutTests/TestExpectations
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-003-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-004-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-005-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-009-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-029-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-030-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-031-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-032-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-logical-003-expected.txt
    M Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp
    M Source/WebCore/rendering/RenderBlock.cpp
    M Source/WebCore/rendering/RenderBlockFlow.cpp
    M Source/WebCore/rendering/RenderBox.cpp
    M Source/WebCore/rendering/RenderBox.h
    M Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp
    M Source/WebCore/rendering/RenderFileUploadControl.cpp
    M Source/WebCore/rendering/RenderFlexibleBox.cpp
    M Source/WebCore/rendering/RenderGrid.cpp
    M Source/WebCore/rendering/RenderGrid.h
    M Source/WebCore/rendering/RenderListBox.cpp
    M Source/WebCore/rendering/RenderMenuList.cpp
    M Source/WebCore/rendering/RenderReplaced.cpp
    M Source/WebCore/rendering/RenderReplaced.h
    M Source/WebCore/rendering/RenderSlider.cpp
    M Source/WebCore/rendering/RenderTextControl.cpp
    M Source/WebCore/rendering/RenderVideo.cpp
    M Source/WebCore/rendering/style/RenderStyle.cpp

  Log Message:
  -----------
  Implement css property contain-intrinsic-size
https://bugs.webkit.org/show_bug.cgi?id=238867

Reviewed by Alan Bujtas.

This patch adds support for contain-intrinsic-size value "none | <length>". The value "auto && <length>"
is not supported, because per [1] it depends on "content-visibility:auto" which is not supported yet.
Per [2], the properties allow elements with size containment to specify an explicit intrinsic inner size,
which is determined in RenderBox. These values will affect the intrinsic width calculation in computeIntrinsicLogicalWidths.
As to intrinsic height, the value will be overridden at the point after layout children and before logical height calculation.
For grid layout, we need to use explicit intrinsic inner size to calculate auto repetition, if width/height is auto.

[1] https://github.com/w3c/csswg-drafts/issues/6308
[2] https://www.w3.org/TR/css-sizing-4/#intrinsic-size-override

* LayoutTests/TestExpectations:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-003-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-004-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-005-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-009-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-029-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-030-expected.txt: The three failed cases are related to css scrollbar-gutter.
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-031-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-032-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-logical-003-expected.txt:
* Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp:
(WebCore::GridTrackSizingAlgorithm::computeGridContainerIntrinsicSizes): Set explicitIntrinsicInnerLogicalSize to m_minContentSize and m_maxContentSize.
(WebCore::GridTrackSizingAlgorithm::run): Don't skip stretching tracks for size containment if there is explicitIntrinsicInnerLogicalSize.
* Source/WebCore/rendering/RenderBlock.cpp:
(WebCore::RenderBlock::computeIntrinsicLogicalWidths const): Ditto.
* Source/WebCore/rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::computeIntrinsicLogicalWidths const): Ditto.
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::RenderBox::updateLogicalHeight): Set explicitIntrinsicHeight to logicalHeight if it exists.
(WebCore::RenderBox::computeLogicalHeightWithoutLayout const): We should take account of explicitIntrinsicInnerLogicalHeight here.
(WebCore::RenderBox::explicitIntrinsicInnerWidth const):
(WebCore::RenderBox::explicitIntrinsicInnerHeight const):
* Source/WebCore/rendering/RenderBox.h:
(WebCore::RenderBox::explicitIntrinsicInnerLogicalWidth const):
(WebCore::RenderBox::explicitIntrinsicInnerLogicalHeight const):
* Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp:
(WebCore::RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths const): Ditto.
* Source/WebCore/rendering/RenderFileUploadControl.cpp:
(WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths const): Ditto.
* Source/WebCore/rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths const): Ditto.
* Source/WebCore/rendering/RenderGrid.cpp:
(WebCore::RenderGrid::layoutBlock): Should use explicitIntrinsicInnerHeigth as the definite size if exists.
(WebCore::RenderGrid::computeIntrinsicLogicalWidths const): Don't add gutterSize if it's explicitIntrinsicInnerLogicalSize.
(WebCore::RenderGrid::computeTrackSizesForIndefiniteSize const): Ditto.
(WebCore::RenderGrid::explicitIntrinsicInnerLogicalSize const): Ditto.
(WebCore::RenderGrid::computeAutoRepeatTracksCount const): Use explicitIntrinsicInnerLogicalSize as availableSize if the size of grid container is not specified.
(WebCore::RenderGrid::computeEmptyTracksForAutoRepeat const): The tracks of grid container with size containment are not empty if hasExplicitIntrinsicInnerLogicalSize.
* Source/WebCore/rendering/RenderGrid.h:
* Source/WebCore/rendering/RenderListBox.cpp:
(WebCore::RenderListBox::computeIntrinsicLogicalWidths const): Ditto.
(WebCore::RenderListBox::computeLogicalHeight const): Use explicitIntrinsicInnerLogicalHeight as estimated height not the sum of item height.
* Source/WebCore/rendering/RenderMenuList.cpp:
(RenderMenuList::computeIntrinsicLogicalWidths const): Ditto.
* Source/WebCore/rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::computeIntrinsicRatioInformation const): Don't let size containment effect aspect ratio.
* Source/WebCore/rendering/RenderReplaced.h: Return explicitIntrinsicInnerSize if exits.
* Source/WebCore/rendering/RenderSlider.cpp:
(WebCore::RenderSlider::computeIntrinsicLogicalWidths const): Ditto.
* Source/WebCore/rendering/RenderTextControl.cpp:
(WebCore::RenderTextControl::computeIntrinsicLogicalWidths const): Ditto.
* Source/WebCore/rendering/RenderVideo.cpp:
(WebCore::RenderVideo::calculateIntrinsicSize):
* Source/WebCore/rendering/style/RenderStyle.cpp:
(WebCore::rareNonInheritedDataChangeRequiresLayout): The changes of contain-intrinsic-size should require layout.

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




More information about the webkit-changes mailing list