| Index: LayoutTests/animations/timing-properties-do-not-update-running-animation.html
 | 
| diff --git a/LayoutTests/animations/timing-properties-do-not-update-running-animation.html b/LayoutTests/animations/timing-properties-do-not-update-running-animation.html
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..8a624c7e69ebe1e25995eb15c87a2fca6c102282
 | 
| --- /dev/null
 | 
| +++ b/LayoutTests/animations/timing-properties-do-not-update-running-animation.html
 | 
| @@ -0,0 +1,152 @@
 | 
| +<!DOCTYPE html>
 | 
| +<html>
 | 
| +<head>
 | 
| +  <style type="text/css">
 | 
| +    #wrapper div {
 | 
| +      height: 30px;
 | 
| +      width: 100px;
 | 
| +      background-color: red;
 | 
| +      margin-bottom: 10px;
 | 
| +      position: relative;
 | 
| +    }
 | 
| +    #wrapper.animated div {
 | 
| +      -webkit-animation: test 100ms forwards;
 | 
| +      animation: test 100ms forwards;
 | 
| +    }
 | 
| +    @-webkit-keyframes test {
 | 
| +        from { left: 100px; }
 | 
| +        to   { left: 300px; }
 | 
| +    }
 | 
| +    @keyframes test {
 | 
| +        from { left: 100px; }
 | 
| +        to   { left: 300px; }
 | 
| +    }
 | 
| +    #wrapper.updated div#duration {
 | 
| +      /* Test will time out if this is applied. */
 | 
| +      -webkit-animation-duration: 1000s;
 | 
| +      animation-duration: 1000s;
 | 
| +    }
 | 
| +    #wrapper.updated div#iteration-count {
 | 
| +      /* Default is 1 */
 | 
| +      /* Test will time out if this is applied. */
 | 
| +      -webkit-animation-iteration-count: 1000000;
 | 
| +      animation-iteration-count: 1000000;
 | 
| +    }
 | 
| +    #wrapper.updated div#delay {
 | 
| +      /* Default is 0 */
 | 
| +      /* Test will time out if this is applied. */
 | 
| +      -webkit-animation-delay: 1000s;
 | 
| +      animation-delay: 1000s;
 | 
| +    }
 | 
| +    #wrapper.updated div#direction {
 | 
| +      /* Default is normal */
 | 
| +      /* End state will be incorrect if this is applied. */
 | 
| +      -webkit-animation-direction: reverse;
 | 
| +      animation-direction: reverse;
 | 
| +    }
 | 
| +    #wrapper.updated div#fill-mode {
 | 
| +      /* End state will be incorrect if this is applied. */
 | 
| +      -webkit-animation-fill-mode: none;
 | 
| +      animation-fill-mode: none;
 | 
| +    }
 | 
| +    #wrapper.updated div#timing-function {
 | 
| +      /* Default is ease */
 | 
| +      /* Property will overshoot if this is applied. */
 | 
| +      -webkit-animation-timing-function: cubic-bezier(0, 10, 1, 10);
 | 
| +      animation-timing-function: cubic-bezier(0, 10, 1, 10);
 | 
| +    }
 | 
| +  </style>
 | 
| +  <script type="text/javascript">
 | 
| +    if (window.testRunner) {
 | 
| +      testRunner.dumpAsText();
 | 
| +      testRunner.waitUntilDone();
 | 
| +    }
 | 
| +
 | 
| +    function go() {
 | 
| +      document.addEventListener('webkitAnimationStart', onStart);
 | 
| +      document.addEventListener('webkitAnimationEnd', onEnd);
 | 
| +      document.getElementById('wrapper').classList.add('animated');
 | 
| +    }
 | 
| +
 | 
| +    var startCount = 0;
 | 
| +    function onStart() {
 | 
| +      if (++startCount === 6) {
 | 
| +        setTimeout(update, 0);
 | 
| +        setTimeout(checkOvershoot, 10);
 | 
| +      }
 | 
| +    }
 | 
| +
 | 
| +    function update() {
 | 
| +      document.getElementById('wrapper').classList.add('updated');
 | 
| +    }
 | 
| +
 | 
| +    function checkOvershoot() {
 | 
| +      var left = parseInt(getComputedStyle(document.getElementById('timing-function')).left);
 | 
| +      document.getElementById('log').innerHTML += (left <= 300 ?
 | 
| +          'PASS: Element \'timing-function\' did not overshoot' :
 | 
| +          'FAIL: Element \'timing-function\' overshot') +
 | 
| +          '<br>';
 | 
| +    }
 | 
| +
 | 
| +    var results = {};
 | 
| +    function test(id, property, expected) {
 | 
| +      var actual = getComputedStyle(document.getElementById(id))[property];
 | 
| +      var pass = actual === expected;
 | 
| +      if (results[id] === undefined) {
 | 
| +        results[id] = '';
 | 
| +      }
 | 
| +      results[id] += (pass ?
 | 
| +          'PASS: Element \'' + id + '\': ' + property + ' was ' + expected :
 | 
| +          'FAIL: Element \'' + id + '\': ' + property + ' expected ' + expected + ' but saw ' + actual) +
 | 
| +          '<br>';
 | 
| +    }
 | 
| +
 | 
| +    var endCount = 0;
 | 
| +    function onEnd(e) {
 | 
| +      var id = e.target.id;
 | 
| +      if (id === 'duration') {
 | 
| +        test(id, '-webkit-animation-duration', '1000s');
 | 
| +      } else if (id === 'iteration-count') {
 | 
| +        test(id, '-webkit-animation-iteration-count', '1000000');
 | 
| +      } else if (id === 'delay') {
 | 
| +        test(id, '-webkit-animation-delay', '1000s');
 | 
| +      } else if (id === 'direction') {
 | 
| +        test(id, '-webkit-animation-direction', 'reverse');
 | 
| +      } else if (id === 'fill-mode') {
 | 
| +        test(id, '-webkit-animation-fill-mode', 'none');
 | 
| +      } else if (id === 'timing-function') {
 | 
| +        test(id, '-webkit-animation-timing-function', 'cubic-bezier(0, 10, 1, 10)');
 | 
| +      }
 | 
| +      test(id, 'left', '300px');
 | 
| +      if (++endCount === 6) {
 | 
| +        finishTest();
 | 
| +      }
 | 
| +    }
 | 
| +
 | 
| +    function finishTest() {
 | 
| +      var elements = document.getElementById('wrapper').getElementsByTagName('div');
 | 
| +      for (var i = 0; i < elements.length; ++i) {
 | 
| +        document.getElementById('log').innerHTML += results[elements[i].id];
 | 
| +      }
 | 
| +      if (window.testRunner) {
 | 
| +        testRunner.notifyDone();
 | 
| +      }
 | 
| +    }
 | 
| +  </script>
 | 
| +</head>
 | 
| +<body onload="go()">
 | 
| +  <p>
 | 
| +    Tests that modifying the iteration count, delay, duration, direction, fill
 | 
| +    mode or timing function do not cause a running animation to be updated.
 | 
| +  </p>
 | 
| +  <div id="wrapper">
 | 
| +    <div id="duration">duration</div>
 | 
| +    <div id="iteration-count">iteration-count</div>
 | 
| +    <div id="delay">delay</div>
 | 
| +    <div id="direction">direction</div>
 | 
| +    <div id="fill-mode">fill-mode</div>
 | 
| +    <div id="timing-function">timing-function</div>
 | 
| +  </div>
 | 
| +  <div id="log"></div>
 | 
| +</body>
 | 
| +</html>
 | 
| 
 |