Bug 1073336 part 1 - Move CheckNeedsRefreshes to CommonAnimationManager; r=dbaron

In order to add AnimationPlayerCollection::NotifyPlayerUpdated, collections
need a way of updating their managers to inform them that their mNeedsRefreshes
flag has changed and hence the manager may need to resume observing the refresh
driver.

Currently, only nsAnimationManager makes use of mNeedsRefreshes and provides
a CheckNeedsRefresh method. In order to allow AnimationPlayerCollection to
operate independently of the type of manager it is attached to (and because
there's a lot of similar code here that we eventually want to move to a common
manager anyway), this patch moves CheckNeedsRefreshes and associated
machinery to CommonAnimationManager.
Bug 1073336 part 2 - Call CheckNeedsRefresh from within EnsureStyleRuleFor; r=dbaron

Now that CheckNeedsRefresh is a member of the base class,
CommonAnimationManager, we no longer need to rely on callers of
AnimationPlayerCollection::EnsureStyleRuleFor to remember to call this method
but can do it automatically.
Bug 1073336 part 3a - Allow TimeStamp == and != operators to work with null timestamps; r=froydnj
Bug 1073336 part 3b - Add nsPresContext::ClearLastStyleUpdateForAllAnimations; r=dbaron
Bug 1073336 part 4 - Add CommonAnimationManager::CollectionUpdated; r=dbaron

Adds a method to the animation manager base class to handle changes to one of
its associated collections.
Bug 1073336 part 5 - Add AnimationPlayerCollection::PlayerUpdated; r=dbaron
Bug 1073336 part 6 - Add CSSTransitionPlayer; r=dbaron

In order to be able to find the collection a player belongs to from its source
content, we first need to be able to determine which manager--the animation
manager or transition manager--to look up.

We eventually plan to push transition event dispatch down to a CSS
transitions-specific subclass of AnimationPlayer, so this seems like a suitable
point to introduce this class.

Using this subclass we can define a virtual GetManager method that will
return the appropriate animation/transition manager for the player.
Bug 1073336 part 7 - Move style flushing to CSSAnimationPlayer and CSSTransitionPlayer; r=dbaron

Previously AnimationPlayer::Play() and AnimationPlayer::PlayState() would flush
styles as part of their operation. This, however, is only needed when the player
corresponds to a CSS Animation or CSS Transition. Now that we have concrete
subclasses for each of these cases we can move style flushing to the subclasses
and remove it from the base class (which is expected to be shared with
animations that are not dependent on style).
Bug 1073336 part 8 - Add protected AnimationPlayer::GetRenderedDocument(); r=dbaron

In order for AnimationPlayer objects to be able to notify their
collection/manager, the can either store an extra pointer member, or they can
navigate to the collection as follows:

  player->source(animation)->target(element)->document
    ->presShell->presContext->manager->collection

This patch adds a getter for the first part of this journey up to the document.
Bug 1073336 part 9 - Add protected AnimationPlayer::GetPresContext(); r=dbaron

This patch adds a further getter to find the pres context associated with an
animation player's target element, if any.
Bug 1073336 part 10 - Add AnimationPlayer::GetAnimationManager(); r=dbaron

This patch introduces an abstract method to AnimationPlayer to fetch the manager
object associated with the player. This method is implemented separate by
CSSAnimationPlayer and CSSTransitionPlayer to return the nsAnimationManager or
nsTransitionManager accordingly.
Bug 1073336 part 11 - Move GetAnimationPlayers to base CommonAnimationManager class; r=dbaron

nsAnimationManager provides GetAnimationPlayers while nsTransitionManager
provides GetElementTransitions. Both perform the same function, namely, fetching
(and optionally creating if it does not exist) the AnimationPlayerCollection for
the specified element/pseudo. Furthermore, both take the same arguments.

This patch aligns the method names and makes this a virtual method on the base
class CommonAnimationManager so that it can be used generically from a pointer
to a CommonAnimationManager.
Bug 1073336 part 12 - Add AnimationPlayer::GetCollection(); r=dbaron

This patch adds a method to animation players that looks up the
AnimationPlayerCollection to which the player belongs.
Bug 1073336 part 13 - Add AnimationPlayer::PostUpdate; r=dbaron

Adds a method for notifying the collection of changes to one of its players.
Bug 1073336 part 14a - Update animation generation when changing animations via the API; r=dbaron
Bug 1073336 part 14b - Make ElementRestyler detect changes to the animation generation; r=dbaron

For some kinds of changes we need to update the layer tree even though there is
no change to style. For example, if an animation is paused via the Web
Animations API, we need to remove the animation from the layer even though the
style will not change.

This patch detects such changes by making ElementRestyler check for an
out-of-date animation generation on layers. This is complicated by the fact that
we currently maintain *two* animation generation numbers: one for the set of
animations and one for the set of transitions, but we only have *one* animation
generation number on each layer. This is a known issue (bug 847286).

As a result, until bug 847286 is fixed, we need to be careful to compare against
the greater of the two numbers.
Bug 1073336 part 14c - Check for a null style refresh time in AnimationPlayerCollection::CanThrottleTransformChanges; r=dbaron

We often set mStyleRuleRefreshTime to null to ensure styles get updated.
However, CanThrottleTransformChanges doesn't check for this case and blindly
does subtraction using this value.

Until now we've got away with this but now that we set mStyleRuleRefreshTime to
null when making changes via the API this case crops up in different
circumstances and we can trip over it.

This patch simply adds a null check before using mStyleRuleRefreshTime in
CanThrottleTransformChanges. All other cases where we operate on
mStyleRuleRefreshTime check for null.
Bug 1073336 part 15 - Switch AnimationPlayer to using less aggressive update mechanism; r=dbaron
Bug 1073336 part 16 - Factor out animation-layer related information to a common database; r=dbaron
Bug 1081007 - Fix relationship between Play/PlayFromJS/PlayFromStyle etc.; r=dholbert

The existing relationship between the particular versions of
AnimationPlayer::Play* (particularly in the CSSAnimationPlayer) subclass are
confusing because, for example, CSSAnimationPlayer::PlayFromStyle needs to be
careful to *not* call Play on CSSAnimationPlayer, but only on the parent
object (since otherwise we reset the sticky pause behavior).

This patch reworks this relationship by adding a protected DoPlay method that
performs the common pausing behavior. Play/PlayFromJS/PlayFromStyle then add
flushing, sticky pausing etc. as necessary.

This patch also removes the UpdateFlags enum and parameters previously used to
control whether we forced an update to style. This is no longer necessary since
we no longer call 'Play' from style. Instead we make Play always post restyles.

If we come across a case where we want to call Play and *not* post restyles, we
can re-add the flags then.

Roughly the same arrangement is true for Pause except that we don't currently
flush styles for CSS animations in PauseFromJS since it currently won't make any
observable difference.