diff options
Diffstat (limited to 'dom/base/Timeout.h')
-rw-r--r-- | dom/base/Timeout.h | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/dom/base/Timeout.h b/dom/base/Timeout.h new file mode 100644 index 000000000..e929f3dd1 --- /dev/null +++ b/dom/base/Timeout.h @@ -0,0 +1,103 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* 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_timeout_h +#define mozilla_dom_timeout_h + +#include "mozilla/LinkedList.h" +#include "mozilla/TimeStamp.h" +#include "nsCOMPtr.h" +#include "nsCycleCollectionParticipant.h" +#include "nsPIDOMWindow.h" + +class nsGlobalWindow; +class nsIPrincipal; +class nsITimeoutHandler; +class nsITimer; +class nsIEventTarget; + +namespace mozilla { +namespace dom { + +/* + * Timeout struct that holds information about each script + * timeout. Holds a strong reference to an nsITimeoutHandler, which + * abstracts the language specific cruft. + */ +class Timeout final + : public LinkedListElement<Timeout> +{ +public: + Timeout(); + + NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(Timeout) + NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(Timeout) + + // The target may be specified to use a particular event queue for the + // resulting timer runnable. A nullptr target will result in the + // default main thread being used. + nsresult InitTimer(nsIEventTarget* aTarget, uint32_t aDelay); + + enum class Reason { eTimeoutOrInterval, eIdleCallbackTimeout }; + +#ifdef DEBUG + bool HasRefCntOne() const; +#endif // DEBUG + + // Window for which this timeout fires + RefPtr<nsGlobalWindow> mWindow; + + // The actual timer object + nsCOMPtr<nsITimer> mTimer; + + // True if the timeout was cleared + bool mCleared; + + // True if this is one of the timeouts that are currently running + bool mRunning; + + // True if this is a repeating/interval timer + bool mIsInterval; + + Reason mReason; + + // Returned as value of setTimeout() + uint32_t mTimeoutId; + + // Interval in milliseconds + uint32_t mInterval; + + // mWhen and mTimeRemaining can't be in a union, sadly, because they + // have constructors. + // Nominal time to run this timeout. Use only when timeouts are not + // suspended. + TimeStamp mWhen; + // Remaining time to wait. Used only when timeouts are suspended. + TimeDuration mTimeRemaining; + + // Principal with which to execute + nsCOMPtr<nsIPrincipal> mPrincipal; + + // stack depth at which timeout is firing + uint32_t mFiringDepth; + + uint32_t mNestingLevel; + + // The popup state at timeout creation time if not created from + // another timeout + PopupControlState mPopupState; + + // The language-specific information about the callback. + nsCOMPtr<nsITimeoutHandler> mScriptHandler; + +private: + ~Timeout(); +}; + +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_timeout_h |