Bug 1264125: Call the queueing events when canceling transition via Style or Script

Issue #55
This commit is contained in:
janekptacijarabaci 2018-03-14 09:16:03 +01:00 • committed by Roy Tam
commit 96037b8c9a
4 changed files with 53 additions and 7 deletions

View file

@ -180,7 +180,7 @@ CSSTransition::UpdateTiming(SeekFlag aSeekFlag, SyncNotifyFlag aSyncNotifyFlag)
}
void
CSSTransition::QueueEvents()
CSSTransition::QueueEvents(StickyTimeDuration aActiveTime)
{
if (!mEffect ||
!mOwningElement.IsSet()) {
@ -230,12 +230,9 @@ CSSTransition::QueueEvents()
// Handle cancel events firts
if (mPreviousTransitionPhase != TransitionPhase::Idle &&
currentPhase == TransitionPhase::Idle) {
// FIXME: bug 1264125: We will need to get active time when cancelling
// the transition.
StickyTimeDuration activeTime(0);
TimeStamp activeTimeStamp = ElapsedTimeToTimeStamp(activeTime);
TimeStamp activeTimeStamp = ElapsedTimeToTimeStamp(aActiveTime);
events.AppendElement(TransitionEventParams{ eTransitionCancel,
activeTime,
aActiveTime,
activeTimeStamp });
}

View file

@ -162,6 +162,18 @@ public:
Animation::CancelFromStyle();
// The above call to Animation::CancelFromStyle may cause a transitioncancel
// event to be queued. However, it will also remove the transition from its
// timeline. If this transition was the last animation attached to
// the timeline, the timeline will stop observing the refresh driver and
// there may be no subsequent tick fro dispatching animation events.
//
// To ensure the cancel event is dispatched we tell the timeline it needs to
// observe the refresh driver for at least one more tick.
if (mTimeline) {
mTimeline->NotifyAnimationUpdated(*this);
}
// It is important we do this *after* calling CancelFromStyle().
// This is because CancelFromStyle() will end up posting a restyle and
// that restyle should target the *transitions* level of the cascade.
@ -214,6 +226,10 @@ public:
const TimeDuration& aStartTime,
double aPlaybackRate);
void MaybeQueueCancelEvent(StickyTimeDuration aActiveTime) override {
QueueEvents(aActiveTime);
}
protected:
virtual ~CSSTransition()
{
@ -225,7 +241,7 @@ protected:
void UpdateTiming(SeekFlag aSeekFlag,
SyncNotifyFlag aSyncNotifyFlag) override;
void QueueEvents();
void QueueEvents(StickyTimeDuration activeTime = StickyTimeDuration());
// The (pseudo-)element whose computed transition-property refers to this
// transition (if any).