Unreviewed, rolling out r201706.
authorryanhaddad@apple.com <ryanhaddad@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Jun 2016 17:56:33 +0000 (17:56 +0000)
committerryanhaddad@apple.com <ryanhaddad@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Jun 2016 17:56:33 +0000 (17:56 +0000)
https://bugs.webkit.org/show_bug.cgi?id=158427

This change broke the Yosemite build and its LayoutTest is
failing on Mac and iOS testers (Requested by ryanhaddad on
#webkit).

Reverted changeset:

"Add experimental support for spring based CSS animations"
https://bugs.webkit.org/show_bug.cgi?id=158403
http://trac.webkit.org/changeset/201706

Patch by Commit Queue <commit-queue@webkit.org> on 2016-06-06

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

37 files changed:
LayoutTests/ChangeLog
LayoutTests/animations/script-tests/spring-computed-style.js [deleted file]
LayoutTests/animations/script-tests/spring-parsing.js [deleted file]
LayoutTests/animations/spring-computed-style-expected.txt [deleted file]
LayoutTests/animations/spring-computed-style.html [deleted file]
LayoutTests/animations/spring-function-expected.txt [deleted file]
LayoutTests/animations/spring-function.html [deleted file]
LayoutTests/animations/spring-parsing-expected.txt [deleted file]
LayoutTests/animations/spring-parsing.html [deleted file]
Source/WebCore/ChangeLog
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/css/CSSComputedStyleDeclaration.cpp
Source/WebCore/css/CSSParser.cpp
Source/WebCore/css/CSSParser.h
Source/WebCore/css/CSSParserMode.h
Source/WebCore/css/CSSTimingFunctionValue.cpp
Source/WebCore/css/CSSTimingFunctionValue.h
Source/WebCore/css/CSSToStyleMap.cpp
Source/WebCore/css/CSSValue.cpp
Source/WebCore/css/CSSValue.h
Source/WebCore/page/Settings.in
Source/WebCore/page/animation/AnimationBase.cpp
Source/WebCore/platform/animation/TimingFunction.cpp
Source/WebCore/platform/animation/TimingFunction.h
Source/WebCore/platform/graphics/SpringSolver.h [deleted file]
Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h
Source/WebCore/platform/graphics/ca/PlatformCAAnimation.cpp
Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h
Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp
Source/WebKit2/Shared/WebCoreArgumentCoders.cpp
Source/WebKit2/Shared/WebCoreArgumentCoders.h
Source/WebKit2/Shared/WebPreferencesDefinitions.h
Source/WebKit2/WebProcess/WebPage/WebPage.cpp
Source/WebKit2/WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm

index ce5f184..4b9fd11 100644 (file)
@@ -1,3 +1,18 @@
+2016-06-06  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r201706.
+        https://bugs.webkit.org/show_bug.cgi?id=158427
+
+        This change broke the Yosemite build and its LayoutTest is
+        failing on Mac and iOS testers (Requested by ryanhaddad on
+        #webkit).
+
+        Reverted changeset:
+
+        "Add experimental support for spring based CSS animations"
+        https://bugs.webkit.org/show_bug.cgi?id=158403
+        http://trac.webkit.org/changeset/201706
+
 2016-06-03  Oliver Hunt  <oliver@apple.com>
 
         RegExp unicode parsing reads an extra character before failing
diff --git a/LayoutTests/animations/script-tests/spring-computed-style.js b/LayoutTests/animations/script-tests/spring-computed-style.js
deleted file mode 100644 (file)
index 5d847e1..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-description("Test the computed style of the spring() function on the transition-timing-function property.");
-
-if (window.internals)
-    internals.settings.setSpringTimingFunctionEnabled(true);
-
-// These have to be global for the test helpers to see them.
-var stylesheet, springStyle;
-var styleElement = document.createElement("style");
-document.head.appendChild(styleElement);
-stylesheet = styleElement.sheet;
-
-function testComputedSpring(description, spring, expectedValue)
-{
-    debug("");
-    debug(description + " : " + spring);
-
-    stylesheet.insertRule("body { transition-timing-function: " + spring + "; }", 0);
-
-    springStyle = window.getComputedStyle(document.body).getPropertyCSSValue("transition-timing-function");
-    shouldBe("springStyle.cssText", "'" + expectedValue + "'");
-    
-    stylesheet.deleteRule(0);
-}
-
-debug("")
-debug("Valid spring tests");
-debug("")
-
-testComputedSpring("Basic", "spring(1 100 10 0)", "spring(1 100 10 0)");
-testComputedSpring("Negative Velocity", "spring(1 100 10 -10)", "spring(1 100 10 -10)");
-testComputedSpring("Positive Velocity", "spring(1 100 10 10)", "spring(1 100 10 10)");
-testComputedSpring("Zero Damping", "spring(1 100 0 10)", "spring(1 100 0 10)");
-testComputedSpring("Minimum Values", "spring(1 1 0 -999999)", "spring(1 1 0 -999999)");
-
-debug("")
-debug("Invalid spring tests");
-debug("")
-
-testComputedSpring("No parameters", "spring()", "ease");
-testComputedSpring("Not enough parameters", "spring(1 100 10)", "ease");
-testComputedSpring("Too many parameters", "spring(1 100 10 0 0)", "ease");
-testComputedSpring("Illegal Mass (< 0)", "spring(-1 100 10 0)", "ease");
-testComputedSpring("Illegal Mass (== 0)", "spring(0 100 10 0)", "ease");
-testComputedSpring("Illegal Stiffness (< 0)", "spring(1 -1 10 0)", "ease");
-testComputedSpring("Illegal Stiffness (== 0)", "spring(1 0 10 0)", "ease");
-testComputedSpring("Illegal Damping (< 0)", "spring(1 100 -1 0)", "ease");
-
-successfullyParsed = true;
diff --git a/LayoutTests/animations/script-tests/spring-parsing.js b/LayoutTests/animations/script-tests/spring-parsing.js
deleted file mode 100644 (file)
index 5116eaa..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-description("Test the parsing of the spring() function on the transition-timing-function property.");
-
-if (window.internals)
-    internals.settings.setSpringTimingFunctionEnabled(true);
-
-// These have to be global for the test helpers to see them.
-var stylesheet, cssRule, declaration, propertyValue, subRule;
-var styleElement = document.createElement("style");
-document.head.appendChild(styleElement);
-stylesheet = styleElement.sheet;
-
-function testSpring(description, spring, expectedValue)
-{
-    debug("");
-    debug(description + " : " + spring);
-
-    stylesheet.insertRule("body { transition-timing-function: " + spring + "; }", 0);
-    cssRule = stylesheet.cssRules.item(0);
-
-    shouldBe("cssRule.type", "1");
-
-    declaration = cssRule.style;
-    if (!expectedValue) {
-        shouldBe("declaration.length", "0");
-        shouldBeEqualToString("declaration.getPropertyValue('transition-timing-function')", "");
-        return;
-    }
-
-    shouldBe("declaration.length", "1");
-    shouldBe("declaration.getPropertyValue('transition-timing-function')", "'" + expectedValue + "'");
-
-    propertyValue = declaration.getPropertyCSSValue("transition-timing-function");
-    shouldBe("propertyValue.cssText", "'" + expectedValue + "'");
-
-    stylesheet.deleteRule(0);
-}
-
-debug("")
-debug("Valid spring tests");
-debug("")
-
-testSpring("Basic", "spring(1 100 10 0)", "spring(1 100 10 0)");
-testSpring("Negative Velocity", "spring(1 100 10 -10)", "spring(1 100 10 -10)");
-testSpring("Positive Velocity", "spring(1 100 10 10)", "spring(1 100 10 10)");
-testSpring("Zero Damping", "spring(1 100 0 10)", "spring(1 100 0 10)");
-testSpring("Minimum Values", "spring(1 1 0 -999999)", "spring(1 1 0 -999999)");
-
-debug("")
-debug("Invalid spring tests");
-debug("")
-
-testSpring("No parameters", "spring()", null);
-testSpring("Not enough parameters", "spring(1 100 10)", null);
-testSpring("Too many parameters", "spring(1 100 10 0 0)", null);
-testSpring("Illegal Mass (< 0)", "spring(-1 100 10 0)", null);
-testSpring("Illegal Mass (== 0)", "spring(0 100 10 0)", null);
-testSpring("Illegal Stiffness (< 0)", "spring(1 -1 10 0)", null);
-testSpring("Illegal Stiffness (== 0)", "spring(1 0 10 0)", null);
-testSpring("Illegal Damping (< 0)", "spring(1 100 -1 0)", null);
-
-successfullyParsed = true;
diff --git a/LayoutTests/animations/spring-computed-style-expected.txt b/LayoutTests/animations/spring-computed-style-expected.txt
deleted file mode 100644 (file)
index be82a06..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-Test the computed style of the spring() function on the transition-timing-function property.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-
-Valid spring tests
-
-
-Basic : spring(1 100 10 0)
-PASS springStyle.cssText is 'spring(1 100 10 0)'
-
-Negative Velocity : spring(1 100 10 -10)
-PASS springStyle.cssText is 'spring(1 100 10 -10)'
-
-Positive Velocity : spring(1 100 10 10)
-PASS springStyle.cssText is 'spring(1 100 10 10)'
-
-Zero Damping : spring(1 100 0 10)
-PASS springStyle.cssText is 'spring(1 100 0 10)'
-
-Minimum Values : spring(1 1 0 -999999)
-PASS springStyle.cssText is 'spring(1 1 0 -999999)'
-
-Invalid spring tests
-
-
-No parameters : spring()
-PASS springStyle.cssText is 'ease'
-
-Not enough parameters : spring(1 100 10)
-PASS springStyle.cssText is 'ease'
-
-Too many parameters : spring(1 100 10 0 0)
-PASS springStyle.cssText is 'ease'
-
-Illegal Mass (< 0) : spring(-1 100 10 0)
-PASS springStyle.cssText is 'ease'
-
-Illegal Mass (== 0) : spring(0 100 10 0)
-PASS springStyle.cssText is 'ease'
-
-Illegal Stiffness (< 0) : spring(1 -1 10 0)
-PASS springStyle.cssText is 'ease'
-
-Illegal Stiffness (== 0) : spring(1 0 10 0)
-PASS springStyle.cssText is 'ease'
-
-Illegal Damping (< 0) : spring(1 100 -1 0)
-PASS springStyle.cssText is 'ease'
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/LayoutTests/animations/spring-computed-style.html b/LayoutTests/animations/spring-computed-style.html
deleted file mode 100644 (file)
index 4617309..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE HTML>
-<script src="../resources/js-test-pre.js"></script>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/spring-computed-style.js"></script>
-<script src="../resources/js-test-post.js"></script>
diff --git a/LayoutTests/animations/spring-function-expected.txt b/LayoutTests/animations/spring-function-expected.txt
deleted file mode 100644 (file)
index c6f5612..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-This test performs an animation of the left property. It animates over 1 second. It takes 3 snapshots and expects each result to be within a specified range.
-PASS - "left" property for "box1" element at 0.25s saw something close to: 512
-PASS - "left" property for "box1" element at 0.5s saw something close to: 537
-PASS - "left" property for "box1" element at 0.75s saw something close to: 487
-
diff --git a/LayoutTests/animations/spring-function.html b/LayoutTests/animations/spring-function.html
deleted file mode 100644 (file)
index 0ea2afc..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-  <title>Test timing functions</title>
-  <script>
-    if (window.internals)
-        internals.settings.setSpringTimingFunctionEnabled(true);
-  </script>
-  <style type="text/css" media="screen">
-    .box {
-      position: relative;
-      left: 100px;
-      top: 0px;
-      height: 5px;
-      width: 5px;
-      background-color: blue;
-      animation-duration: 1s;
-      animation-name: anim;
-    }
-    @keyframes anim {
-        from { left: 0px; }
-        to   { left: 500px; }
-    }
-    #box1 {
-      animation-timing-function: spring(1 100 10 0);
-    }
-    
-  </style>
-  <script src="resources/animation-test-helpers.js" type="text/javascript" charset="utf-8"></script>
-  <script type="text/javascript" charset="utf-8">
-
-    const expectedValues = [
-      // [animation-name, time, element-id, property, expected-value, tolerance]
-      ["anim", 0.25, "box1", "left", 512, 5],
-      ["anim", 0.50, "box1", "left", 537, 5],
-      ["anim", 0.75, "box1", "left", 487, 5],
-    ];
-
-    runAnimationTest(expectedValues);
-
-  </script>
-</head>
-<body>
-This test performs an animation of the left property. It animates over 1 second.
-It takes 3 snapshots and expects each result to be within a specified range.
-<div class="box" id="box1"></div>
-<div id="result">
-</div>
-</body>
-</html>
diff --git a/LayoutTests/animations/spring-parsing-expected.txt b/LayoutTests/animations/spring-parsing-expected.txt
deleted file mode 100644 (file)
index 547886b..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-Test the parsing of the spring() function on the transition-timing-function property.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-
-Valid spring tests
-
-
-Basic : spring(1 100 10 0)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('transition-timing-function') is 'spring(1 100 10 0)'
-PASS propertyValue.cssText is 'spring(1 100 10 0)'
-
-Negative Velocity : spring(1 100 10 -10)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('transition-timing-function') is 'spring(1 100 10 -10)'
-PASS propertyValue.cssText is 'spring(1 100 10 -10)'
-
-Positive Velocity : spring(1 100 10 10)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('transition-timing-function') is 'spring(1 100 10 10)'
-PASS propertyValue.cssText is 'spring(1 100 10 10)'
-
-Zero Damping : spring(1 100 0 10)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('transition-timing-function') is 'spring(1 100 0 10)'
-PASS propertyValue.cssText is 'spring(1 100 0 10)'
-
-Minimum Values : spring(1 1 0 -999999)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('transition-timing-function') is 'spring(1 1 0 -999999)'
-PASS propertyValue.cssText is 'spring(1 1 0 -999999)'
-
-Invalid spring tests
-
-
-No parameters : spring()
-PASS cssRule.type is 1
-PASS declaration.length is 0
-PASS declaration.getPropertyValue('transition-timing-function') is ""
-
-Not enough parameters : spring(1 100 10)
-PASS cssRule.type is 1
-PASS declaration.length is 0
-PASS declaration.getPropertyValue('transition-timing-function') is ""
-
-Too many parameters : spring(1 100 10 0 0)
-PASS cssRule.type is 1
-PASS declaration.length is 0
-PASS declaration.getPropertyValue('transition-timing-function') is ""
-
-Illegal Mass (< 0) : spring(-1 100 10 0)
-PASS cssRule.type is 1
-PASS declaration.length is 0
-PASS declaration.getPropertyValue('transition-timing-function') is ""
-
-Illegal Mass (== 0) : spring(0 100 10 0)
-PASS cssRule.type is 1
-PASS declaration.length is 0
-PASS declaration.getPropertyValue('transition-timing-function') is ""
-
-Illegal Stiffness (< 0) : spring(1 -1 10 0)
-PASS cssRule.type is 1
-PASS declaration.length is 0
-PASS declaration.getPropertyValue('transition-timing-function') is ""
-
-Illegal Stiffness (== 0) : spring(1 0 10 0)
-PASS cssRule.type is 1
-PASS declaration.length is 0
-PASS declaration.getPropertyValue('transition-timing-function') is ""
-
-Illegal Damping (< 0) : spring(1 100 -1 0)
-PASS cssRule.type is 1
-PASS declaration.length is 0
-PASS declaration.getPropertyValue('transition-timing-function') is ""
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/LayoutTests/animations/spring-parsing.html b/LayoutTests/animations/spring-parsing.html
deleted file mode 100644 (file)
index 9887c52..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE HTML>
-<script src="../resources/js-test-pre.js"></script>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/spring-parsing.js"></script>
-<script src="../resources/js-test-post.js"></script>
index 14c0c01..7c1a812 100644 (file)
@@ -1,3 +1,18 @@
+2016-06-06  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r201706.
+        https://bugs.webkit.org/show_bug.cgi?id=158427
+
+        This change broke the Yosemite build and its LayoutTest is
+        failing on Mac and iOS testers (Requested by ryanhaddad on
+        #webkit).
+
+        Reverted changeset:
+
+        "Add experimental support for spring based CSS animations"
+        https://bugs.webkit.org/show_bug.cgi?id=158403
+        http://trac.webkit.org/changeset/201706
+
 2016-06-06  Javier Fernandez  <jfernandez@igalia.com>
 
         [css-grid] Horizontal scroll must account for grid container's height
index e3d262e..7c0f3a8 100644 (file)
                7C74D43C1882400400E5ED57 /* UTextProviderUTF16.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C74D43A1882400400E5ED57 /* UTextProviderUTF16.h */; };
                7C7941E41C56C29300A4C58E /* DataDetectorsCoreSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7C7941E21C56C29300A4C58E /* DataDetectorsCoreSoftLink.mm */; };
                7C7941E51C56C29300A4C58E /* DataDetectorsCoreSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C7941E31C56C29300A4C58E /* DataDetectorsCoreSoftLink.h */; };
-               7C83DE861D04CC5D00FEBCF3 /* SpringSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C83DE851D04CBD400FEBCF3 /* SpringSolver.h */; };
                7C91A38F1B498ABE003F9EFA /* JSNodeOrString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C91A38D1B498ABE003F9EFA /* JSNodeOrString.cpp */; };
                7C91A3901B498ABE003F9EFA /* JSNodeOrString.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C91A38E1B498ABE003F9EFA /* JSNodeOrString.h */; };
                7C93F3491AA6BA5E00A98BAB /* CompiledContentExtension.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C93F3471AA6BA5E00A98BAB /* CompiledContentExtension.cpp */; };
                7C74D43A1882400400E5ED57 /* UTextProviderUTF16.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UTextProviderUTF16.h; sourceTree = "<group>"; };
                7C7941E21C56C29300A4C58E /* DataDetectorsCoreSoftLink.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DataDetectorsCoreSoftLink.mm; sourceTree = "<group>"; };
                7C7941E31C56C29300A4C58E /* DataDetectorsCoreSoftLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataDetectorsCoreSoftLink.h; sourceTree = "<group>"; };
-               7C83DE851D04CBD400FEBCF3 /* SpringSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpringSolver.h; sourceTree = "<group>"; };
                7C91A38D1B498ABE003F9EFA /* JSNodeOrString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSNodeOrString.cpp; sourceTree = "<group>"; };
                7C91A38E1B498ABE003F9EFA /* JSNodeOrString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSNodeOrString.h; sourceTree = "<group>"; };
                7C93F3471AA6BA5E00A98BAB /* CompiledContentExtension.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompiledContentExtension.cpp; sourceTree = "<group>"; };
                                0F3DD44E12F5EA1B000D9190 /* ShadowBlur.h */,
                                CD641EB21818F5ED00EE4C41 /* SourceBufferPrivate.h */,
                                CDC8B5AC1804AE5D0016E685 /* SourceBufferPrivateClient.h */,
-                               7C83DE851D04CBD400FEBCF3 /* SpringSolver.h */,
                                B23540F00D00782E002382FA /* StringTruncator.cpp */,
                                B23540F10D00782E002382FA /* StringTruncator.h */,
                                849F77750EFEC6200090849D /* StrokeStyleApplier.h */,
                                BC8B854B0E7C7F5600AB6984 /* ScrollbarTheme.h in Headers */,
                                BC14028B0E83680800319717 /* ScrollbarThemeComposite.h in Headers */,
                                44C991860F3D1EBE00586670 /* ScrollbarThemeIOS.h in Headers */,
-                               7C83DE861D04CC5D00FEBCF3 /* SpringSolver.h in Headers */,
                                BC8B853E0E7C7F1100AB6984 /* ScrollbarThemeMac.h in Headers */,
                                0FE71406142170B800DB33BA /* ScrollbarThemeMock.h in Headers */,
                                5D925B680F64D4DD00B847F0 /* ScrollBehavior.h in Headers */,
index 4763f2c..79c5c27 100644 (file)
@@ -1498,10 +1498,10 @@ static Ref<CSSValue> createTimingFunctionValue(const TimingFunction* timingFunct
 {
     switch (timingFunction->type()) {
     case TimingFunction::CubicBezierFunction: {
-        auto& function = *static_cast<const CubicBezierTimingFunction*>(timingFunction);
-        if (function.timingFunctionPreset() != CubicBezierTimingFunction::Custom) {
+        const CubicBezierTimingFunction* bezierTimingFunction = static_cast<const CubicBezierTimingFunction*>(timingFunction);
+        if (bezierTimingFunction->timingFunctionPreset() != CubicBezierTimingFunction::Custom) {
             CSSValueID valueId = CSSValueInvalid;
-            switch (function.timingFunctionPreset()) {
+            switch (bezierTimingFunction->timingFunctionPreset()) {
             case CubicBezierTimingFunction::Ease:
                 valueId = CSSValueEase;
                 break;
@@ -1512,21 +1512,17 @@ static Ref<CSSValue> createTimingFunctionValue(const TimingFunction* timingFunct
                 valueId = CSSValueEaseOut;
                 break;
             default:
-                ASSERT(function.timingFunctionPreset() == CubicBezierTimingFunction::EaseInOut);
+                ASSERT(bezierTimingFunction->timingFunctionPreset() == CubicBezierTimingFunction::EaseInOut);
                 valueId = CSSValueEaseInOut;
                 break;
             }
             return CSSValuePool::singleton().createIdentifierValue(valueId);
         }
-        return CSSCubicBezierTimingFunctionValue::create(function.x1(), function.y1(), function.x2(), function.y2());
+        return CSSCubicBezierTimingFunctionValue::create(bezierTimingFunction->x1(), bezierTimingFunction->y1(), bezierTimingFunction->x2(), bezierTimingFunction->y2());
     }
     case TimingFunction::StepsFunction: {
-        auto& function = *static_cast<const StepsTimingFunction*>(timingFunction);
-        return CSSStepsTimingFunctionValue::create(function.numberOfSteps(), function.stepAtStart());
-    }
-    case TimingFunction::SpringFunction: {
-        auto& function = *static_cast<const SpringTimingFunction*>(timingFunction);
-        return CSSSpringTimingFunctionValue::create(function.mass(), function.stiffness(), function.damping(), function.initialVelocity());
+        const StepsTimingFunction* stepsTimingFunction = static_cast<const StepsTimingFunction*>(timingFunction);
+        return CSSStepsTimingFunctionValue::create(stepsTimingFunction->numberOfSteps(), stepsTimingFunction->stepAtStart());
     }
     default:
         ASSERT(timingFunction->type() == TimingFunction::LinearFunction);
index 1dce4e1..90fffbf 100644 (file)
@@ -270,7 +270,6 @@ CSSParserContext::CSSParserContext(Document& document, const URL& baseURL, const
 #if ENABLE(IOS_TEXT_AUTOSIZING)
         textAutosizingEnabled = settings->textAutosizingEnabled();
 #endif
-        springTimingFunctionEnabled = settings->springTimingFunctionEnabled();
     }
 
 #if PLATFORM(IOS)
@@ -292,8 +291,7 @@ bool operator==(const CSSParserContext& a, const CSSParserContext& b)
 #endif
         && a.needsSiteSpecificQuirks == b.needsSiteSpecificQuirks
         && a.enforcesCSSMIMETypeInNoQuirksMode == b.enforcesCSSMIMETypeInNoQuirksMode
-        && a.useLegacyBackgroundSizeShorthandBehavior == b.useLegacyBackgroundSizeShorthandBehavior
-        && a.springTimingFunctionEnabled == b.springTimingFunctionEnabled;
+        && a.useLegacyBackgroundSizeShorthandBehavior == b.useLegacyBackgroundSizeShorthandBehavior;
 }
 
 CSSParser::CSSParser(const CSSParserContext& context)
@@ -5159,36 +5157,21 @@ bool CSSParser::parseTransformOriginShorthand(RefPtr<CSSPrimitiveValue>& value1,
     return true;
 }
 
-bool CSSParser::isSpringTimingFunctionEnabled() const
-{
-    return m_context.springTimingFunctionEnabled;
-}
-
-Optional<double> CSSParser::parseCubicBezierTimingFunctionValue(CSSParserValueList& args)
+bool CSSParser::parseCubicBezierTimingFunctionValue(CSSParserValueList& args, double& result)
 {
     ValueWithCalculation argumentWithCalculation(*args.current());
     if (!validateUnit(argumentWithCalculation, FNumber))
-        return Nullopt;
-    Optional<double> result = parsedDouble(argumentWithCalculation);
+        return false;
+    result = parsedDouble(argumentWithCalculation);
     CSSParserValue* nextValue = args.next();
     if (!nextValue) {
         // The last number in the function has no comma after it, so we're done.
-        return result;
+        return true;
     }
     if (!isComma(nextValue))
-        return Nullopt;
-    args.next();
-    return result;
-}
-
-Optional<double> CSSParser::parseSpringTimingFunctionValue(CSSParserValueList& args)
-{
-    ValueWithCalculation argumentWithCalculation(*args.current());
-    if (!validateUnit(argumentWithCalculation, FNumber))
-        return Nullopt;
-    Optional<double> result = parsedDouble(argumentWithCalculation);
+        return false;
     args.next();
-    return result;
+    return true;
 }
 
 RefPtr<CSSValue> CSSParser::parseAnimationTimingFunction()
@@ -5236,67 +5219,27 @@ RefPtr<CSSValue> CSSParser::parseAnimationTimingFunction()
     }
 
     if (equalLettersIgnoringASCIICase(value.function->name, "cubic-bezier(")) {
-        // For cubic bezier, 4 values must be specified (comma-separated).
+        // For cubic bezier, 4 values must be specified.
         if (!args || args->size() != 7)
             return nullptr;
 
         // There are two points specified. The x values must be between 0 and 1 but the y values can exceed this range.
+        double x1, y1, x2, y2;
 
-        auto x1 = parseCubicBezierTimingFunctionValue(*args);
-        if (!x1)
-            return nullptr;
-        if (x1.value() < 0 || x1.value() > 1)
-            return nullptr;
-
-        auto y1 = parseCubicBezierTimingFunctionValue(*args);
-        if (!y1)
+        if (!parseCubicBezierTimingFunctionValue(*args, x1))
             return nullptr;
-
-        auto x2 = parseCubicBezierTimingFunctionValue(*args);
-        if (!x2)
+        if (x1 < 0 || x1 > 1)
             return nullptr;
-        if (x2.value() < 0 || x2.value() > 1)
+        if (!parseCubicBezierTimingFunctionValue(*args, y1))
             return nullptr;
-
-        auto y2 = parseCubicBezierTimingFunctionValue(*args);
-        if (!y2)
+        if (!parseCubicBezierTimingFunctionValue(*args, x2))
             return nullptr;
-
-        return CSSCubicBezierTimingFunctionValue::create(x1.value(), y1.value(), x2.value(), y2.value());
-    }
-
-    if (isSpringTimingFunctionEnabled() && equalLettersIgnoringASCIICase(value.function->name, "spring(")) {
-        // For a spring, 4 values must be specified (space-separated).
-        if (!args || args->size() != 4)
-            return nullptr;
-        
-        // Mass must be greater than 0.
-        auto mass = parseSpringTimingFunctionValue(*args);
-        if (!mass)
+        if (x2 < 0 || x2 > 1)
             return nullptr;
-        if (mass.value() <= 0)
-            return nullptr;
-
-        // Stiffness must be greater than 0.
-        auto stiffness = parseSpringTimingFunctionValue(*args);
-        if (!stiffness)
-            return nullptr;
-        if (stiffness.value() <= 0)
-            return nullptr;
-
-        // Damping coefficient must be greater than or equal to 0.
-        auto damping = parseSpringTimingFunctionValue(*args);
-        if (!damping)
-            return nullptr;
-        if (damping.value() < 0)
-            return nullptr;
-
-        // Initial velocity may have any value.
-        auto initialVelocity = parseSpringTimingFunctionValue(*args);
-        if (!initialVelocity)
+        if (!parseCubicBezierTimingFunctionValue(*args, y2))
             return nullptr;
 
-        return CSSSpringTimingFunctionValue::create(mass.value(), stiffness.value(), damping.value(), initialVelocity.value());
+        return CSSCubicBezierTimingFunctionValue::create(x1, y1, x2, y2);
     }
 
     return nullptr;
index 9642086..12c8e6a 100644 (file)
@@ -214,14 +214,11 @@ public:
     static Vector<double> parseKeyframeSelector(const String&);
 
     bool parseTransformOriginShorthand(RefPtr<CSSPrimitiveValue>&, RefPtr<CSSPrimitiveValue>&, RefPtr<CSSValue>&);
-    Optional<double> parseCubicBezierTimingFunctionValue(CSSParserValueList&);
-    Optional<double> parseSpringTimingFunctionValue(CSSParserValueList&);
+    bool parseCubicBezierTimingFunctionValue(CSSParserValueList& args, double& result);
     bool parseAnimationProperty(CSSPropertyID, RefPtr<CSSValue>&, AnimationParseContext&);
     bool parseTransitionShorthand(CSSPropertyID, bool important);
     bool parseAnimationShorthand(CSSPropertyID, bool important);
 
-    bool isSpringTimingFunctionEnabled() const;
-
     RefPtr<CSSPrimitiveValue> parseColumnWidth();
     RefPtr<CSSPrimitiveValue> parseColumnCount();
     bool parseColumnsShorthand(bool important);
index ffa534f..dbe4d8f 100644 (file)
@@ -73,7 +73,6 @@ public:
     bool needsSiteSpecificQuirks { false };
     bool enforcesCSSMIMETypeInNoQuirksMode { true };
     bool useLegacyBackgroundSizeShorthandBehavior { false };
-    bool springTimingFunctionEnabled { false };
 };
 
 bool operator==(const CSSParserContext&, const CSSParserContext&);
index 2dd6195..e1b5e19 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007, 2013, 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 #include "config.h"
 #include "CSSTimingFunctionValue.h"
 
-#include <wtf/text/StringBuilder.h>
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
 String CSSCubicBezierTimingFunctionValue::customCSSText() const
 {
-    StringBuilder builder;
-    builder.appendLiteral("cubic-bezier(");
-    builder.appendNumber(m_x1);
-    builder.appendLiteral(", ");
-    builder.appendNumber(m_y1);
-    builder.appendLiteral(", ");
-    builder.appendNumber(m_x2);
-    builder.appendLiteral(", ");
-    builder.appendNumber(m_y2);
-    builder.append(')');    
-    return builder.toString();
+    return "cubic-bezier("
+        + String::number(m_x1) + ", "
+        + String::number(m_y1) + ", "
+        + String::number(m_x2) + ", "
+        + String::number(m_y2) + ')';
 }
 
 bool CSSCubicBezierTimingFunctionValue::equals(const CSSCubicBezierTimingFunctionValue& other) const
@@ -50,16 +44,10 @@ bool CSSCubicBezierTimingFunctionValue::equals(const CSSCubicBezierTimingFunctio
     return m_x1 == other.m_x1 && m_x2 == other.m_x2 && m_y1 == other.m_y1 && m_y2 == other.m_y2;
 }
 
+
 String CSSStepsTimingFunctionValue::customCSSText() const
 {
-    StringBuilder builder;
-    builder.appendLiteral("steps(");
-    builder.appendNumber(m_steps);
-    if (m_stepAtStart)
-        builder.appendLiteral(", start)");
-    else
-        builder.appendLiteral(", end)");
-    return builder.toString();
+    return "steps(" + String::number(m_steps) + ", " + (m_stepAtStart ? "start" : "end") + ')';
 }
 
 bool CSSStepsTimingFunctionValue::equals(const CSSStepsTimingFunctionValue& other) const
@@ -67,25 +55,4 @@ bool CSSStepsTimingFunctionValue::equals(const CSSStepsTimingFunctionValue& othe
     return m_steps == other.m_steps && m_stepAtStart == other.m_stepAtStart;
 }
 
-String CSSSpringTimingFunctionValue::customCSSText() const
-{
-    StringBuilder builder;
-    builder.appendLiteral("spring(");
-    builder.appendNumber(m_mass);
-    builder.append(' ');
-    builder.appendNumber(m_stiffness);
-    builder.append(' ');
-    builder.appendNumber(m_damping);
-    builder.append(' ');
-    builder.appendNumber(m_initialVelocity);
-    builder.append(')');
-    return builder.toString();
-}
-
-bool CSSSpringTimingFunctionValue::equals(const CSSSpringTimingFunctionValue& other) const
-{
-    return m_mass == other.m_mass && m_stiffness == other.m_stiffness && m_damping == other.m_damping && m_initialVelocity == other.m_initialVelocity;
-}
-
-
 } // namespace WebCore
index b200d9a..dacb473 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007, 2008, 2012, 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008, 2012 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -89,42 +89,9 @@ private:
     bool m_stepAtStart;
 };
 
-class CSSSpringTimingFunctionValue : public CSSValue {
-public:
-    static Ref<CSSSpringTimingFunctionValue> create(double mass, double stiffness, double damping, double initialVelocity)
-    {
-        return adoptRef(*new CSSSpringTimingFunctionValue(mass, stiffness, damping, initialVelocity));
-    }
-
-    double mass() const { return m_mass; }
-    double stiffness() const { return m_stiffness; }
-    double damping() const { return m_damping; }
-    double initialVelocity() const { return m_initialVelocity; }
-
-    String customCSSText() const;
-
-    bool equals(const CSSSpringTimingFunctionValue&) const;
-
-private:
-    CSSSpringTimingFunctionValue(double mass, double stiffness, double damping, double initialVelocity)
-        : CSSValue(SpringTimingFunctionClass)
-        , m_mass(mass)
-        , m_stiffness(stiffness)
-        , m_damping(damping)
-        , m_initialVelocity(initialVelocity)
-    {
-    }
-
-    double m_mass;
-    double m_stiffness;
-    double m_damping;
-    double m_initialVelocity;
-};
-
 } // namespace WebCore
 
 SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSCubicBezierTimingFunctionValue, isCubicBezierTimingFunctionValue())
 SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSStepsTimingFunctionValue, isStepsTimingFunctionValue())
-SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSSpringTimingFunctionValue, isSpringTimingFunctionValue())
 
 #endif // CSSTimingFunctionValue_h
index c413bc6..5859efb 100644 (file)
@@ -510,9 +510,6 @@ void CSSToStyleMap::mapAnimationTimingFunction(Animation& animation, const CSSVa
     } else if (is<CSSStepsTimingFunctionValue>(value)) {
         auto& stepsTimingFunction = downcast<CSSStepsTimingFunctionValue>(value);
         animation.setTimingFunction(StepsTimingFunction::create(stepsTimingFunction.numberOfSteps(), stepsTimingFunction.stepAtStart()));
-    } else if (is<CSSSpringTimingFunctionValue>(value)) {
-        auto& springTimingFunction = downcast<CSSSpringTimingFunctionValue>(value);
-        animation.setTimingFunction(SpringTimingFunction::create(springTimingFunction.mass(), springTimingFunction.stiffness(), springTimingFunction.damping(), springTimingFunction.initialVelocity()));
     }
 }
 
index 7d34009..d5a401b 100644 (file)
@@ -226,8 +226,6 @@ bool CSSValue::equals(const CSSValue& other) const
             return compareCSSValues<CSSCubicBezierTimingFunctionValue>(*this, other);
         case StepsTimingFunctionClass:
             return compareCSSValues<CSSStepsTimingFunctionValue>(*this, other);
-        case SpringTimingFunctionClass:
-            return compareCSSValues<CSSSpringTimingFunctionValue>(*this, other);
         case UnicodeRangeClass:
             return compareCSSValues<CSSUnicodeRangeValue>(*this, other);
         case ValueListClass:
@@ -334,8 +332,6 @@ String CSSValue::cssText() const
         return downcast<CSSCubicBezierTimingFunctionValue>(*this).customCSSText();
     case StepsTimingFunctionClass:
         return downcast<CSSStepsTimingFunctionValue>(*this).customCSSText();
-    case SpringTimingFunctionClass:
-        return downcast<CSSSpringTimingFunctionValue>(*this).customCSSText();
     case UnicodeRangeClass:
         return downcast<CSSUnicodeRangeValue>(*this).customCSSText();
     case ValueListClass:
@@ -461,9 +457,6 @@ void CSSValue::destroy()
     case StepsTimingFunctionClass:
         delete downcast<CSSStepsTimingFunctionValue>(this);
         return;
-    case SpringTimingFunctionClass:
-        delete downcast<CSSSpringTimingFunctionValue>(this);
-        return;
     case UnicodeRangeClass:
         delete downcast<CSSUnicodeRangeValue>(this);
         return;
index 4e0c6a8..77bd741 100644 (file)
@@ -104,7 +104,6 @@ public:
     bool isShadowValue() const { return m_classType == ShadowClass; }
     bool isCubicBezierTimingFunctionValue() const { return m_classType == CubicBezierTimingFunctionClass; }
     bool isStepsTimingFunctionValue() const { return m_classType == StepsTimingFunctionClass; }
-    bool isSpringTimingFunctionValue() const { return m_classType == SpringTimingFunctionClass; }
     bool isWebKitCSSTransformValue() const { return m_classType == WebKitCSSTransformClass; }
     bool isLineBoxContainValue() const { return m_classType == LineBoxContainClass; }
     bool isCalcValue() const {return m_classType == CalculationClass; }
@@ -162,7 +161,6 @@ protected:
         // Timing function classes.
         CubicBezierTimingFunctionClass,
         StepsTimingFunctionClass,
-        SpringTimingFunctionClass,
 
         // Other class types.
         AspectRatioClass,
index 126aaa2..afa7340 100644 (file)
@@ -267,5 +267,3 @@ allowContentSecurityPolicySourceStarToMatchAnyProtocol initial=false
 selectionPaintingWithoutSelectionGapsEnabled initial=false
 
 shouldConvertInvalidURLsToBlank initial=true
-
-springTimingFunctionEnabled initial=false
index 5c1b3a8..ca22fd4 100644 (file)
@@ -41,7 +41,6 @@
 #include "RenderBox.h"
 #include "RenderStyle.h"
 #include "RenderView.h"
-#include "SpringSolver.h"
 #include "UnitBezier.h"
 #include <algorithm>
 #include <wtf/CurrentTime.h>
@@ -71,12 +70,6 @@ static inline double solveStepsFunction(int numSteps, bool stepAtStart, double t
     return floor(numSteps * t) / numSteps;
 }
 
-static inline double solveSpringFunction(double mass, double stiffness, double damping, double initialVelocity, double t, double duration)
-{
-    SpringSolver solver(mass, stiffness, damping, initialVelocity);
-    return solver.solve(t * duration);
-}
-
 AnimationBase::AnimationBase(const Animation& animation, RenderElement* renderer, CompositeAnimation* compositeAnimation)
     : m_object(renderer)
     , m_compositeAnimation(compositeAnimation)
@@ -655,16 +648,12 @@ double AnimationBase::progress(double scale, double offset, const TimingFunction
 
     switch (timingFunction->type()) {
     case TimingFunction::CubicBezierFunction: {
-        auto& function = *static_cast<const CubicBezierTimingFunction*>(timingFunction);
-        return solveCubicBezierFunction(function.x1(), function.y1(), function.x2(), function.y2(), fractionalTime, m_animation->duration());
+        const CubicBezierTimingFunction* function = static_cast<const CubicBezierTimingFunction*>(timingFunction);
+        return solveCubicBezierFunction(function->x1(), function->y1(), function->x2(), function->y2(), fractionalTime, m_animation->duration());
     }
     case TimingFunction::StepsFunction: {
-        auto& function = *static_cast<const StepsTimingFunction*>(timingFunction);
-        return solveStepsFunction(function.numberOfSteps(), function.stepAtStart(), fractionalTime);
-    }
-    case TimingFunction::SpringFunction: {
-        auto& function = *static_cast<const SpringTimingFunction*>(timingFunction);
-        return solveSpringFunction(function.mass(), function.stiffness(), function.damping(), function.initialVelocity(), fractionalTime, m_animation->duration());
+        const StepsTimingFunction* stepsTimingFunction = static_cast<const StepsTimingFunction*>(timingFunction);
+        return solveStepsFunction(stepsTimingFunction->numberOfSteps(), stepsTimingFunction->stepAtStart(), fractionalTime);
     }
     case TimingFunction::LinearFunction:
         return fractionalTime;
index c0cc4be..08e8a66 100644 (file)
@@ -37,18 +37,13 @@ TextStream& operator<<(TextStream& ts, const TimingFunction& timingFunction)
         ts << "linear";
         break;
     case TimingFunction::CubicBezierFunction: {
-        auto& function = static_cast<const CubicBezierTimingFunction&>(timingFunction);
-        ts << "cubic-bezier(" << function.x1() << ", " << function.y1() << ", " <<  function.x2() << ", " << function.y2() << ")";
+        const CubicBezierTimingFunction& cubicBezierFunction = static_cast<const CubicBezierTimingFunction&>(timingFunction);
+        ts << "cubic-bezier(" << cubicBezierFunction.x1() << ", " << cubicBezierFunction.y1() << ", " <<  cubicBezierFunction.x2() << ", " << cubicBezierFunction.y2() << ")";
         break;
     }
     case TimingFunction::StepsFunction: {
-        auto& function = static_cast<const StepsTimingFunction&>(timingFunction);
-        ts << "steps(" << function.numberOfSteps() << ", " << (function.stepAtStart() ? "start" : "end") << ")";
-        break;
-    }
-    case TimingFunction::SpringFunction: {
-        auto& function = static_cast<const SpringTimingFunction&>(timingFunction);
-        ts << "spring(" << function.mass() << " " << function.stiffness() << " " <<  function.damping() << " " << function.initialVelocity() << ")";
+        const StepsTimingFunction& stepsFunction = static_cast<const StepsTimingFunction&>(timingFunction);
+        ts << "steps(" << stepsFunction.numberOfSteps() << ", " << (stepsFunction.stepAtStart() ? "start" : "end") << ")";
         break;
     }
     }
index 8a878eb..3a12458 100644 (file)
@@ -36,7 +36,7 @@ public:
     virtual PassRefPtr<TimingFunction> clone() const = 0;
 
     enum TimingFunctionType {
-        LinearFunction, CubicBezierFunction, StepsFunction, SpringFunction
+        LinearFunction, CubicBezierFunction, StepsFunction
     };
     
     virtual ~TimingFunction() { }
@@ -46,7 +46,6 @@ public:
     bool isLinearTimingFunction() const { return m_type == LinearFunction; }
     bool isCubicBezierTimingFunction() const { return m_type == CubicBezierFunction; }
     bool isStepsTimingFunction() const { return m_type == StepsFunction; }
-    bool isSpringTimingFunction() const { return m_type == SpringFunction; }
     
     virtual bool operator==(const TimingFunction& other) = 0;
 
@@ -59,7 +58,7 @@ protected:
     TimingFunctionType m_type;
 };
 
-class LinearTimingFunction final : public TimingFunction {
+class LinearTimingFunction : public TimingFunction {
 public:
     static PassRefPtr<LinearTimingFunction> create()
     {
@@ -85,7 +84,7 @@ private:
     }
 };
 
-class CubicBezierTimingFunction final : public TimingFunction {
+class CubicBezierTimingFunction : public TimingFunction {
 public:
     enum TimingFunctionPreset {
         Ease,
@@ -186,7 +185,7 @@ private:
     TimingFunctionPreset m_timingFunctionPreset;
 };
 
-class StepsTimingFunction final : public TimingFunction {
+class StepsTimingFunction : public TimingFunction {
 public:
     
     static PassRefPtr<StepsTimingFunction> create(int steps, bool stepAtStart)
@@ -232,64 +231,6 @@ private:
     bool m_stepAtStart;
 };
 
-class SpringTimingFunction final : public TimingFunction {
-public:
-    static Ref<SpringTimingFunction> create(double mass, double stiffness, double damping, double initialVelocity)
-    {
-        return adoptRef(*new SpringTimingFunction(mass, stiffness, damping, initialVelocity));
-    }
-
-    static Ref<SpringTimingFunction> create()
-    {
-        // This create() function should only be used by the argument decoders, and it is expected that
-        // real values will be filled in using setValues().
-        return create(0, 0, 0, 0);
-    }
-    
-    bool operator==(const TimingFunction& other) override
-    {
-        if (other.isSpringTimingFunction()) {
-            const SpringTimingFunction& otherString = *static_cast<const SpringTimingFunction*>(&other);
-
-            return m_mass == otherString.m_mass && m_stiffness == otherString.m_stiffness && m_damping == otherString.m_damping && m_initialVelocity == otherString.m_initialVelocity;
-        }
-        return false;
-    }
-
-    double mass() const { return m_mass; }
-    double stiffness() const { return m_stiffness; }
-    double damping() const { return m_damping; }
-    double initialVelocity() const { return m_initialVelocity; }
-    
-    void setValues(double mass, double stiffness, double damping, double initialVelocity)
-    {
-        m_mass = mass;
-        m_stiffness = stiffness;
-        m_damping = damping;
-        m_initialVelocity = initialVelocity;
-    }
-
-private:
-    explicit SpringTimingFunction(double mass, double stiffness, double damping, double initialVelocity)
-        : TimingFunction(SpringFunction)
-        , m_mass(mass)
-        , m_stiffness(stiffness)
-        , m_damping(damping)
-        , m_initialVelocity(initialVelocity)
-    {
-    }
-
-    PassRefPtr<TimingFunction> clone() const override
-    {
-        return adoptRef(new SpringTimingFunction(m_mass, m_stiffness, m_damping, m_initialVelocity));
-    }
-
-    double m_mass;
-    double m_stiffness;
-    double m_damping;
-    double m_initialVelocity;
-};
-
 class TextStream;
 WEBCORE_EXPORT TextStream& operator<<(TextStream&, const TimingFunction&);
 
diff --git a/Source/WebCore/platform/graphics/SpringSolver.h b/Source/WebCore/platform/graphics/SpringSolver.h
deleted file mode 100644 (file)
index e7ae9bc..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * 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.
- *
- * 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.
- */
-
-#pragma once
-
-namespace WebCore {
-
-class SpringSolver {
-public:
-    SpringSolver(double mass, double stiffness, double damping, double initialVelocity)
-    {
-        m_w0 = std::sqrt(stiffness / mass);
-        m_zeta = damping / (2 * std::sqrt(stiffness * mass));
-
-        if (m_zeta < 1) {
-            // Under-damped.
-            m_wd = m_w0 * std::sqrt(1 - m_zeta * m_zeta);
-            m_A = 1;
-            m_B = (m_zeta * m_w0 + -initialVelocity) / m_wd;
-        } else {
-            // Critically damped (ignoring over-damped case for now).
-            m_A = 1;
-            m_B = -initialVelocity + m_w0;
-        }
-    }
-
-    double solve(double t)
-    {
-        if (m_zeta < 1) {
-            // Under-damped
-            t = std::exp(-t * m_zeta * m_w0) * (m_A * std::cos(m_wd * t) + m_B * std::sin(m_wd * t));
-        } else {
-            // Critically damped (ignoring over-damped case for now).
-            t = (m_A + m_B * t) * std::exp(-t * m_w0);
-        }
-
-        // Map range from [1..0] to [0..1].
-        return 1 - t;
-    }
-
-private:
-    double m_w0;
-    double m_zeta;
-    double m_wd;
-    double m_A;
-    double m_B;
-};
-
-} // namespace WebCore
index 311fc97..e9fe2bd 100644 (file)
@@ -2743,10 +2743,7 @@ bool GraphicsLayerCA::createAnimationFromKeyframes(const KeyframeValueList& valu
         caAnimation = createKeyframeAnimation(animation, propertyIdToString(valueList.property()), additive);
         valuesOK = setAnimationKeyframes(valueList, animation, caAnimation.get());
     } else {
-        if (animation->timingFunction()->isSpringTimingFunction())
-            caAnimation = createSpringAnimation(animation, propertyIdToString(valueList.property()), additive);
-        else
-            caAnimation = createBasicAnimation(animation, propertyIdToString(valueList.property()), additive);
+        caAnimation = createBasicAnimation(animation, propertyIdToString(valueList.property()), additive);
         valuesOK = setAnimationEndpoints(valueList, animation, caAnimation.get());
     }
     
@@ -2770,10 +2767,7 @@ bool GraphicsLayerCA::appendToUncommittedAnimations(const KeyframeValueList& val
         caAnimation = createKeyframeAnimation(animation, propertyIdToString(valueList.property()), additive);
         validMatrices = setTransformAnimationKeyframes(valueList, animation, caAnimation.get(), animationIndex, transformOp, isMatrixAnimation, boxSize);
     } else {
-        if (animation->timingFunction()->isSpringTimingFunction())
-            caAnimation = createSpringAnimation(animation, propertyIdToString(valueList.property()), additive);
-        else
-            caAnimation = createBasicAnimation(animation, propertyIdToString(valueList.property()), additive);
+        caAnimation = createBasicAnimation(animation, propertyIdToString(valueList.property()), additive);
         validMatrices = setTransformAnimationEndpoints(valueList, animation, caAnimation.get(), animationIndex, transformOp, isMatrixAnimation, boxSize);
     }
     
@@ -2907,20 +2901,13 @@ PassRefPtr<PlatformCAAnimation> GraphicsLayerCA::createBasicAnimation(const Anim
     return basicAnim;
 }
 
-PassRefPtr<PlatformCAAnimation> GraphicsLayerCA::createKeyframeAnimation(const Animation* anim, const String& keyPath, bool additive)
+PassRefPtr<PlatformCAAnimation>GraphicsLayerCA::createKeyframeAnimation(const Animation* anim, const String& keyPath, bool additive)
 {
     RefPtr<PlatformCAAnimation> keyframeAnim = createPlatformCAAnimation(PlatformCAAnimation::Keyframe, keyPath);
     setupAnimation(keyframeAnim.get(), anim, additive);
     return keyframeAnim;
 }
 
-RefPtr<PlatformCAAnimation> GraphicsLayerCA::createSpringAnimation(const Animation* anim, const String& keyPath, bool additive)
-{
-    auto basicAnim = createPlatformCAAnimation(PlatformCAAnimation::Spring, keyPath);
-    setupAnimation(basicAnim.get(), anim, additive);
-    return basicAnim;
-}
-
 void GraphicsLayerCA::setupAnimation(PlatformCAAnimation* propertyAnim, const Animation* anim, bool additive)
 {
     double duration = anim->duration();
index c2fae6b..a5266cc 100644 (file)
@@ -242,7 +242,6 @@ private:
     // Return autoreleased animation (use RetainPtr?)
     PassRefPtr<PlatformCAAnimation> createBasicAnimation(const Animation*, const String& keyPath, bool additive);
     PassRefPtr<PlatformCAAnimation> createKeyframeAnimation(const Animation*, const String&, bool additive);
-    RefPtr<PlatformCAAnimation> createSpringAnimation(const Animation*, const String&, bool additive);
     void setupAnimation(PlatformCAAnimation*, const Animation*, bool additive);
     
     const TimingFunction* timingFunctionForAnimationValue(const AnimationValue&, const Animation&);
index ded90eb..10bdd82 100644 (file)
@@ -35,7 +35,6 @@ TextStream& operator<<(TextStream& ts, PlatformCAAnimation::AnimationType type)
     switch (type) {
     case PlatformCAAnimation::Basic: ts << "basic"; break;
     case PlatformCAAnimation::Keyframe: ts << "keyframe"; break;
-    case PlatformCAAnimation::Spring: ts << "spring"; break;
     }
     return ts;
 }
@@ -70,9 +69,4 @@ TextStream& operator<<(TextStream& ts, PlatformCAAnimation::ValueFunctionType va
     return ts;
 }
 
-bool PlatformCAAnimation::isBasicAnimation() const
-{
-    return animationType() == Basic || animationType() == Spring;
-}
-
 } // namespace WebCore
index cc8d83f..60fb86a 100644 (file)
@@ -41,7 +41,7 @@ class TimingFunction;
 
 class PlatformCAAnimation : public RefCounted<PlatformCAAnimation> {
 public:
-    enum AnimationType { Basic, Keyframe, Spring };
+    enum AnimationType { Basic, Keyframe };
     enum FillModeType { NoFillMode, Forwards, Backwards, Both };
     enum ValueFunctionType { NoValueFunction, RotateX, RotateY, RotateZ, ScaleX, ScaleY, ScaleZ, Scale, TranslateX, TranslateY, TranslateZ, Translate };
 
@@ -123,8 +123,6 @@ public:
         if (beginTime() <= 0)
             setBeginTime(t);
     }
-
-    bool isBasicAnimation() const;
     
 protected:
     PlatformCAAnimation(AnimationType type = Basic)
index 4890d26..3d46351 100644 (file)
@@ -161,30 +161,20 @@ PassRefPtr<PlatformCAAnimation> PlatformCAAnimationCocoa::create(PlatformAnimati
 PlatformCAAnimationCocoa::PlatformCAAnimationCocoa(AnimationType type, const String& keyPath)
     : PlatformCAAnimation(type)
 {
-    switch (type) {
-    case Basic:
+    if (type == Basic)
         m_animation = [CABasicAnimation animationWithKeyPath:keyPath];
-        break;
-    case Keyframe:
+    else
         m_animation = [CAKeyframeAnimation animationWithKeyPath:keyPath];
-        break;
-    case Spring:
-        m_animation = [CASpringAnimation animationWithKeyPath:keyPath];
-        break;
-    }
 }
 
 PlatformCAAnimationCocoa::PlatformCAAnimationCocoa(PlatformAnimationRef animation)
 {
-    if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CABasicAnimation class]]) {
-        if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CASpringAnimation class]])
-            setType(Spring);
-        else
-            setType(Basic);
-    } else if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CAKeyframeAnimation class]])
+    if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CABasicAnimation class]])
+        setType(Basic);
+    else if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CAKeyframeAnimation class]])
         setType(Keyframe);
     else {
-        ASSERT_NOT_REACHED();
+        ASSERT(0);
         return;
     }
     
@@ -315,23 +305,7 @@ void PlatformCAAnimationCocoa::setFillMode(FillModeType value)
 
 void PlatformCAAnimationCocoa::setTimingFunction(const TimingFunction* value, bool reverse)
 {
-    switch (animationType()) {
-    case Basic:
-    case Keyframe:
-        [m_animation setTimingFunction:toCAMediaTimingFunction(value, reverse)];
-        break;
-    case Spring:
-        if (value->isSpringTimingFunction()) {
-            // FIXME: Handle reverse.
-            auto& function = *static_cast<const SpringTimingFunction*>(value);
-            CASpringAnimation *springAnimation = (CASpringAnimation *)m_animation.get();
-            springAnimation.mass = function.mass();
-            springAnimation.stiffness = function.stiffness();
-            springAnimation.damping = function.damping();
-            springAnimation.initialVelocity = function.initialVelocity();
-        }
-        break;
-    }
+    [m_animation setTimingFunction:toCAMediaTimingFunction(value, reverse)];
 }
 
 void PlatformCAAnimationCocoa::copyTimingFunctionFrom(const PlatformCAAnimation& value)
@@ -372,14 +346,14 @@ void PlatformCAAnimationCocoa::setValueFunction(ValueFunctionType value)
 
 void PlatformCAAnimationCocoa::setFromValue(float value)
 {
-    if (!isBasicAnimation())
+    if (animationType() != Basic)
         return;
     [static_cast<CABasicAnimation*>(m_animation.get()) setFromValue:[NSNumber numberWithDouble:value]];
 }
 
 void PlatformCAAnimationCocoa::setFromValue(const WebCore::TransformationMatrix& value)
 {
-    if (!isBasicAnimation())
+    if (animationType() != Basic)
         return;
 
     [static_cast<CABasicAnimation*>(m_animation.get()) setFromValue:[NSValue valueWithCATransform3D:value]];
@@ -387,7 +361,7 @@ void PlatformCAAnimationCocoa::setFromValue(const WebCore::TransformationMatrix&
 
 void PlatformCAAnimationCocoa::setFromValue(const FloatPoint3D& value)
 {
-    if (!isBasicAnimation())
+    if (animationType() != Basic)
         return;
 
     NSArray* array = [NSArray arrayWithObjects:
@@ -400,7 +374,7 @@ void PlatformCAAnimationCocoa::setFromValue(const FloatPoint3D& value)
 
 void PlatformCAAnimationCocoa::setFromValue(const WebCore::Color& value)
 {
-    if (!isBasicAnimation())
+    if (animationType() != Basic)
         return;
 
     NSArray* array = [NSArray arrayWithObjects:
@@ -420,7 +394,7 @@ void PlatformCAAnimationCocoa::setFromValue(const FilterOperation* operation, in
 
 void PlatformCAAnimationCocoa::copyFromValueFrom(const PlatformCAAnimation& value)
 {
-    if (!isBasicAnimation() || !value.isBasicAnimation())
+    if (animationType() != Basic || value.animationType() != Basic)
         return;
 
     CABasicAnimation* otherAnimation = static_cast<CABasicAnimation*>(downcast<PlatformCAAnimationCocoa>(value).m_animation.get());
@@ -429,14 +403,14 @@ void PlatformCAAnimationCocoa::copyFromValueFrom(const PlatformCAAnimation& valu
 
 void PlatformCAAnimationCocoa::setToValue(float value)
 {
-    if (!isBasicAnimation())
+    if (animationType() != Basic)
         return;
     [static_cast<CABasicAnimation*>(m_animation.get()) setToValue:[NSNumber numberWithDouble:value]];
 }
 
 void PlatformCAAnimationCocoa::setToValue(const WebCore::TransformationMatrix& value)
 {
-    if (!isBasicAnimation())
+    if (animationType() != Basic)
         return;
 
     [static_cast<CABasicAnimation*>(m_animation.get()) setToValue:[NSValue valueWithCATransform3D:value]];
@@ -444,7 +418,7 @@ void PlatformCAAnimationCocoa::setToValue(const WebCore::TransformationMatrix& v
 
 void PlatformCAAnimationCocoa::setToValue(const FloatPoint3D& value)
 {
-    if (!isBasicAnimation())
+    if (animationType() != Basic)
         return;
 
     NSArray* array = [NSArray arrayWithObjects:
@@ -457,7 +431,7 @@ void PlatformCAAnimationCocoa::setToValue(const FloatPoint3D& value)
 
 void PlatformCAAnimationCocoa::setToValue(const WebCore::Color& value)
 {
-    if (!isBasicAnimation())
+    if (animationType() != Basic)
         return;
 
     NSArray* array = [NSArray arrayWithObjects:
@@ -477,7 +451,7 @@ void PlatformCAAnimationCocoa::setToValue(const FilterOperation* operation, int
 
 void PlatformCAAnimationCocoa::copyToValueFrom(const PlatformCAAnimation& value)
 {
-    if (!isBasicAnimation() || !value.isBasicAnimation())
+    if (animationType() != Basic || value.animationType() != Basic)
         return;
 
     CABasicAnimation* otherAnimation = static_cast<CABasicAnimation*>(downcast<PlatformCAAnimationCocoa>(value).m_animation.get());
index 9ed7a99..3d82589 100644 (file)
@@ -1,3 +1,18 @@
+2016-06-06  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r201706.
+        https://bugs.webkit.org/show_bug.cgi?id=158427
+
+        This change broke the Yosemite build and its LayoutTest is
+        failing on Mac and iOS testers (Requested by ryanhaddad on
+        #webkit).
+
+        Reverted changeset:
+
+        "Add experimental support for spring based CSS animations"
+        https://bugs.webkit.org/show_bug.cgi?id=158403
+        http://trac.webkit.org/changeset/201706
+
 2016-06-06  Alex Christensen  <achristensen@webkit.org>
 
         Reduce ResourceRequest copying in loading code
index 407b4da..9dd63fd 100644 (file)
@@ -365,14 +365,6 @@ static void encodeTimingFunction(ArgumentEncoder& encoder, const TimingFunction*
         encoder << steps->stepAtStart();
         break;
     }
-    case TimingFunction::SpringFunction: {
-        const SpringTimingFunction* spring = static_cast<const SpringTimingFunction*>(timingFunction);
-        encoder << spring->mass();
-        encoder << spring->stiffness();
-        encoder << spring->damping();
-        encoder << spring->initialVelocity();
-        break;
-    }
     }
 }
 
@@ -421,23 +413,6 @@ bool decodeTimingFunction(ArgumentDecoder& decoder, RefPtr<TimingFunction>& timi
         timingFunction = StepsTimingFunction::create(numberOfSteps, stepAtStart);
         return true;
     }
-    case TimingFunction::SpringFunction: {
-        double mass;
-        if (!decoder.decode(mass))
-            return false;
-        double stiffness;
-        if (!decoder.decode(stiffness))
-            return false;
-        double damping;
-        if (!decoder.decode(damping))
-            return false;
-        double initialVelocity;
-        if (!decoder.decode(initialVelocity))
-            return false;
-
-        timingFunction = SpringTimingFunction::create(mass, stiffness, damping, initialVelocity);
-        return true;
-    }
     }
 
     return false;
index 2e5dfb3..c3e0437 100644 (file)
@@ -265,40 +265,6 @@ bool ArgumentCoder<StepsTimingFunction>::decode(ArgumentDecoder& decoder, StepsT
     return true;
 }
 
-void ArgumentCoder<SpringTimingFunction>::encode(ArgumentEncoder& encoder, const SpringTimingFunction& timingFunction)
-{
-    encoder.encodeEnum(timingFunction.type());
-    
-    encoder << timingFunction.mass();
-    encoder << timingFunction.stiffness();
-    encoder << timingFunction.damping();
-    encoder << timingFunction.initialVelocity();
-}
-
-bool ArgumentCoder<SpringTimingFunction>::decode(ArgumentDecoder& decoder, SpringTimingFunction& timingFunction)
-{
-    // Type is decoded by the caller.
-    double mass;
-    if (!decoder.decode(mass))
-        return false;
-
-    double stiffness;
-    if (!decoder.decode(stiffness))
-        return false;
-
-    double damping;
-    if (!decoder.decode(damping))
-        return false;
-
-    double initialVelocity;
-    if (!decoder.decode(initialVelocity))
-        return false;
-
-    timingFunction.setValues(mass, stiffness, damping, initialVelocity);
-
-    return true;
-}
-
 void ArgumentCoder<FloatPoint>::encode(ArgumentEncoder& encoder, const FloatPoint& floatPoint)
 {
     SimpleArgumentCoder<FloatPoint>::encode(encoder, floatPoint);
index 5e091f3..bf1edd6 100644 (file)
@@ -60,7 +60,6 @@ class ResourceError;
 class ResourceRequest;
 class ResourceResponse;
 class SessionID;
-class SpringTimingFunction;
 class StepsTimingFunction;
 class StickyPositionViewportConstraints;
 class TextCheckingRequestData;
@@ -152,11 +151,6 @@ template<> struct ArgumentCoder<WebCore::StepsTimingFunction> {
     static bool decode(ArgumentDecoder&, WebCore::StepsTimingFunction&);
 };
 
-template<> struct ArgumentCoder<WebCore::SpringTimingFunction> {
-    static void encode(ArgumentEncoder&, const WebCore::SpringTimingFunction&);
-    static bool decode(ArgumentDecoder&, WebCore::SpringTimingFunction&);
-};
-
 template<> struct ArgumentCoder<WebCore::CertificateInfo> {
     static void encode(ArgumentEncoder&, const WebCore::CertificateInfo&);
     static bool decode(ArgumentDecoder&, WebCore::CertificateInfo&);
index 04041bf..5bea4bd 100644 (file)
     macro(CSSGridLayoutEnabled, cssGridLayoutEnabled, Bool, bool, true, "CSS Grid", "CSS Grid Layout Module support") \
     macro(CustomElementsEnabled, customElementsEnabled, Bool, bool, true, "Custom Elements", "HTML Custom Elements prototype") \
     macro(WebGL2Enabled, webGL2Enabled, Bool, bool, true, "WebGL 2.0", "WebGL 2 prototype") \
-    macro(SpringTimingFunctionEnabled, springTimingFunctionEnabled, Bool, bool, true, "CSS Spring Animations", "CSS Spring Animation prototype") \
     \
 
 #if PLATFORM(COCOA)
index d10da6e..798cdbf 100644 (file)
@@ -3150,8 +3150,6 @@ void WebPage::updatePreferences(const WebPreferencesStore& store)
     RuntimeEnabledFeatures::sharedFeatures().setWebGL2Enabled(store.getBoolValueForKey(WebPreferencesKey::webGL2EnabledKey()));
 #endif
 
-    settings.setSpringTimingFunctionEnabled(store.getBoolValueForKey(WebPreferencesKey::springTimingFunctionEnabledKey()));
-
     bool processSuppressionEnabled = store.getBoolValueForKey(WebPreferencesKey::pageVisibilityBasedProcessSuppressionEnabledKey());
     if (m_processSuppressionEnabled != processSuppressionEnabled) {
         m_processSuppressionEnabled = processSuppressionEnabled;
index f18c555..82231ce 100644 (file)
@@ -196,10 +196,6 @@ void PlatformCAAnimationRemote::Properties::encode(IPC::ArgumentEncoder& encoder
         case TimingFunction::StepsFunction:
             encoder << *static_cast<StepsTimingFunction*>(timingFunction.get());
             break;
-
-        case TimingFunction::SpringFunction:
-            encoder << *static_cast<SpringTimingFunction*>(timingFunction.get());
-            break;
         }
     }
 }
@@ -286,12 +282,6 @@ bool PlatformCAAnimationRemote::Properties::decode(IPC::ArgumentDecoder& decoder
                 if (!decoder.decode(*static_cast<StepsTimingFunction*>(timingFunction.get())))
                     return false;
                 break;
-
-            case TimingFunction::SpringFunction:
-                timingFunction = SpringTimingFunction::create();
-                if (!decoder.decode(*static_cast<SpringTimingFunction*>(timingFunction.get())))
-                    return false;
-                break;
             }
             
             properties.timingFunctions.uncheckedAppend(timingFunction.release());
@@ -764,28 +754,6 @@ static void addAnimationToLayer(CALayer *layer, RemoteLayerTreeHost* layerTreeHo
         caAnimation = keyframeAnimation;
         break;
     }
-    case PlatformCAAnimation::Spring: {
-        RetainPtr<CASpringAnimation> springAnimation;
-        springAnimation = [CASpringAnimation animationWithKeyPath:properties.keyPath];
-        
-        if (properties.keyValues.size() > 1) {
-            [springAnimation setFromValue:animationValueFromKeyframeValue(properties.keyValues[0])];
-            [springAnimation setToValue:animationValueFromKeyframeValue(properties.keyValues[1])];
-        }
-        
-        if (properties.timingFunctions.size()) {
-            auto& timingFunction = properties.timingFunctions[0];
-            if (timingFunction->isSpringTimingFunction()) {
-                auto& function = *static_cast<const SpringTimingFunction*>(timingFunction.get());
-                [springAnimation setMass:function.mass()];
-                [springAnimation setStiffness:function.stiffness()];
-                [springAnimation setDamping:function.damping()];
-                [springAnimation setInitialVelocity:function.initialVelocity()];
-            }
-        }
-        caAnimation = springAnimation;
-        break;
-    }
     }
     
     [caAnimation setBeginTime:properties.beginTime];