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

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

Issue 11186052: Revert 131767 - 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)
60 { 58 {
61 registerAnimatedPropertiesForSVGAnimationElement(); 59 registerAnimatedPropertiesForSVGAnimationElement();
62 } 60 }
63 61
64 static void parseKeyTimes(const String& parse, Vector<float>& result, bool verif yOrder) 62 static void parseKeyTimes(const String& parse, Vector<float>& result, bool verif yOrder)
65 { 63 {
66 result.clear(); 64 result.clear();
67 Vector<String> parseList; 65 Vector<String> parseList;
68 parse.split(';', parseList); 66 parse.split(';', parseList);
69 for (unsigned n = 0; n < parseList.size(); ++n) { 67 for (unsigned n = 0; n < parseList.size(); ++n) {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 bool SVGAnimationElement::isSupportedAttribute(const QualifiedName& attrName) 138 bool SVGAnimationElement::isSupportedAttribute(const QualifiedName& attrName)
141 { 139 {
142 DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, supportedAttributes, ()); 140 DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, supportedAttributes, ());
143 if (supportedAttributes.isEmpty()) { 141 if (supportedAttributes.isEmpty()) {
144 SVGTests::addSupportedAttributes(supportedAttributes); 142 SVGTests::addSupportedAttributes(supportedAttributes);
145 SVGExternalResourcesRequired::addSupportedAttributes(supportedAttributes ); 143 SVGExternalResourcesRequired::addSupportedAttributes(supportedAttributes );
146 supportedAttributes.add(SVGNames::valuesAttr); 144 supportedAttributes.add(SVGNames::valuesAttr);
147 supportedAttributes.add(SVGNames::keyTimesAttr); 145 supportedAttributes.add(SVGNames::keyTimesAttr);
148 supportedAttributes.add(SVGNames::keyPointsAttr); 146 supportedAttributes.add(SVGNames::keyPointsAttr);
149 supportedAttributes.add(SVGNames::keySplinesAttr); 147 supportedAttributes.add(SVGNames::keySplinesAttr);
150 supportedAttributes.add(SVGNames::attributeTypeAttr);
151 } 148 }
152 return supportedAttributes.contains<QualifiedName, SVGAttributeHashTranslato r>(attrName); 149 return supportedAttributes.contains<QualifiedName, SVGAttributeHashTranslato r>(attrName);
153 } 150 }
154 151
155 void SVGAnimationElement::parseAttribute(const Attribute& attribute) 152 void SVGAnimationElement::parseAttribute(const Attribute& attribute)
156 { 153 {
157 if (!isSupportedAttribute(attribute.name())) { 154 if (!isSupportedAttribute(attribute.name())) {
158 SVGSMILElement::parseAttribute(attribute); 155 SVGSMILElement::parseAttribute(attribute);
159 return; 156 return;
160 } 157 }
(...skipping 20 matching lines...) Expand all
181 parseKeyTimes(attribute.value(), m_keyPoints, false); 178 parseKeyTimes(attribute.value(), m_keyPoints, false);
182 } 179 }
183 return; 180 return;
184 } 181 }
185 182
186 if (attribute.name() == SVGNames::keySplinesAttr) { 183 if (attribute.name() == SVGNames::keySplinesAttr) {
187 parseKeySplines(attribute.value(), m_keySplines); 184 parseKeySplines(attribute.value(), m_keySplines);
188 return; 185 return;
189 } 186 }
190 187
191 if (attribute.name() == SVGNames::attributeTypeAttr) {
192 setAttributeType(attribute.value());
193 return;
194 }
195
196 if (SVGTests::parseAttribute(attribute)) 188 if (SVGTests::parseAttribute(attribute))
197 return; 189 return;
198 if (SVGExternalResourcesRequired::parseAttribute(attribute)) 190 if (SVGExternalResourcesRequired::parseAttribute(attribute))
199 return; 191 return;
200 192
201 ASSERT_NOT_REACHED(); 193 ASSERT_NOT_REACHED();
202 } 194 }
203 195
204 void SVGAnimationElement::svgAttributeChanged(const QualifiedName& attrName) 196 void SVGAnimationElement::svgAttributeChanged(const QualifiedName& attrName)
205 { 197 {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 return CalcModeDiscrete; 274 return CalcModeDiscrete;
283 if (value == linear) 275 if (value == linear)
284 return CalcModeLinear; 276 return CalcModeLinear;
285 if (value == paced) 277 if (value == paced)
286 return CalcModePaced; 278 return CalcModePaced;
287 if (value == spline) 279 if (value == spline)
288 return CalcModeSpline; 280 return CalcModeSpline;
289 return hasTagName(SVGNames::animateMotionTag) ? CalcModePaced : CalcModeLine ar; 281 return hasTagName(SVGNames::animateMotionTag) ? CalcModePaced : CalcModeLine ar;
290 } 282 }
291 283
292 void SVGAnimationElement::setAttributeType(const AtomicString& attributeType) 284 SVGAnimationElement::AttributeType SVGAnimationElement::attributeType() const
293 { 285 {
294 DEFINE_STATIC_LOCAL(const AtomicString, css, ("CSS")); 286 DEFINE_STATIC_LOCAL(const AtomicString, css, ("CSS"));
295 DEFINE_STATIC_LOCAL(const AtomicString, xml, ("XML")); 287 DEFINE_STATIC_LOCAL(const AtomicString, xml, ("XML"));
296 if (attributeType == css) 288 const AtomicString& value = fastGetAttribute(SVGNames::attributeTypeAttr);
297 m_attributeType = AttributeTypeCSS; 289 if (value == css)
298 else if (attributeType == xml) 290 return AttributeTypeCSS;
299 m_attributeType = AttributeTypeXML; 291 if (value == xml)
300 else 292 return AttributeTypeXML;
301 m_attributeType = AttributeTypeAuto; 293 return AttributeTypeAuto;
302 checkInvalidCSSAttributeType(targetElement(DoNotResolveNewTarget));
303 } 294 }
304 295
305 String SVGAnimationElement::toValue() const 296 String SVGAnimationElement::toValue() const
306 { 297 {
307 return fastGetAttribute(SVGNames::toAttr); 298 return fastGetAttribute(SVGNames::toAttr);
308 } 299 }
309 300
310 String SVGAnimationElement::byValue() const 301 String SVGAnimationElement::byValue() const
311 { 302 {
312 return fastGetAttribute(SVGNames::byAttr); 303 return fastGetAttribute(SVGNames::byAttr);
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 SVGElement* targetElement = this->targetElement(); 641 SVGElement* targetElement = this->targetElement();
651 ASSERT(targetElement); 642 ASSERT(targetElement);
652 643
653 const QualifiedName& attributeName = this->attributeName(); 644 const QualifiedName& attributeName = this->attributeName();
654 if (inheritsFromProperty(targetElement, attributeName, from)) 645 if (inheritsFromProperty(targetElement, attributeName, from))
655 m_fromPropertyValueType = InheritValue; 646 m_fromPropertyValueType = InheritValue;
656 if (inheritsFromProperty(targetElement, attributeName, to)) 647 if (inheritsFromProperty(targetElement, attributeName, to))
657 m_toPropertyValueType = InheritValue; 648 m_toPropertyValueType = InheritValue;
658 } 649 }
659 650
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
679 } 651 }
680 652
681 #endif // ENABLE(SVG) 653 #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