Index: Source/core/frame/PlatformEventDispatcher.cpp |
diff --git a/Source/core/frame/PlatformEventDispatcher.cpp b/Source/core/frame/PlatformEventDispatcher.cpp |
index 397d7881752d3dd435ddd6410d8a191368f72f71..7cd841e00d7a87728bffd415ab82efba4cfaab70 100644 |
--- a/Source/core/frame/PlatformEventDispatcher.cpp |
+++ b/Source/core/frame/PlatformEventDispatcher.cpp |
@@ -16,10 +16,6 @@ PlatformEventDispatcher::PlatformEventDispatcher() |
{ |
} |
-PlatformEventDispatcher::~PlatformEventDispatcher() |
-{ |
-} |
- |
void PlatformEventDispatcher::addController(PlatformEventController* controller) |
{ |
bool wasEmpty = m_controllers.isEmpty(); |
@@ -84,4 +80,26 @@ void PlatformEventDispatcher::notifyControllers() |
purgeControllers(); |
} |
+void PlatformEventDispatcher::trace(Visitor* visitor) |
+{ |
+#if ENABLE(OILPAN) |
+ // Trace the backing store, the weak(&bare) element references won't be. |
+ visitor->trace(m_controllers); |
+ visitor->registerWeakMembers<PlatformEventDispatcher, &PlatformEventDispatcher::clearWeakMembers>(this); |
+#endif |
+} |
+ |
+#if ENABLE(OILPAN) |
+void PlatformEventDispatcher::clearWeakMembers(Visitor* visitor) |
+{ |
+ for (size_t i = 0; i < m_controllers.size(); ++i) { |
+ if (!visitor->isAlive(m_controllers[i])) { |
+ m_controllers[i] = nullptr; |
+ m_needsPurge = true; |
+ } |
+ } |
+ // Next notification will purge the empty slots. |
+} |
+#endif |
+ |
} // namespace blink |