| Index: Source/core/dom/EventHandlerRegistry.cpp
|
| diff --git a/Source/core/dom/EventHandlerRegistry.cpp b/Source/core/dom/EventHandlerRegistry.cpp
|
| index b72b465ffaadc0a31187c14559227570e38b81e7..668c46eab92692c58db55abd29f15241d093f599 100644
|
| --- a/Source/core/dom/EventHandlerRegistry.cpp
|
| +++ b/Source/core/dom/EventHandlerRegistry.cpp
|
| @@ -199,4 +199,22 @@ void EventHandlerRegistry::notifyHasHandlersChanged(EventHandlerClass handlerCla
|
| }
|
| }
|
|
|
| +void EventHandlerRegistry::clearWeakMembers(Visitor* visitor)
|
| +{
|
| + Vector<EventTarget*> deadNodeTargets;
|
| + for (size_t i = 0; i < EventHandlerClassCount; ++i) {
|
| + EventHandlerClass handlerClass = static_cast<EventHandlerClass>(i);
|
| + const EventTargetSet* targets = eventHandlerTargets(handlerClass);
|
| + if (!targets)
|
| + continue;
|
| + for (EventTargetSet::const_iterator it = targets->begin(); it != targets->end(); ++it) {
|
| + Node* node = it->key->toNode();
|
| + if (node && !visitor->isAlive(node))
|
| + deadNodeTargets.append(node);
|
| + }
|
| + }
|
| + for (size_t i = 0; i < deadNodeTargets.size(); ++i)
|
| + didRemoveAllEventHandlers(*deadNodeTargets[i]);
|
| +}
|
| +
|
| } // namespace WebCore
|
|
|