| 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;
|
|
|
|
|