<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[174050] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/174050">174050</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2014-09-28 19:13:41 -0700 (Sun, 28 Sep 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Automatically generate template specializations for most Elements
https://bugs.webkit.org/show_bug.cgi?id=137174

Reviewed by Darin Adler.

Previously, the template specializations to make is&lt;&gt;() / downcast&lt;&gt;()
work for HTML/SVG/MathML elements were only generated if
&quot;generateTypeHelpers&quot; parameter was explicitly specified for the
corresponding tag name in the *Tags.in file.

We are however able to generate the template specializations for most
types so this patch drops the &quot;generateTypeHelpers&quot; parameter and
generates those template specializations by default.

One case we cannot generate the specialization ifor is when a class is
associated to several tag names but this patch updates the
make_names.pl script to detect this and skip those classes.

No new tests, no behavior change.

* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:
* dom/make_names.pl:
(defaultTagPropertyHash):
(printTypeHelpers):
* html/HTMLTagNames.in:
* mathml/mathtags.in:
* svg/SVGAllInOne.cpp:
* svg/SVGAnimateColorElement.cpp:
(WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
(WebCore::SVGAnimateColorElement::determinePropertyValueTypes):
* svg/SVGAnimateColorElement.h:
* svg/SVGAnimateElement.cpp:
(WebCore::SVGAnimateElement::SVGAnimateElement):
(WebCore::SVGAnimateElement::~SVGAnimateElement): Deleted.
(WebCore::SVGAnimateElement::hasValidAttributeType): Deleted.
(WebCore::SVGAnimateElement::determineAnimatedPropertyType): Deleted.
(WebCore::SVGAnimateElement::calculateAnimatedValue): Deleted.
(WebCore::SVGAnimateElement::calculateToAtEndOfDurationValue): Deleted.
(WebCore::SVGAnimateElement::calculateFromAndToValues): Deleted.
(WebCore::SVGAnimateElement::calculateFromAndByValues): Deleted.
(WebCore::propertyTypesAreConsistent): Deleted.
(WebCore::SVGAnimateElement::resetAnimatedType): Deleted.
(WebCore::applyCSSPropertyToTarget): Deleted.
(WebCore::removeCSSPropertyFromTarget): Deleted.
(WebCore::applyCSSPropertyToTargetAndInstances): Deleted.
(WebCore::removeCSSPropertyFromTargetAndInstances): Deleted.
(WebCore::notifyTargetAboutAnimValChange): Deleted.
(WebCore::notifyTargetAndInstancesAboutAnimValChange): Deleted.
(WebCore::SVGAnimateElement::clearAnimatedType): Deleted.
(WebCore::SVGAnimateElement::applyResultsToTarget): Deleted.
(WebCore::SVGAnimateElement::animatedPropertyTypeSupportsAddition): Deleted.
(WebCore::SVGAnimateElement::isAdditive): Deleted.
(WebCore::SVGAnimateElement::calculateDistance): Deleted.
(WebCore::SVGAnimateElement::setTargetElement): Deleted.
(WebCore::SVGAnimateElement::setAttributeName): Deleted.
(WebCore::SVGAnimateElement::resetAnimatedPropertyType): Deleted.
(WebCore::SVGAnimateElement::ensureAnimator): Deleted.
* svg/SVGAnimateElement.h:
(WebCore::isSVGAnimateElement): Deleted.
* svg/SVGAnimateElementBase.cpp: Copied from Source/WebCore/svg/SVGAnimateElement.cpp.
(WebCore::SVGAnimateElementBase::SVGAnimateElementBase):
(WebCore::SVGAnimateElementBase::~SVGAnimateElementBase):
(WebCore::SVGAnimateElementBase::hasValidAttributeType):
(WebCore::SVGAnimateElementBase::determineAnimatedPropertyType):
(WebCore::SVGAnimateElementBase::calculateAnimatedValue):
(WebCore::SVGAnimateElementBase::calculateToAtEndOfDurationValue):
(WebCore::SVGAnimateElementBase::calculateFromAndToValues):
(WebCore::SVGAnimateElementBase::calculateFromAndByValues):
(WebCore::propertyTypesAreConsistent):
(WebCore::SVGAnimateElementBase::resetAnimatedType):
(WebCore::applyCSSPropertyToTarget):
(WebCore::removeCSSPropertyFromTarget):
(WebCore::applyCSSPropertyToTargetAndInstances):
(WebCore::removeCSSPropertyFromTargetAndInstances):
(WebCore::notifyTargetAboutAnimValChange):
(WebCore::notifyTargetAndInstancesAboutAnimValChange):
(WebCore::SVGAnimateElementBase::clearAnimatedType):
(WebCore::SVGAnimateElementBase::applyResultsToTarget):
(WebCore::SVGAnimateElementBase::animatedPropertyTypeSupportsAddition):
(WebCore::SVGAnimateElementBase::isAdditive):
(WebCore::SVGAnimateElementBase::calculateDistance):
(WebCore::SVGAnimateElementBase::setTargetElement):
(WebCore::SVGAnimateElementBase::setAttributeName):
(WebCore::SVGAnimateElementBase::resetAnimatedPropertyType):
(WebCore::SVGAnimateElementBase::ensureAnimator):
* svg/SVGAnimateElementBase.h: Copied from Source/WebCore/svg/SVGAnimateElement.h.
(WebCore::isSVGAnimateElementBase):
* svg/SVGAnimateTransformElement.cpp:
(WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
(WebCore::SVGAnimateTransformElement::parseAttribute):
* svg/SVGAnimateTransformElement.h:
* svg/SVGAnimatedAngle.cpp:
* svg/SVGAnimatedBoolean.cpp:
* svg/SVGAnimatedColor.cpp:
* svg/SVGAnimatedInteger.cpp:
* svg/SVGAnimatedIntegerOptionalInteger.cpp:
* svg/SVGAnimatedLength.cpp:
* svg/SVGAnimatedLengthList.cpp:
* svg/SVGAnimatedNumber.cpp:
* svg/SVGAnimatedNumberList.cpp:
* svg/SVGAnimatedNumberOptionalNumber.cpp:
* svg/SVGAnimatedPath.cpp:
* svg/SVGAnimatedPointList.cpp:
* svg/SVGAnimatedPreserveAspectRatio.cpp:
* svg/SVGAnimatedRect.cpp:
* svg/SVGAnimatedString.cpp:
* svg/SVGAnimationElement.cpp:
(WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
* svg/SVGSetElement.cpp:
(WebCore::SVGSetElement::SVGSetElement):
* svg/SVGSetElement.h:
* svg/svgtags.in:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoredommake_namespl">trunk/Source/WebCore/dom/make_names.pl</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLTagNamesin">trunk/Source/WebCore/html/HTMLTagNames.in</a></li>
<li><a href="#trunkSourceWebCoremathmlmathtagsin">trunk/Source/WebCore/mathml/mathtags.in</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAllInOnecpp">trunk/Source/WebCore/svg/SVGAllInOne.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateColorElementcpp">trunk/Source/WebCore/svg/SVGAnimateColorElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateColorElementh">trunk/Source/WebCore/svg/SVGAnimateColorElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementcpp">trunk/Source/WebCore/svg/SVGAnimateElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementh">trunk/Source/WebCore/svg/SVGAnimateElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateTransformElementcpp">trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateTransformElementh">trunk/Source/WebCore/svg/SVGAnimateTransformElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedAnglecpp">trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedBooleancpp">trunk/Source/WebCore/svg/SVGAnimatedBoolean.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedColorcpp">trunk/Source/WebCore/svg/SVGAnimatedColor.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedIntegercpp">trunk/Source/WebCore/svg/SVGAnimatedInteger.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedIntegerOptionalIntegercpp">trunk/Source/WebCore/svg/SVGAnimatedIntegerOptionalInteger.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedLengthcpp">trunk/Source/WebCore/svg/SVGAnimatedLength.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedLengthListcpp">trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedNumbercpp">trunk/Source/WebCore/svg/SVGAnimatedNumber.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedNumberListcpp">trunk/Source/WebCore/svg/SVGAnimatedNumberList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedNumberOptionalNumbercpp">trunk/Source/WebCore/svg/SVGAnimatedNumberOptionalNumber.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedPathcpp">trunk/Source/WebCore/svg/SVGAnimatedPath.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedPointListcpp">trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedPreserveAspectRatiocpp">trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedRectcpp">trunk/Source/WebCore/svg/SVGAnimatedRect.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedStringcpp">trunk/Source/WebCore/svg/SVGAnimatedString.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimationElementcpp">trunk/Source/WebCore/svg/SVGAnimationElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSetElementcpp">trunk/Source/WebCore/svg/SVGSetElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSetElementh">trunk/Source/WebCore/svg/SVGSetElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgsvgtagsin">trunk/Source/WebCore/svg/svgtags.in</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementBasecpp">trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementBaseh">trunk/Source/WebCore/svg/SVGAnimateElementBase.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/CMakeLists.txt        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -2521,6 +2521,7 @@
</span><span class="cx">     svg/SVGAltGlyphItemElement.cpp
</span><span class="cx">     svg/SVGAngle.cpp
</span><span class="cx">     svg/SVGAnimateColorElement.cpp
</span><ins>+    svg/SVGAnimateElementBase.cpp
</ins><span class="cx">     svg/SVGAnimateElement.cpp
</span><span class="cx">     svg/SVGAnimateMotionElement.cpp
</span><span class="cx">     svg/SVGAnimateTransformElement.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/ChangeLog        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -1,3 +1,119 @@
</span><ins>+2014-09-28  Christophe Dumez  &lt;cdumez@apple.com&gt;
+
+        Automatically generate template specializations for most Elements
+        https://bugs.webkit.org/show_bug.cgi?id=137174
+
+        Reviewed by Darin Adler.
+
+        Previously, the template specializations to make is&lt;&gt;() / downcast&lt;&gt;()
+        work for HTML/SVG/MathML elements were only generated if
+        &quot;generateTypeHelpers&quot; parameter was explicitly specified for the
+        corresponding tag name in the *Tags.in file.
+
+        We are however able to generate the template specializations for most
+        types so this patch drops the &quot;generateTypeHelpers&quot; parameter and
+        generates those template specializations by default.
+
+        One case we cannot generate the specialization ifor is when a class is
+        associated to several tag names but this patch updates the
+        make_names.pl script to detect this and skip those classes.
+
+        No new tests, no behavior change.
+
+        * CMakeLists.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * dom/make_names.pl:
+        (defaultTagPropertyHash):
+        (printTypeHelpers):
+        * html/HTMLTagNames.in:
+        * mathml/mathtags.in:
+        * svg/SVGAllInOne.cpp:
+        * svg/SVGAnimateColorElement.cpp:
+        (WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
+        (WebCore::SVGAnimateColorElement::determinePropertyValueTypes):
+        * svg/SVGAnimateColorElement.h:
+        * svg/SVGAnimateElement.cpp:
+        (WebCore::SVGAnimateElement::SVGAnimateElement):
+        (WebCore::SVGAnimateElement::~SVGAnimateElement): Deleted.
+        (WebCore::SVGAnimateElement::hasValidAttributeType): Deleted.
+        (WebCore::SVGAnimateElement::determineAnimatedPropertyType): Deleted.
+        (WebCore::SVGAnimateElement::calculateAnimatedValue): Deleted.
+        (WebCore::SVGAnimateElement::calculateToAtEndOfDurationValue): Deleted.
+        (WebCore::SVGAnimateElement::calculateFromAndToValues): Deleted.
+        (WebCore::SVGAnimateElement::calculateFromAndByValues): Deleted.
+        (WebCore::propertyTypesAreConsistent): Deleted.
+        (WebCore::SVGAnimateElement::resetAnimatedType): Deleted.
+        (WebCore::applyCSSPropertyToTarget): Deleted.
+        (WebCore::removeCSSPropertyFromTarget): Deleted.
+        (WebCore::applyCSSPropertyToTargetAndInstances): Deleted.
+        (WebCore::removeCSSPropertyFromTargetAndInstances): Deleted.
+        (WebCore::notifyTargetAboutAnimValChange): Deleted.
+        (WebCore::notifyTargetAndInstancesAboutAnimValChange): Deleted.
+        (WebCore::SVGAnimateElement::clearAnimatedType): Deleted.
+        (WebCore::SVGAnimateElement::applyResultsToTarget): Deleted.
+        (WebCore::SVGAnimateElement::animatedPropertyTypeSupportsAddition): Deleted.
+        (WebCore::SVGAnimateElement::isAdditive): Deleted.
+        (WebCore::SVGAnimateElement::calculateDistance): Deleted.
+        (WebCore::SVGAnimateElement::setTargetElement): Deleted.
+        (WebCore::SVGAnimateElement::setAttributeName): Deleted.
+        (WebCore::SVGAnimateElement::resetAnimatedPropertyType): Deleted.
+        (WebCore::SVGAnimateElement::ensureAnimator): Deleted.
+        * svg/SVGAnimateElement.h:
+        (WebCore::isSVGAnimateElement): Deleted.
+        * svg/SVGAnimateElementBase.cpp: Copied from Source/WebCore/svg/SVGAnimateElement.cpp.
+        (WebCore::SVGAnimateElementBase::SVGAnimateElementBase):
+        (WebCore::SVGAnimateElementBase::~SVGAnimateElementBase):
+        (WebCore::SVGAnimateElementBase::hasValidAttributeType):
+        (WebCore::SVGAnimateElementBase::determineAnimatedPropertyType):
+        (WebCore::SVGAnimateElementBase::calculateAnimatedValue):
+        (WebCore::SVGAnimateElementBase::calculateToAtEndOfDurationValue):
+        (WebCore::SVGAnimateElementBase::calculateFromAndToValues):
+        (WebCore::SVGAnimateElementBase::calculateFromAndByValues):
+        (WebCore::propertyTypesAreConsistent):
+        (WebCore::SVGAnimateElementBase::resetAnimatedType):
+        (WebCore::applyCSSPropertyToTarget):
+        (WebCore::removeCSSPropertyFromTarget):
+        (WebCore::applyCSSPropertyToTargetAndInstances):
+        (WebCore::removeCSSPropertyFromTargetAndInstances):
+        (WebCore::notifyTargetAboutAnimValChange):
+        (WebCore::notifyTargetAndInstancesAboutAnimValChange):
+        (WebCore::SVGAnimateElementBase::clearAnimatedType):
+        (WebCore::SVGAnimateElementBase::applyResultsToTarget):
+        (WebCore::SVGAnimateElementBase::animatedPropertyTypeSupportsAddition):
+        (WebCore::SVGAnimateElementBase::isAdditive):
+        (WebCore::SVGAnimateElementBase::calculateDistance):
+        (WebCore::SVGAnimateElementBase::setTargetElement):
+        (WebCore::SVGAnimateElementBase::setAttributeName):
+        (WebCore::SVGAnimateElementBase::resetAnimatedPropertyType):
+        (WebCore::SVGAnimateElementBase::ensureAnimator):
+        * svg/SVGAnimateElementBase.h: Copied from Source/WebCore/svg/SVGAnimateElement.h.
+        (WebCore::isSVGAnimateElementBase):
+        * svg/SVGAnimateTransformElement.cpp:
+        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
+        (WebCore::SVGAnimateTransformElement::parseAttribute):
+        * svg/SVGAnimateTransformElement.h:
+        * svg/SVGAnimatedAngle.cpp:
+        * svg/SVGAnimatedBoolean.cpp:
+        * svg/SVGAnimatedColor.cpp:
+        * svg/SVGAnimatedInteger.cpp:
+        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
+        * svg/SVGAnimatedLength.cpp:
+        * svg/SVGAnimatedLengthList.cpp:
+        * svg/SVGAnimatedNumber.cpp:
+        * svg/SVGAnimatedNumberList.cpp:
+        * svg/SVGAnimatedNumberOptionalNumber.cpp:
+        * svg/SVGAnimatedPath.cpp:
+        * svg/SVGAnimatedPointList.cpp:
+        * svg/SVGAnimatedPreserveAspectRatio.cpp:
+        * svg/SVGAnimatedRect.cpp:
+        * svg/SVGAnimatedString.cpp:
+        * svg/SVGAnimationElement.cpp:
+        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
+        * svg/SVGSetElement.cpp:
+        (WebCore::SVGSetElement::SVGSetElement):
+        * svg/SVGSetElement.h:
+        * svg/svgtags.in:
+
</ins><span class="cx"> 2014-09-28  Gyuyoung Kim  &lt;gyuyoung.kim@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Use std::unique_ptr for ContextMenuController
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -2476,6 +2476,8 @@
</span><span class="cx">                 82AB1776125C826700C5069D /* InspectorResourceAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 82AB1772125C826700C5069D /* InspectorResourceAgent.h */; };
</span><span class="cx">                 82E3D8DE122EA0D1003AE5BC /* CSSPropertySourceData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 82E3D8DC122EA0D1003AE5BC /* CSSPropertySourceData.cpp */; };
</span><span class="cx">                 82E3D8DF122EA0D1003AE5BC /* CSSPropertySourceData.h in Headers */ = {isa = PBXBuildFile; fileRef = 82E3D8DD122EA0D1003AE5BC /* CSSPropertySourceData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                832B843419D8E55100B26055 /* SVGAnimateElementBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 832B843319D8E55100B26055 /* SVGAnimateElementBase.h */; };
+                832B843619D8E57400B26055 /* SVGAnimateElementBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 832B843519D8E57400B26055 /* SVGAnimateElementBase.cpp */; };
</ins><span class="cx">                 836FBCEA178C113200B21A15 /* SVGAnimatedTypeAnimator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 836FBCE9178C113200B21A15 /* SVGAnimatedTypeAnimator.cpp */; };
</span><span class="cx">                 836FBCEC178C117F00B21A15 /* SVGAnimatedProperty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 836FBCEB178C117F00B21A15 /* SVGAnimatedProperty.cpp */; };
</span><span class="cx">                 83C1D425178D5AB400141E68 /* SVGPathSegArcAbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D413178D5AB400141E68 /* SVGPathSegArcAbs.h */; };
</span><span class="lines">@@ -9627,6 +9629,8 @@
</span><span class="cx">                 82AB1772125C826700C5069D /* InspectorResourceAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorResourceAgent.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 82E3D8DC122EA0D1003AE5BC /* CSSPropertySourceData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSPropertySourceData.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 82E3D8DD122EA0D1003AE5BC /* CSSPropertySourceData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSPropertySourceData.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                832B843319D8E55100B26055 /* SVGAnimateElementBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimateElementBase.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                832B843519D8E57400B26055 /* SVGAnimateElementBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimateElementBase.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 836FBCE9178C113200B21A15 /* SVGAnimatedTypeAnimator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedTypeAnimator.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 836FBCEB178C117F00B21A15 /* SVGAnimatedProperty.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedProperty.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 83C1D413178D5AB400141E68 /* SVGPathSegArcAbs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegArcAbs.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -19780,6 +19784,8 @@
</span><span class="cx">                                 439D334013A6911C00C20F4F /* SVGAnimatedType.h */,
</span><span class="cx">                                 836FBCE9178C113200B21A15 /* SVGAnimatedTypeAnimator.cpp */,
</span><span class="cx">                                 439D334113A6911C00C20F4F /* SVGAnimatedTypeAnimator.h */,
</span><ins>+                                832B843519D8E57400B26055 /* SVGAnimateElementBase.cpp */,
+                                832B843319D8E55100B26055 /* SVGAnimateElementBase.h */,
</ins><span class="cx">                                 B22277F90D00BF1F0071B782 /* SVGAnimateElement.cpp */,
</span><span class="cx">                                 B22277FA0D00BF1F0071B782 /* SVGAnimateElement.h */,
</span><span class="cx">                                 B22277FB0D00BF1F0071B782 /* SVGAnimateElement.idl */,
</span><span class="lines">@@ -23856,6 +23862,7 @@
</span><span class="cx">                                 93D3C1590F97A9D70053C013 /* DOMHTMLCanvasElement.h in Headers */,
</span><span class="cx">                                 93F9B6580BA0F35E00854064 /* DOMHTMLCanvasElementInternal.h in Headers */,
</span><span class="cx">                                 85DF2F8E0AA3C88100AD64C5 /* DOMHTMLCollection.h in Headers */,
</span><ins>+                                832B843419D8E55100B26055 /* SVGAnimateElementBase.h in Headers */,
</ins><span class="cx">                                 85E711A20AC5D5350053270F /* DOMHTMLCollectionInternal.h in Headers */,
</span><span class="cx">                                 F5C041E30FFCA96D00839D4A /* DOMHTMLDataListElement.h in Headers */,
</span><span class="cx">                                 F5C041E50FFCA96D00839D4A /* DOMHTMLDataListElementInternal.h in Headers */,
</span><span class="lines">@@ -27370,6 +27377,7 @@
</span><span class="cx">                                 59A8F1D411A69508001AC34A /* DeviceOrientationController.cpp in Sources */,
</span><span class="cx">                                 59D1C10411EB5DCF00B638C8 /* DeviceOrientationData.cpp in Sources */,
</span><span class="cx">                                 59A85EA2119D68D900DEF1EF /* DeviceOrientationEvent.cpp in Sources */,
</span><ins>+                                832B843619D8E57400B26055 /* SVGAnimateElementBase.cpp in Sources */,
</ins><span class="cx">                                 CD37B39815C1B971006DC898 /* DiagnosticLoggingKeys.cpp in Sources */,
</span><span class="cx">                                 CECADFC6153778FF00E37068 /* DictationAlternative.cpp in Sources */,
</span><span class="cx">                                 CECADFC8153778FF00E37068 /* DictationCommand.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCoredommake_namespl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/make_names.pl (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/make_names.pl        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/dom/make_names.pl        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -194,7 +194,6 @@
</span><span class="cx">         'wrapperOnlyIfMediaIsAvailable' =&gt; 0,
</span><span class="cx">         'conditional' =&gt; 0,
</span><span class="cx">         'runtimeConditional' =&gt; 0,
</span><del>-        'generateTypeHelpers' =&gt; 0
</del><span class="cx">     );
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -627,12 +626,18 @@
</span><span class="cx">     my ($F, $namesRef) = @_;
</span><span class="cx">     my %names = %$namesRef;
</span><span class="cx"> 
</span><del>-    for my $name (sort keys %names) {
-        if (!$parsedTags{$name}{generateTypeHelpers}) {
-            next;
-        }
</del><ins>+    # Do a first pass to discard classes that map to several tags.
+    my %classToTags = ();
+    for my $name (keys %names) {
+        my $class = $parsedTags{$name}{interfaceName};
+        push(@{$classToTags{$class}}, $name) if defined $class;
+    }
</ins><span class="cx"> 
</span><del>-        my $class = $parsedTags{$name}{interfaceName};
</del><ins>+    for my $class (sort keys %classToTags) {
+        # Skip classes that map to more than 1 tag.
+        my $tagCount = scalar @{$classToTags{$class}};
+        next if $tagCount &gt; 1;
+        my $name = $classToTags{$class}[0];
</ins><span class="cx">         print F &lt;&lt;END
</span><span class="cx"> class $class;
</span><span class="cx"> template &lt;typename ArgType&gt;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLTagNamesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLTagNames.in (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLTagNames.in        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/html/HTMLTagNames.in        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -3,28 +3,28 @@
</span><span class="cx"> namespaceURI=&quot;http://www.w3.org/1999/xhtml&quot;
</span><span class="cx"> fallbackInterfaceName=&quot;HTMLUnknownElement&quot;
</span><span class="cx"> 
</span><del>-a interfaceName=HTMLAnchorElement, generateTypeHelpers
</del><ins>+a interfaceName=HTMLAnchorElement
</ins><span class="cx"> abbr interfaceName=HTMLElement
</span><span class="cx"> acronym interfaceName=HTMLElement
</span><span class="cx"> address interfaceName=HTMLElement
</span><del>-applet constructorNeedsCreatedByParser, generateTypeHelpers
-area generateTypeHelpers
</del><ins>+applet constructorNeedsCreatedByParser
+area
</ins><span class="cx"> article interfaceName=HTMLElement
</span><span class="cx"> aside interfaceName=HTMLElement
</span><del>-audio wrapperOnlyIfMediaIsAvailable, conditional=VIDEO, constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+audio wrapperOnlyIfMediaIsAvailable, conditional=VIDEO, constructorNeedsCreatedByParser
</ins><span class="cx"> b interfaceName=HTMLElement
</span><del>-base generateTypeHelpers
</del><ins>+base
</ins><span class="cx"> basefont interfaceName=HTMLBaseFontElement
</span><del>-bdi interfaceName=HTMLBDIElement, JSInterfaceName=HTMLElement, generateTypeHelpers
</del><ins>+bdi interfaceName=HTMLBDIElement, JSInterfaceName=HTMLElement
</ins><span class="cx"> bdo interfaceName=HTMLElement
</span><span class="cx"> bgsound interfaceName=HTMLElement
</span><span class="cx"> big interfaceName=HTMLElement
</span><span class="cx"> blockquote interfaceName=HTMLQuoteElement
</span><del>-body generateTypeHelpers
-br interfaceName=HTMLBRElement, generateTypeHelpers
-button constructorNeedsFormElement, generateTypeHelpers
-canvas generateTypeHelpers
-caption interfaceName=HTMLTableCaptionElement, generateTypeHelpers
</del><ins>+body
+br interfaceName=HTMLBRElement
+button constructorNeedsFormElement
+canvas
+caption interfaceName=HTMLTableCaptionElement
</ins><span class="cx"> center interfaceName=HTMLElement
</span><span class="cx"> cite interfaceName=HTMLElement
</span><span class="cx"> code interfaceName=HTMLElement
</span><span class="lines">@@ -32,73 +32,73 @@
</span><span class="cx"> colgroup interfaceName=HTMLTableColElement
</span><span class="cx"> command interfaceName=HTMLElement
</span><span class="cx"> webkitShadowContent interfaceName=HTMLElement, noConstructor
</span><del>-datalist interfaceName=HTMLDataListElement, conditional=DATALIST_ELEMENT, generateTypeHelpers
</del><ins>+datalist interfaceName=HTMLDataListElement, conditional=DATALIST_ELEMENT
</ins><span class="cx"> dd interfaceName=HTMLElement
</span><span class="cx"> del interfaceName=HTMLModElement
</span><del>-details conditional=DETAILS_ELEMENT, generateTypeHelpers 
</del><ins>+details conditional=DETAILS_ELEMENT
</ins><span class="cx"> dfn interfaceName=HTMLElement
</span><span class="cx"> dir interfaceName=HTMLDirectoryElement
</span><del>-div generateTypeHelpers
</del><ins>+div
</ins><span class="cx"> dl interfaceName=HTMLDListElement
</span><span class="cx"> dt interfaceName=HTMLElement
</span><span class="cx"> em interfaceName=HTMLElement
</span><del>-embed constructorNeedsCreatedByParser, generateTypeHelpers
-fieldset interfaceName=HTMLFieldSetElement, constructorNeedsFormElement, generateTypeHelpers
</del><ins>+embed constructorNeedsCreatedByParser
+fieldset interfaceName=HTMLFieldSetElement, constructorNeedsFormElement
</ins><span class="cx"> figcaption interfaceName=HTMLElement
</span><span class="cx"> figure interfaceName=HTMLElement
</span><del>-font generateTypeHelpers
</del><ins>+font
</ins><span class="cx"> footer interfaceName=HTMLElement
</span><del>-form generateTypeHelpers
-frame generateTypeHelpers
-frameset interfaceName=HTMLFrameSetElement, generateTypeHelpers
</del><ins>+form
+frame
+frameset interfaceName=HTMLFrameSetElement
</ins><span class="cx"> h1 interfaceName=HTMLHeadingElement
</span><span class="cx"> h2 interfaceName=HTMLHeadingElement
</span><span class="cx"> h3 interfaceName=HTMLHeadingElement
</span><span class="cx"> h4 interfaceName=HTMLHeadingElement
</span><span class="cx"> h5 interfaceName=HTMLHeadingElement
</span><span class="cx"> h6 interfaceName=HTMLHeadingElement
</span><del>-head generateTypeHelpers
</del><ins>+head
</ins><span class="cx"> header interfaceName=HTMLElement
</span><span class="cx"> hgroup interfaceName=HTMLElement
</span><del>-hr interfaceName=HTMLHRElement, generateTypeHelpers
-html generateTypeHelpers
</del><ins>+hr interfaceName=HTMLHRElement
+html
</ins><span class="cx"> i interfaceName=HTMLElement
</span><del>-iframe interfaceName=HTMLIFrameElement, generateTypeHelpers
</del><ins>+iframe interfaceName=HTMLIFrameElement
</ins><span class="cx"> image interfaceName=HTMLUnknownElement
</span><del>-img interfaceName=HTMLImageElement, constructorNeedsFormElement, generateTypeHelpers
-input constructorNeedsFormElement, constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+img interfaceName=HTMLImageElement, constructorNeedsFormElement
+input constructorNeedsFormElement, constructorNeedsCreatedByParser
</ins><span class="cx"> ins interfaceName=HTMLModElement
</span><span class="cx"> isindex interfaceName=HTMLUnknownElement
</span><span class="cx"> kbd interfaceName=HTMLElement
</span><span class="cx"> keygen constructorNeedsFormElement
</span><del>-label generateTypeHelpers
</del><ins>+label
</ins><span class="cx"> layer interfaceName=HTMLElement
</span><del>-legend generateTypeHelpers
</del><ins>+legend
</ins><span class="cx"> li interfaceName=HTMLLIElement
</span><del>-link constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+link constructorNeedsCreatedByParser
</ins><span class="cx"> listing interfaceName=HTMLPreElement
</span><span class="cx"> main interfaceName=HTMLElement
</span><del>-map generateTypeHelpers
</del><ins>+map
</ins><span class="cx"> mark interfaceName=HTMLElement
</span><del>-marquee generateTypeHelpers
</del><ins>+marquee
</ins><span class="cx"> menu
</span><del>-meta generateTypeHelpers
-meter interfaceName=HTMLMeterElement, conditional=METER_ELEMENT, generateTypeHelpers
</del><ins>+meta
+meter interfaceName=HTMLMeterElement, conditional=METER_ELEMENT
</ins><span class="cx"> nav interfaceName=HTMLElement
</span><span class="cx"> nobr interfaceName=HTMLElement
</span><span class="cx"> noembed interfaceName=HTMLElement
</span><span class="cx"> noframes interfaceName=HTMLElement
</span><span class="cx"> nolayer interfaceName=HTMLElement
</span><del>-object constructorNeedsFormElement, constructorNeedsCreatedByParser, generateTypeHelpers
-ol interfaceName=HTMLOListElement, generateTypeHelpers
-optgroup interfaceName=HTMLOptGroupElement, generateTypeHelpers
-option generateTypeHelpers
</del><ins>+object constructorNeedsFormElement, constructorNeedsCreatedByParser
+ol interfaceName=HTMLOListElement
+optgroup interfaceName=HTMLOptGroupElement
+option
</ins><span class="cx"> output constructorNeedsFormElement
</span><del>-p interfaceName=HTMLParagraphElement, generateTypeHelpers
-param generateTypeHelpers
</del><ins>+p interfaceName=HTMLParagraphElement
+param
</ins><span class="cx"> plaintext interfaceName=HTMLElement
</span><span class="cx"> pre
</span><del>-progress interfaceName=HTMLProgressElement, generateTypeHelpers
</del><ins>+progress interfaceName=HTMLProgressElement
</ins><span class="cx"> q interfaceName=HTMLQuoteElement
</span><span class="cx"> rb interfaceName=HTMLElement
</span><span class="cx"> rp interfaceName=HTMLElement
</span><span class="lines">@@ -107,34 +107,34 @@
</span><span class="cx"> ruby interfaceName=HTMLElement
</span><span class="cx"> s interfaceName=HTMLElement
</span><span class="cx"> samp interfaceName=HTMLElement
</span><del>-script constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+script constructorNeedsCreatedByParser
</ins><span class="cx"> section interfaceName=HTMLElement
</span><del>-select constructorNeedsFormElement, generateTypeHelpers
</del><ins>+select constructorNeedsFormElement
</ins><span class="cx"> small interfaceName=HTMLElement
</span><del>-source wrapperOnlyIfMediaIsAvailable, conditional=VIDEO, generateTypeHelpers
-span generateTypeHelpers
</del><ins>+source wrapperOnlyIfMediaIsAvailable, conditional=VIDEO
+span
</ins><span class="cx"> strike interfaceName=HTMLElement
</span><span class="cx"> strong interfaceName=HTMLElement
</span><del>-style constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+style constructorNeedsCreatedByParser
</ins><span class="cx"> sub interfaceName=HTMLElement
</span><del>-summary interfaceName=HTMLSummaryElement, JSInterfaceName=HTMLElement, conditional=DETAILS_ELEMENT, generateTypeHelpers
</del><ins>+summary interfaceName=HTMLSummaryElement, JSInterfaceName=HTMLElement, conditional=DETAILS_ELEMENT
</ins><span class="cx"> sup interfaceName=HTMLElement
</span><del>-table generateTypeHelpers
</del><ins>+table
</ins><span class="cx"> tbody interfaceName=HTMLTableSectionElement
</span><span class="cx"> td interfaceName=HTMLTableCellElement
</span><del>-template conditional=TEMPLATE_ELEMENT, generateTypeHelpers
-textarea interfaceName=HTMLTextAreaElement, constructorNeedsFormElement, generateTypeHelpers
</del><ins>+template conditional=TEMPLATE_ELEMENT
+textarea interfaceName=HTMLTextAreaElement, constructorNeedsFormElement
</ins><span class="cx"> tfoot interfaceName=HTMLTableSectionElement
</span><span class="cx"> th interfaceName=HTMLTableCellElement
</span><span class="cx"> thead interfaceName=HTMLTableSectionElement
</span><del>-title generateTypeHelpers
-tr interfaceName=HTMLTableRowElement, generateTypeHelpers
-track wrapperOnlyIfMediaIsAvailable, conditional=VIDEO_TRACK, generateTypeHelpers
</del><ins>+title
+tr interfaceName=HTMLTableRowElement
+track wrapperOnlyIfMediaIsAvailable, conditional=VIDEO_TRACK
</ins><span class="cx"> tt interfaceName=HTMLElement
</span><span class="cx"> u interfaceName=HTMLElement
</span><del>-ul interfaceName=HTMLUListElement, generateTypeHelpers
</del><ins>+ul interfaceName=HTMLUListElement
</ins><span class="cx"> var interfaceName=HTMLElement
</span><del>-video wrapperOnlyIfMediaIsAvailable, conditional=VIDEO, constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+video wrapperOnlyIfMediaIsAvailable, conditional=VIDEO, constructorNeedsCreatedByParser
</ins><span class="cx"> wbr interfaceName=HTMLElement
</span><span class="cx"> xmp interfaceName=HTMLPreElement
</span><span class="cx"> noscript interfaceName=HTMLElement
</span></span></pre></div>
<a id="trunkSourceWebCoremathmlmathtagsin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/mathml/mathtags.in (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/mathml/mathtags.in        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/mathml/mathtags.in        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -6,7 +6,7 @@
</span><span class="cx"> annotation interfaceName=MathMLTextElement
</span><span class="cx"> annotation-xml interfaceName=MathMLInlineContainerElement
</span><span class="cx"> maction interfaceName=MathMLSelectElement
</span><del>-math generateTypeHelpers
</del><ins>+math
</ins><span class="cx"> mfrac interfaceName=MathMLInlineContainerElement
</span><span class="cx"> mfenced interfaceName=MathMLInlineContainerElement
</span><span class="cx"> msubsup interfaceName=MathMLInlineContainerElement
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> mtd interfaceName=MathMLElement
</span><span class="cx"> mmultiscripts interfaceName=MathMLInlineContainerElement
</span><span class="cx"> mprescripts interfaceName=MathMLInlineContainerElement
</span><del>-menclose interfaceName=MathMLMencloseElement, generateTypeHelpers
</del><ins>+menclose interfaceName=MathMLMencloseElement
</ins><span class="cx"> none interfaceName=MathMLInlineContainerElement
</span><span class="cx"> semantics interfaceName=MathMLSelectElement
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAllInOnecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAllInOne.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAllInOne.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAllInOne.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include &quot;SVGAngle.cpp&quot;
</span><span class="cx"> #include &quot;SVGAnimateColorElement.cpp&quot;
</span><span class="cx"> #include &quot;SVGAnimateElement.cpp&quot;
</span><ins>+#include &quot;SVGAnimateElementBase.cpp&quot;
</ins><span class="cx"> #include &quot;SVGAnimateMotionElement.cpp&quot;
</span><span class="cx"> #include &quot;SVGAnimateTransformElement.cpp&quot;
</span><span class="cx"> #include &quot;SVGAnimatedAngle.cpp&quot;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateColorElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateColorElement.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateColorElement.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateColorElement.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">     
</span><span class="cx"> inline SVGAnimateColorElement::SVGAnimateColorElement(const QualifiedName&amp; tagName, Document&amp; document)
</span><del>-    : SVGAnimateElement(tagName, document)
</del><ins>+    : SVGAnimateElementBase(tagName, document)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(hasTagName(SVGNames::animateColorTag));
</span><span class="cx"> }
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx"> 
</span><span class="cx"> void SVGAnimateColorElement::determinePropertyValueTypes(const String&amp; from, const String&amp; to)
</span><span class="cx"> {
</span><del>-    SVGAnimateElement::determinePropertyValueTypes(from, to);
</del><ins>+    SVGAnimateElementBase::determinePropertyValueTypes(from, to);
</ins><span class="cx">     if (attributeValueIsCurrentColor(from))
</span><span class="cx">         m_fromPropertyValueType = CurrentColorValue;
</span><span class="cx">     if (attributeValueIsCurrentColor(to))
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateColorElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateColorElement.h (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateColorElement.h        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateColorElement.h        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -22,11 +22,11 @@
</span><span class="cx"> #ifndef SVGAnimateColorElement_h
</span><span class="cx"> #define SVGAnimateColorElement_h
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class SVGAnimateColorElement final : public SVGAnimateElement {
</del><ins>+class SVGAnimateColorElement final : public SVGAnimateElementBase {
</ins><span class="cx"> public:
</span><span class="cx">     static PassRefPtr&lt;SVGAnimateColorElement&gt; create(const QualifiedName&amp;, Document&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateElement.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElement.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateElement.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -1,45 +1,37 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2004, 2005 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
- * Copyright (C) 2004, 2005, 2006 Rob Buis &lt;buis@kde.org&gt;
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- * Copyright (C) Research In Motion Limited 2011. All rights reserved.
- * Copyright (C) 2014 Adobe Systems Incorporated. All rights reserved.
</del><ins>+ * Copyright (C) 2014 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><del>- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
</del><ins>+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
</ins><span class="cx">  *
</span><del>- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
</del><ins>+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimateElement.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;CSSParser.h&quot;
-#include &quot;CSSPropertyNames.h&quot;
-#include &quot;QualifiedName.h&quot;
-#include &quot;RenderObject.h&quot;
-#include &quot;SVGAnimatorFactory.h&quot;
-#include &quot;SVGElement.h&quot;
-#include &quot;SVGNames.h&quot;
-#include &quot;StyleProperties.h&quot;
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> SVGAnimateElement::SVGAnimateElement(const QualifiedName&amp; tagName, Document&amp; document)
</span><del>-    : SVGAnimationElement(tagName, document)
-    , m_animatedPropertyType(AnimatedString)
</del><ins>+    : SVGAnimateElementBase(tagName, document)
</ins><span class="cx"> {
</span><del>-    ASSERT(hasTagName(SVGNames::animateTag) || hasTagName(SVGNames::setTag) || hasTagName(SVGNames::animateColorTag) || hasTagName(SVGNames::animateTransformTag));
</del><ins>+    ASSERT(hasTagName(SVGNames::animateTag));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> PassRefPtr&lt;SVGAnimateElement&gt; SVGAnimateElement::create(const QualifiedName&amp; tagName, Document&amp; document)
</span><span class="lines">@@ -47,416 +39,4 @@
</span><span class="cx">     return adoptRef(new SVGAnimateElement(tagName, document));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGAnimateElement::~SVGAnimateElement()
-{
-}
-
-bool SVGAnimateElement::hasValidAttributeType()
-{
-    SVGElement* targetElement = this-&gt;targetElement();
-    if (!targetElement)
-        return false;
-
-    return m_animatedPropertyType != AnimatedUnknown &amp;&amp; !hasInvalidCSSAttributeType();
-}
-
-AnimatedPropertyType SVGAnimateElement::determineAnimatedPropertyType(SVGElement* targetElement) const
-{
-    ASSERT(targetElement);
-
-    Vector&lt;AnimatedPropertyType&gt; propertyTypes;
-    targetElement-&gt;animatedPropertyTypeForAttribute(attributeName(), propertyTypes);
-    if (propertyTypes.isEmpty())
-        return AnimatedUnknown;
-
-    ASSERT(propertyTypes.size() &lt;= 2);
-    AnimatedPropertyType type = propertyTypes[0];
-    if (hasTagName(SVGNames::animateColorTag) &amp;&amp; type != AnimatedColor)
-        return AnimatedUnknown;
-
-    // Animations of transform lists are not allowed for &lt;animate&gt; or &lt;set&gt;
-    // http://www.w3.org/TR/SVG/animate.html#AnimationAttributesAndProperties
-    if (type == AnimatedTransformList &amp;&amp; !hasTagName(SVGNames::animateTransformTag))
-        return AnimatedUnknown;
-
-    // Fortunately there's just one special case needed here: SVGMarkerElements orientAttr, which
-    // corresponds to SVGAnimatedAngle orientAngle and SVGAnimatedEnumeration orientType. We have to
-    // figure out whose value to change here.
-    if (targetElement-&gt;hasTagName(SVGNames::markerTag) &amp;&amp; type == AnimatedAngle) {
-        ASSERT(propertyTypes.size() == 2);
-        ASSERT(propertyTypes[0] == AnimatedAngle);
-        ASSERT(propertyTypes[1] == AnimatedEnumeration);
-    } else if (propertyTypes.size() == 2)
-        ASSERT(propertyTypes[0] == propertyTypes[1]);
-
-    return type;
-}
-
-void SVGAnimateElement::calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement)
-{
-    ASSERT(resultElement);
-    SVGElement* targetElement = this-&gt;targetElement();
-    if (!targetElement)
-        return;
-
-    ASSERT(m_animatedPropertyType == determineAnimatedPropertyType(targetElement));
-
-    ASSERT(percentage &gt;= 0 &amp;&amp; percentage &lt;= 1);
-    ASSERT(m_animatedPropertyType != AnimatedTransformList || hasTagName(SVGNames::animateTransformTag));
-    ASSERT(m_animatedPropertyType != AnimatedUnknown);
-    ASSERT(m_animator);
-    ASSERT(m_animator-&gt;type() == m_animatedPropertyType);
-    ASSERT(m_fromType);
-    ASSERT(m_fromType-&gt;type() == m_animatedPropertyType);
-    ASSERT(m_toType);
-
-    SVGAnimateElement&amp; resultAnimationElement = downcast&lt;SVGAnimateElement&gt;(*resultElement);
-    ASSERT(resultAnimationElement.m_animatedType);
-    ASSERT(resultAnimationElement.m_animatedPropertyType == m_animatedPropertyType);
-
-    if (hasTagName(SVGNames::setTag))
-        percentage = 1;
-
-    if (calcMode() == CalcModeDiscrete)
-        percentage = percentage &lt; 0.5 ? 0 : 1;
-
-    // Target element might have changed.
-    m_animator-&gt;setContextElement(targetElement);
-
-    // Be sure to detach list wrappers before we modfiy their underlying value. If we'd do
-    // if after calculateAnimatedValue() ran the cached pointers in the list propery tear
-    // offs would point nowhere, and we couldn't create copies of those values anymore,
-    // while detaching. This is covered by assertions, moving this down would fire them.
-    if (!m_animatedProperties.isEmpty())
-        m_animator-&gt;animValWillChange(m_animatedProperties);
-
-    // Values-animation accumulates using the last values entry corresponding to the end of duration time.
-    SVGAnimatedType* toAtEndOfDurationType = m_toAtEndOfDurationType ? m_toAtEndOfDurationType.get() : m_toType.get();
-    m_animator-&gt;calculateAnimatedValue(percentage, repeatCount, m_fromType.get(), m_toType.get(), toAtEndOfDurationType, resultAnimationElement.m_animatedType.get());
-}
-
-bool SVGAnimateElement::calculateToAtEndOfDurationValue(const String&amp; toAtEndOfDurationString)
-{
-    if (toAtEndOfDurationString.isEmpty())
-        return false;
-    m_toAtEndOfDurationType = ensureAnimator()-&gt;constructFromString(toAtEndOfDurationString);
-    return true;
-}
-
-bool SVGAnimateElement::calculateFromAndToValues(const String&amp; fromString, const String&amp; toString)
-{
-    SVGElement* targetElement = this-&gt;targetElement();
-    if (!targetElement)
-        return false;
-
-    determinePropertyValueTypes(fromString, toString);
-    ensureAnimator()-&gt;calculateFromAndToValues(m_fromType, m_toType, fromString, toString);
-    ASSERT(m_animatedPropertyType == m_animator-&gt;type());
-    return true;
-}
-
-bool SVGAnimateElement::calculateFromAndByValues(const String&amp; fromString, const String&amp; byString)
-{
-    SVGElement* targetElement = this-&gt;targetElement();
-    if (!targetElement)
-        return false;
-
-    if (animationMode() == ByAnimation &amp;&amp; !isAdditive())
-        return false;
-
-    // from-by animation may only be used with attributes that support addition (e.g. most numeric attributes).
-    if (animationMode() == FromByAnimation &amp;&amp; !animatedPropertyTypeSupportsAddition())
-        return false;
-
-    ASSERT(!hasTagName(SVGNames::setTag));
-
-    determinePropertyValueTypes(fromString, byString);
-    ensureAnimator()-&gt;calculateFromAndByValues(m_fromType, m_toType, fromString, byString);
-    ASSERT(m_animatedPropertyType == m_animator-&gt;type());
-    return true;
-}
-
-#ifndef NDEBUG
-static inline bool propertyTypesAreConsistent(AnimatedPropertyType expectedPropertyType, const SVGElementAnimatedPropertyList&amp; animatedTypes)
-{
-    SVGElementAnimatedPropertyList::const_iterator end = animatedTypes.end();
-    for (SVGElementAnimatedPropertyList::const_iterator it = animatedTypes.begin(); it != end; ++it) {
-        for (size_t i = 0; i &lt; it-&gt;properties.size(); ++i) {
-            if (expectedPropertyType != it-&gt;properties[i]-&gt;animatedPropertyType()) {
-                // This is the only allowed inconsistency. SVGAnimatedAngleAnimator handles both SVGAnimatedAngle &amp; SVGAnimatedEnumeration for markers orient attribute.
-                if (expectedPropertyType == AnimatedAngle &amp;&amp; it-&gt;properties[i]-&gt;animatedPropertyType() == AnimatedEnumeration)
-                    return true;
-                return false;
-            }
-        }
-    }
-
-    return true;
-}
-#endif
-
-void SVGAnimateElement::resetAnimatedType()
-{
-    SVGAnimatedTypeAnimator* animator = ensureAnimator();
-    ASSERT(m_animatedPropertyType == animator-&gt;type());
-
-    SVGElement* targetElement = this-&gt;targetElement();
-    const QualifiedName&amp; attributeName = this-&gt;attributeName();
-    ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName);
-
-    if (shouldApply == DontApplyAnimation)
-        return;
-
-    if (shouldApply == ApplyXMLAnimation || shouldApply == ApplyXMLandCSSAnimation) {
-        // SVG DOM animVal animation code-path.
-        m_animatedProperties = animator-&gt;findAnimatedPropertiesForAttributeName(targetElement, attributeName);
-        ASSERT(!m_animatedProperties.isEmpty());
-
-        ASSERT(propertyTypesAreConsistent(m_animatedPropertyType, m_animatedProperties));
-        if (!m_animatedType)
-            m_animatedType = animator-&gt;startAnimValAnimation(m_animatedProperties);
-        else {
-            animator-&gt;resetAnimValToBaseVal(m_animatedProperties, m_animatedType.get());
-            animator-&gt;animValDidChange(m_animatedProperties);
-        }
-        return;
-    }
-
-    // CSS properties animation code-path.
-    ASSERT(m_animatedProperties.isEmpty());
-    String baseValue;
-
-    if (shouldApply == ApplyCSSAnimation) {
-        ASSERT(SVGAnimationElement::isTargetAttributeCSSProperty(targetElement, attributeName));
-        computeCSSPropertyValue(targetElement, cssPropertyID(attributeName.localName()), baseValue);
-    }
-
-    if (!m_animatedType)
-        m_animatedType = animator-&gt;constructFromString(baseValue);
-    else
-        m_animatedType-&gt;setValueAsString(attributeName, baseValue);
-}
-
-static inline void applyCSSPropertyToTarget(SVGElement* targetElement, CSSPropertyID id, const String&amp; value)
-{
-    ASSERT(!targetElement-&gt;m_deletionHasBegun);
-
-    if (!targetElement-&gt;ensureAnimatedSMILStyleProperties().setProperty(id, value, false, 0))
-        return;
-
-    targetElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
-}
-
-static inline void removeCSSPropertyFromTarget(SVGElement* targetElement, CSSPropertyID id)
-{
-    ASSERT(!targetElement-&gt;m_deletionHasBegun);
-    targetElement-&gt;ensureAnimatedSMILStyleProperties().removeProperty(id);
-    targetElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
-}
-
-static inline void applyCSSPropertyToTargetAndInstances(SVGElement* targetElement, const QualifiedName&amp; attributeName, const String&amp; valueAsString)
-{
-    ASSERT(targetElement);
-    if (attributeName == anyQName() || !targetElement-&gt;inDocument() || !targetElement-&gt;parentNode())
-        return;
-
-    CSSPropertyID id = cssPropertyID(attributeName.localName());
-
-    SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
-    applyCSSPropertyToTarget(targetElement, id, valueAsString);
-
-    // If the target element has instances, update them as well, w/o requiring the &lt;use&gt; tree to be rebuilt.
-    const HashSet&lt;SVGElementInstance*&gt;&amp; instances = targetElement-&gt;instancesForElement();
-    const HashSet&lt;SVGElementInstance*&gt;::const_iterator end = instances.end();
-    for (HashSet&lt;SVGElementInstance*&gt;::const_iterator it = instances.begin(); it != end; ++it) {
-        if (SVGElement* shadowTreeElement = (*it)-&gt;shadowTreeElement())
-            applyCSSPropertyToTarget(shadowTreeElement, id, valueAsString);
-    }
-}
-
-static inline void removeCSSPropertyFromTargetAndInstances(SVGElement* targetElement, const QualifiedName&amp; attributeName)
-{
-    ASSERT(targetElement);
-    if (attributeName == anyQName() || !targetElement-&gt;inDocument() || !targetElement-&gt;parentNode())
-        return;
-
-    CSSPropertyID id = cssPropertyID(attributeName.localName());
-
-    SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
-    removeCSSPropertyFromTarget(targetElement, id);
-
-    // If the target element has instances, update them as well, w/o requiring the &lt;use&gt; tree to be rebuilt.
-    const HashSet&lt;SVGElementInstance*&gt;&amp; instances = targetElement-&gt;instancesForElement();
-    const HashSet&lt;SVGElementInstance*&gt;::const_iterator end = instances.end();
-    for (HashSet&lt;SVGElementInstance*&gt;::const_iterator it = instances.begin(); it != end; ++it) {
-        if (SVGElement* shadowTreeElement = (*it)-&gt;shadowTreeElement())
-            removeCSSPropertyFromTarget(shadowTreeElement, id);
-    }
-}
-
-static inline void notifyTargetAboutAnimValChange(SVGElement* targetElement, const QualifiedName&amp; attributeName)
-{
-    ASSERT(!targetElement-&gt;m_deletionHasBegun);
-    targetElement-&gt;svgAttributeChanged(attributeName);
-}
-
-static inline void notifyTargetAndInstancesAboutAnimValChange(SVGElement* targetElement, const QualifiedName&amp; attributeName)
-{
-    ASSERT(targetElement);
-    if (attributeName == anyQName() || !targetElement-&gt;inDocument() || !targetElement-&gt;parentNode())
-        return;
-
-    SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
-    notifyTargetAboutAnimValChange(targetElement, attributeName);
-
-    // If the target element has instances, update them as well, w/o requiring the &lt;use&gt; tree to be rebuilt.
-    const HashSet&lt;SVGElementInstance*&gt;&amp; instances = targetElement-&gt;instancesForElement();
-    const HashSet&lt;SVGElementInstance*&gt;::const_iterator end = instances.end();
-    for (HashSet&lt;SVGElementInstance*&gt;::const_iterator it = instances.begin(); it != end; ++it) {
-        if (SVGElement* shadowTreeElement = (*it)-&gt;shadowTreeElement())
-            notifyTargetAboutAnimValChange(shadowTreeElement, attributeName);
-    }
-}
-
-void SVGAnimateElement::clearAnimatedType(SVGElement* targetElement)
-{
-    if (!m_animatedType)
-        return;
-
-    if (!targetElement) {
-        m_animatedType = nullptr;
-        return;
-    }
-
-    if (m_animatedProperties.isEmpty()) {
-        // CSS properties animation code-path.
-        removeCSSPropertyFromTargetAndInstances(targetElement, attributeName());
-        m_animatedType = nullptr;
-        return;
-    }
-
-    ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName());
-    if (shouldApply == ApplyXMLandCSSAnimation)
-        removeCSSPropertyFromTargetAndInstances(targetElement, attributeName());
-
-    // SVG DOM animVal animation code-path.
-    if (m_animator) {
-        m_animator-&gt;stopAnimValAnimation(m_animatedProperties);
-        notifyTargetAndInstancesAboutAnimValChange(targetElement, attributeName());
-    }
-
-    m_animatedProperties.clear();
-    m_animatedType = nullptr;
-}
-
-void SVGAnimateElement::applyResultsToTarget()
-{
-    ASSERT(m_animatedPropertyType != AnimatedTransformList || hasTagName(SVGNames::animateTransformTag));
-    ASSERT(m_animatedPropertyType != AnimatedUnknown);
-    ASSERT(m_animator);
-
-    // Early exit if our animated type got destructed by a previous endedActiveInterval().
-    if (!m_animatedType)
-        return;
-
-    SVGElement* targetElement = this-&gt;targetElement();
-    const QualifiedName&amp; attributeName = this-&gt;attributeName();
-    if (m_animatedProperties.isEmpty()) {
-        // CSS properties animation code-path.
-        // Convert the result of the animation to a String and apply it as CSS property on the target &amp; all instances.
-        applyCSSPropertyToTargetAndInstances(targetElement, attributeName, m_animatedType-&gt;valueAsString());
-        return;
-    }
-
-    // We do update the style and the animation property independent of each other.
-    ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName);
-    if (shouldApply == ApplyXMLandCSSAnimation)
-        applyCSSPropertyToTargetAndInstances(targetElement, attributeName, m_animatedType-&gt;valueAsString());
-
-    // SVG DOM animVal animation code-path.
-    // At this point the SVG DOM values are already changed, unlike for CSS.
-    // We only have to trigger update notifications here.
-    m_animator-&gt;animValDidChange(m_animatedProperties);
-    notifyTargetAndInstancesAboutAnimValChange(targetElement, attributeName);
-}
-
-bool SVGAnimateElement::animatedPropertyTypeSupportsAddition() const
-{
-    // Spec: http://www.w3.org/TR/SVG/animate.html#AnimationAttributesAndProperties.
-    switch (m_animatedPropertyType) {
-    case AnimatedBoolean:
-    case AnimatedEnumeration:
-    case AnimatedPreserveAspectRatio:
-    case AnimatedString:
-    case AnimatedUnknown:
-        return false;
-    case AnimatedAngle:
-    case AnimatedColor:
-    case AnimatedInteger:
-    case AnimatedIntegerOptionalInteger:
-    case AnimatedLength:
-    case AnimatedLengthList:
-    case AnimatedNumber:
-    case AnimatedNumberList:
-    case AnimatedNumberOptionalNumber:
-    case AnimatedPath:
-    case AnimatedPoints:
-    case AnimatedRect:
-    case AnimatedTransformList:
-        return true;
-    default:
-        RELEASE_ASSERT_NOT_REACHED();
-        return true;
-    }
-}
-
-bool SVGAnimateElement::isAdditive() const
-{
-    if (animationMode() == ByAnimation || animationMode() == FromByAnimation)
-        if (!animatedPropertyTypeSupportsAddition())
-            return false;
-
-    return SVGAnimationElement::isAdditive();
-}
-
-float SVGAnimateElement::calculateDistance(const String&amp; fromString, const String&amp; toString)
-{
-    // FIXME: A return value of float is not enough to support paced animations on lists.
-    SVGElement* targetElement = this-&gt;targetElement();
-    if (!targetElement)
-        return -1;
-
-    return ensureAnimator()-&gt;calculateDistance(fromString, toString);
-}
-
-void SVGAnimateElement::setTargetElement(SVGElement* target)
-{
-    SVGAnimationElement::setTargetElement(target);
-    resetAnimatedPropertyType();
-}
-
-void SVGAnimateElement::setAttributeName(const QualifiedName&amp; attributeName)
-{
-    SVGAnimationElement::setAttributeName(attributeName);
-    resetAnimatedPropertyType();
-}
-
-void SVGAnimateElement::resetAnimatedPropertyType()
-{
-    ASSERT(!m_animatedType);
-    m_fromType = nullptr;
-    m_toType = nullptr;
-    m_toAtEndOfDurationType = nullptr;
-    m_animator = nullptr;
-    m_animatedPropertyType = targetElement() ? determineAnimatedPropertyType(targetElement()) : AnimatedString;
-}
-
-SVGAnimatedTypeAnimator* SVGAnimateElement::ensureAnimator()
-{
-    if (!m_animator)
-        m_animator = SVGAnimatorFactory::create(this, targetElement(), m_animatedPropertyType);
-    ASSERT(m_animatedPropertyType == m_animator-&gt;type());
-    return m_animator.get();
-}
-
-}
</del><ins>+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateElement.h (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElement.h        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateElement.h        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -1,88 +1,45 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2004, 2005 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
- * Copyright (C) 2004, 2005 Rob Buis &lt;buis@kde.org&gt;
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- * Copyright (C) Research In Motion Limited 2011. All rights reserved.
</del><ins>+ * Copyright (C) 2014 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><del>- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
</del><ins>+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
</ins><span class="cx">  *
</span><del>- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
</del><ins>+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #ifndef SVGAnimateElement_h
</span><span class="cx"> #define SVGAnimateElement_h
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimatedType.h&quot;
-#include &quot;SVGAnimatedTypeAnimator.h&quot;
-#include &quot;SVGAnimationElement.h&quot;
-#include &quot;SVGNames.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class SVGAnimatedProperty;
</span><span class="cx"> 
</span><del>-class SVGAnimateElement : public SVGAnimationElement {
</del><ins>+class SVGAnimateElement final : public SVGAnimateElementBase {
</ins><span class="cx"> public:
</span><span class="cx">     static PassRefPtr&lt;SVGAnimateElement&gt; create(const QualifiedName&amp;, Document&amp;);
</span><del>-    virtual ~SVGAnimateElement();
</del><span class="cx"> 
</span><del>-    AnimatedPropertyType determineAnimatedPropertyType(SVGElement*) const;
-
-protected:
-    SVGAnimateElement(const QualifiedName&amp;, Document&amp;);
-
-    virtual void resetAnimatedType() override;
-    virtual void clearAnimatedType(SVGElement* targetElement) override;
-
-    virtual bool calculateToAtEndOfDurationValue(const String&amp; toAtEndOfDurationString) override;
-    virtual bool calculateFromAndToValues(const String&amp; fromString, const String&amp; toString) override;
-    virtual bool calculateFromAndByValues(const String&amp; fromString, const String&amp; byString) override;
-    virtual void calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement) override;
-    virtual void applyResultsToTarget() override;
-    virtual float calculateDistance(const String&amp; fromString, const String&amp; toString) override;
-    virtual bool isAdditive() const override;
-
-    virtual void setTargetElement(SVGElement*) override;
-    virtual void setAttributeName(const QualifiedName&amp;) override;
-
-    AnimatedPropertyType m_animatedPropertyType;
-
</del><span class="cx"> private:
</span><del>-    void resetAnimatedPropertyType();
-    SVGAnimatedTypeAnimator* ensureAnimator();
-    bool animatedPropertyTypeSupportsAddition() const;
-
-    virtual bool hasValidAttributeType() override;
-
-    std::unique_ptr&lt;SVGAnimatedType&gt; m_fromType;
-    std::unique_ptr&lt;SVGAnimatedType&gt; m_toType;
-    std::unique_ptr&lt;SVGAnimatedType&gt; m_toAtEndOfDurationType;
-    std::unique_ptr&lt;SVGAnimatedType&gt; m_animatedType;
-
-    SVGElementAnimatedPropertyList m_animatedProperties;
-    std::unique_ptr&lt;SVGAnimatedTypeAnimator&gt; m_animator;
</del><ins>+    SVGAnimateElement(const QualifiedName&amp;, Document&amp;);
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-SPECIALIZE_TYPE_TRAITS_BEGIN(SVGAnimateElement)
-    static bool isSVGAnimateElement(const SVGElement&amp; element)
-    {
-        return element.hasTagName(SVGNames::animateTag) || element.hasTagName(SVGNames::animateColorTag)
-            || element.hasTagName(SVGNames::animateTransformTag) || element.hasTagName(SVGNames::setTag);
-    }
-    static bool isSVGAnimateElement(const Node&amp; node) { return is&lt;SVGElement&gt;(node) &amp;&amp; isSVGAnimateElement(downcast&lt;SVGElement&gt;(node)); }
-SPECIALIZE_TYPE_TRAITS_END()
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // SVGAnimateElement_h
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementBasecppfromrev174049trunkSourceWebCoresvgSVGAnimateElementcpp"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp (from rev 174049, trunk/Source/WebCore/svg/SVGAnimateElement.cpp) (0 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -0,0 +1,458 @@
</span><ins>+/*
+ * Copyright (C) 2004, 2005 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
+ * Copyright (C) 2004, 2005, 2006 Rob Buis &lt;buis@kde.org&gt;
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ * Copyright (C) Research In Motion Limited 2011. All rights reserved.
+ * Copyright (C) 2014 Adobe Systems Incorporated. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;SVGAnimateElementBase.h&quot;
+
+#include &quot;CSSParser.h&quot;
+#include &quot;CSSPropertyNames.h&quot;
+#include &quot;QualifiedName.h&quot;
+#include &quot;RenderObject.h&quot;
+#include &quot;SVGAnimatorFactory.h&quot;
+#include &quot;SVGElement.h&quot;
+#include &quot;SVGNames.h&quot;
+#include &quot;StyleProperties.h&quot;
+
+namespace WebCore {
+
+SVGAnimateElementBase::SVGAnimateElementBase(const QualifiedName&amp; tagName, Document&amp; document)
+    : SVGAnimationElement(tagName, document)
+    , m_animatedPropertyType(AnimatedString)
+{
+    ASSERT(hasTagName(SVGNames::animateTag) || hasTagName(SVGNames::setTag) || hasTagName(SVGNames::animateColorTag) || hasTagName(SVGNames::animateTransformTag));
+}
+
+SVGAnimateElementBase::~SVGAnimateElementBase()
+{
+}
+
+bool SVGAnimateElementBase::hasValidAttributeType()
+{
+    SVGElement* targetElement = this-&gt;targetElement();
+    if (!targetElement)
+        return false;
+
+    return m_animatedPropertyType != AnimatedUnknown &amp;&amp; !hasInvalidCSSAttributeType();
+}
+
+AnimatedPropertyType SVGAnimateElementBase::determineAnimatedPropertyType(SVGElement* targetElement) const
+{
+    ASSERT(targetElement);
+
+    Vector&lt;AnimatedPropertyType&gt; propertyTypes;
+    targetElement-&gt;animatedPropertyTypeForAttribute(attributeName(), propertyTypes);
+    if (propertyTypes.isEmpty())
+        return AnimatedUnknown;
+
+    ASSERT(propertyTypes.size() &lt;= 2);
+    AnimatedPropertyType type = propertyTypes[0];
+    if (hasTagName(SVGNames::animateColorTag) &amp;&amp; type != AnimatedColor)
+        return AnimatedUnknown;
+
+    // Animations of transform lists are not allowed for &lt;animate&gt; or &lt;set&gt;
+    // http://www.w3.org/TR/SVG/animate.html#AnimationAttributesAndProperties
+    if (type == AnimatedTransformList &amp;&amp; !hasTagName(SVGNames::animateTransformTag))
+        return AnimatedUnknown;
+
+    // Fortunately there's just one special case needed here: SVGMarkerElements orientAttr, which
+    // corresponds to SVGAnimatedAngle orientAngle and SVGAnimatedEnumeration orientType. We have to
+    // figure out whose value to change here.
+    if (targetElement-&gt;hasTagName(SVGNames::markerTag) &amp;&amp; type == AnimatedAngle) {
+        ASSERT(propertyTypes.size() == 2);
+        ASSERT(propertyTypes[0] == AnimatedAngle);
+        ASSERT(propertyTypes[1] == AnimatedEnumeration);
+    } else if (propertyTypes.size() == 2)
+        ASSERT(propertyTypes[0] == propertyTypes[1]);
+
+    return type;
+}
+
+void SVGAnimateElementBase::calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement)
+{
+    ASSERT(resultElement);
+    SVGElement* targetElement = this-&gt;targetElement();
+    if (!targetElement)
+        return;
+
+    ASSERT(m_animatedPropertyType == determineAnimatedPropertyType(targetElement));
+
+    ASSERT(percentage &gt;= 0 &amp;&amp; percentage &lt;= 1);
+    ASSERT(m_animatedPropertyType != AnimatedTransformList || hasTagName(SVGNames::animateTransformTag));
+    ASSERT(m_animatedPropertyType != AnimatedUnknown);
+    ASSERT(m_animator);
+    ASSERT(m_animator-&gt;type() == m_animatedPropertyType);
+    ASSERT(m_fromType);
+    ASSERT(m_fromType-&gt;type() == m_animatedPropertyType);
+    ASSERT(m_toType);
+
+    SVGAnimateElementBase&amp; resultAnimationElement = downcast&lt;SVGAnimateElementBase&gt;(*resultElement);
+    ASSERT(resultAnimationElement.m_animatedType);
+    ASSERT(resultAnimationElement.m_animatedPropertyType == m_animatedPropertyType);
+
+    if (hasTagName(SVGNames::setTag))
+        percentage = 1;
+
+    if (calcMode() == CalcModeDiscrete)
+        percentage = percentage &lt; 0.5 ? 0 : 1;
+
+    // Target element might have changed.
+    m_animator-&gt;setContextElement(targetElement);
+
+    // Be sure to detach list wrappers before we modfiy their underlying value. If we'd do
+    // if after calculateAnimatedValue() ran the cached pointers in the list propery tear
+    // offs would point nowhere, and we couldn't create copies of those values anymore,
+    // while detaching. This is covered by assertions, moving this down would fire them.
+    if (!m_animatedProperties.isEmpty())
+        m_animator-&gt;animValWillChange(m_animatedProperties);
+
+    // Values-animation accumulates using the last values entry corresponding to the end of duration time.
+    SVGAnimatedType* toAtEndOfDurationType = m_toAtEndOfDurationType ? m_toAtEndOfDurationType.get() : m_toType.get();
+    m_animator-&gt;calculateAnimatedValue(percentage, repeatCount, m_fromType.get(), m_toType.get(), toAtEndOfDurationType, resultAnimationElement.m_animatedType.get());
+}
+
+bool SVGAnimateElementBase::calculateToAtEndOfDurationValue(const String&amp; toAtEndOfDurationString)
+{
+    if (toAtEndOfDurationString.isEmpty())
+        return false;
+    m_toAtEndOfDurationType = ensureAnimator()-&gt;constructFromString(toAtEndOfDurationString);
+    return true;
+}
+
+bool SVGAnimateElementBase::calculateFromAndToValues(const String&amp; fromString, const String&amp; toString)
+{
+    SVGElement* targetElement = this-&gt;targetElement();
+    if (!targetElement)
+        return false;
+
+    determinePropertyValueTypes(fromString, toString);
+    ensureAnimator()-&gt;calculateFromAndToValues(m_fromType, m_toType, fromString, toString);
+    ASSERT(m_animatedPropertyType == m_animator-&gt;type());
+    return true;
+}
+
+bool SVGAnimateElementBase::calculateFromAndByValues(const String&amp; fromString, const String&amp; byString)
+{
+    SVGElement* targetElement = this-&gt;targetElement();
+    if (!targetElement)
+        return false;
+
+    if (animationMode() == ByAnimation &amp;&amp; !isAdditive())
+        return false;
+
+    // from-by animation may only be used with attributes that support addition (e.g. most numeric attributes).
+    if (animationMode() == FromByAnimation &amp;&amp; !animatedPropertyTypeSupportsAddition())
+        return false;
+
+    ASSERT(!hasTagName(SVGNames::setTag));
+
+    determinePropertyValueTypes(fromString, byString);
+    ensureAnimator()-&gt;calculateFromAndByValues(m_fromType, m_toType, fromString, byString);
+    ASSERT(m_animatedPropertyType == m_animator-&gt;type());
+    return true;
+}
+
+#ifndef NDEBUG
+static inline bool propertyTypesAreConsistent(AnimatedPropertyType expectedPropertyType, const SVGElementAnimatedPropertyList&amp; animatedTypes)
+{
+    SVGElementAnimatedPropertyList::const_iterator end = animatedTypes.end();
+    for (SVGElementAnimatedPropertyList::const_iterator it = animatedTypes.begin(); it != end; ++it) {
+        for (size_t i = 0; i &lt; it-&gt;properties.size(); ++i) {
+            if (expectedPropertyType != it-&gt;properties[i]-&gt;animatedPropertyType()) {
+                // This is the only allowed inconsistency. SVGAnimatedAngleAnimator handles both SVGAnimatedAngle &amp; SVGAnimatedEnumeration for markers orient attribute.
+                if (expectedPropertyType == AnimatedAngle &amp;&amp; it-&gt;properties[i]-&gt;animatedPropertyType() == AnimatedEnumeration)
+                    return true;
+                return false;
+            }
+        }
+    }
+
+    return true;
+}
+#endif
+
+void SVGAnimateElementBase::resetAnimatedType()
+{
+    SVGAnimatedTypeAnimator* animator = ensureAnimator();
+    ASSERT(m_animatedPropertyType == animator-&gt;type());
+
+    SVGElement* targetElement = this-&gt;targetElement();
+    const QualifiedName&amp; attributeName = this-&gt;attributeName();
+    ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName);
+
+    if (shouldApply == DontApplyAnimation)
+        return;
+
+    if (shouldApply == ApplyXMLAnimation || shouldApply == ApplyXMLandCSSAnimation) {
+        // SVG DOM animVal animation code-path.
+        m_animatedProperties = animator-&gt;findAnimatedPropertiesForAttributeName(targetElement, attributeName);
+        ASSERT(!m_animatedProperties.isEmpty());
+
+        ASSERT(propertyTypesAreConsistent(m_animatedPropertyType, m_animatedProperties));
+        if (!m_animatedType)
+            m_animatedType = animator-&gt;startAnimValAnimation(m_animatedProperties);
+        else {
+            animator-&gt;resetAnimValToBaseVal(m_animatedProperties, m_animatedType.get());
+            animator-&gt;animValDidChange(m_animatedProperties);
+        }
+        return;
+    }
+
+    // CSS properties animation code-path.
+    ASSERT(m_animatedProperties.isEmpty());
+    String baseValue;
+
+    if (shouldApply == ApplyCSSAnimation) {
+        ASSERT(SVGAnimationElement::isTargetAttributeCSSProperty(targetElement, attributeName));
+        computeCSSPropertyValue(targetElement, cssPropertyID(attributeName.localName()), baseValue);
+    }
+
+    if (!m_animatedType)
+        m_animatedType = animator-&gt;constructFromString(baseValue);
+    else
+        m_animatedType-&gt;setValueAsString(attributeName, baseValue);
+}
+
+static inline void applyCSSPropertyToTarget(SVGElement* targetElement, CSSPropertyID id, const String&amp; value)
+{
+    ASSERT(!targetElement-&gt;m_deletionHasBegun);
+
+    if (!targetElement-&gt;ensureAnimatedSMILStyleProperties().setProperty(id, value, false, 0))
+        return;
+
+    targetElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
+}
+
+static inline void removeCSSPropertyFromTarget(SVGElement* targetElement, CSSPropertyID id)
+{
+    ASSERT(!targetElement-&gt;m_deletionHasBegun);
+    targetElement-&gt;ensureAnimatedSMILStyleProperties().removeProperty(id);
+    targetElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
+}
+
+static inline void applyCSSPropertyToTargetAndInstances(SVGElement* targetElement, const QualifiedName&amp; attributeName, const String&amp; valueAsString)
+{
+    ASSERT(targetElement);
+    if (attributeName == anyQName() || !targetElement-&gt;inDocument() || !targetElement-&gt;parentNode())
+        return;
+
+    CSSPropertyID id = cssPropertyID(attributeName.localName());
+
+    SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
+    applyCSSPropertyToTarget(targetElement, id, valueAsString);
+
+    // If the target element has instances, update them as well, w/o requiring the &lt;use&gt; tree to be rebuilt.
+    const HashSet&lt;SVGElementInstance*&gt;&amp; instances = targetElement-&gt;instancesForElement();
+    const HashSet&lt;SVGElementInstance*&gt;::const_iterator end = instances.end();
+    for (HashSet&lt;SVGElementInstance*&gt;::const_iterator it = instances.begin(); it != end; ++it) {
+        if (SVGElement* shadowTreeElement = (*it)-&gt;shadowTreeElement())
+            applyCSSPropertyToTarget(shadowTreeElement, id, valueAsString);
+    }
+}
+
+static inline void removeCSSPropertyFromTargetAndInstances(SVGElement* targetElement, const QualifiedName&amp; attributeName)
+{
+    ASSERT(targetElement);
+    if (attributeName == anyQName() || !targetElement-&gt;inDocument() || !targetElement-&gt;parentNode())
+        return;
+
+    CSSPropertyID id = cssPropertyID(attributeName.localName());
+
+    SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
+    removeCSSPropertyFromTarget(targetElement, id);
+
+    // If the target element has instances, update them as well, w/o requiring the &lt;use&gt; tree to be rebuilt.
+    const HashSet&lt;SVGElementInstance*&gt;&amp; instances = targetElement-&gt;instancesForElement();
+    const HashSet&lt;SVGElementInstance*&gt;::const_iterator end = instances.end();
+    for (HashSet&lt;SVGElementInstance*&gt;::const_iterator it = instances.begin(); it != end; ++it) {
+        if (SVGElement* shadowTreeElement = (*it)-&gt;shadowTreeElement())
+            removeCSSPropertyFromTarget(shadowTreeElement, id);
+    }
+}
+
+static inline void notifyTargetAboutAnimValChange(SVGElement* targetElement, const QualifiedName&amp; attributeName)
+{
+    ASSERT(!targetElement-&gt;m_deletionHasBegun);
+    targetElement-&gt;svgAttributeChanged(attributeName);
+}
+
+static inline void notifyTargetAndInstancesAboutAnimValChange(SVGElement* targetElement, const QualifiedName&amp; attributeName)
+{
+    ASSERT(targetElement);
+    if (attributeName == anyQName() || !targetElement-&gt;inDocument() || !targetElement-&gt;parentNode())
+        return;
+
+    SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
+    notifyTargetAboutAnimValChange(targetElement, attributeName);
+
+    // If the target element has instances, update them as well, w/o requiring the &lt;use&gt; tree to be rebuilt.
+    const HashSet&lt;SVGElementInstance*&gt;&amp; instances = targetElement-&gt;instancesForElement();
+    const HashSet&lt;SVGElementInstance*&gt;::const_iterator end = instances.end();
+    for (HashSet&lt;SVGElementInstance*&gt;::const_iterator it = instances.begin(); it != end; ++it) {
+        if (SVGElement* shadowTreeElement = (*it)-&gt;shadowTreeElement())
+            notifyTargetAboutAnimValChange(shadowTreeElement, attributeName);
+    }
+}
+
+void SVGAnimateElementBase::clearAnimatedType(SVGElement* targetElement)
+{
+    if (!m_animatedType)
+        return;
+
+    if (!targetElement) {
+        m_animatedType = nullptr;
+        return;
+    }
+
+    if (m_animatedProperties.isEmpty()) {
+        // CSS properties animation code-path.
+        removeCSSPropertyFromTargetAndInstances(targetElement, attributeName());
+        m_animatedType = nullptr;
+        return;
+    }
+
+    ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName());
+    if (shouldApply == ApplyXMLandCSSAnimation)
+        removeCSSPropertyFromTargetAndInstances(targetElement, attributeName());
+
+    // SVG DOM animVal animation code-path.
+    if (m_animator) {
+        m_animator-&gt;stopAnimValAnimation(m_animatedProperties);
+        notifyTargetAndInstancesAboutAnimValChange(targetElement, attributeName());
+    }
+
+    m_animatedProperties.clear();
+    m_animatedType = nullptr;
+}
+
+void SVGAnimateElementBase::applyResultsToTarget()
+{
+    ASSERT(m_animatedPropertyType != AnimatedTransformList || hasTagName(SVGNames::animateTransformTag));
+    ASSERT(m_animatedPropertyType != AnimatedUnknown);
+    ASSERT(m_animator);
+
+    // Early exit if our animated type got destructed by a previous endedActiveInterval().
+    if (!m_animatedType)
+        return;
+
+    SVGElement* targetElement = this-&gt;targetElement();
+    const QualifiedName&amp; attributeName = this-&gt;attributeName();
+    if (m_animatedProperties.isEmpty()) {
+        // CSS properties animation code-path.
+        // Convert the result of the animation to a String and apply it as CSS property on the target &amp; all instances.
+        applyCSSPropertyToTargetAndInstances(targetElement, attributeName, m_animatedType-&gt;valueAsString());
+        return;
+    }
+
+    // We do update the style and the animation property independent of each other.
+    ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName);
+    if (shouldApply == ApplyXMLandCSSAnimation)
+        applyCSSPropertyToTargetAndInstances(targetElement, attributeName, m_animatedType-&gt;valueAsString());
+
+    // SVG DOM animVal animation code-path.
+    // At this point the SVG DOM values are already changed, unlike for CSS.
+    // We only have to trigger update notifications here.
+    m_animator-&gt;animValDidChange(m_animatedProperties);
+    notifyTargetAndInstancesAboutAnimValChange(targetElement, attributeName);
+}
+
+bool SVGAnimateElementBase::animatedPropertyTypeSupportsAddition() const
+{
+    // Spec: http://www.w3.org/TR/SVG/animate.html#AnimationAttributesAndProperties.
+    switch (m_animatedPropertyType) {
+    case AnimatedBoolean:
+    case AnimatedEnumeration:
+    case AnimatedPreserveAspectRatio:
+    case AnimatedString:
+    case AnimatedUnknown:
+        return false;
+    case AnimatedAngle:
+    case AnimatedColor:
+    case AnimatedInteger:
+    case AnimatedIntegerOptionalInteger:
+    case AnimatedLength:
+    case AnimatedLengthList:
+    case AnimatedNumber:
+    case AnimatedNumberList:
+    case AnimatedNumberOptionalNumber:
+    case AnimatedPath:
+    case AnimatedPoints:
+    case AnimatedRect:
+    case AnimatedTransformList:
+        return true;
+    default:
+        RELEASE_ASSERT_NOT_REACHED();
+        return true;
+    }
+}
+
+bool SVGAnimateElementBase::isAdditive() const
+{
+    if (animationMode() == ByAnimation || animationMode() == FromByAnimation) {
+        if (!animatedPropertyTypeSupportsAddition())
+            return false;
+    }
+
+    return SVGAnimationElement::isAdditive();
+}
+
+float SVGAnimateElementBase::calculateDistance(const String&amp; fromString, const String&amp; toString)
+{
+    // FIXME: A return value of float is not enough to support paced animations on lists.
+    SVGElement* targetElement = this-&gt;targetElement();
+    if (!targetElement)
+        return -1;
+
+    return ensureAnimator()-&gt;calculateDistance(fromString, toString);
+}
+
+void SVGAnimateElementBase::setTargetElement(SVGElement* target)
+{
+    SVGAnimationElement::setTargetElement(target);
+    resetAnimatedPropertyType();
+}
+
+void SVGAnimateElementBase::setAttributeName(const QualifiedName&amp; attributeName)
+{
+    SVGAnimationElement::setAttributeName(attributeName);
+    resetAnimatedPropertyType();
+}
+
+void SVGAnimateElementBase::resetAnimatedPropertyType()
+{
+    ASSERT(!m_animatedType);
+    m_fromType = nullptr;
+    m_toType = nullptr;
+    m_toAtEndOfDurationType = nullptr;
+    m_animator = nullptr;
+    m_animatedPropertyType = targetElement() ? determineAnimatedPropertyType(targetElement()) : AnimatedString;
+}
+
+SVGAnimatedTypeAnimator* SVGAnimateElementBase::ensureAnimator()
+{
+    if (!m_animator)
+        m_animator = SVGAnimatorFactory::create(this, targetElement(), m_animatedPropertyType);
+    ASSERT(m_animatedPropertyType == m_animator-&gt;type());
+    return m_animator.get();
+}
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementBasehfromrev174049trunkSourceWebCoresvgSVGAnimateElementh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/svg/SVGAnimateElementBase.h (from rev 174049, trunk/Source/WebCore/svg/SVGAnimateElement.h) (0 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElementBase.h                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGAnimateElementBase.h        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -0,0 +1,86 @@
</span><ins>+/*
+ * Copyright (C) 2004, 2005 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
+ * Copyright (C) 2004, 2005, 2006 Rob Buis &lt;buis@kde.org&gt;
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ * Copyright (C) Research In Motion Limited 2011. All rights reserved.
+ * Copyright (C) 2014 Adobe Systems Incorporated. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGAnimateElementBase_h
+#define SVGAnimateElementBase_h
+
+#include &quot;SVGAnimatedType.h&quot;
+#include &quot;SVGAnimatedTypeAnimator.h&quot;
+#include &quot;SVGAnimationElement.h&quot;
+#include &quot;SVGNames.h&quot;
+
+namespace WebCore {
+
+class SVGAnimateElementBase : public SVGAnimationElement {
+public:
+    virtual ~SVGAnimateElementBase();
+
+    AnimatedPropertyType determineAnimatedPropertyType(SVGElement*) const;
+
+protected:
+    SVGAnimateElementBase(const QualifiedName&amp;, Document&amp;);
+
+    virtual void resetAnimatedType() override;
+    virtual void clearAnimatedType(SVGElement* targetElement) override;
+
+    virtual bool calculateToAtEndOfDurationValue(const String&amp; toAtEndOfDurationString) override;
+    virtual bool calculateFromAndToValues(const String&amp; fromString, const String&amp; toString) override;
+    virtual bool calculateFromAndByValues(const String&amp; fromString, const String&amp; byString) override;
+    virtual void calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement) override;
+    virtual void applyResultsToTarget() override;
+    virtual float calculateDistance(const String&amp; fromString, const String&amp; toString) override;
+    virtual bool isAdditive() const override;
+
+    virtual void setTargetElement(SVGElement*) override;
+    virtual void setAttributeName(const QualifiedName&amp;) override;
+
+    AnimatedPropertyType m_animatedPropertyType;
+
+private:
+    void resetAnimatedPropertyType();
+    SVGAnimatedTypeAnimator* ensureAnimator();
+    bool animatedPropertyTypeSupportsAddition() const;
+
+    virtual bool hasValidAttributeType() override;
+
+    std::unique_ptr&lt;SVGAnimatedType&gt; m_fromType;
+    std::unique_ptr&lt;SVGAnimatedType&gt; m_toType;
+    std::unique_ptr&lt;SVGAnimatedType&gt; m_toAtEndOfDurationType;
+    std::unique_ptr&lt;SVGAnimatedType&gt; m_animatedType;
+
+    SVGElementAnimatedPropertyList m_animatedProperties;
+    std::unique_ptr&lt;SVGAnimatedTypeAnimator&gt; m_animator;
+};
+
+SPECIALIZE_TYPE_TRAITS_BEGIN(SVGAnimateElementBase)
+    static bool isSVGAnimateElementBase(const SVGElement&amp; element)
+    {
+        return element.hasTagName(SVGNames::animateTag) || element.hasTagName(SVGNames::animateColorTag)
+            || element.hasTagName(SVGNames::animateTransformTag) || element.hasTagName(SVGNames::setTag);
+    }
+    static bool isSVGAnimateElementBase(const Node&amp; node) { return is&lt;SVGElement&gt;(node) &amp;&amp; isSVGAnimateElementBase(downcast&lt;SVGElement&gt;(node)); }
+SPECIALIZE_TYPE_TRAITS_END()
+
+} // namespace WebCore
+
+#endif // SVGAnimateElementBase_h
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateTransformElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> inline SVGAnimateTransformElement::SVGAnimateTransformElement(const QualifiedName&amp; tagName, Document&amp; document)
</span><del>-    : SVGAnimateElement(tagName, document)
</del><ins>+    : SVGAnimateElementBase(tagName, document)
</ins><span class="cx">     , m_type(SVGTransform::SVG_TRANSFORM_UNKNOWN)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(hasTagName(SVGNames::animateTransformTag));
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx"> void SVGAnimateTransformElement::parseAttribute(const QualifiedName&amp; name, const AtomicString&amp; value)
</span><span class="cx"> {
</span><span class="cx">     if (!isSupportedAttribute(name)) {
</span><del>-        SVGAnimateElement::parseAttribute(name, value);
</del><ins>+        SVGAnimateElementBase::parseAttribute(name, value);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateTransformElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateTransformElement.h (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateTransformElement.h        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateTransformElement.h        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -23,14 +23,14 @@
</span><span class="cx"> #ifndef SVGAnimateTransformElement_h
</span><span class="cx"> #define SVGAnimateTransformElement_h
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGTransform.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class AffineTransform;
</span><span class="cx"> 
</span><del>-class SVGAnimateTransformElement final : public SVGAnimateElement {
</del><ins>+class SVGAnimateTransformElement final : public SVGAnimateElementBase {
</ins><span class="cx"> public:
</span><span class="cx">     static PassRefPtr&lt;SVGAnimateTransformElement&gt; create(const QualifiedName&amp;, Document&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedAnglecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedAngle.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGMarkerElement.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedBooleancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedBoolean.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedBoolean.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedBoolean.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedBoolean.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedColorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedColor.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedColor.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedColor.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ColorDistance.h&quot;
</span><span class="cx"> #include &quot;RenderElement.h&quot;
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGColor.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedIntegercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedInteger.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedInteger.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedInteger.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedInteger.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGAnimatedNumber.h&quot;
</span><span class="cx"> #include &lt;wtf/MathExtras.h&gt;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedIntegerOptionalIntegercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedIntegerOptionalInteger.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedIntegerOptionalInteger.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedIntegerOptionalInteger.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedIntegerOptionalInteger.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGAnimatedInteger.h&quot;
</span><span class="cx"> #include &quot;SVGParserUtilities.h&quot;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedLengthcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedLength.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedLength.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedLength.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedLength.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGAnimatedNumber.h&quot;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedLengthListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedLengthList.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGAnimatedNumber.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedNumbercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedNumber.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedNumber.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedNumber.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedNumber.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGParserUtilities.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedNumberListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedNumberList.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedNumberList.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedNumberList.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedNumberList.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGAnimatedNumber.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedNumberOptionalNumbercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedNumberOptionalNumber.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedNumberOptionalNumber.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedNumberOptionalNumber.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedNumberOptionalNumber.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGAnimatedNumber.h&quot;
</span><span class="cx"> #include &quot;SVGParserUtilities.h&quot;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedPathcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedPath.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedPath.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedPath.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedPath.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGAnimatedPathSegListPropertyTearOff.h&quot;
</span><span class="cx"> #include &quot;SVGPathUtilities.h&quot;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedPointListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedPointList.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGParserUtilities.h&quot;
</span><span class="cx"> #include &quot;SVGPointList.h&quot;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedPreserveAspectRatiocpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedPreserveAspectRatio.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedRectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedRect.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedRect.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedRect.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedRect.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> #include &quot;SVGParserUtilities.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedStringcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedString.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedString.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedString.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedString.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimationElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimationElement.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimationElement.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimationElement.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -507,8 +507,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     CalcMode calcMode = this-&gt;calcMode();
</span><del>-    if (hasTagName(SVGNames::animateTag) || hasTagName(SVGNames::animateColorTag)) {
-        AnimatedPropertyType attributeType = downcast&lt;SVGAnimateElement&gt;(*this).determineAnimatedPropertyType(targetElement());
</del><ins>+    if (is&lt;SVGAnimateElement&gt;(*this) || is&lt;SVGAnimateColorElement&gt;(*this)) {
+        AnimatedPropertyType attributeType = downcast&lt;SVGAnimateElementBase&gt;(*this).determineAnimatedPropertyType(targetElement());
</ins><span class="cx">         // Fall back to discrete animations for Strings.
</span><span class="cx">         if (attributeType == AnimatedBoolean
</span><span class="cx">             || attributeType == AnimatedEnumeration
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSetElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSetElement.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSetElement.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGSetElement.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">     
</span><span class="cx"> inline SVGSetElement::SVGSetElement(const QualifiedName&amp; tagName, Document&amp; document)
</span><del>-    : SVGAnimateElement(tagName, document)
</del><ins>+    : SVGAnimateElementBase(tagName, document)
</ins><span class="cx"> {
</span><span class="cx">     setAnimationMode(ToAnimation);
</span><span class="cx">     ASSERT(hasTagName(SVGNames::setTag));
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSetElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSetElement.h (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSetElement.h        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGSetElement.h        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -21,12 +21,12 @@
</span><span class="cx"> #ifndef SVGSetElement_h
</span><span class="cx"> #define SVGSetElement_h
</span><span class="cx"> 
</span><del>-#include &quot;SVGAnimateElement.h&quot;
</del><ins>+#include &quot;SVGAnimateElementBase.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> // SVGAnimateElement implements superset of the functionality.
</span><del>-class SVGSetElement final : public SVGAnimateElement {
</del><ins>+class SVGSetElement final : public SVGAnimateElementBase {
</ins><span class="cx"> public:
</span><span class="cx">     static PassRefPtr&lt;SVGSetElement&gt; create(const QualifiedName&amp;, Document&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgsvgtagsin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/svgtags.in (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/svgtags.in        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/svgtags.in        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -3,26 +3,26 @@
</span><span class="cx"> fallbackInterfaceName=&quot;SVGUnknownElement&quot;
</span><span class="cx"> fallbackJSInterfaceName=&quot;SVGElement&quot;
</span><span class="cx"> 
</span><del>-a generateTypeHelpers
</del><ins>+a
</ins><span class="cx"> #if ENABLE_SVG_FONTS
</span><del>-altGlyph generateTypeHelpers
-altGlyphDef generateTypeHelpers
-altGlyphItem generateTypeHelpers
</del><ins>+altGlyph
+altGlyphDef
+altGlyphItem
</ins><span class="cx"> #endif
</span><span class="cx"> animate
</span><span class="cx"> animateColor
</span><del>-animateMotion generateTypeHelpers
-animateTransform generateTypeHelpers
</del><ins>+animateMotion
+animateTransform
</ins><span class="cx"> set
</span><del>-circle generateTypeHelpers
-clipPath generateTypeHelpers
</del><ins>+circle
+clipPath
</ins><span class="cx"> #if 0
</span><span class="cx"> color_profile
</span><span class="cx"> #endif
</span><del>-cursor generateTypeHelpers
</del><ins>+cursor
</ins><span class="cx"> defs
</span><span class="cx"> desc
</span><del>-ellipse generateTypeHelpers
</del><ins>+ellipse
</ins><span class="cx"> feBlend
</span><span class="cx"> feColorMatrix
</span><span class="cx"> feComponentTransfer
</span><span class="lines">@@ -30,69 +30,69 @@
</span><span class="cx"> feConvolveMatrix
</span><span class="cx"> feDiffuseLighting
</span><span class="cx"> feDisplacementMap
</span><del>-feDistantLight generateTypeHelpers
</del><ins>+feDistantLight
</ins><span class="cx"> feDropShadow
</span><span class="cx"> feFlood
</span><del>-feFuncA generateTypeHelpers
-feFuncB generateTypeHelpers
-feFuncG generateTypeHelpers
-feFuncR generateTypeHelpers
</del><ins>+feFuncA
+feFuncB
+feFuncG
+feFuncR
</ins><span class="cx"> feGaussianBlur
</span><span class="cx"> feImage
</span><span class="cx"> feMerge
</span><del>-feMergeNode generateTypeHelpers
</del><ins>+feMergeNode
</ins><span class="cx"> feMorphology
</span><span class="cx"> feOffset
</span><del>-fePointLight generateTypeHelpers
</del><ins>+fePointLight
</ins><span class="cx"> feSpecularLighting
</span><del>-feSpotLight generateTypeHelpers
</del><ins>+feSpotLight
</ins><span class="cx"> feTile
</span><span class="cx"> feTurbulence
</span><del>-filter generateTypeHelpers
</del><ins>+filter
</ins><span class="cx"> #if ENABLE_SVG_FONTS
</span><del>-font generateTypeHelpers
-font_face generateTypeHelpers
</del><ins>+font
+font_face
</ins><span class="cx"> font_face_format
</span><del>-font_face_name generateTypeHelpers
-font_face_src generateTypeHelpers
-font_face_uri generateTypeHelpers
</del><ins>+font_face_name
+font_face_src
+font_face_uri
</ins><span class="cx"> #endif
</span><del>-foreignObject generateTypeHelpers
-g generateTypeHelpers
</del><ins>+foreignObject
+g
</ins><span class="cx"> #if ENABLE_SVG_FONTS
</span><del>-glyph generateTypeHelpers
-glyphRef generateTypeHelpers
-hkern interfaceName=SVGHKernElement, generateTypeHelpers
</del><ins>+glyph
+glyphRef
+hkern interfaceName=SVGHKernElement
</ins><span class="cx"> #endif
</span><del>-image generateTypeHelpers
-line generateTypeHelpers
-linearGradient generateTypeHelpers
-marker generateTypeHelpers
-mask generateTypeHelpers
</del><ins>+image
+line
+linearGradient
+marker
+mask
</ins><span class="cx"> metadata
</span><span class="cx"> #if ENABLE_SVG_FONTS
</span><del>-missing_glyph generateTypeHelpers
</del><ins>+missing_glyph
</ins><span class="cx"> #endif
</span><del>-mpath interfaceName=SVGMPathElement, generateTypeHelpers
-path generateTypeHelpers
-pattern generateTypeHelpers
-polygon generateTypeHelpers
-polyline generateTypeHelpers
-radialGradient generateTypeHelpers
-rect generateTypeHelpers
-script constructorNeedsCreatedByParser, generateTypeHelpers
-stop generateTypeHelpers
-style constructorNeedsCreatedByParser, generateTypeHelpers
-svg interfaceName=SVGSVGElement, generateTypeHelpers
</del><ins>+mpath interfaceName=SVGMPathElement
+path
+pattern
+polygon
+polyline
+radialGradient
+rect
+script constructorNeedsCreatedByParser
+stop
+style constructorNeedsCreatedByParser
+svg interfaceName=SVGSVGElement
</ins><span class="cx"> switch
</span><span class="cx"> symbol
</span><del>-text generateTypeHelpers
-textPath generateTypeHelpers
-title generateTypeHelpers
</del><ins>+text
+textPath
+title
</ins><span class="cx"> tref interfaceName=SVGTRefElement
</span><span class="cx"> tspan interfaceName=SVGTSpanElement
</span><del>-use constructorNeedsCreatedByParser, generateTypeHelpers
-view generateTypeHelpers
</del><ins>+use constructorNeedsCreatedByParser
+view
</ins><span class="cx"> #if ENABLE_SVG_FONTS
</span><del>-vkern interfaceName=SVGVKernElement, generateTypeHelpers
</del><ins>+vkern interfaceName=SVGVKernElement
</ins><span class="cx"> #endif
</span></span></pre>
</div>
</div>

</body>
</html>