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

Side by Side Diff: Source/core/events/EventTarget.h

Issue 149803005: Remove isolated world parameters from event listener attributes (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/events/EventListener.h ('k') | Source/core/events/EventTarget.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
6 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) 6 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org)
7 * (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> 7 * (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions 10 * modification, are permitted provided that the following conditions
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 virtual MessagePort* toMessagePort(); 109 virtual MessagePort* toMessagePort();
110 110
111 virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<Even tListener>, bool useCapture); 111 virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<Even tListener>, bool useCapture);
112 virtual bool removeEventListener(const AtomicString& eventType, EventListene r*, bool useCapture); 112 virtual bool removeEventListener(const AtomicString& eventType, EventListene r*, bool useCapture);
113 virtual void removeAllEventListeners(); 113 virtual void removeAllEventListeners();
114 virtual bool dispatchEvent(PassRefPtr<Event>); 114 virtual bool dispatchEvent(PassRefPtr<Event>);
115 bool dispatchEvent(PassRefPtr<Event>, ExceptionState&); // DOM API 115 bool dispatchEvent(PassRefPtr<Event>, ExceptionState&); // DOM API
116 virtual void uncaughtExceptionInEventHandler(); 116 virtual void uncaughtExceptionInEventHandler();
117 117
118 // Used for legacy "onEvent" attribute APIs. 118 // Used for legacy "onEvent" attribute APIs.
119 bool setAttributeEventListener(const AtomicString& eventType, PassRefPtr<Eve ntListener>, DOMWrapperWorld* isolatedWorld = 0); 119 bool setAttributeEventListener(const AtomicString& eventType, PassRefPtr<Eve ntListener>);
120 EventListener* getAttributeEventListener(const AtomicString& eventType, DOMW rapperWorld* isolatedWorld = 0); 120 EventListener* getAttributeEventListener(const AtomicString& eventType);
121 121
122 bool hasEventListeners() const; 122 bool hasEventListeners() const;
123 bool hasEventListeners(const AtomicString& eventType) const; 123 bool hasEventListeners(const AtomicString& eventType) const;
124 bool hasCapturingEventListeners(const AtomicString& eventType); 124 bool hasCapturingEventListeners(const AtomicString& eventType);
125 const EventListenerVector& getEventListeners(const AtomicString& eventType); 125 const EventListenerVector& getEventListeners(const AtomicString& eventType);
126 Vector<AtomicString> eventTypes(); 126 Vector<AtomicString> eventTypes();
127 127
128 bool fireEventListeners(Event*); 128 bool fireEventListeners(Event*);
129 129
130 protected: 130 protected:
131 virtual ~EventTarget(); 131 virtual ~EventTarget();
132 132
133 // Subclasses should likely not override these themselves; instead, they sho uld subclass EventTargetWithInlineData. 133 // Subclasses should likely not override these themselves; instead, they sho uld subclass EventTargetWithInlineData.
134 virtual EventTargetData* eventTargetData() = 0; 134 virtual EventTargetData* eventTargetData() = 0;
135 virtual EventTargetData& ensureEventTargetData() = 0; 135 virtual EventTargetData& ensureEventTargetData() = 0;
136 136
137 private: 137 private:
138 // Subclasses should likely not override these themselves; instead, they sho uld use the REFCOUNTED_EVENT_TARGET() macro. 138 // Subclasses should likely not override these themselves; instead, they sho uld use the REFCOUNTED_EVENT_TARGET() macro.
139 virtual void refEventTarget() = 0; 139 virtual void refEventTarget() = 0;
140 virtual void derefEventTarget() = 0; 140 virtual void derefEventTarget() = 0;
141 141
142 DOMWindow* executingWindow(); 142 DOMWindow* executingWindow();
143 void fireEventListeners(Event*, EventTargetData*, EventListenerVector&); 143 void fireEventListeners(Event*, EventTargetData*, EventListenerVector&);
144 void countLegacyEvents(const AtomicString& legacyTypeName, EventListenerVect or*, EventListenerVector*); 144 void countLegacyEvents(const AtomicString& legacyTypeName, EventListenerVect or*, EventListenerVector*);
145 145
146 bool clearAttributeEventListener(const AtomicString& eventType, DOMWrapperWo rld* isolatedWorld); 146 bool clearAttributeEventListener(const AtomicString& eventType);
147 147
148 friend class EventListenerIterator; 148 friend class EventListenerIterator;
149 }; 149 };
150 150
151 class EventTargetWithInlineData : public EventTarget { 151 class EventTargetWithInlineData : public EventTarget {
152 protected: 152 protected:
153 virtual EventTargetData* eventTargetData() OVERRIDE FINAL { return &m_eventT argetData; } 153 virtual EventTargetData* eventTargetData() OVERRIDE FINAL { return &m_eventT argetData; }
154 virtual EventTargetData& ensureEventTargetData() OVERRIDE FINAL { return m_e ventTargetData; } 154 virtual EventTargetData& ensureEventTargetData() OVERRIDE FINAL { return m_e ventTargetData; }
155 private: 155 private:
156 EventTargetData m_eventTargetData; 156 EventTargetData m_eventTargetData;
157 }; 157 };
158 158
159 // FIXME: These macros should be split into separate DEFINE and DECLARE 159 // FIXME: These macros should be split into separate DEFINE and DECLARE
160 // macros to avoid causing so many header includes. 160 // macros to avoid causing so many header includes.
161 #define DEFINE_ATTRIBUTE_EVENT_LISTENER(attribute) \ 161 #define DEFINE_ATTRIBUTE_EVENT_LISTENER(attribute) \
162 EventListener* on##attribute(DOMWrapperWorld* isolatedWorld) { return getAtt ributeEventListener(EventTypeNames::attribute, isolatedWorld); } \ 162 EventListener* on##attribute() { return getAttributeEventListener(EventTypeN ames::attribute); } \
163 void setOn##attribute(PassRefPtr<EventListener> listener, DOMWrapperWorld* i solatedWorld = 0) { setAttributeEventListener(EventTypeNames::attribute, listene r, isolatedWorld); } \ 163 void setOn##attribute(PassRefPtr<EventListener> listener) { setAttributeEven tListener(EventTypeNames::attribute, listener); } \
164 164
165 #define DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(attribute) \ 165 #define DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(attribute) \
166 static EventListener* on##attribute(EventTarget* eventTarget, DOMWrapperWorl d* isolatedWorld) { return eventTarget->getAttributeEventListener(EventTypeNames ::attribute, isolatedWorld); } \ 166 static EventListener* on##attribute(EventTarget* eventTarget) { return event Target->getAttributeEventListener(EventTypeNames::attribute); } \
167 static void setOn##attribute(EventTarget* eventTarget, PassRefPtr<EventListe ner> listener, DOMWrapperWorld* isolatedWorld = 0) { eventTarget->setAttributeEv entListener(EventTypeNames::attribute, listener, isolatedWorld); } \ 167 static void setOn##attribute(EventTarget* eventTarget, PassRefPtr<EventListe ner> listener) { eventTarget->setAttributeEventListener(EventTypeNames::attribut e, listener); } \
168 168
169 #define DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(attribute) \ 169 #define DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(attribute) \
170 EventListener* on##attribute(DOMWrapperWorld* isolatedWorld) { return docume nt().getWindowAttributeEventListener(EventTypeNames::attribute, isolatedWorld); } \ 170 EventListener* on##attribute() { return document().getWindowAttributeEventLi stener(EventTypeNames::attribute); } \
171 void setOn##attribute(PassRefPtr<EventListener> listener, DOMWrapperWorld* i solatedWorld) { document().setWindowAttributeEventListener(EventTypeNames::attri bute, listener, isolatedWorld); } \ 171 void setOn##attribute(PassRefPtr<EventListener> listener) { document().setWi ndowAttributeEventListener(EventTypeNames::attribute, listener); } \
172 172
173 #define DEFINE_STATIC_WINDOW_ATTRIBUTE_EVENT_LISTENER(attribute) \ 173 #define DEFINE_STATIC_WINDOW_ATTRIBUTE_EVENT_LISTENER(attribute) \
174 static EventListener* on##attribute(EventTarget* eventTarget, DOMWrapperWorl d* isolatedWorld) { \ 174 static EventListener* on##attribute(EventTarget* eventTarget) { \
175 if (Node* node = eventTarget->toNode()) \ 175 if (Node* node = eventTarget->toNode()) \
176 return node->document().getWindowAttributeEventListener(EventTypeNam es::attribute, isolatedWorld); \ 176 return node->document().getWindowAttributeEventListener(EventTypeNam es::attribute); \
177 ASSERT(eventTarget->toDOMWindow()); \ 177 ASSERT(eventTarget->toDOMWindow()); \
178 return eventTarget->getAttributeEventListener(EventTypeNames::attribute, isolatedWorld); \ 178 return eventTarget->getAttributeEventListener(EventTypeNames::attribute) ; \
179 } \ 179 } \
180 static void setOn##attribute(EventTarget* eventTarget, PassRefPtr<EventListe ner> listener, DOMWrapperWorld* isolatedWorld) { \ 180 static void setOn##attribute(EventTarget* eventTarget, PassRefPtr<EventListe ner> listener) { \
181 if (Node* node = eventTarget->toNode()) \ 181 if (Node* node = eventTarget->toNode()) \
182 node->document().setWindowAttributeEventListener(EventTypeNames::att ribute, listener, isolatedWorld); \ 182 node->document().setWindowAttributeEventListener(EventTypeNames::att ribute, listener); \
183 else { \ 183 else { \
184 ASSERT(eventTarget->toDOMWindow()); \ 184 ASSERT(eventTarget->toDOMWindow()); \
185 eventTarget->setAttributeEventListener(EventTypeNames::attribute, li stener, isolatedWorld); \ 185 eventTarget->setAttributeEventListener(EventTypeNames::attribute, li stener); \
186 } \ 186 } \
187 } 187 }
188 188
189 #define DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER(attribute, eventName) \ 189 #define DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER(attribute, eventName) \
190 EventListener* on##attribute(DOMWrapperWorld* isolatedWorld) { return getAtt ributeEventListener(EventTypeNames::eventName, isolatedWorld); } \ 190 EventListener* on##attribute() { return getAttributeEventListener(EventTypeN ames::eventName); } \
191 void setOn##attribute(PassRefPtr<EventListener> listener, DOMWrapperWorld* i solatedWorld) { setAttributeEventListener(EventTypeNames::eventName, listener, i solatedWorld); } \ 191 void setOn##attribute(PassRefPtr<EventListener> listener) { setAttributeEven tListener(EventTypeNames::eventName, listener); } \
192 192
193 #define DECLARE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(recipient, attribute) \ 193 #define DECLARE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(recipient, attribute) \
194 EventListener* on##attribute(DOMWrapperWorld* isolatedWorld); \ 194 EventListener* on##attribute(); \
195 void setOn##attribute(PassRefPtr<EventListener> listener, DOMWrapperWorld* i solatedWorld); 195 void setOn##attribute(PassRefPtr<EventListener> listener);
196 196
197 #define DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(type, recipient, attribute) \ 197 #define DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(type, recipient, attribute) \
198 EventListener* type::on##attribute(DOMWrapperWorld* isolatedWorld) { return recipient ? recipient->getAttributeEventListener(EventTypeNames::attribute, isol atedWorld) : 0; } \ 198 EventListener* type::on##attribute() { return recipient ? recipient->getAttr ibuteEventListener(EventTypeNames::attribute) : 0; } \
199 void type::setOn##attribute(PassRefPtr<EventListener> listener, DOMWrapperWo rld* isolatedWorld) \ 199 void type::setOn##attribute(PassRefPtr<EventListener> listener) \
200 { \ 200 { \
201 if (recipient) \ 201 if (recipient) \
202 recipient->setAttributeEventListener(EventTypeNames::attribute, list ener, isolatedWorld); \ 202 recipient->setAttributeEventListener(EventTypeNames::attribute, list ener); \
203 } 203 }
204 204
205 inline bool EventTarget::hasEventListeners() const 205 inline bool EventTarget::hasEventListeners() const
206 { 206 {
207 // FIXME: We should have a const version of eventTargetData. 207 // FIXME: We should have a const version of eventTargetData.
208 if (const EventTargetData* d = const_cast<EventTarget*>(this)->eventTargetDa ta()) 208 if (const EventTargetData* d = const_cast<EventTarget*>(this)->eventTargetDa ta())
209 return !d->eventListenerMap.isEmpty(); 209 return !d->eventListenerMap.isEmpty();
210 return false; 210 return false;
211 } 211 }
212 212
(...skipping 23 matching lines...) Expand all
236 virtual void refEventTarget() OVERRIDE FINAL { ref(); } \ 236 virtual void refEventTarget() OVERRIDE FINAL { ref(); } \
237 virtual void derefEventTarget() OVERRIDE FINAL { deref(); } \ 237 virtual void derefEventTarget() OVERRIDE FINAL { deref(); } \
238 typedef int thisIsHereToForceASemiColonAfterThisEventTargetMacro 238 typedef int thisIsHereToForceASemiColonAfterThisEventTargetMacro
239 239
240 // Use this macro if your EventTarget subclass is also a subclass of WTF::RefCou nted. 240 // Use this macro if your EventTarget subclass is also a subclass of WTF::RefCou nted.
241 // A ref-counted class that uses a different method of refcounting should use DE FINE_EVENT_TARGET_REFCOUNTING directly. 241 // A ref-counted class that uses a different method of refcounting should use DE FINE_EVENT_TARGET_REFCOUNTING directly.
242 // Both of these macros are meant to be placed just before the "public:" section of the class declaration. 242 // Both of these macros are meant to be placed just before the "public:" section of the class declaration.
243 #define REFCOUNTED_EVENT_TARGET(className) DEFINE_EVENT_TARGET_REFCOUNTING(RefCo unted<className>) 243 #define REFCOUNTED_EVENT_TARGET(className) DEFINE_EVENT_TARGET_REFCOUNTING(RefCo unted<className>)
244 244
245 #endif // EventTarget_h 245 #endif // EventTarget_h
OLDNEW
« no previous file with comments | « Source/core/events/EventListener.h ('k') | Source/core/events/EventTarget.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698