Index: third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp |
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp b/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp |
index 7d467b58f0df4f01a4757b7605f58abd54c29a23..b605ff60cec34e53cd03a5cf8e28f130a6f7bbd9 100644 |
--- a/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp |
+++ b/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp |
@@ -34,10 +34,30 @@ |
namespace blink { |
-using namespace SVGNames; |
+namespace { |
+ |
+bool targetCanHaveMotionTransform(const SVGElement& target) { |
+ // We don't have a special attribute name to verify the animation type. Check |
+ // the element name instead. |
+ if (!target.isSVGGraphicsElement()) |
+ return false; |
+ // Spec: SVG 1.1 section 19.2.15 |
+ // FIXME: svgTag is missing. Needs to be checked, if transforming <svg> could |
+ // cause problems. |
+ return isSVGGElement(target) || isSVGDefsElement(target) || |
+ isSVGUseElement(target) || isSVGImageElement(target) || |
+ isSVGSwitchElement(target) || isSVGPathElement(target) || |
+ isSVGRectElement(target) || isSVGCircleElement(target) || |
+ isSVGEllipseElement(target) || isSVGLineElement(target) || |
+ isSVGPolylineElement(target) || isSVGPolygonElement(target) || |
+ isSVGTextElement(target) || isSVGClipPathElement(target) || |
+ isSVGMaskElement(target) || isSVGAElement(target) || |
+ isSVGForeignObjectElement(target); |
+} |
+} |
inline SVGAnimateMotionElement::SVGAnimateMotionElement(Document& document) |
- : SVGAnimationElement(animateMotionTag, document), |
+ : SVGAnimationElement(SVGNames::animateMotionTag, document), |
m_hasToPointAtEndOfDuration(false) { |
setCalcMode(CalcModePaced); |
} |
@@ -46,34 +66,9 @@ DEFINE_NODE_FACTORY(SVGAnimateMotionElement) |
SVGAnimateMotionElement::~SVGAnimateMotionElement() {} |
-bool SVGAnimateMotionElement::hasValidAttributeType() { |
- SVGElement* targetElement = this->targetElement(); |
- if (!targetElement) |
- return false; |
- |
- // We don't have a special attribute name to verify the animation type. Check |
- // the element name instead. |
- if (!targetElement->isSVGGraphicsElement()) |
- return false; |
- // Spec: SVG 1.1 section 19.2.15 |
- // FIXME: svgTag is missing. Needs to be checked, if transforming <svg> could |
- // cause problems. |
- return ( |
- isSVGGElement(*targetElement) || isSVGDefsElement(*targetElement) || |
- isSVGUseElement(*targetElement) || isSVGImageElement(*targetElement) || |
- isSVGSwitchElement(*targetElement) || isSVGPathElement(*targetElement) || |
- isSVGRectElement(*targetElement) || isSVGCircleElement(*targetElement) || |
- isSVGEllipseElement(*targetElement) || isSVGLineElement(*targetElement) || |
- isSVGPolylineElement(*targetElement) || |
- isSVGPolygonElement(*targetElement) || isSVGTextElement(*targetElement) || |
- isSVGClipPathElement(*targetElement) || |
- isSVGMaskElement(*targetElement) || isSVGAElement(*targetElement) || |
- isSVGForeignObjectElement(*targetElement)); |
-} |
- |
-bool SVGAnimateMotionElement::hasValidAttributeName() { |
- // AnimateMotion does not use attributeName so it is always valid. |
- return true; |
+bool SVGAnimateMotionElement::hasValidTarget() { |
+ return SVGAnimationElement::hasValidTarget() && |
+ targetCanHaveMotionTransform(*targetElement()); |
} |
void SVGAnimateMotionElement::parseAttribute(const QualifiedName& name, |
@@ -151,10 +146,8 @@ static bool parsePoint(const String& string, FloatPoint& point) { |
} |
void SVGAnimateMotionElement::resetAnimatedType() { |
- if (!hasValidAttributeType()) |
- return; |
SVGElement* targetElement = this->targetElement(); |
- if (!targetElement) |
+ if (!targetElement || !targetCanHaveMotionTransform(*targetElement)) |
return; |
if (AffineTransform* transform = targetElement->animateMotionTransform()) |
transform->makeIdentity(); |