From 1ba8149d5d7292986c4f2ff318b53b776869320d Mon Sep 17 00:00:00 2001 From: Mantaroh Yoshinaga Date: Mon, 6 Feb 2017 16:21:01 +0900 Subject: [PATCH] Bug 1336899 - Should not fire the transitioncancel after ending CSS Transition. r=birtles MozReview-Commit-ID: IrqNNjVg0xg --HG-- extra : rebase_source : 769e4646375d41b5621ee71c8f0ce5eb44bae8d1 --- .../test/css-transitions/file_event-dispatch.html | 4 +++- layout/style/nsTransitionManager.cpp | 13 ++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/dom/animation/test/css-transitions/file_event-dispatch.html b/dom/animation/test/css-transitions/file_event-dispatch.html index 7140cda36a19..1bd0db440c82 100644 --- a/dom/animation/test/css-transitions/file_event-dispatch.html +++ b/dom/animation/test/css-transitions/file_event-dispatch.html @@ -464,7 +464,9 @@ promise_test(function(t) { return watcher.wait_for('transitionend'); }).then(function(evt) { transition.cancel(); - return watcher.wait_for('transitioncancel'); + + // Then wait a couple of frames and check that no event was dispatched + return waitForAnimationFrames(2); }); }, 'Cancel the transition after clearing the target effect'); diff --git a/layout/style/nsTransitionManager.cpp b/layout/style/nsTransitionManager.cpp index 73a228363539..2004d9bb66ac 100644 --- a/layout/style/nsTransitionManager.cpp +++ b/layout/style/nsTransitionManager.cpp @@ -202,8 +202,6 @@ CSSTransition::QueueEvents(StickyTimeDuration aActiveTime) if (!mEffect) { currentPhase = GetTransitionPhaseWithoutEffect(); - intervalStartTime = zeroDuration; - intervalEndTime = zeroDuration; } else { ComputedTiming computedTiming = mEffect->GetComputedTiming(); @@ -221,9 +219,9 @@ CSSTransition::QueueEvents(StickyTimeDuration aActiveTime) // perhaps even with different timelines. // The zero timestamp is for transitionrun events where we ignore the delay // for the purpose of ordering events. - TimeStamp zeroTimeStamp = AnimationTimeToTimeStamp(zeroDuration); - TimeStamp startTimeStamp = ElapsedTimeToTimeStamp(intervalStartTime); - TimeStamp endTimeStamp = ElapsedTimeToTimeStamp(intervalEndTime); + TimeStamp zeroTimeStamp = AnimationTimeToTimeStamp(zeroDuration); + TimeStamp startTimeStamp = ElapsedTimeToTimeStamp(intervalStartTime); + TimeStamp endTimeStamp = ElapsedTimeToTimeStamp(intervalEndTime); if (mPendingState != PendingState::NotPending && (mPreviousTransitionPhase == TransitionPhase::Idle || @@ -234,8 +232,9 @@ CSSTransition::QueueEvents(StickyTimeDuration aActiveTime) AutoTArray events; - // Handle cancel events firts - if (mPreviousTransitionPhase != TransitionPhase::Idle && + // Handle cancel events first + if ((mPreviousTransitionPhase != TransitionPhase::Idle && + mPreviousTransitionPhase != TransitionPhase::After) && currentPhase == TransitionPhase::Idle) { TimeStamp activeTimeStamp = ElapsedTimeToTimeStamp(aActiveTime); events.AppendElement(TransitionEventParams{ eTransitionCancel,