Bug 1422248 - Don't reject promises of dispatch cancel events when canceling idle animations; r?hiro draft
authorBrian Birtles <birtles@gmail.com>
Thu, 14 Dec 2017 17:15:28 -0600
changeset 712063 a61f8f41802fbe272622ec9a73d9314204452484
parent 712062 80e6e86ce136fcbc83926171227d200101107c25
child 743969 22082ed9f557447240516444b8fc38cdc6dd920e
push id93244
push userbbirtles@mozilla.com
push dateFri, 15 Dec 2017 16:41:24 +0000
reviewershiro
bugs1422248
milestone59.0a1
Bug 1422248 - Don't reject promises of dispatch cancel events when canceling idle animations; r?hiro MozReview-Commit-ID: EGg6Ntj0loq
dom/animation/Animation.cpp
testing/web-platform/meta/web-animations/timing-model/animations/canceling-an-animation.html.ini
--- a/dom/animation/Animation.cpp
+++ b/dom/animation/Animation.cpp
@@ -781,24 +781,26 @@ Animation::SilentlySetPlaybackRate(doubl
     SilentlySetCurrentTime(previousTime.Value());
   }
 }
 
 // https://w3c.github.io/web-animations/#cancel-an-animation
 void
 Animation::CancelNoUpdate()
 {
-  ResetPendingTasks();
+  if (PlayState() != AnimationPlayState::Idle) {
+    ResetPendingTasks();
 
-  if (mFinished) {
-    mFinished->MaybeReject(NS_ERROR_DOM_ABORT_ERR);
+    if (mFinished) {
+      mFinished->MaybeReject(NS_ERROR_DOM_ABORT_ERR);
+    }
+    ResetFinishedPromise();
+
+    DispatchPlaybackEvent(NS_LITERAL_STRING("cancel"));
   }
-  ResetFinishedPromise();
-
-  DispatchPlaybackEvent(NS_LITERAL_STRING("cancel"));
 
   StickyTimeDuration activeTime = mEffect
                                   ? mEffect->GetComputedTiming().mActiveTime
                                   : StickyTimeDuration();
 
   mHoldTime.SetNull();
   mStartTime.SetNull();
 
deleted file mode 100644
--- a/testing/web-platform/meta/web-animations/timing-model/animations/canceling-an-animation.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[canceling-an-animation.html]
-  type: testharness
-  [The finished promise should NOT be rejected if the animation is already idle]
-    expected: FAIL
-
-  [The cancel event should NOT be fired if the animation is already idle]
-    expected: FAIL