Modified: trunk/Source/WebCore/ChangeLog (102105 => 102106)
--- trunk/Source/WebCore/ChangeLog 2011-12-06 08:05:11 UTC (rev 102105)
+++ trunk/Source/WebCore/ChangeLog 2011-12-06 08:21:43 UTC (rev 102106)
@@ -1,3 +1,26 @@
+2011-12-06 Andreas Kling <kl...@webkit.org>
+
+ Use HashMap<OwnPtr> for EventListenerMap's internal map.
+ <http://webkit.org/b/73761>
+
+ Reviewed by Benjamin Poulain.
+
+ Changed the value type of EventListenerMap::m_hashMap to OwnPtr<EventListenerVector>.
+ This means we no longer need to manually delete the vectors when taking them out of
+ the map, which makes the code a little prettier.
+
+ A few tweaks were necessary; release() instead of leakPtr() when switching modes
+ and adoptPtr()/get() sprinkled as needed.
+
+ * dom/EventListenerMap.h:
+ * dom/EventListenerMap.cpp:
+ (WebCore::EventListenerMap::clear):
+ (WebCore::EventListenerMap::add):
+ (WebCore::EventListenerMap::remove):
+ (WebCore::EventListenerMap::find):
+ (WebCore::EventListenerMap::removeFirstEventListenerCreatedFromMarkup):
+ (WebCore::EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget):
+
2011-12-05 Rafael Weinstein <rafa...@chromium.org>
[MutationObservers] Support 'attributes' mutation records for element.removeAttribute
Modified: trunk/Source/WebCore/dom/EventListenerMap.cpp (102105 => 102106)
--- trunk/Source/WebCore/dom/EventListenerMap.cpp 2011-12-06 08:05:11 UTC (rev 102105)
+++ trunk/Source/WebCore/dom/EventListenerMap.cpp 2011-12-06 08:21:43 UTC (rev 102106)
@@ -73,10 +73,9 @@
{
ASSERT(!m_activeIteratorCount);
- if (m_hashMap) {
- deleteAllValues(*m_hashMap);
+ if (m_hashMap)
m_hashMap.clear();
- } else {
+ else {
m_singleEventListenerType = nullAtom;
m_singleEventListenerVector.clear();
}
@@ -117,16 +116,16 @@
// of that type, so create the hash map and move the first listener vector there.
ASSERT(!m_hashMap);
m_hashMap = adoptPtr(new EventListenerHashMap);
- m_hashMap->add(m_singleEventListenerType, m_singleEventListenerVector.leakPtr());
+ m_hashMap->add(m_singleEventListenerType, m_singleEventListenerVector.release());
m_singleEventListenerType = nullAtom;
}
if (m_hashMap) {
- pair<EventListenerHashMap::iterator, bool> result = m_hashMap->add(eventType, 0);
+ pair<EventListenerHashMap::iterator, bool> result = m_hashMap->add(eventType, nullptr);
if (result.second)
- result.first->second = new EventListenerVector;
+ result.first->second = adoptPtr(new EventListenerVector);
- return addListenerToVector(result.first->second, listener, useCapture);
+ return addListenerToVector(result.first->second.get(), listener, useCapture);
}
if (!m_singleEventListenerVector) {
@@ -167,11 +166,9 @@
if (it == m_hashMap->end())
return false;
- bool wasRemoved = removeListenerFromVector(it->second, listener, useCapture, indexOfRemovedListener);
- if (it->second->isEmpty()) {
- delete it->second;
+ bool wasRemoved = removeListenerFromVector(it->second.get(), listener, useCapture, indexOfRemovedListener);
+ if (it->second->isEmpty())
m_hashMap->remove(it);
- }
return wasRemoved;
}
@@ -183,7 +180,7 @@
EventListenerHashMap::iterator it = m_hashMap->find(eventType);
if (it == m_hashMap->end())
return 0;
- return it->second;
+ return it->second.get();
}
if (m_singleEventListenerType == eventType)
@@ -217,15 +214,13 @@
EventListenerHashMap::iterator result = m_hashMap->find(eventType);
ASSERT(result != m_hashMap->end());
- EventListenerVector* listenerVector = result->second;
+ EventListenerVector* listenerVector = result->second.get();
ASSERT(listenerVector);
removeFirstListenerCreatedFromMarkup(listenerVector);
- if (listenerVector->isEmpty()) {
- delete listenerVector;
+ if (listenerVector->isEmpty())
m_hashMap->remove(result);
- }
return;
}
@@ -257,7 +252,7 @@
if (m_hashMap) {
EventListenerHashMap::iterator end = m_hashMap->end();
for (EventListenerHashMap::iterator it = m_hashMap->begin(); it != end; ++it)
- copyListenersNotCreatedFromMarkupToTarget(it->first, it->second, target);
+ copyListenersNotCreatedFromMarkupToTarget(it->first, it->second.get(), target);
return;
}
Modified: trunk/Source/WebCore/dom/EventListenerMap.h (102105 => 102106)
--- trunk/Source/WebCore/dom/EventListenerMap.h 2011-12-06 08:05:11 UTC (rev 102105)
+++ trunk/Source/WebCore/dom/EventListenerMap.h 2011-12-06 08:21:43 UTC (rev 102106)
@@ -69,7 +69,7 @@
struct EventListenerHashMapTraits : HashTraits<WTF::AtomicString> {
static const int minimumTableSize = 32;
};
- typedef HashMap<AtomicString, EventListenerVector*, AtomicStringHash, EventListenerHashMapTraits> EventListenerHashMap;
+ typedef HashMap<AtomicString, OwnPtr<EventListenerVector>, AtomicStringHash, EventListenerHashMapTraits> EventListenerHashMap;
OwnPtr<EventListenerHashMap> m_hashMap;