2011-04-26 Dinesh K Garg <dineshg@codeaurora.org>
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 27 Apr 2011 01:28:10 +0000 (01:28 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 27 Apr 2011 01:28:10 +0000 (01:28 +0000)
        Reviewed by Eric Seidel.

        Test case for: beginElement broken by setAttribute
        https://bugs.webkit.org/show_bug.cgi?id=26019

        * svg/animations/animate-beginElementAt-expected.txt: Added.
        * svg/animations/animate-beginElementAt.svg: Added.
        * svg/animations/animate-dynamic-update-attributeName-expected.txt:
        Nice side effect of the patch, we are now fully passing this test.
2011-04-26  Dinesh K Garg  <dineshg@codeaurora.org>

        Reviewed by Eric Seidel.

        beginElement broken by setAttribute
        https://bugs.webkit.org/show_bug.cgi?id=26019

        Test: svg/animations/animate-beginElementAt.svg

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::attributeChanged):
        Reset the animation state here as the rest of the code reads it and would still
        think we are animating when we are not.

        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement::setInactive): Helper function to reset the state.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@84999 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/svg/animations/animate-beginElementAt-expected.txt [new file with mode: 0644]
LayoutTests/svg/animations/animate-beginElementAt.svg [new file with mode: 0755]
LayoutTests/svg/animations/animate-dynamic-update-attributeName-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/svg/SVGAnimationElement.cpp
Source/WebCore/svg/animation/SVGSMILElement.h

index 9706956..5832370 100644 (file)
@@ -1,3 +1,15 @@
+2011-04-26  Dinesh K Garg  <dineshg@codeaurora.org>
+
+        Reviewed by Eric Seidel.
+
+        Test case for: beginElement broken by setAttribute
+        https://bugs.webkit.org/show_bug.cgi?id=26019
+
+        * svg/animations/animate-beginElementAt-expected.txt: Added.
+        * svg/animations/animate-beginElementAt.svg: Added.
+        * svg/animations/animate-dynamic-update-attributeName-expected.txt:
+        Nice side effect of the patch, we are now fully passing this test.
+
 2011-04-26  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by Oliver Hunt.
diff --git a/LayoutTests/svg/animations/animate-beginElementAt-expected.txt b/LayoutTests/svg/animations/animate-beginElementAt-expected.txt
new file mode 100644 (file)
index 0000000..ba72eb2
--- /dev/null
@@ -0,0 +1,2 @@
+This test verifies the animation behaviour of beginElement in SVG. See bug 26019
+Passed
diff --git a/LayoutTests/svg/animations/animate-beginElementAt.svg b/LayoutTests/svg/animations/animate-beginElementAt.svg
new file mode 100755 (executable)
index 0000000..e5dfde1
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<svg xmlns='http://www.w3.org/2000/svg'>
+<circle cx='0' cy='50' r='20' fill='orange' id='testCircle'>
+   <animate attributeName='cx' attributeType='XML' begin='indefinite' end='indefinite' dur='10s' repeatCount='indefinite' from="10" to="200"  id='dTripper' fill="freeze"/>
+</circle>
+<text y="130" x="20">This test verifies the animation behaviour of beginElement in SVG. See <a href="https://bugs.webkit.org/show_bug.cgi?id=26019">bug 26019</a></text>
+<text y="150" x="20" id="console"/>
+<script><![CDATA[
+    var animatedElement;
+    animatedElement = document.getElementById("dTripper");
+    animatedElement.setAttribute("to", 420);
+    animatedElement.beginElement();
+    setTimeout(beginElement, 0);
+
+    function beginElement()
+    {
+        animatedElement.setAttribute("to", 420);
+        animatedElement.beginElement();
+        setTimeout(dumpResult, 0);
+    }
+
+    function dumpResult()
+    {
+        var console = document.getElementById("console");
+        var cx = document.getElementById("testCircle").getAttribute("cx");
+        if (cx === 0)
+            console.appendChild(document.createTextNode("Failed (cx was not animated)"));
+        else
+            console.appendChild(document.createTextNode("Passed"));
+        if (window.layoutTestController)
+            layoutTestController.notifyDone();
+    }
+
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+        layoutTestController.waitUntilDone();
+    }
+]]></script>
+</svg>
index 3f722aa..8865cea 100644 (file)
@@ -6,7 +6,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS rect.style.color is 'rgb(0, 128, 0)'
-FAIL rect.style.fill should be #008000. Was #ff0000.
+PASS rect.style.fill is '#008000'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 9c46532..a425145 100644 (file)
@@ -1,3 +1,20 @@
+2011-04-26  Dinesh K Garg  <dineshg@codeaurora.org>
+
+        Reviewed by Eric Seidel.
+
+        beginElement broken by setAttribute
+        https://bugs.webkit.org/show_bug.cgi?id=26019
+
+        Test: svg/animations/animate-beginElementAt.svg
+
+        * svg/SVGAnimationElement.cpp:
+        (WebCore::SVGAnimationElement::attributeChanged):
+        Reset the animation state here as the rest of the code reads it and would still
+        think we are animating when we are not.
+
+        * svg/animation/SVGSMILElement.h:
+        (WebCore::SVGSMILElement::setInactive): Helper function to reset the state.
+
 2011-04-26  Sheriff Bot  <webkit.review.bot@gmail.com>
 
         Unreviewed, rolling out r84989.
index 21784c2..4634493 100644 (file)
@@ -161,6 +161,7 @@ void SVGAnimationElement::attributeChanged(Attribute* attr, bool preserveDecls)
 {
     // Assumptions may not hold after an attribute change.
     m_animationValid = false;
+    setInactive();
     SVGSMILElement::attributeChanged(attr, preserveDecls);
 }
 
index 0f26f26..af6dbff 100644 (file)
@@ -111,6 +111,8 @@ protected:
     void addBeginTime(SMILTime);
     void addEndTime(SMILTime);
 
+    void setInactive() { m_activeState = Inactive; }
+
 private:
     virtual void startedActiveInterval() = 0;
     virtual void updateAnimation(float percent, unsigned repeat, SVGSMILElement* resultElement) = 0;