gecko/dom/animation/AnimationTimeline.h
Brian Birtles fa65372e57 Bug 1002332 - Make AnimationTimeline record the last refresh time and use that when there is no refresh driver; r=bz
A document that belongs to an iframe that is display:none as no associated pres
context from which to get a refresh driver. However, in this case
document.timeline.currentTime should still never go backwards (since document
timelines are supposed to be monotonically increasing).

This patch makes AnimationTimeline record the last value returned for the
current time so that if the document becomes display:none we can still return
the most recently used time.
2014-07-24 13:37:38 +09:00

56 lines
1.6 KiB
C++

/* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_AnimationTimeline_h
#define mozilla_dom_AnimationTimeline_h
#include "nsWrapperCache.h"
#include "nsCycleCollectionParticipant.h"
#include "mozilla/Attributes.h"
#include "mozilla/TimeStamp.h"
#include "js/TypeDecls.h"
#include "nsIDocument.h"
struct JSContext;
namespace mozilla {
namespace dom {
class AnimationTimeline MOZ_FINAL : public nsWrapperCache
{
public:
AnimationTimeline(nsIDocument* aDocument)
: mDocument(aDocument)
{
SetIsDOMBinding();
}
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(AnimationTimeline)
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(AnimationTimeline)
nsISupports* GetParentObject() const { return mDocument; }
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
Nullable<double> GetCurrentTime() const;
mozilla::TimeStamp GetCurrentTimeStamp() const;
Nullable<double> ToTimelineTime(const mozilla::TimeStamp& aTimeStamp) const;
protected:
virtual ~AnimationTimeline() { }
nsCOMPtr<nsIDocument> mDocument;
// Store the most recently returned value of current time. This is used
// in cases where we don't have a refresh driver (e.g. because we are in
// a display:none iframe).
mutable mozilla::TimeStamp mLastCurrentTime;
};
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_AnimationTimeline_h