Ignore:
Timestamp:
Apr 20, 2022, 4:51:47 AM (3 years ago)
Author:
cathiechen
Message:

Parsing of contain-intrinsic-size and adding a runtime flag for it
https://bugs.webkit.org/show_bug.cgi?id=238181

Reviewed by Simon Fraser.

LayoutTests/imported/w3c:

  • web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:
  • web-platform-tests/css/css-sizing/contain-intrinsic-size/animation/contain-intrinsic-size-interpolation-expected.txt:
  • web-platform-tests/css/css-sizing/contain-intrinsic-size/parsing/contain-intrinsic-size-computed-expected.txt:
  • web-platform-tests/css/css-sizing/contain-intrinsic-size/parsing/contain-intrinsic-size-valid-expected.txt:
  • web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt:

Source/WebCore:

Parsing of contain-intrinsic-size according to [1]. In order to parse the shorthand properly,
the latest draft has been updated to "none | <length> | auto <length>". ContainIntrinsicSizeType
in RenderStyle, indicates the type of value. containIntrinsicWidth/Height indicates the length
value for Length and AutoAndLength type.
Thanks to Rob Buis for helping with this patch.

[1] https://www.w3.org/TR/css-sizing-4/#intrinsic-size-override

  • animation/CSSPropertyAnimation.cpp:

(WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):

  • css/CSSComputedStyleDeclaration.cpp:

(WebCore::valueForContainIntrinsicSize):
(WebCore::ComputedStyleExtractor::valueForPropertyInStyle):

  • css/CSSProperties.json:
  • css/StyleProperties.cpp:

(WebCore::StyleProperties::getPropertyValue const):
(WebCore::StyleProperties::asTextInternal const):

  • css/parser/CSSParserContext.cpp:

(WebCore::operator==):
(WebCore::add):
(WebCore::CSSParserContext::isPropertyRuntimeDisabled const):

  • css/parser/CSSParserContext.h:
  • css/parser/CSSPropertyParser.cpp:

(WebCore::consumeContainIntrinsicSize):
(WebCore::CSSPropertyParser::parseSingleValue):
(WebCore::CSSPropertyParser::consumeContainIntrinsicSizeShorthand):
(WebCore::CSSPropertyParser::parseShorthand):

  • css/parser/CSSPropertyParser.h:
  • rendering/style/RenderStyle.h:

(WebCore::RenderStyle::containIntrinsicWidthType const):
(WebCore::RenderStyle::containIntrinsicHeightType const):
(WebCore::RenderStyle::containIntrinsicWidth const):
(WebCore::RenderStyle::containIntrinsicHeight const):
(WebCore::RenderStyle::setContainIntrinsicWidthType):
(WebCore::RenderStyle::setContainIntrinsicHeightType):
(WebCore::RenderStyle::setContainIntrinsicWidth):
(WebCore::RenderStyle::setContainIntrinsicHeight):
(WebCore::RenderStyle::initialContainIntrinsicWidthType):
(WebCore::RenderStyle::initialContainIntrinsicHeightType):
(WebCore::RenderStyle::initialContainIntrinsicWidth):
(WebCore::RenderStyle::initialContainIntrinsicHeight):

  • rendering/style/RenderStyleConstants.cpp:

(WebCore::operator<<):

  • rendering/style/RenderStyleConstants.h:
  • rendering/style/StyleRareNonInheritedData.cpp:

(WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
(WebCore::StyleRareNonInheritedData::operator== const):

  • rendering/style/StyleRareNonInheritedData.h:
  • style/StyleBuilderCustom.h:

(WebCore::Style::BuilderCustom::applyInitialContainIntrinsicWidth):
(WebCore::Style::BuilderCustom::applyInheritContainIntrinsicWidth):
(WebCore::Style::BuilderCustom::applyValueContainIntrinsicWidth):
(WebCore::Style::BuilderCustom::applyInitialContainIntrinsicHeight):
(WebCore::Style::BuilderCustom::applyInheritContainIntrinsicHeight):
(WebCore::Style::BuilderCustom::applyValueContainIntrinsicHeight):
(WebCore::Style::BuilderCustom::applyInitialContainIntrinsicBlockSize):
(WebCore::Style::BuilderCustom::applyInheritContainIntrinsicBlockSize):
(WebCore::Style::BuilderCustom::applyValueContainIntrinsicBlockSize):
(WebCore::Style::BuilderCustom::applyInitialContainIntrinsicInlineSize):
(WebCore::Style::BuilderCustom::applyInheritContainIntrinsicInlineSize):
(WebCore::Style::BuilderCustom::applyValueContainIntrinsicInlineSize):

Source/WTF:

  • Scripts/Preferences/WebPreferencesExperimental.yaml:

LayoutTests:

  • platform/gtk/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:
  • platform/gtk/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt:
  • platform/ios/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:
  • platform/ios/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt:
  • platform/wpe/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:
  • platform/wpe/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp

    r293089 r293090  
    16671667
    16681668    ASSERT_NOT_REACHED();
     1669    return cssValuePool.createIdentifierValue(CSSValueNone);
     1670}
     1671
     1672static Ref<CSSValue> valueForContainIntrinsicSize(const RenderStyle& style, const ContainIntrinsicSizeType& type, const std::optional<Length> containIntrinsicLength)
     1673{
     1674    auto& cssValuePool = CSSValuePool::singleton();
     1675
     1676    switch (type) {
     1677    case ContainIntrinsicSizeType::None:
     1678        return cssValuePool.createIdentifierValue(CSSValueNone);
     1679    case ContainIntrinsicSizeType::Length: {
     1680        ASSERT(containIntrinsicLength.has_value());
     1681        return zoomAdjustedPixelValueForLength(containIntrinsicLength.value(), style);
     1682    }
     1683    case ContainIntrinsicSizeType::AutoAndLength: {
     1684        auto autoValue = cssValuePool.createIdentifierValue(CSSValueAuto);
     1685        auto list = CSSValueList::createSpaceSeparated();
     1686        list->append(autoValue);
     1687        ASSERT(containIntrinsicLength.has_value());
     1688        list->append(zoomAdjustedPixelValueForLength(containIntrinsicLength.value(), style));
     1689        return list;
     1690    }
     1691    }
     1692    RELEASE_ASSERT_NOT_REACHED();
    16691693    return cssValuePool.createIdentifierValue(CSSValueNone);
    16701694}
     
    37633787            return list;
    37643788        }
     3789        case CSSPropertyContainIntrinsicSize: {
     3790            if (!m_element->document().settings().cssContainIntrinsicSizeEnabled())
     3791                return nullptr;
     3792            return getCSSPropertyValuesFor2SidesShorthand(containIntrinsicSizeShorthand());
     3793        }
     3794        case CSSPropertyContainIntrinsicWidth: {
     3795            if (!m_element->document().settings().cssContainIntrinsicSizeEnabled())
     3796                return nullptr;
     3797            return valueForContainIntrinsicSize(style, style.containIntrinsicWidthType(), style.containIntrinsicWidth());
     3798        }
     3799        case CSSPropertyContainIntrinsicHeight: {
     3800            if (!m_element->document().settings().cssContainIntrinsicSizeEnabled())
     3801                return nullptr;
     3802            return valueForContainIntrinsicSize(style, style.containIntrinsicHeightType(), style.containIntrinsicHeight());
     3803        }
    37653804        case CSSPropertyBackfaceVisibility:
    37663805            return cssValuePool.createIdentifierValue((style.backfaceVisibility() == BackfaceVisibility::Hidden) ? CSSValueHidden : CSSValueVisible);
     
    42224261        case CSSPropertyScrollPaddingInlineEnd:
    42234262        case CSSPropertyScrollPaddingInlineStart:
     4263        case CSSPropertyContainIntrinsicBlockSize:
     4264        case CSSPropertyContainIntrinsicInlineSize:
    42244265            ASSERT_NOT_REACHED();
    42254266            break;
Note: See TracChangeset for help on using the changeset viewer.