Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(671)

Unified Diff: Source/core/events/EventTarget.cpp

Issue 1238083002: Oilpan: Move the EventListener hierarchy to Oilpan's heap (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/events/EventTarget.h ('k') | Source/core/events/RegisteredEventListener.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/events/EventTarget.cpp
diff --git a/Source/core/events/EventTarget.cpp b/Source/core/events/EventTarget.cpp
index b03435180c01633c12c9208132be8159a5dc5bf0..7b65c47eb93fc88c3e06aec04ce179c3e41a5e22 100644
--- a/Source/core/events/EventTarget.cpp
+++ b/Source/core/events/EventTarget.cpp
@@ -57,6 +57,11 @@ EventTargetData::~EventTargetData()
{
}
+DEFINE_TRACE(EventTargetData)
+{
+ visitor->trace(eventListenerMap);
+}
+
EventTarget::EventTarget()
{
}
@@ -87,7 +92,7 @@ inline LocalDOMWindow* EventTarget::executingWindow()
return 0;
}
-bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener, bool useCapture)
+bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtrWillBeRawPtr<EventListener> listener, bool useCapture)
{
if (!listener)
return false;
@@ -103,7 +108,7 @@ bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtr<Eve
return ensureEventTargetData().eventListenerMap.add(eventType, listener, useCapture);
}
-bool EventTarget::removeEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener, bool useCapture)
+bool EventTarget::removeEventListener(const AtomicString& eventType, PassRefPtrWillBeRawPtr<EventListener> listener, bool useCapture)
{
if (!listener)
return false;
@@ -141,7 +146,7 @@ bool EventTarget::removeEventListener(const AtomicString& eventType, PassRefPtr<
return true;
}
-bool EventTarget::setAttributeEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener)
+bool EventTarget::setAttributeEventListener(const AtomicString& eventType, PassRefPtrWillBeRawPtr<EventListener> listener)
{
clearAttributeEventListener(eventType);
if (!listener)
@@ -151,13 +156,15 @@ bool EventTarget::setAttributeEventListener(const AtomicString& eventType, PassR
EventListener* EventTarget::getAttributeEventListener(const AtomicString& eventType)
{
- const EventListenerVector& entry = getEventListeners(eventType);
- for (const auto& eventListener : entry) {
+ EventListenerVector* listenerVector = getEventListeners(eventType);
+ if (!listenerVector)
+ return nullptr;
+ for (const auto& eventListener : *listenerVector) {
EventListener* listener = eventListener.listener.get();
if (listener->isAttribute() && listener->belongsToTheCurrentWorld())
return listener;
}
- return 0;
+ return nullptr;
}
bool EventTarget::clearAttributeEventListener(const AtomicString& eventType)
@@ -366,19 +373,12 @@ void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList
d->firingEventIterators->removeLast();
}
-const EventListenerVector& EventTarget::getEventListeners(const AtomicString& eventType)
+EventListenerVector* EventTarget::getEventListeners(const AtomicString& eventType)
{
- AtomicallyInitializedStaticReference(EventListenerVector, emptyVector, new EventListenerVector);
haraken 2015/07/27 15:07:29 It took me hours to notice this bug... The created
-
- EventTargetData* d = eventTargetData();
- if (!d)
- return emptyVector;
-
- EventListenerVector* listenerVector = d->eventListenerMap.find(eventType);
- if (!listenerVector)
- return emptyVector;
-
- return *listenerVector;
+ EventTargetData* data = eventTargetData();
+ if (!data)
+ return nullptr;
+ return data->eventListenerMap.find(eventType);
}
Vector<AtomicString> EventTarget::eventTypes()
« no previous file with comments | « Source/core/events/EventTarget.h ('k') | Source/core/events/RegisteredEventListener.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698