| Index: third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp
 | 
| diff --git a/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp
 | 
| index a99f580c3ff366fe1958fa1b11c4990cf4b728f0..f70a66c1f08e7d63de69de62c239cdbc480bac24 100644
 | 
| --- a/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp
 | 
| +++ b/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp
 | 
| @@ -33,43 +33,48 @@
 | 
|      });
 | 
|  }
 | 
|  
 | 
| -static InterpolationValue maybeConvertLengthList(const Vector<Length>& lengthList, float zoom)
 | 
| -{
 | 
| -    if (lengthList.isEmpty())
 | 
| -        return nullptr;
 | 
| -
 | 
| -    return ListInterpolationFunctions::createList(lengthList.size(), [&lengthList, zoom](size_t index) {
 | 
| -        return CSSLengthInterpolationType::maybeConvertLength(lengthList[index], zoom);
 | 
| -    });
 | 
| -}
 | 
| -
 | 
|  InterpolationValue CSSLengthListInterpolationType::maybeConvertInitial() const
 | 
|  {
 | 
|      return maybeConvertLengthList(LengthListPropertyFunctions::getInitialLengthList(cssProperty()), 1);
 | 
| +}
 | 
| +
 | 
| +InterpolationValue CSSLengthListInterpolationType::maybeConvertLengthList(const RefVector<Length>* lengthList, float zoom) const
 | 
| +{
 | 
| +    if (!lengthList || lengthList->size() == 0)
 | 
| +        return nullptr;
 | 
| +
 | 
| +    return ListInterpolationFunctions::createList(lengthList->size(), [lengthList, zoom](size_t index) {
 | 
| +        return CSSLengthInterpolationType::maybeConvertLength(lengthList->at(index), zoom);
 | 
| +    });
 | 
|  }
 | 
|  
 | 
|  class ParentLengthListChecker : public InterpolationType::ConversionChecker {
 | 
|  public:
 | 
|      ~ParentLengthListChecker() final {}
 | 
|  
 | 
| -    static PassOwnPtr<ParentLengthListChecker> create(CSSPropertyID property, const Vector<Length>& inheritedLengthList)
 | 
| +    static PassOwnPtr<ParentLengthListChecker> create(CSSPropertyID property, PassRefPtr<RefVector<Length>> inheritedLengthList)
 | 
|      {
 | 
|          return adoptPtr(new ParentLengthListChecker(property, inheritedLengthList));
 | 
|      }
 | 
|  
 | 
|  private:
 | 
| -    ParentLengthListChecker(CSSPropertyID property, const Vector<Length>& inheritedLengthList)
 | 
| +    ParentLengthListChecker(CSSPropertyID property, PassRefPtr<RefVector<Length>> inheritedLengthList)
 | 
|          : m_property(property)
 | 
|          , m_inheritedLengthList(inheritedLengthList)
 | 
|      { }
 | 
|  
 | 
|      bool isValid(const InterpolationEnvironment& environment, const InterpolationValue& underlying) const final
 | 
|      {
 | 
| -        return m_inheritedLengthList == LengthListPropertyFunctions::getLengthList(m_property, *environment.state().parentStyle());
 | 
| +        const RefVector<Length>* lengthList = LengthListPropertyFunctions::getLengthList(m_property, *environment.state().parentStyle());
 | 
| +        if (!lengthList && !m_inheritedLengthList)
 | 
| +            return true;
 | 
| +        if (!lengthList || !m_inheritedLengthList)
 | 
| +            return false;
 | 
| +        return *m_inheritedLengthList == *lengthList;
 | 
|      }
 | 
|  
 | 
|      CSSPropertyID m_property;
 | 
| -    Vector<Length> m_inheritedLengthList;
 | 
| +    RefPtr<RefVector<Length>> m_inheritedLengthList;
 | 
|  };
 | 
|  
 | 
|  InterpolationValue CSSLengthListInterpolationType::maybeConvertInherit(const StyleResolverState& state, ConversionCheckers& conversionCheckers) const
 | 
| @@ -77,8 +82,9 @@
 | 
|      if (!state.parentStyle())
 | 
|          return nullptr;
 | 
|  
 | 
| -    Vector<Length> inheritedLengthList = LengthListPropertyFunctions::getLengthList(cssProperty(), *state.parentStyle());
 | 
| -    conversionCheckers.append(ParentLengthListChecker::create(cssProperty(), inheritedLengthList));
 | 
| +    const RefVector<Length>* inheritedLengthList = LengthListPropertyFunctions::getLengthList(cssProperty(), *state.parentStyle());
 | 
| +    conversionCheckers.append(ParentLengthListChecker::create(cssProperty(),
 | 
| +        const_cast<RefVector<Length>*>(inheritedLengthList))); // Take ref.
 | 
|      return maybeConvertLengthList(inheritedLengthList, state.parentStyle()->effectiveZoom());
 | 
|  }
 | 
|  
 | 
| @@ -100,7 +106,7 @@
 | 
|  
 | 
|  InterpolationValue CSSLengthListInterpolationType::maybeConvertUnderlyingValue(const InterpolationEnvironment& environment) const
 | 
|  {
 | 
| -    Vector<Length> underlyingLengthList = LengthListPropertyFunctions::getLengthList(cssProperty(), *environment.state().style());
 | 
| +    const RefVector<Length>* underlyingLengthList = LengthListPropertyFunctions::getLengthList(cssProperty(), *environment.state().style());
 | 
|      return maybeConvertLengthList(underlyingLengthList, environment.state().style()->effectiveZoom());
 | 
|  }
 | 
|  
 | 
| @@ -118,15 +124,15 @@
 | 
|      ASSERT(length > 0);
 | 
|      const NonInterpolableList& nonInterpolableList = toNonInterpolableList(*nonInterpolableValue);
 | 
|      ASSERT(nonInterpolableList.length() == length);
 | 
| -    Vector<Length> result(length);
 | 
| +    RefPtr<RefVector<Length>> result = RefVector<Length>::create();
 | 
|      for (size_t i = 0; i < length; i++) {
 | 
| -        result[i] = (CSSLengthInterpolationType::resolveInterpolableLength(
 | 
| +        result->append(CSSLengthInterpolationType::resolveInterpolableLength(
 | 
|              *interpolableList.get(i),
 | 
|              nonInterpolableList.get(i),
 | 
|              environment.state().cssToLengthConversionData(),
 | 
|              m_valueRange));
 | 
|      }
 | 
| -    LengthListPropertyFunctions::setLengthList(cssProperty(), *environment.state().style(), std::move(result));
 | 
| +    LengthListPropertyFunctions::setLengthList(cssProperty(), *environment.state().style(), result.release());
 | 
|  }
 | 
|  
 | 
|  } // namespace blink
 | 
| 
 |