InterpolationValue CSSShadowListInterpolationType::convertShadowList(const ShadowList* shadowList, double zoom) const
{
    if (!shadowList)
        return createNeutralValue();
    const ShadowDataVector& shadows = shadowList->shadows();
    return ListInterpolationFunctions::createList(shadows.size(), [&shadows, zoom](size_t index) {
        return ShadowInterpolationFunctions::convertShadowData(shadows[index], zoom);
    });
}
PassOwnPtr<InterpolationValue> CSSShadowListInterpolationType::convertShadowList(const ShadowList* shadowList, double zoom) const
{
    if (!shadowList)
        return createNeutralValue();
    const ShadowDataVector& shadows = shadowList->shadows();
    InterpolationComponent listComponent = ListInterpolationFunctions::createList(shadows.size(), [&shadows, zoom](size_t index) {
        return ShadowInterpolationFunctions::convertShadowData(shadows[index], zoom);
    });
    ASSERT(listComponent);
    return InterpolationValue::create(*this, listComponent);
}
InterpolationValue CSSShadowListInterpolationType::maybeConvertValue(const CSSValue& value, const StyleResolverState&, ConversionCheckers&) const
{
    if (value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == CSSValueNone)
        return createNeutralValue();

    if (!value.isBaseValueList())
        return nullptr;

    const CSSValueList& valueList = toCSSValueList(value);
    return ListInterpolationFunctions::createList(valueList.length(), [&valueList](size_t index) {
        return ShadowInterpolationFunctions::maybeConvertCSSValue(valueList.item(index));
    });
}
PassOwnPtr<InterpolationValue> CSSShadowListInterpolationType::maybeConvertNeutral(const UnderlyingValue&, ConversionCheckers&) const
{
    return createNeutralValue();
}
InterpolationValue CSSShadowListInterpolationType::maybeConvertNeutral(const InterpolationValue&, ConversionCheckers&) const
{
    return createNeutralValue();
}