FillSize SizeInterpolationFunctions::createFillSize(
    const InterpolableValue& interpolableValueA,
    const NonInterpolableValue* nonInterpolableValueA,
    const InterpolableValue& interpolableValueB,
    const NonInterpolableValue* nonInterpolableValueB,
    const CSSToLengthConversionData& conversionData) {
  const auto& sideA = toCSSSizeNonInterpolableValue(*nonInterpolableValueA);
  const auto& sideB = toCSSSizeNonInterpolableValue(*nonInterpolableValueB);
  if (sideA.isKeyword()) {
    switch (sideA.keyword()) {
      case CSSValueCover:
        DCHECK_EQ(sideA.keyword(), sideB.keyword());
        return FillSize(Cover, LengthSize());
      case CSSValueContain:
        DCHECK_EQ(sideA.keyword(), sideB.keyword());
        return FillSize(Contain, LengthSize());
      case CSSValueAuto:
        break;
      default:
        NOTREACHED();
        break;
    }
  }
  return FillSize(
      SizeLength,
      LengthSize(createLength(interpolableValueA, sideA, conversionData),
                 createLength(interpolableValueB, sideB, conversionData)));
}
static Length resolveInterpolablePixelsOrPercentageLength(const InterpolableList& values, bool hasPercentage, ValueRange range, double zoom)
{
    ASSERT(isPixelsOrPercentOnly(values));
    double pixels = toInterpolableNumber(values.get(CSSPrimitiveValue::UnitTypePixels))->value() * zoom;
    double percentage = toInterpolableNumber(values.get(CSSPrimitiveValue::UnitTypePercentage))->value();
    return createLength(pixels, percentage, hasPercentage, range);
}
Length CSSLengthInterpolationType::resolveInterpolableLength(const InterpolableValue& interpolableValue, const NonInterpolableValue* nonInterpolableValue, const CSSToLengthConversionData& conversionData, ValueRange range)
{
    const InterpolableList& interpolableList = toInterpolableList(interpolableValue);
    bool hasPercentage = CSSLengthNonInterpolableValue::hasPercentage(nonInterpolableValue);
    double pixels = 0;
    double percentage = 0;
    for (size_t i = 0; i < CSSPrimitiveValue::LengthUnitTypeCount; i++) {
        double value = toInterpolableNumber(*interpolableList.get(i)).value();
        if (i == CSSPrimitiveValue::UnitTypePercentage) {
            percentage = value;
        } else {
            CSSPrimitiveValue::UnitType type = CSSPrimitiveValue::lengthUnitTypeToUnitType(static_cast<CSSPrimitiveValue::LengthUnitType>(i));
            pixels += conversionData.zoomedComputedPixels(value, type);
        }
    }
    return createLength(pixels, percentage, hasPercentage, range);
}