| Index: third_party/WebKit/Source/platform/WebTaskRunner.cpp | 
| diff --git a/third_party/WebKit/Source/platform/WebTaskRunner.cpp b/third_party/WebKit/Source/platform/WebTaskRunner.cpp | 
| index 059abdf83d05f66c7baf472599d312d4509ab646..aa2d25449dc39088ceca7378b227947ce33a8be8 100644 | 
| --- a/third_party/WebKit/Source/platform/WebTaskRunner.cpp | 
| +++ b/third_party/WebKit/Source/platform/WebTaskRunner.cpp | 
| @@ -4,8 +4,29 @@ | 
|  | 
| #include "platform/WebTaskRunner.h" | 
|  | 
| +#include "base/bind_helpers.h" | 
| #include "base/single_thread_task_runner.h" | 
|  | 
| +namespace base { | 
| + | 
| +using RunnerMethodType = | 
| +    void (blink::TaskHandle::Runner::*)(const blink::TaskHandle&); | 
| + | 
| +template <> | 
| +struct CallbackCancellationTraits< | 
| +    RunnerMethodType, | 
| +    std::tuple<WTF::WeakPtr<blink::TaskHandle::Runner>, blink::TaskHandle>> { | 
| +  static constexpr bool is_cancellable = true; | 
| + | 
| +  static bool IsCancelled(RunnerMethodType, | 
| +                          const WTF::WeakPtr<blink::TaskHandle::Runner>&, | 
| +                          const blink::TaskHandle& handle) { | 
| +    return !handle.isActive(); | 
| +  } | 
| +}; | 
| + | 
| +}  // namespace base | 
| + | 
| namespace blink { | 
|  | 
| class TaskHandle::Runner : public WTF::ThreadSafeRefCounted<Runner> { | 
| @@ -15,7 +36,7 @@ class TaskHandle::Runner : public WTF::ThreadSafeRefCounted<Runner> { | 
|  | 
| WTF::WeakPtr<Runner> asWeakPtr() { return m_weakPtrFactory.createWeakPtr(); } | 
|  | 
| -  bool isActive() { return static_cast<bool>(m_task); } | 
| +  bool isActive() const { return m_task && !m_task->isCancelled(); } | 
|  | 
| void cancel() { | 
| std::unique_ptr<WTF::Closure> task = std::move(m_task); | 
|  |