<!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>[177166] trunk</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/177166">177166</a></dd>
<dt>Author</dt> <dd>dino@apple.com</dd>
<dt>Date</dt> <dd>2014-12-11 11:35:13 -0800 (Thu, 11 Dec 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>ASSERTION FAILED: animatedTypes[0].properties.size() == 1 in WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue.
https://bugs.webkit.org/show_bug.cgi?id=139046.

Patch by Said Abou-Hallawa &lt;sabouhallawa@apple.com&gt; on 2014-12-11
Reviewed by Dirk Schulze.

Source/WebCore:

Test: svg/animations/unsupported-animate-element-attributes.svg.

The SVG base animator element should not animate an attribute if it is not
supported by the target SVG element. Besides the CSS presentation attributes,
every SVG element defines which attributes can be animated by including them
between BEGIN_DECLARE_ANIMATED_PROPERTIES and END_DECLARE_ANIMATED_PROPERTIES
in the definition of the class. This definition builds attribute-properties map.
When restarting the animation, the animator looks for all the attributes that
match the animated attribute name. If the supported attribute-properties map
does not include the animated attribute name, an empty element-properties list
should be returned. When getting an empty element-properties list, the animator
should not start any animation for the unsupported attribute.

Do not start the animation if the animated attribute is not supported by
the target SVG element.
* svg/SVGAnimateElementBase.cpp:
(WebCore::SVGAnimateElementBase::resetAnimatedType):

Return an empty element-properties list if the animated attribute is not
supported by the target SVG element.
* svg/SVGAnimatedTypeAnimator.cpp:
(WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):

LayoutTests:

Ensure the animation attributes will be ignored by the SVG base animator if
they are not supported by the SVG target element.

* svg/animations/unsupported-animate-element-attributes-expected.svg: Added.
* svg/animations/unsupported-animate-element-attributes.svg: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementBasecpp">trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedTypeAnimatorcpp">trunk/Source/WebCore/svg/SVGAnimatedTypeAnimator.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestssvganimationsunsupportedanimateelementattributesexpectedsvg">trunk/LayoutTests/svg/animations/unsupported-animate-element-attributes-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvganimationsunsupportedanimateelementattributessvg">trunk/LayoutTests/svg/animations/unsupported-animate-element-attributes.svg</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (177165 => 177166)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-12-11 19:29:18 UTC (rev 177165)
+++ trunk/LayoutTests/ChangeLog        2014-12-11 19:35:13 UTC (rev 177166)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2014-12-11  Said Abou-Hallawa  &lt;sabouhallawa@apple.com&gt;
+
+        ASSERTION FAILED: animatedTypes[0].properties.size() == 1 in WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue.
+        https://bugs.webkit.org/show_bug.cgi?id=139046.
+
+        Reviewed by Dirk Schulze.
+
+        Ensure the animation attributes will be ignored by the SVG base animator if
+        they are not supported by the SVG target element.
+
+        * svg/animations/unsupported-animate-element-attributes-expected.svg: Added.
+        * svg/animations/unsupported-animate-element-attributes.svg: Added.
+
</ins><span class="cx"> 2014-12-10  Dean Jackson  &lt;dino@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         InstancedArray crashes attempting to draw out of bounds
</span></span></pre></div>
<a id="trunkLayoutTestssvganimationsunsupportedanimateelementattributesexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/animations/unsupported-animate-element-attributes-expected.svg (0 => 177166)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/animations/unsupported-animate-element-attributes-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/animations/unsupported-animate-element-attributes-expected.svg        2014-12-11 19:35:13 UTC (rev 177166)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+&lt;svg width=&quot;400&quot; height=&quot;400&quot;
+    xmlns=&quot;http://www.w3.org/2000/svg&quot; 
+    xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
+  &lt;defs&gt;
+    &lt;path id=&quot;MyPath&quot; d=&quot;M 20 20 L 150 20&quot;/&gt;
+  &lt;/defs&gt;
+
+  &lt;text&gt;
+    &lt;textPath xlink:href=&quot;#MyPath&quot;&gt;
+      PASS.
+    &lt;/textPath&gt;
+  &lt;/text&gt;
+&lt;/svg&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/svg/animations/unsupported-animate-element-attributes-expected.svg
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestssvganimationsunsupportedanimateelementattributessvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/animations/unsupported-animate-element-attributes.svg (0 => 177166)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/animations/unsupported-animate-element-attributes.svg                                (rev 0)
+++ trunk/LayoutTests/svg/animations/unsupported-animate-element-attributes.svg        2014-12-11 19:35:13 UTC (rev 177166)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+&lt;svg width=&quot;400&quot; height=&quot;400&quot;
+    xmlns=&quot;http://www.w3.org/2000/svg&quot; 
+    xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
+  &lt;defs&gt;
+    &lt;path id=&quot;MyPath&quot; d=&quot;M 20 20 L 150 20&quot;/&gt;
+  &lt;/defs&gt;
+
+  &lt;text&gt;
+    &lt;textPath xlink:href=&quot;#MyPath&quot;&gt;
+      &lt;animate attributeName=&quot;x&quot;/&gt;
+      PASS.
+    &lt;/textPath&gt;
+  &lt;/text&gt;
+&lt;/svg&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/svg/animations/unsupported-animate-element-attributes.svg
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (177165 => 177166)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-12-11 19:29:18 UTC (rev 177165)
+++ trunk/Source/WebCore/ChangeLog        2014-12-11 19:35:13 UTC (rev 177166)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2014-12-11  Said Abou-Hallawa  &lt;sabouhallawa@apple.com&gt;
+
+        ASSERTION FAILED: animatedTypes[0].properties.size() == 1 in WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue.
+        https://bugs.webkit.org/show_bug.cgi?id=139046.
+
+        Reviewed by Dirk Schulze.
+
+        Test: svg/animations/unsupported-animate-element-attributes.svg.
+        
+        The SVG base animator element should not animate an attribute if it is not
+        supported by the target SVG element. Besides the CSS presentation attributes, 
+        every SVG element defines which attributes can be animated by including them
+        between BEGIN_DECLARE_ANIMATED_PROPERTIES and END_DECLARE_ANIMATED_PROPERTIES
+        in the definition of the class. This definition builds attribute-properties map.
+        When restarting the animation, the animator looks for all the attributes that
+        match the animated attribute name. If the supported attribute-properties map
+        does not include the animated attribute name, an empty element-properties list
+        should be returned. When getting an empty element-properties list, the animator
+        should not start any animation for the unsupported attribute.
+
+        Do not start the animation if the animated attribute is not supported by 
+        the target SVG element.
+        * svg/SVGAnimateElementBase.cpp:
+        (WebCore::SVGAnimateElementBase::resetAnimatedType):
+        
+        Return an empty element-properties list if the animated attribute is not
+        supported by the target SVG element.
+        * svg/SVGAnimatedTypeAnimator.cpp:
+        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
+
</ins><span class="cx"> 2014-12-10  Dean Jackson  &lt;dino@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         InstancedArray crashes attempting to draw out of bounds
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp (177165 => 177166)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp        2014-12-11 19:29:18 UTC (rev 177165)
+++ trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp        2014-12-11 19:35:13 UTC (rev 177166)
</span><span class="lines">@@ -205,7 +205,8 @@
</span><span class="cx">     if (shouldApply == ApplyXMLAnimation || shouldApply == ApplyXMLandCSSAnimation) {
</span><span class="cx">         // SVG DOM animVal animation code-path.
</span><span class="cx">         m_animatedProperties = animator-&gt;findAnimatedPropertiesForAttributeName(targetElement, attributeName);
</span><del>-        ASSERT(!m_animatedProperties.isEmpty());
</del><ins>+        if (m_animatedProperties.isEmpty())
+            return;
</ins><span class="cx"> 
</span><span class="cx">         ASSERT(propertyTypesAreConsistent(m_animatedPropertyType, m_animatedProperties));
</span><span class="cx">         if (!m_animatedType)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedTypeAnimatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedTypeAnimator.cpp (177165 => 177166)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedTypeAnimator.cpp        2014-12-11 19:29:18 UTC (rev 177165)
+++ trunk/Source/WebCore/svg/SVGAnimatedTypeAnimator.cpp        2014-12-11 19:35:13 UTC (rev 177166)
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx">     Vector&lt;RefPtr&lt;SVGAnimatedProperty&gt;&gt; targetProperties;
</span><span class="cx">     targetElement-&gt;localAttributeToPropertyMap().animatedPropertiesForAttribute(targetElement, attributeName, targetProperties);
</span><span class="cx"> 
</span><del>-    if (!SVGAnimatedType::supportsAnimVal(m_type))
</del><ins>+    if (!SVGAnimatedType::supportsAnimVal(m_type) || targetProperties.isEmpty())
</ins><span class="cx">         return SVGElementAnimatedPropertyList();
</span><span class="cx"> 
</span><span class="cx">     SVGElementAnimatedProperties propertiesPair(targetElement, targetProperties);
</span></span></pre>
</div>
</div>

</body>
</html>