Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: d7aed1e4ddffee252473469567148feb4fa1fac4
      
https://github.com/WebKit/WebKit/commit/d7aed1e4ddffee252473469567148feb4fa1fac4
  Author: Sam Weinig <[email protected]>
  Date:   2024-08-23 (Fri, 23 Aug 2024)

  Changed paths:
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-color-function-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-color-function.html
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-color-mix-function-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-color-mix-function.html
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-hsl-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-hsl.html
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-hwb-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-hwb.html
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-lab-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-lab.html
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-rgb-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-rgb.html
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-color-function-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-color-function.html
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-color-mix-function-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-color-mix-function.html
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-hsl-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-hsl.html
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-hwb-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-hwb.html
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-lab-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-lab.html
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-rgb-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-rgb.html
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    A Source/WebCore/css/calc/CSSCalcTree+Copy.cpp
    A Source/WebCore/css/calc/CSSCalcTree+Copy.h
    M Source/WebCore/css/calc/CSSCalcTree+Parser.cpp
    M Source/WebCore/css/calc/CSSCalcTree+Serialization.cpp
    M Source/WebCore/css/calc/CSSCalcTree+Serialization.h
    M Source/WebCore/css/calc/CSSCalcTree.cpp
    M Source/WebCore/css/calc/CSSCalcValue.cpp
    M Source/WebCore/css/calc/CSSCalcValue.h
    M Source/WebCore/css/color/CSSAbsoluteColorResolver.h
    A Source/WebCore/css/color/CSSAbsoluteColorSerialization.h
    M Source/WebCore/css/color/CSSColorConversion+ToTypedColor.h
    M Source/WebCore/css/color/CSSColorMixSerialization.cpp
    M Source/WebCore/css/color/CSSColorMixSerialization.h
    M Source/WebCore/css/color/CSSRelativeColorResolver.h
    R Source/WebCore/css/color/CSSUnresolvedAbsoluteColor.cpp
    M Source/WebCore/css/color/CSSUnresolvedAbsoluteColor.h
    A Source/WebCore/css/color/CSSUnresolvedAbsoluteResolvedColor.cpp
    A Source/WebCore/css/color/CSSUnresolvedAbsoluteResolvedColor.h
    M Source/WebCore/css/color/CSSUnresolvedColor.cpp
    M Source/WebCore/css/color/CSSUnresolvedColor.h
    M Source/WebCore/css/color/CSSUnresolvedColorHex.h
    M Source/WebCore/css/color/CSSUnresolvedColorKeyword.cpp
    M Source/WebCore/css/color/CSSUnresolvedColorKeyword.h
    M Source/WebCore/css/color/CSSUnresolvedColorLayers.cpp
    M Source/WebCore/css/color/CSSUnresolvedColorLayers.h
    M Source/WebCore/css/color/CSSUnresolvedColorMix.cpp
    M Source/WebCore/css/color/CSSUnresolvedColorMix.h
    R Source/WebCore/css/color/CSSUnresolvedColorResolutionContext.cpp
    R Source/WebCore/css/color/CSSUnresolvedColorResolutionContext.h
    A Source/WebCore/css/color/CSSUnresolvedColorResolutionState.cpp
    A Source/WebCore/css/color/CSSUnresolvedColorResolutionState.h
    M Source/WebCore/css/color/CSSUnresolvedLightDark.cpp
    M Source/WebCore/css/color/CSSUnresolvedLightDark.h
    M Source/WebCore/css/color/CSSUnresolvedRelativeColor.h
    A Source/WebCore/css/color/CSSUnresolvedStyleColorResolutionState.h
    M Source/WebCore/css/color/StyleColor.cpp
    M Source/WebCore/css/color/StyleColor.h
    M Source/WebCore/css/color/StyleColorLayers.cpp
    M Source/WebCore/css/color/StyleColorLayers.h
    M Source/WebCore/css/color/StyleColorMix.cpp
    M Source/WebCore/css/color/StyleColorMix.h
    M Source/WebCore/css/color/StyleRelativeColor.h
    M Source/WebCore/css/parser/CSSPropertyParserConsumer+Color.cpp
    M Source/WebCore/css/parser/CSSPropertyParserConsumer+Color.h
    M Source/WebCore/css/parser/CSSPropertyParserConsumer+RawResolver.cpp
    M Source/WebCore/css/parser/CSSPropertyParserConsumer+UnevaluatedCalc.cpp
    M Source/WebCore/css/parser/CSSPropertyParserConsumer+UnevaluatedCalc.h
    M Source/WebCore/html/canvas/CanvasStyle.cpp
    M Source/WebCore/platform/calc/CalculationTree+Copy.cpp
    M Source/WebCore/style/ColorFromPrimitiveValue.cpp
    M Source/WebCore/style/ColorFromPrimitiveValue.h
    M Source/WebCore/style/FilterOperationsBuilder.cpp
    M Source/WebCore/style/StyleBuilderState.cpp

  Log Message:
  -----------
  Support CSS color values that use calc() with non-absolute lengths
https://bugs.webkit.org/show_bug.cgi?id=278547

Reviewed by Darin Adler.

Adds support for CSS colors that use calc() with non-absolute lengths
such as:

    hsl(calc(50deg + (sign(1em - 10px) * 10deg)), 100%, 37.5%, 50%)

These have the special property that their calc() cannot be evaluated
at parse time, as they require conversion data. As such, they need to
preserve and serialize the calc().

To support this (and prepare for upcoming changes to nested colors)
CSSUnresolvedAbsoluteColor has been repurposed as a generic type that
mirrors CSSUnresolvedRelativeColor, and the old functionality moved
to a new CSSUnresolvedAbsoluteResolvedColor. The parser now creates
CSSUnresolvedAbsoluteColor if the calc() cannot be eagerly evaluated,
otherwise, using CSSUnresolvedAbsoluteResolvedColor as it used to.

Additionally, CSSToLengthConversionData is now needed when resolving
CSSUnresolvedColors to StyleColor. Instead of adding yet another
parameter to `createStyleColor`, the parameters are now packaged in
a new CSSUnresolvedStyleColorResolutionState struct (and to match,
CSSUnresolvedColorResolutionContext has been renamed to use the State
suffix).

With CSSToLengthConversionData now available, it is also used for
resolving the percentages in `color-mix()` colors.

* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-color-function-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-color-function.html:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-color-mix-function-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-color-mix-function.html:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-hsl-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-hsl.html:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-hwb-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-hwb.html:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-lab-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-lab.html:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-rgb-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-computed-rgb.html:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-color-function-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-color-function.html:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-color-mix-function-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-color-mix-function.html:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-hsl-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-hsl.html:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-hwb-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-hwb.html:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-lab-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-lab.html:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-rgb-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-color/parsing/color-valid-rgb.html:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/css/calc/CSSCalcTree+Copy.cpp: Copied from 
Source/WebCore/platform/calc/CalculationTree+Copy.cpp.
* Source/WebCore/css/calc/CSSCalcTree+Copy.h: Copied from 
Source/WebCore/css/calc/CSSCalcTree+Serialization.h.
* Source/WebCore/css/calc/CSSCalcTree+Parser.cpp:
(WebCore::CSSCalc::parseAndSimplify):
* Source/WebCore/css/calc/CSSCalcTree+Serialization.cpp:
(WebCore::CSSCalc::serializationForCSS):
(WebCore::CSSCalc::serializeForCSS): Deleted.
* Source/WebCore/css/calc/CSSCalcTree+Serialization.h:
* Source/WebCore/css/calc/CSSCalcTree.cpp:
(WebCore::CSSCalc::operator<<):
* Source/WebCore/css/calc/CSSCalcValue.cpp:
(WebCore::CSSCalcValue::copySimplified const):
(WebCore::CSSCalcValue::requiresConversionData const):
(WebCore::CSSCalcValue::customCSSText const):
(WebCore::CSSCalcValue::dump const):
* Source/WebCore/css/calc/CSSCalcValue.h:
* Source/WebCore/css/color/CSSAbsoluteColorResolver.h:
(WebCore::requiresConversionData):
(WebCore::resolve):
(WebCore::resolveNoConversionDataRequired):
* Source/WebCore/css/color/CSSAbsoluteColorSerialization.h: Copied from 
Source/WebCore/css/color/CSSUnresolvedColorLayers.h.
(WebCore::serializationForCSSAbsoluteColor):
* Source/WebCore/css/color/CSSColorConversion+ToTypedColor.h:
* Source/WebCore/css/color/CSSColorMixSerialization.cpp:
(WebCore::is50Percent):
(WebCore::sumTo100Percent):
(WebCore::serializeColorMixColor):
(WebCore::serializeColorMix100MinusPercentage):
(WebCore::percentageDoubleValue): Deleted.
* Source/WebCore/css/color/CSSColorMixSerialization.h:
(WebCore::serializationForCSSColorMix):
* Source/WebCore/css/color/CSSRelativeColorResolver.h:
(WebCore::requiresConversionData):
(WebCore::resolve):
(WebCore::resolveNoConversionDataRequired):
* Source/WebCore/css/color/CSSUnresolvedAbsoluteColor.h:
(WebCore::serializationForCSS):
(WebCore::createStyleColor):
(WebCore::createColor):
(WebCore::containsColorSchemeDependentColor):
(WebCore::containsCurrentColor):
* Source/WebCore/css/color/CSSUnresolvedAbsoluteResolvedColor.cpp: Renamed from 
Source/WebCore/css/color/CSSUnresolvedAbsoluteColor.cpp.
* Source/WebCore/css/color/CSSUnresolvedAbsoluteResolvedColor.h: Copied from 
Source/WebCore/css/color/CSSUnresolvedAbsoluteColor.h.
* Source/WebCore/css/color/CSSUnresolvedColor.cpp:
* Source/WebCore/css/color/CSSUnresolvedColor.h:
* Source/WebCore/css/color/CSSUnresolvedColorHex.h:
* Source/WebCore/css/color/CSSUnresolvedColorKeyword.cpp:
* Source/WebCore/css/color/CSSUnresolvedColorKeyword.h:
* Source/WebCore/css/color/CSSUnresolvedColorLayers.cpp:
* Source/WebCore/css/color/CSSUnresolvedColorLayers.h:
* Source/WebCore/css/color/CSSUnresolvedColorMix.cpp:
* Source/WebCore/css/color/CSSUnresolvedColorMix.h:
* Source/WebCore/css/color/CSSUnresolvedColorResolutionState.cpp: Renamed from 
Source/WebCore/css/color/CSSUnresolvedColorResolutionContext.cpp.
* Source/WebCore/css/color/CSSUnresolvedColorResolutionState.h: Renamed from 
Source/WebCore/css/color/CSSUnresolvedColorResolutionContext.h.
* Source/WebCore/css/color/CSSUnresolvedLightDark.cpp:
* Source/WebCore/css/color/CSSUnresolvedLightDark.h:
* Source/WebCore/css/color/CSSUnresolvedRelativeColor.h:
* Source/WebCore/css/color/CSSUnresolvedStyleColorResolutionState.h: Copied 
from Source/WebCore/style/ColorFromPrimitiveValue.h.
* Source/WebCore/css/color/StyleColor.cpp:
* Source/WebCore/css/color/StyleColor.h:
* Source/WebCore/css/color/StyleColorLayers.cpp:
* Source/WebCore/css/color/StyleColorLayers.h:
* Source/WebCore/css/color/StyleColorMix.cpp:
* Source/WebCore/css/color/StyleColorMix.h:
* Source/WebCore/css/color/StyleRelativeColor.h:
* Source/WebCore/css/parser/CSSPropertyParserConsumer+Color.cpp:
* Source/WebCore/css/parser/CSSPropertyParserConsumer+Color.h:
* Source/WebCore/css/parser/CSSPropertyParserConsumer+RawResolver.cpp:
* Source/WebCore/css/parser/CSSPropertyParserConsumer+UnevaluatedCalc.cpp:
* Source/WebCore/css/parser/CSSPropertyParserConsumer+UnevaluatedCalc.h:
* Source/WebCore/html/canvas/CanvasStyle.cpp:
* Source/WebCore/platform/calc/CalculationTree+Copy.cpp:
* Source/WebCore/style/ColorFromPrimitiveValue.cpp:
* Source/WebCore/style/ColorFromPrimitiveValue.h:
* Source/WebCore/style/FilterOperationsBuilder.cpp:
* Source/WebCore/style/StyleBuilderState.cpp:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to