Bug 223889 - Some WPT are failing because of colors being in the wrong format
Summary: Some WPT are failing because of colors being in the wrong format
Status: NEW
Alias: None
Product: WebKit
Classification: Unclassified
Component: CSS (show other bugs)
Version: Safari 14
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Nobody
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2021-03-29 11:36 PDT by Tim Nguyen (:ntim)
Modified: 2021-04-05 11:37 PDT (History)
5 users (show)

See Also:


Attachments
Minimal test case (913 bytes, text/html)
2021-03-29 11:47 PDT, Sam Weinig
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Comment 1 Sam Weinig 2021-03-29 11:47:15 PDT
Created attachment 424555 [details]
Minimal test case
Comment 2 Sam Weinig 2021-03-29 11:48:48 PDT
Looks like something (likely CSSGradientValue) is not resolving color identifiers down to Colors before serializing.
Comment 3 Sam Weinig 2021-03-29 13:19:28 PDT
I haven't dropped into the debugger yet, but I am pretty sure this happening in ComputedStyleExtractor::valueForPropertyInStyle():

        case CSSPropertyBackgroundImage:
        case CSSPropertyWebkitMaskImage: {
            auto& layers = propertyID == CSSPropertyWebkitMaskImage ? style.maskLayers() : style.backgroundLayers();
            if (!layers.next()) {
                if (layers.image())
                    return layers.image()->cssValue();
                return cssValuePool.createIdentifierValue(CSSValueNone);
            }
            auto list = CSSValueList::createCommaSeparated();
            for (auto* currLayer = &layers; currLayer; currLayer = currLayer->next()) {
                if (currLayer->image())
                    list->append(currLayer->image()->cssValue());
                else
                    list->append(cssValuePool.createIdentifierValue(CSSValueNone));
            }
            return list;
        }


When the `layers.image()->cssValue()` call happens, the `image()`, which is of type CSSGradientValue, has not had its color styles resolved. You can see in the lines above it what a call with color resolving looks like:

        case CSSPropertyBackgroundColor:
            return m_allowVisitedStyle ? cssValuePool.createColorValue(style.visitedDependentColor(CSSPropertyBackgroundColor)) : currentColorOrValidColor(&style, style.backgroundColor());


So, somehow, we need to resolve those colors.
Comment 4 Sam Weinig 2021-03-29 13:19:41 PDT
Antti, any ideas on a good pattern for this?
Comment 5 Radar WebKit Bug Importer 2021-04-05 11:37:33 PDT
<rdar://problem/76226756>