Make EventDispatchMediator RefCounted.
[WebKit-https.git] / Source / WebCore / dom / Event.cpp
1 /*
2  * Copyright (C) 2001 Peter Kelly (pmk@post.com)
3  * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de)
4  * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
5  * Copyright (C) 2003, 2005, 2006, 2008 Apple Inc. All rights reserved.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  */
22
23 #include "config.h"
24 #include "Event.h"
25 #include "EventDispatcher.h"
26 #include "EventTarget.h"
27
28 #include "UserGestureIndicator.h"
29 #include <wtf/CurrentTime.h>
30 #include <wtf/text/AtomicString.h>
31
32 namespace WebCore {
33
34 Event::Event()
35     : m_canBubble(false)
36     , m_cancelable(false)
37     , m_propagationStopped(false)
38     , m_immediatePropagationStopped(false)
39     , m_defaultPrevented(false)
40     , m_defaultHandled(false)
41     , m_cancelBubble(false)
42     , m_eventPhase(0)
43     , m_currentTarget(0)
44     , m_createTime(convertSecondsToDOMTimeStamp(currentTime()))
45 {
46 }
47
48 Event::Event(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg)
49     : m_type(eventType)
50     , m_canBubble(canBubbleArg)
51     , m_cancelable(cancelableArg)
52     , m_propagationStopped(false)
53     , m_immediatePropagationStopped(false)
54     , m_defaultPrevented(false)
55     , m_defaultHandled(false)
56     , m_cancelBubble(false)
57     , m_eventPhase(0)
58     , m_currentTarget(0)
59     , m_createTime(convertSecondsToDOMTimeStamp(currentTime()))
60 {
61 }
62
63 Event::~Event()
64 {
65 }
66
67 void Event::initEvent(const AtomicString& eventTypeArg, bool canBubbleArg, bool cancelableArg)
68 {
69     if (dispatched())
70         return;
71
72     m_type = eventTypeArg;
73     m_canBubble = canBubbleArg;
74     m_cancelable = cancelableArg;
75 }
76
77 bool Event::isCustomEvent() const
78 {
79     return false;
80 }
81
82 bool Event::isUIEvent() const
83 {
84     return false;
85 }
86
87 bool Event::isMouseEvent() const
88 {
89     return false;
90 }
91
92 bool Event::isMutationEvent() const
93 {
94     return false;
95 }
96
97 bool Event::isKeyboardEvent() const
98 {
99     return false;
100 }
101
102 bool Event::isTextEvent() const
103 {
104     return false;
105 }
106
107 bool Event::isCompositionEvent() const
108 {
109     return false;
110 }
111
112 bool Event::isDragEvent() const
113 {
114     return false;
115 }
116
117 bool Event::isClipboardEvent() const
118 {
119     return false;
120 }
121
122 bool Event::isWheelEvent() const
123 {
124     return false;
125 }
126
127 bool Event::isMessageEvent() const
128 {
129     return false;
130 }
131
132 bool Event::isBeforeTextInsertedEvent() const
133 {
134     return false;
135 }
136
137 bool Event::isOverflowEvent() const
138 {
139     return false;
140 }
141
142 bool Event::isPageTransitionEvent() const
143 {
144     return false;
145 }
146
147 bool Event::isPopStateEvent() const
148 {
149     return false;
150 }
151
152 bool Event::isProgressEvent() const
153 {
154     return false;
155 }
156
157 bool Event::isWebKitAnimationEvent() const
158 {
159     return false;
160 }
161
162 bool Event::isWebKitTransitionEvent() const
163 {
164     return false;
165 }
166
167 bool Event::isXMLHttpRequestProgressEvent() const
168 {
169     return false;
170 }
171
172 bool Event::isBeforeLoadEvent() const
173 {
174     return false;
175 }
176
177 bool Event::isHashChangeEvent() const
178 {
179     return false;
180 }
181
182 #if ENABLE(SVG)
183 bool Event::isSVGZoomEvent() const
184 {
185     return false;
186 }
187 #endif
188
189 #if ENABLE(DOM_STORAGE)
190 bool Event::isStorageEvent() const
191 {
192     return false;
193 }
194 #endif
195
196 #if ENABLE(INDEXED_DATABASE)
197 bool Event::isIDBVersionChangeEvent() const
198 {
199     return false;
200 }
201 #endif
202
203 bool Event::isErrorEvent() const
204 {
205     return false;
206 }
207
208 #if ENABLE(TOUCH_EVENTS)
209 bool Event::isTouchEvent() const
210 {
211     return false;
212 }
213 #endif
214
215 #if ENABLE(DEVICE_ORIENTATION)
216 bool Event::isDeviceMotionEvent() const
217 {
218     return false;
219 }
220
221 bool Event::isDeviceOrientationEvent() const
222 {
223     return false;
224 }
225 #endif
226
227 #if ENABLE(WEB_AUDIO)
228 bool Event::isAudioProcessingEvent() const
229 {
230     return false;
231 }
232
233 bool Event::isOfflineAudioCompletionEvent() const
234 {
235     return false;
236 }
237 #endif
238
239 #if ENABLE(INPUT_SPEECH)
240 bool Event::isSpeechInputEvent() const
241 {
242     return false;
243 }
244 #endif
245
246 #if ENABLE(WEB_SOCKETS)
247 bool Event::isCloseEvent() const
248 {
249     return false;
250 }
251 #endif
252
253 #if ENABLE(MEDIA_STREAM)
254 bool Event::isStreamEvent() const
255 {
256     return false;
257 }
258 #endif
259
260 bool Event::storesResultAsString() const
261 {
262     return false;
263 }
264
265 void Event::storeResult(const String&)
266 {
267 }
268
269 void Event::setTarget(PassRefPtr<EventTarget> target)
270 {
271     if (m_target == target)
272         return;
273
274     m_target = target;
275     if (m_target)
276         receivedTarget();
277 }
278
279 void Event::receivedTarget()
280 {
281 }
282
283 void Event::setUnderlyingEvent(PassRefPtr<Event> ue)
284 {
285     // Prohibit creation of a cycle -- just do nothing in that case.
286     for (Event* e = ue.get(); e; e = e->underlyingEvent())
287         if (e == this)
288             return;
289     m_underlyingEvent = ue;
290 }
291
292 PassRefPtr<EventDispatchMediator> EventDispatchMediator::create(PassRefPtr<Event> event)
293 {
294     return adoptRef(new EventDispatchMediator(event));
295 }
296
297 EventDispatchMediator::EventDispatchMediator(PassRefPtr<Event> event)
298     : m_event(event)
299 {
300 }
301
302 EventDispatchMediator::~EventDispatchMediator()
303 {
304 }
305
306 bool EventDispatchMediator::dispatchEvent(EventDispatcher* dispatcher) const
307 {
308     return dispatcher->dispatchEvent(m_event.get());
309 }
310
311 } // namespace WebCore