| Index: Source/core/frame/SuspendableTimer.cpp
|
| diff --git a/Source/core/frame/SuspendableTimer.cpp b/Source/core/frame/SuspendableTimer.cpp
|
| index 64f082928ced7822dc69e77401c7c0d37b002ea7..8a9d0485fad87b493ee2d9790b50393e7fa28e1e 100644
|
| --- a/Source/core/frame/SuspendableTimer.cpp
|
| +++ b/Source/core/frame/SuspendableTimer.cpp
|
| @@ -29,11 +29,15 @@
|
|
|
| namespace blink {
|
|
|
| +namespace {
|
| +// The lowest value returned by TimerBase::nextUnalignedFireInterval is 0.0
|
| +const double kNextFireIntervalInvalid = -1.0;
|
| +}
|
| +
|
| SuspendableTimer::SuspendableTimer(ExecutionContext* context)
|
| : ActiveDOMObject(context)
|
| - , m_nextFireInterval(0)
|
| + , m_nextFireInterval(kNextFireIntervalInvalid)
|
| , m_repeatInterval(0)
|
| - , m_active(false)
|
| #if ENABLE(ASSERT)
|
| , m_suspended(false)
|
| #endif
|
| @@ -51,6 +55,7 @@ bool SuspendableTimer::hasPendingActivity() const
|
|
|
| void SuspendableTimer::stop()
|
| {
|
| + m_nextFireInterval = kNextFireIntervalInvalid;
|
| TimerBase::stop();
|
| }
|
|
|
| @@ -60,9 +65,9 @@ void SuspendableTimer::suspend()
|
| ASSERT(!m_suspended);
|
| m_suspended = true;
|
| #endif
|
| - m_active = isActive();
|
| - if (m_active) {
|
| + if (isActive()) {
|
| m_nextFireInterval = nextUnalignedFireInterval();
|
| + ASSERT(m_nextFireInterval >= 0.0);
|
| m_repeatInterval = repeatInterval();
|
| TimerBase::stop();
|
| }
|
| @@ -74,9 +79,12 @@ void SuspendableTimer::resume()
|
| ASSERT(m_suspended);
|
| m_suspended = false;
|
| #endif
|
| - // FIXME: FROM_HERE is wrong here.
|
| - if (m_active)
|
| - start(m_nextFireInterval, m_repeatInterval, FROM_HERE);
|
| + if (m_nextFireInterval >= 0.0) {
|
| + // start() was called before, therefore location() is already set.
|
| + // m_nextFireInterval is only set in suspend() if the Timer was active.
|
| + start(m_nextFireInterval, m_repeatInterval, location());
|
| + m_nextFireInterval = kNextFireIntervalInvalid;
|
| + }
|
| }
|
|
|
| } // namespace blink
|
|
|