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 |