Index: third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp |
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp |
index 7df53a74a50a9c87e7d258b1f3cf56d67559efcf..888e84dd5168ef31483ea398fcac1602706063dd 100644 |
--- a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp |
+++ b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp |
@@ -31,6 +31,7 @@ |
#include "core/HTMLNames.h" |
#include "core/InputTypeNames.h" |
#include "core/dom/Document.h" |
+#include "core/dom/TaskRunnerHelper.h" |
#include "core/editing/EditingUtilities.h" |
#include "core/frame/FrameView.h" |
#include "core/frame/LocalFrame.h" |
@@ -97,7 +98,6 @@ AXObjectCacheImpl::AXObjectCacheImpl(Document& document) |
#if ENABLE(ASSERT) |
, m_hasBeenDisposed(false) |
#endif |
- , m_notificationPostTimer(this, &AXObjectCacheImpl::notificationPostTimerFired) |
{ |
} |
@@ -108,7 +108,7 @@ AXObjectCacheImpl::~AXObjectCacheImpl() |
void AXObjectCacheImpl::dispose() |
{ |
- m_notificationPostTimer.stop(); |
+ m_notificationPostCanceller.cancel(); |
for (auto& entry : m_objects) { |
AXObject* obj = entry.value; |
@@ -648,10 +648,8 @@ void AXObjectCacheImpl::childrenChanged(AXObject* obj) |
obj->childrenChanged(); |
} |
-void AXObjectCacheImpl::notificationPostTimerFired(TimerBase*) |
+void AXObjectCacheImpl::postNotificationsNow() |
{ |
- m_notificationPostTimer.stop(); |
- |
unsigned i = 0, count = m_notificationsToPost.size(); |
for (i = 0; i < count; ++i) { |
AXObject* obj = m_notificationsToPost[i].first; |
@@ -708,8 +706,12 @@ void AXObjectCacheImpl::postNotification(AXObject* object, AXNotification notifi |
return; |
m_notificationsToPost.append(std::make_pair(object, notification)); |
- if (!m_notificationPostTimer.isActive()) |
- m_notificationPostTimer.startOneShot(0, BLINK_FROM_HERE); |
+ if (m_notificationPostCanceller.isActive()) |
+ return; |
+ |
+ auto result = WTF::makeCancellable(WTF::bind(&AXObjectCacheImpl::postNotificationsNow, wrapWeakPersistent(this))); |
+ m_notificationPostCanceller = std::move(result.canceller); |
+ TaskRunnerHelper::get(TaskType::Internal, m_document)->postTask(BLINK_FROM_HERE, std::move(result.function)); |
} |
bool AXObjectCacheImpl::isAriaOwned(const AXObject* child) const |