<!DOCTYPE html>
<html>
<head>
  <title>Pause and resume animation should not crash</title>
  <style type="text/css" media="screen">
    .box {
      height: 100px;
      width: 100px;
      margin: 10px;
      background-color: blue;
      -webkit-animation-duration: 2s;
      -webkit-animation-direction: alternate;
      -webkit-animation-iteration-count: infinite;
    }
    
    @-webkit-keyframes anim {
        from { -webkit-transform: matrix3d(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1); }
        to   { -webkit-transform: matrix3d(1,0,0,0, 0,1,0,0, 0,0,1,0, 400,0,0,1); }
    }
  </style>
  <script type="text/javascript" charset="utf-8">
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }

    function animationStarted()
    {
        setTimeout(function() {
            document.getElementById('box1').style.webkitAnimationPlayState = "paused";
            setTimeout(function() {
                document.getElementById('box1').style.webkitAnimationPlayState = "running";
                setTimeout(function() {
                    document.getElementById('results').innerHTML = 'Did not crash, so PASSED';
                    if (window.testRunner)
                        testRunner.notifyDone();
                }, 50);
            }, 50);
        }, 50);
    }
    
    function startTest()
    {
        document.getElementById('box1').addEventListener('webkitAnimationStart', animationStarted);
        document.getElementById('box1').style.webkitAnimationName = "anim";
    }

    window.addEventListener('load', startTest, false);
  </script>
</head>
<body>

<p>Tests pause and resume animation. Should not crash. (https://bugs.webkit.org/show_bug.cgi?id=67510)</p>

<div id="container">
  <div id="box1" class="box"></div>
</div>
<div id="results"></div>
</body>
</html>
