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

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

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
Index: Source/core/events/EventTarget.h
diff --git a/Source/core/events/EventTarget.h b/Source/core/events/EventTarget.h
index 423015163d4b1137aea235cd58d5d82c78ab57b9..bca1c6ca6a5c4cbdaa9567e750d084ba2a20da83 100644
--- a/Source/core/events/EventTarget.h
+++ b/Source/core/events/EventTarget.h
@@ -63,12 +63,15 @@ struct FiringEventIterator {
};
typedef Vector<FiringEventIterator, 1> FiringEventIteratorVector;
-struct CORE_EXPORT EventTargetData {
- WTF_MAKE_NONCOPYABLE(EventTargetData); WTF_MAKE_FAST_ALLOCATED(EventTargetData);
+class CORE_EXPORT EventTargetData final : public NoBaseWillBeGarbageCollectedFinalized<EventTargetData> {
+ WTF_MAKE_NONCOPYABLE(EventTargetData);
+ WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(EventTargetData);
public:
EventTargetData();
~EventTargetData();
+ DECLARE_TRACE();
+
EventListenerMap eventListenerMap;
OwnPtr<FiringEventIteratorVector> firingEventIterators;
};
@@ -122,8 +125,8 @@ public:
virtual LocalDOMWindow* toDOMWindow();
virtual MessagePort* toMessagePort();
- virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture);
- virtual bool removeEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture);
+ virtual bool addEventListener(const AtomicString& eventType, PassRefPtrWillBeRawPtr<EventListener>, bool useCapture);
+ virtual bool removeEventListener(const AtomicString& eventType, PassRefPtrWillBeRawPtr<EventListener>, bool useCapture);
virtual void removeAllEventListeners();
bool dispatchEvent(PassRefPtrWillBeRawPtr<Event>);
@@ -135,13 +138,13 @@ public:
virtual void uncaughtExceptionInEventHandler();
// Used for legacy "onEvent" attribute APIs.
- bool setAttributeEventListener(const AtomicString& eventType, PassRefPtr<EventListener>);
+ bool setAttributeEventListener(const AtomicString& eventType, PassRefPtrWillBeRawPtr<EventListener>);
EventListener* getAttributeEventListener(const AtomicString& eventType);
bool hasEventListeners() const;
bool hasEventListeners(const AtomicString& eventType) const;
bool hasCapturingEventListeners(const AtomicString& eventType);
- const EventListenerVector& getEventListeners(const AtomicString& eventType);
+ EventListenerVector* getEventListeners(const AtomicString& eventType);
Vector<AtomicString> eventTypes();
bool fireEventListeners(Event*);
@@ -175,10 +178,22 @@ private:
friend class EventListenerIterator;
};
-class CORE_EXPORT EventTargetWithInlineData : public EventTarget {
+// EventTargetData is a GCed object, so it should not be used as a part of
+// object. However, we intentionally use it as a part of object for performance,
+// assuming that no one extracts a pointer of
+// EventTargetWithInlineData::m_eventTargetData and store it to a Member etc.
+class GC_PLUGIN_IGNORE("513199") CORE_EXPORT EventTargetWithInlineData : public EventTarget {
+public:
+ DEFINE_INLINE_VIRTUAL_TRACE()
+ {
+ visitor->trace(m_eventTargetData);
+ EventTarget::trace(visitor);
+ }
+
protected:
EventTargetData* eventTargetData() final { return &m_eventTargetData; }
EventTargetData& ensureEventTargetData() final { return m_eventTargetData; }
+
private:
EventTargetData m_eventTargetData;
};
@@ -204,6 +219,11 @@ public:
// EventTarget is not eagerly finalized.
return allocateObject(size, IsEagerlyFinalizedType<T>::value);
}
+
+ DEFINE_INLINE_VIRTUAL_TRACE()
+ {
+ EventTargetWithInlineData::trace(visitor);
+ }
};
#else
template <typename T>
@@ -217,15 +237,15 @@ public:
// macros to avoid causing so many header includes.
#define DEFINE_ATTRIBUTE_EVENT_LISTENER(attribute) \
EventListener* on##attribute() { return getAttributeEventListener(EventTypeNames::attribute); } \
- void setOn##attribute(PassRefPtr<EventListener> listener) { setAttributeEventListener(EventTypeNames::attribute, listener); } \
+ void setOn##attribute(PassRefPtrWillBeRawPtr<EventListener> listener) { setAttributeEventListener(EventTypeNames::attribute, listener); } \
#define DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(attribute) \
static EventListener* on##attribute(EventTarget& eventTarget) { return eventTarget.getAttributeEventListener(EventTypeNames::attribute); } \
- static void setOn##attribute(EventTarget& eventTarget, PassRefPtr<EventListener> listener) { eventTarget.setAttributeEventListener(EventTypeNames::attribute, listener); } \
+ static void setOn##attribute(EventTarget& eventTarget, PassRefPtrWillBeRawPtr<EventListener> listener) { eventTarget.setAttributeEventListener(EventTypeNames::attribute, listener); } \
#define DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(attribute) \
EventListener* on##attribute() { return document().getWindowAttributeEventListener(EventTypeNames::attribute); } \
- void setOn##attribute(PassRefPtr<EventListener> listener) { document().setWindowAttributeEventListener(EventTypeNames::attribute, listener); } \
+ void setOn##attribute(PassRefPtrWillBeRawPtr<EventListener> listener) { document().setWindowAttributeEventListener(EventTypeNames::attribute, listener); } \
#define DEFINE_STATIC_WINDOW_ATTRIBUTE_EVENT_LISTENER(attribute) \
static EventListener* on##attribute(EventTarget& eventTarget) { \
@@ -234,7 +254,7 @@ public:
ASSERT(eventTarget.toDOMWindow()); \
return eventTarget.getAttributeEventListener(EventTypeNames::attribute); \
} \
- static void setOn##attribute(EventTarget& eventTarget, PassRefPtr<EventListener> listener) { \
+ static void setOn##attribute(EventTarget& eventTarget, PassRefPtrWillBeRawPtr<EventListener> listener) { \
if (Node* node = eventTarget.toNode()) \
node->document().setWindowAttributeEventListener(EventTypeNames::attribute, listener); \
else { \
@@ -245,15 +265,15 @@ public:
#define DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER(attribute, eventName) \
EventListener* on##attribute() { return getAttributeEventListener(EventTypeNames::eventName); } \
- void setOn##attribute(PassRefPtr<EventListener> listener) { setAttributeEventListener(EventTypeNames::eventName, listener); } \
+ void setOn##attribute(PassRefPtrWillBeRawPtr<EventListener> listener) { setAttributeEventListener(EventTypeNames::eventName, listener); } \
#define DECLARE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(recipient, attribute) \
EventListener* on##attribute(); \
- void setOn##attribute(PassRefPtr<EventListener> listener);
+ void setOn##attribute(PassRefPtrWillBeRawPtr<EventListener> listener);
#define DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(type, recipient, attribute) \
EventListener* type::on##attribute() { return recipient ? recipient->getAttributeEventListener(EventTypeNames::attribute) : 0; } \
- void type::setOn##attribute(PassRefPtr<EventListener> listener) \
+ void type::setOn##attribute(PassRefPtrWillBeRawPtr<EventListener> listener) \
{ \
if (recipient) \
recipient->setAttributeEventListener(EventTypeNames::attribute, listener); \

Powered by Google App Engine
This is Rietveld 408576698