Index: third_party/WebKit/Source/platform/Timer.cpp |
diff --git a/third_party/WebKit/Source/platform/Timer.cpp b/third_party/WebKit/Source/platform/Timer.cpp |
index 7c1ff4080fe682180a5f5bfd63ae54f08a09765f..8ed079f3f31502703bc065e987c83d3562cddd48 100644 |
--- a/third_party/WebKit/Source/platform/Timer.cpp |
+++ b/third_party/WebKit/Source/platform/Timer.cpp |
@@ -43,11 +43,11 @@ |
TimerBase::TimerBase(WebTaskRunner* webTaskRunner) |
: m_nextFireTime(0) |
, m_repeatInterval(0) |
+ , m_cancellableTimerTask(nullptr) |
, m_webTaskRunner(webTaskRunner->clone()) |
#if DCHECK_IS_ON() |
, m_thread(currentThread()) |
#endif |
- , m_weakPtrFactory(this) |
{ |
ASSERT(m_webTaskRunner); |
} |
@@ -72,7 +72,9 @@ |
m_repeatInterval = 0; |
m_nextFireTime = 0; |
- m_weakPtrFactory.revokeAll(); |
+ if (m_cancellableTimerTask) |
+ m_cancellableTimerTask->cancel(); |
+ m_cancellableTimerTask = nullptr; |
} |
double TimerBase::nextFireInterval() const |
@@ -109,20 +111,18 @@ |
if (m_nextFireTime != newTime) { |
m_nextFireTime = newTime; |
- |
- // Cancel any previously posted task. |
- m_weakPtrFactory.revokeAll(); |
+ if (m_cancellableTimerTask) |
+ m_cancellableTimerTask->cancel(); |
+ m_cancellableTimerTask = new CancellableTimerTask(this); |
double delayMs = 1000.0 * (newTime - now); |
- timerTaskRunner()->postDelayedTask(m_location, base::Bind(&TimerBase::runInternal, m_weakPtrFactory.createWeakPtr()), delayMs); |
+ timerTaskRunner()->postDelayedTask(m_location, m_cancellableTimerTask, delayMs); |
} |
} |
NO_LAZY_SWEEP_SANITIZE_ADDRESS |
void TimerBase::runInternal() |
{ |
- m_weakPtrFactory.revokeAll(); |
- |
if (!canFire()) |
return; |