| Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/web-animations/animation/onfinish.html | 
| diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/web-animations/animation/onfinish.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/web-animations/animation/onfinish.html | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..320a99546d69bf7833e16ebd030f5a2487c326be | 
| --- /dev/null | 
| +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/web-animations/animation/onfinish.html | 
| @@ -0,0 +1,122 @@ | 
| +<!DOCTYPE html> | 
| +<meta charset=utf-8> | 
| +<title>Animation.onfinish</title> | 
| +<link rel="help" href="https://w3c.github.io/web-animations/#dom-animation-onfinish"> | 
| +<script src="../../../../resources/testharness.js"></script> | 
| +<script src="../../../../resources/testharnessreport.js"></script> | 
| +<script src="../testcommon.js"></script> | 
| +<link rel="stylesheet" href="../../../../resources/testharness.css"> | 
| +<body> | 
| +<div id="log"></div> | 
| +<script> | 
| +"use strict"; | 
| + | 
| +async_test(function(t) { | 
| +  var div = createDiv(t); | 
| +  var animation = div.animate({}, 100 * MS_PER_SEC); | 
| +  var finishedTimelineTime; | 
| +  animation.finished.then(function() { | 
| +    finishedTimelineTime = animation.timeline.currentTime; | 
| +  }); | 
| + | 
| +  animation.onfinish = t.step_func_done(function(event) { | 
| +    assert_equals(event.currentTime, 0, | 
| +      'event.currentTime should be zero'); | 
| +    assert_equals(event.timelineTime, finishedTimelineTime, | 
| +      'event.timelineTime should equal to the animation timeline ' + | 
| +      'when finished promise is resolved'); | 
| +  }); | 
| + | 
| +  animation.playbackRate = -1; | 
| +}, 'onfinish event is fired when the currentTime < 0 and ' + | 
| +   'the playbackRate < 0'); | 
| + | 
| +async_test(function(t) { | 
| +  var div = createDiv(t); | 
| +  var animation = div.animate({}, 100 * MS_PER_SEC); | 
| + | 
| +  var finishedTimelineTime; | 
| +  animation.finished.then(function() { | 
| +    finishedTimelineTime = animation.timeline.currentTime; | 
| +  }); | 
| + | 
| +  animation.onfinish = t.step_func_done(function(event) { | 
| +    assert_equals(event.currentTime, 100 * MS_PER_SEC, | 
| +      'event.currentTime should be the effect end'); | 
| +    assert_equals(event.timelineTime, finishedTimelineTime, | 
| +      'event.timelineTime should equal to the animation timeline ' + | 
| +      'when finished promise is resolved'); | 
| +  }); | 
| + | 
| +  animation.currentTime = 100 * MS_PER_SEC; | 
| +}, 'onfinish event is fired when the currentTime > 0 and ' + | 
| +   'the playbackRate > 0'); | 
| + | 
| +async_test(function(t) { | 
| +  var div = createDiv(t); | 
| +  var animation = div.animate({}, 100 * MS_PER_SEC); | 
| + | 
| +  var finishedTimelineTime; | 
| +  animation.finished.then(function() { | 
| +    finishedTimelineTime = animation.timeline.currentTime; | 
| +  }); | 
| + | 
| +  animation.onfinish = t.step_func_done(function(event) { | 
| +    assert_equals(event.currentTime, 100 * MS_PER_SEC, | 
| +      'event.currentTime should be the effect end'); | 
| +    assert_equals(event.timelineTime, finishedTimelineTime, | 
| +      'event.timelineTime should equal to the animation timeline ' + | 
| +      'when finished promise is resolved'); | 
| +  }); | 
| + | 
| +  animation.finish(); | 
| +}, 'onfinish event is fired when animation.finish() is called'); | 
| + | 
| +promise_test(function(t) { | 
| +  var div = createDiv(t); | 
| +  var animation = div.animate({}, 100 * MS_PER_SEC); | 
| + | 
| +  animation.onfinish = function(event) { | 
| +    assert_unreached('onfinish event should not be fired'); | 
| +  }; | 
| + | 
| +  animation.currentTime = 100 * MS_PER_SEC / 2; | 
| +  animation.pause(); | 
| + | 
| +  return animation.ready.then(function() { | 
| +    animation.currentTime = 100 * MS_PER_SEC; | 
| +    return waitForAnimationFrames(2); | 
| +  }); | 
| +}, 'onfinish event is not fired when paused'); | 
| + | 
| +promise_test(function(t) { | 
| +  var div = createDiv(t); | 
| +  var animation = div.animate({}, 100 * MS_PER_SEC); | 
| +  animation.onfinish = function(event) { | 
| +    assert_unreached('onfinish event should not be fired'); | 
| +  }; | 
| + | 
| +  return animation.ready.then(function() { | 
| +    animation.playbackRate = 0; | 
| +    animation.currentTime = 100 * MS_PER_SEC; | 
| +    return waitForAnimationFrames(2); | 
| +  }); | 
| +}, 'onfinish event is not fired when the playbackRate is zero'); | 
| + | 
| +promise_test(function(t) { | 
| +  var div = createDiv(t); | 
| +  var animation = div.animate({}, 100 * MS_PER_SEC); | 
| +  animation.onfinish = function(event) { | 
| +    assert_unreached('onfinish event should not be fired'); | 
| +  }; | 
| + | 
| +  return animation.ready.then(function() { | 
| +    animation.currentTime = 100 * MS_PER_SEC; | 
| +    animation.currentTime = 100 * MS_PER_SEC / 2; | 
| +    return waitForAnimationFrames(2); | 
| +  }); | 
| +}, 'onfinish event is not fired when the animation falls out ' + | 
| +   'finished state immediately'); | 
| + | 
| +</script> | 
| +</body> | 
|  |