⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 293288 in webkit


Ignore:
Timestamp:
Apr 22, 2022, 11:44:03 PM (4 years ago)
Author:
cathiechen
Message:

The layout is not updated when style.contain is changed from "size"/"inline-size" to empty string
https://bugs.webkit.org/show_bug.cgi?id=239489

Reviewed by Rob Buis.

LayoutTests/imported/w3c:

  • web-platform-tests/css/css-contain/contain-inline-size-removed-expected.html: Added.
  • web-platform-tests/css/css-contain/contain-inline-size-removed.html: Added.
  • web-platform-tests/css/css-contain/contain-size-removed-expected.html: Added.
  • web-platform-tests/css/css-contain/contain-size-removed.html: Added.
  • web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-004-expected.txt:
  • web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-005-expected.txt:

Source/WebCore:

Unlike "layout", "paint" and "style" containment, being a "size" and "inline-size" containment or not affects the layout size of the element.
So it should require layout when a normal element becomes a "size"/"inline-size" containment, vice versa.

Tests: imported/w3c/web-platform-tests/css/css-contain/contain-inline-size-removed.html

imported/w3c/web-platform-tests/css/css-contain/contain-size-removed.html

  • rendering/style/RenderStyle.cpp:

(WebCore::rareNonInheritedDataChangeRequiresLayout):
(WebCore::RenderStyle::effectiveContainment const): Deleted. Moved to StyleRareNonInheritedData.

  • rendering/style/RenderStyle.h:

(WebCore::RenderStyle::effectiveContainment const):

  • rendering/style/StyleRareNonInheritedData.cpp:

(WebCore::StyleRareNonInheritedData::effectiveContainment const):

  • rendering/style/StyleRareNonInheritedData.h:
Location:
trunk
Files:
4 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r293209 r293288  
     12022-04-22  Cathie Chen  <cathiechen@igalia.com>
     2
     3        The layout is not updated when style.contain is changed from "size"/"inline-size" to empty string
     4        https://bugs.webkit.org/show_bug.cgi?id=239489
     5
     6        Reviewed by Rob Buis.
     7
     8        * web-platform-tests/css/css-contain/contain-inline-size-removed-expected.html: Added.
     9        * web-platform-tests/css/css-contain/contain-inline-size-removed.html: Added.
     10        * web-platform-tests/css/css-contain/contain-size-removed-expected.html: Added.
     11        * web-platform-tests/css/css-contain/contain-size-removed.html: Added.
     12        * web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-004-expected.txt:
     13        * web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-005-expected.txt:
     14
    1152022-04-21  Rob Buis  <rbuis@igalia.com>
    216
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-004-expected.txt

    r291797 r293288  
    1 50
     10
    22
    3 FAIL contain-intrinsic-size: auto assert_equals: expected 1 but got 50
     3FAIL contain-intrinsic-size: auto assert_equals: expected 1 but got 0
    44
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-005-expected.txt

    r291797 r293288  
    1 50
     10
    22
    3 FAIL contain-intrinsic-size: auto assert_equals: expected 1 but got 50
     3FAIL contain-intrinsic-size: auto assert_equals: expected 1 but got 0
    44
  • trunk/Source/WebCore/ChangeLog

    r293287 r293288  
     12022-04-22  Cathie Chen  <cathiechen@igalia.com>
     2
     3        The layout is not updated when style.contain is changed from "size"/"inline-size" to empty string
     4        https://bugs.webkit.org/show_bug.cgi?id=239489
     5
     6        Reviewed by Rob Buis.
     7
     8        Unlike "layout", "paint" and "style" containment, being a "size" and "inline-size" containment or not affects the layout size of the element.
     9        So it should require layout when a normal element becomes a "size"/"inline-size" containment, vice versa.
     10
     11        Tests: imported/w3c/web-platform-tests/css/css-contain/contain-inline-size-removed.html
     12               imported/w3c/web-platform-tests/css/css-contain/contain-size-removed.html
     13
     14        * rendering/style/RenderStyle.cpp:
     15        (WebCore::rareNonInheritedDataChangeRequiresLayout):
     16        (WebCore::RenderStyle::effectiveContainment const): Deleted. Moved to StyleRareNonInheritedData.
     17        * rendering/style/RenderStyle.h:
     18        (WebCore::RenderStyle::effectiveContainment const):
     19        * rendering/style/StyleRareNonInheritedData.cpp:
     20        (WebCore::StyleRareNonInheritedData::effectiveContainment const):
     21        * rendering/style/StyleRareNonInheritedData.h:
     22
    1232022-04-22  Rob Buis  <rbuis@igalia.com>
    224
  • trunk/Source/WebCore/rendering/style/RenderStyle.cpp

    r293028 r293288  
    775775
    776776    if (first.inputSecurity != second.inputSecurity)
     777        return true;
     778
     779    if (first.effectiveContainment().contains(Containment::Size) != second.effectiveContainment().contains(Containment::Size)
     780        || first.effectiveContainment().contains(Containment::InlineSize) != second.effectiveContainment().contains(Containment::InlineSize))
    777781        return true;
    778782
     
    28952899}
    28962900
    2897 OptionSet<Containment> RenderStyle::effectiveContainment() const
    2898 {
    2899     auto containment = contain();
    2900 
    2901     switch (containerType()) {
    2902     case ContainerType::None:
    2903         break;
    2904     case ContainerType::Size:
    2905         containment.add({ Containment::Layout, Containment::Style, Containment::Size });
    2906         break;
    2907     case ContainerType::InlineSize:
    2908         containment.add({ Containment::Layout, Containment::Style, Containment::InlineSize });
    2909         break;
    2910     };
    2911 
    2912     return containment;
    2913 }
    2914 
    29152901UserSelect RenderStyle::effectiveUserSelect() const
    29162902{
  • trunk/Source/WebCore/rendering/style/RenderStyle.h

    r293090 r293288  
    537537    bool hasAspectRatio() const { return aspectRatioType() == AspectRatioType::Ratio || aspectRatioType() == AspectRatioType::AutoAndRatio; }
    538538    OptionSet<Containment> contain() const { return m_rareNonInheritedData->contain; }
    539     OptionSet<Containment> effectiveContainment() const;
     539    OptionSet<Containment> effectiveContainment() const { return m_rareNonInheritedData->effectiveContainment(); }
    540540    bool containsLayout() const { return effectiveContainment().contains(Containment::Layout); }
    541541    bool containsSize() const { return effectiveContainment().contains(Containment::Size); }
  • trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp

    r293090 r293288  
    367367}
    368368
     369OptionSet<Containment> StyleRareNonInheritedData::effectiveContainment() const
     370{
     371    auto containment = contain;
     372
     373    switch (static_cast<ContainerType>(containerType)) {
     374    case ContainerType::None:
     375        break;
     376    case ContainerType::Size:
     377        containment.add({ Containment::Layout, Containment::Style, Containment::Size });
     378        break;
     379    case ContainerType::InlineSize:
     380        containment.add({ Containment::Layout, Containment::Style, Containment::InlineSize });
     381        break;
     382    };
     383
     384    return containment;
     385}
     386
    369387#if ENABLE(FILTERS_LEVEL_2)
    370388
  • trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h

    r293090 r293288  
    105105    bool hasOpacity() const { return opacity < 1; }
    106106
     107    OptionSet<Containment> effectiveContainment() const;
     108
    107109    float opacity;
    108110
Note: See TracChangeset for help on using the changeset viewer.