Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: Source/WebCore/svg/SVGAnimationElement.cpp

Issue 11184044: Merge 130777 - Prevent animation when CSS attributeType is invalid. (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1271/
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/WebCore/svg/SVGAnimationElement.h ('k') | Source/WebCore/svg/animation/SVGSMILElement.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org> 2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 * Copyright (C) 2008 Apple Inc. All rights reserved. 5 * Copyright (C) 2008 Apple Inc. All rights reserved.
6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> 6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au>
7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 7 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGAnimationElement) 48 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGAnimationElement)
49 REGISTER_LOCAL_ANIMATED_PROPERTY(externalResourcesRequired) 49 REGISTER_LOCAL_ANIMATED_PROPERTY(externalResourcesRequired)
50 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGTests) 50 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGTests)
51 END_REGISTER_ANIMATED_PROPERTIES 51 END_REGISTER_ANIMATED_PROPERTIES
52 52
53 SVGAnimationElement::SVGAnimationElement(const QualifiedName& tagName, Document* document) 53 SVGAnimationElement::SVGAnimationElement(const QualifiedName& tagName, Document* document)
54 : SVGSMILElement(tagName, document) 54 : SVGSMILElement(tagName, document)
55 , m_fromPropertyValueType(RegularPropertyValue) 55 , m_fromPropertyValueType(RegularPropertyValue)
56 , m_toPropertyValueType(RegularPropertyValue) 56 , m_toPropertyValueType(RegularPropertyValue)
57 , m_animationValid(false) 57 , m_animationValid(false)
58 , m_attributeType(AttributeTypeAuto)
59 , m_hasInvalidCSSAttributeType(false)
58 { 60 {
59 registerAnimatedPropertiesForSVGAnimationElement(); 61 registerAnimatedPropertiesForSVGAnimationElement();
60 } 62 }
61 63
62 static void parseKeyTimes(const String& parse, Vector<float>& result, bool verif yOrder) 64 static void parseKeyTimes(const String& parse, Vector<float>& result, bool verif yOrder)
63 { 65 {
64 result.clear(); 66 result.clear();
65 Vector<String> parseList; 67 Vector<String> parseList;
66 parse.split(';', parseList); 68 parse.split(';', parseList);
67 for (unsigned n = 0; n < parseList.size(); ++n) { 69 for (unsigned n = 0; n < parseList.size(); ++n) {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 bool SVGAnimationElement::isSupportedAttribute(const QualifiedName& attrName) 140 bool SVGAnimationElement::isSupportedAttribute(const QualifiedName& attrName)
139 { 141 {
140 DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, supportedAttributes, ()); 142 DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, supportedAttributes, ());
141 if (supportedAttributes.isEmpty()) { 143 if (supportedAttributes.isEmpty()) {
142 SVGTests::addSupportedAttributes(supportedAttributes); 144 SVGTests::addSupportedAttributes(supportedAttributes);
143 SVGExternalResourcesRequired::addSupportedAttributes(supportedAttributes ); 145 SVGExternalResourcesRequired::addSupportedAttributes(supportedAttributes );
144 supportedAttributes.add(SVGNames::valuesAttr); 146 supportedAttributes.add(SVGNames::valuesAttr);
145 supportedAttributes.add(SVGNames::keyTimesAttr); 147 supportedAttributes.add(SVGNames::keyTimesAttr);
146 supportedAttributes.add(SVGNames::keyPointsAttr); 148 supportedAttributes.add(SVGNames::keyPointsAttr);
147 supportedAttributes.add(SVGNames::keySplinesAttr); 149 supportedAttributes.add(SVGNames::keySplinesAttr);
150 supportedAttributes.add(SVGNames::attributeTypeAttr);
148 } 151 }
149 return supportedAttributes.contains<QualifiedName, SVGAttributeHashTranslato r>(attrName); 152 return supportedAttributes.contains<QualifiedName, SVGAttributeHashTranslato r>(attrName);
150 } 153 }
151 154
152 void SVGAnimationElement::parseAttribute(const Attribute& attribute) 155 void SVGAnimationElement::parseAttribute(const Attribute& attribute)
153 { 156 {
154 if (!isSupportedAttribute(attribute.name())) { 157 if (!isSupportedAttribute(attribute.name())) {
155 SVGSMILElement::parseAttribute(attribute); 158 SVGSMILElement::parseAttribute(attribute);
156 return; 159 return;
157 } 160 }
(...skipping 20 matching lines...) Expand all
178 parseKeyTimes(attribute.value(), m_keyPoints, false); 181 parseKeyTimes(attribute.value(), m_keyPoints, false);
179 } 182 }
180 return; 183 return;
181 } 184 }
182 185
183 if (attribute.name() == SVGNames::keySplinesAttr) { 186 if (attribute.name() == SVGNames::keySplinesAttr) {
184 parseKeySplines(attribute.value(), m_keySplines); 187 parseKeySplines(attribute.value(), m_keySplines);
185 return; 188 return;
186 } 189 }
187 190
191 if (attribute.name() == SVGNames::attributeTypeAttr) {
192 setAttributeType(attribute.value());
193 return;
194 }
195
188 if (SVGTests::parseAttribute(attribute)) 196 if (SVGTests::parseAttribute(attribute))
189 return; 197 return;
190 if (SVGExternalResourcesRequired::parseAttribute(attribute)) 198 if (SVGExternalResourcesRequired::parseAttribute(attribute))
191 return; 199 return;
192 200
193 ASSERT_NOT_REACHED(); 201 ASSERT_NOT_REACHED();
194 } 202 }
195 203
196 void SVGAnimationElement::svgAttributeChanged(const QualifiedName& attrName) 204 void SVGAnimationElement::svgAttributeChanged(const QualifiedName& attrName)
197 { 205 {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 return CalcModeDiscrete; 282 return CalcModeDiscrete;
275 if (value == linear) 283 if (value == linear)
276 return CalcModeLinear; 284 return CalcModeLinear;
277 if (value == paced) 285 if (value == paced)
278 return CalcModePaced; 286 return CalcModePaced;
279 if (value == spline) 287 if (value == spline)
280 return CalcModeSpline; 288 return CalcModeSpline;
281 return hasTagName(SVGNames::animateMotionTag) ? CalcModePaced : CalcModeLine ar; 289 return hasTagName(SVGNames::animateMotionTag) ? CalcModePaced : CalcModeLine ar;
282 } 290 }
283 291
284 SVGAnimationElement::AttributeType SVGAnimationElement::attributeType() const 292 void SVGAnimationElement::setAttributeType(const AtomicString& attributeType)
285 { 293 {
286 DEFINE_STATIC_LOCAL(const AtomicString, css, ("CSS")); 294 DEFINE_STATIC_LOCAL(const AtomicString, css, ("CSS"));
287 DEFINE_STATIC_LOCAL(const AtomicString, xml, ("XML")); 295 DEFINE_STATIC_LOCAL(const AtomicString, xml, ("XML"));
288 const AtomicString& value = fastGetAttribute(SVGNames::attributeTypeAttr); 296 if (attributeType == css)
289 if (value == css) 297 m_attributeType = AttributeTypeCSS;
290 return AttributeTypeCSS; 298 else if (attributeType == xml)
291 if (value == xml) 299 m_attributeType = AttributeTypeXML;
292 return AttributeTypeXML; 300 else
293 return AttributeTypeAuto; 301 m_attributeType = AttributeTypeAuto;
302 checkInvalidCSSAttributeType(targetElement(DoNotResolveNewTarget));
294 } 303 }
295 304
296 String SVGAnimationElement::toValue() const 305 String SVGAnimationElement::toValue() const
297 { 306 {
298 return fastGetAttribute(SVGNames::toAttr); 307 return fastGetAttribute(SVGNames::toAttr);
299 } 308 }
300 309
301 String SVGAnimationElement::byValue() const 310 String SVGAnimationElement::byValue() const
302 { 311 {
303 return fastGetAttribute(SVGNames::byAttr); 312 return fastGetAttribute(SVGNames::byAttr);
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 SVGElement* targetElement = this->targetElement(); 650 SVGElement* targetElement = this->targetElement();
642 ASSERT(targetElement); 651 ASSERT(targetElement);
643 652
644 const QualifiedName& attributeName = this->attributeName(); 653 const QualifiedName& attributeName = this->attributeName();
645 if (inheritsFromProperty(targetElement, attributeName, from)) 654 if (inheritsFromProperty(targetElement, attributeName, from))
646 m_fromPropertyValueType = InheritValue; 655 m_fromPropertyValueType = InheritValue;
647 if (inheritsFromProperty(targetElement, attributeName, to)) 656 if (inheritsFromProperty(targetElement, attributeName, to))
648 m_toPropertyValueType = InheritValue; 657 m_toPropertyValueType = InheritValue;
649 } 658 }
650 659
660 void SVGAnimationElement::targetElementWillChange(SVGElement* currentTarget, SVG Element* newTarget)
661 {
662 SVGSMILElement::targetElementWillChange(currentTarget, newTarget);
663
664 checkInvalidCSSAttributeType(newTarget);
665 }
666
667 void SVGAnimationElement::setAttributeName(const QualifiedName& attributeName)
668 {
669 SVGSMILElement::setAttributeName(attributeName);
670
671 checkInvalidCSSAttributeType(targetElement(DoNotResolveNewTarget));
672 }
673
674 void SVGAnimationElement::checkInvalidCSSAttributeType(SVGElement* target)
675 {
676 m_hasInvalidCSSAttributeType = target && hasValidAttributeName() && attribut eType() == AttributeTypeCSS && !isTargetAttributeCSSProperty(target, attributeNa me());
677 }
678
651 } 679 }
652 680
653 #endif // ENABLE(SVG) 681 #endif // ENABLE(SVG)
OLDNEW
« no previous file with comments | « Source/WebCore/svg/SVGAnimationElement.h ('k') | Source/WebCore/svg/animation/SVGSMILElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698