Expose a constructor for PointerEvent from PlatformTouchEvent
[WebKit-https.git] / Source / WebCore / dom / EventNames.h
1 /*
2  * Copyright (C) 2005, 2007, 2015 Apple Inc. All rights reserved.
3  * Copyright (C) 2006 Jon Shier (jshier@iastate.edu)
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  *
20  */
21
22 #pragma once
23
24 #include "ThreadGlobalData.h"
25 #include <array>
26 #include <functional>
27 #include <wtf/text/AtomicString.h>
28
29 namespace WebCore {
30
31 #if !defined(ADDITIONAL_DOM_EVENT_NAMES_FOR_EACH)
32 #define ADDITIONAL_DOM_EVENT_NAMES_FOR_EACH(macro)
33 #endif
34
35 #define DOM_EVENT_NAMES_FOR_EACH(macro) \
36     ADDITIONAL_DOM_EVENT_NAMES_FOR_EACH(macro) \
37     macro(DOMActivate) \
38     macro(DOMCharacterDataModified) \
39     macro(DOMContentLoaded) \
40     macro(DOMFocusIn) \
41     macro(DOMFocusOut) \
42     macro(DOMNodeInserted) \
43     macro(DOMNodeInsertedIntoDocument) \
44     macro(DOMNodeRemoved) \
45     macro(DOMNodeRemovedFromDocument) \
46     macro(DOMSubtreeModified) \
47     macro(abort) \
48     macro(accessiblecontextmenu) \
49     macro(accessibleclick) \
50     macro(accessibledecrement) \
51     macro(accessibledismiss) \
52     macro(accessiblefocus) \
53     macro(accessibleincrement) \
54     macro(accessiblescrollintoview) \
55     macro(accessiblesetvalue) \
56     macro(accessibleselect) \
57     macro(activate) \
58     macro(active) \
59     macro(addsourcebuffer) \
60     macro(addstream) \
61     macro(addtrack) \
62     macro(animationcancel) \
63     macro(animationend) \
64     macro(animationiteration) \
65     macro(animationstart) \
66     macro(audioend) \
67     macro(audioprocess) \
68     macro(audiostart) \
69     macro(autocomplete) \
70     macro(autocompleteerror) \
71     macro(beforecopy) \
72     macro(beforecut) \
73     macro(beforeinput) \
74     macro(beforeload) \
75     macro(beforepaste) \
76     macro(beforeunload) \
77     macro(beginEvent) \
78     macro(blocked) \
79     macro(blur) \
80     macro(boundary) \
81     macro(bufferedamountlow) \
82     macro(cached) \
83     macro(cancel) \
84     macro(canplay) \
85     macro(canplaythrough) \
86     macro(change) \
87     macro(chargingchange) \
88     macro(chargingtimechange) \
89     macro(checking) \
90     macro(click) \
91     macro(close) \
92     macro(complete) \
93     macro(compositionend) \
94     macro(compositionstart) \
95     macro(compositionupdate) \
96     macro(connect) \
97     macro(connectionstatechange) \
98     macro(connecting) \
99     macro(contextmenu) \
100     macro(controllerchange) \
101     macro(copy) \
102     macro(cuechange) \
103     macro(cut) \
104     macro(dataavailable) \
105     macro(datachannel) \
106     macro(dblclick) \
107     macro(devicechange) \
108     macro(devicemotion) \
109     macro(deviceorientation) \
110     macro(dischargingtimechange) \
111     macro(downloading) \
112     macro(drag) \
113     macro(dragend) \
114     macro(dragenter) \
115     macro(dragleave) \
116     macro(dragover) \
117     macro(dragstart) \
118     macro(drop) \
119     macro(durationchange) \
120     macro(emptied) \
121     macro(encrypted) \
122     macro(end) \
123     macro(endEvent) \
124     macro(ended) \
125     macro(enter) \
126     macro(error) \
127     macro(exit) \
128     macro(fetch) \
129     macro(finish) \
130     macro(focus) \
131     macro(focusin) \
132     macro(focusout) \
133     macro(gamepadconnected) \
134     macro(gamepaddisconnected) \
135     macro(gesturechange) \
136     macro(gestureend) \
137     macro(gesturescrollend) \
138     macro(gesturescrollstart) \
139     macro(gesturescrollupdate) \
140     macro(gesturestart) \
141     macro(gesturetap) \
142     macro(gesturetapdown) \
143     macro(hashchange) \
144     macro(icecandidate) \
145     macro(iceconnectionstatechange) \
146     macro(icegatheringstatechange) \
147     macro(inactive) \
148     macro(input) \
149     macro(install) \
150     macro(invalid) \
151     macro(keydown) \
152     macro(keypress) \
153     macro(keystatuseschange) \
154     macro(keyup) \
155     macro(languagechange) \
156     macro(levelchange) \
157     macro(load) \
158     macro(loadeddata) \
159     macro(loadedmetadata) \
160     macro(loadend) \
161     macro(loading) \
162     macro(loadingdone) \
163     macro(loadingerror) \
164     macro(loadstart) \
165     macro(mark) \
166     macro(merchantvalidation) \
167     macro(message) \
168     macro(messageerror) \
169     macro(mousedown) \
170     macro(mouseenter) \
171     macro(mouseleave) \
172     macro(mousemove) \
173     macro(mouseout) \
174     macro(mouseover) \
175     macro(mouseup) \
176     macro(mousewheel) \
177     macro(mute) \
178     macro(negotiationneeded) \
179     macro(nexttrack) \
180     macro(nomatch) \
181     macro(noupdate) \
182     macro(obsolete) \
183     macro(offline) \
184     macro(online) \
185     macro(open) \
186     macro(orientationchange) \
187     macro(overconstrained) \
188     macro(overflowchanged) \
189     macro(pagehide) \
190     macro(pageshow) \
191     macro(paste) \
192     macro(pause) \
193     macro(payerdetailchange) \
194     macro(paymentauthorized) \
195     macro(paymentmethodchange) \
196     macro(paymentmethodselected) \
197     macro(play) \
198     macro(playing) \
199     macro(pointerlockchange) \
200     macro(pointerlockerror) \
201     macro(pointercancel) \
202     macro(pointerdown) \
203     macro(pointermove) \
204     macro(pointerup) \
205     macro(popstate) \
206     macro(previoustrack) \
207     macro(progress) \
208     macro(ratechange) \
209     macro(readystatechange) \
210     macro(rejectionhandled) \
211     macro(removesourcebuffer) \
212     macro(removestream) \
213     macro(removetrack) \
214     macro(reset) \
215     macro(resize) \
216     macro(resourcetimingbufferfull) \
217     macro(result) \
218     macro(resume) \
219     macro(scroll) \
220     macro(search) \
221     macro(securitypolicyviolation) \
222     macro(seeked) \
223     macro(seeking) \
224     macro(select) \
225     macro(selectionchange) \
226     macro(selectstart) \
227     macro(shippingaddresschange) \
228     macro(shippingcontactselected) \
229     macro(shippingmethodselected) \
230     macro(shippingoptionchange) \
231     macro(show) \
232     macro(signalingstatechange) \
233     macro(slotchange) \
234     macro(soundend) \
235     macro(soundstart) \
236     macro(sourceclose) \
237     macro(sourceended) \
238     macro(sourceopen) \
239     macro(speechend) \
240     macro(speechstart) \
241     macro(stalled) \
242     macro(start) \
243     macro(started) \
244     macro(statechange) \
245     macro(stop) \
246     macro(storage) \
247     macro(submit) \
248     macro(success) \
249     macro(suspend) \
250     macro(textInput) \
251     macro(timeout) \
252     macro(timeupdate) \
253     macro(toggle) \
254     macro(tonechange) \
255     macro(touchcancel) \
256     macro(touchend) \
257     macro(touchforcechange) \
258     macro(touchmove) \
259     macro(touchstart) \
260     macro(track) \
261     macro(transitioncancel) \
262     macro(transitionend) \
263     macro(transitionrun) \
264     macro(transitionstart) \
265     macro(unhandledrejection) \
266     macro(unload) \
267     macro(unmute) \
268     macro(update) \
269     macro(updateend) \
270     macro(updatefound) \
271     macro(updateready) \
272     macro(updatestart) \
273     macro(upgradeneeded) \
274     macro(validatemerchant) \
275     macro(versionchange) \
276     macro(visibilitychange) \
277     macro(volumechange) \
278     macro(vrdisplayactivate) \
279     macro(vrdisplayblur) \
280     macro(vrdisplayconnect) \
281     macro(vrdisplaydeactivate) \
282     macro(vrdisplaydisconnect) \
283     macro(vrdisplayfocus) \
284     macro(vrdisplaypresentchange) \
285     macro(waiting) \
286     macro(waitingforkey) \
287     macro(webglcontextchanged) \
288     macro(webglcontextcreationerror) \
289     macro(webglcontextlost) \
290     macro(webglcontextrestored) \
291     macro(webkitAnimationEnd) \
292     macro(webkitAnimationIteration) \
293     macro(webkitAnimationStart) \
294     macro(webkitBeforeTextInserted) \
295     macro(webkitEditableContentChanged) \
296     macro(webkitTransitionEnd) \
297     macro(webkitbeginfullscreen) \
298     macro(webkitcurrentplaybacktargetiswirelesschanged) \
299     macro(webkitendfullscreen) \
300     macro(webkitfullscreenchange) \
301     macro(webkitfullscreenerror) \
302     macro(webkitkeyadded) \
303     macro(webkitkeyerror) \
304     macro(webkitkeymessage) \
305     macro(webkitmouseforcechanged) \
306     macro(webkitmouseforcedown) \
307     macro(webkitmouseforcewillbegin) \
308     macro(webkitmouseforceup) \
309     macro(webkitneedkey) \
310     macro(webkitnetworkinfochange) \
311     macro(webkitplaybacktargetavailabilitychanged) \
312     macro(webkitpresentationmodechanged) \
313     macro(webkitregionoversetchange) \
314     macro(webkitremovesourcebuffer) \
315     macro(webkitsourceclose) \
316     macro(webkitsourceended) \
317     macro(webkitsourceopen) \
318     macro(webkitspeechchange) \
319     macro(webkitwillrevealbottom) \
320     macro(webkitwillrevealleft) \
321     macro(webkitwillrevealright) \
322     macro(webkitwillrevealtop) \
323     macro(wheel) \
324     macro(write) \
325     macro(writeend) \
326     macro(writestart) \
327     macro(zoom) \
328 // end of DOM_EVENT_NAMES_FOR_EACH
329
330 struct EventNames {
331     WTF_MAKE_NONCOPYABLE(EventNames); WTF_MAKE_FAST_ALLOCATED;
332
333 public:
334 #define DOM_EVENT_NAMES_DECLARE(name) const AtomicString name##Event;
335     DOM_EVENT_NAMES_FOR_EACH(DOM_EVENT_NAMES_DECLARE)
336 #undef DOM_EVENT_NAMES_DECLARE
337
338     // FIXME: The friend declaration to std::make_unique below does not work in windows port.
339     //
340     // template<class T, class... Args>
341     // friend typename std::_Unique_if<T>::_Single_object std::make_unique(Args&&...);
342     //
343     // This create function should be deleted later and is only for keeping EventNames as private.
344     // std::make_unique should be used instead.
345     //
346     template<class... Args>
347     static std::unique_ptr<EventNames> create(Args&&... args)
348     {
349         return std::unique_ptr<EventNames>(new EventNames(std::forward<Args>(args)...));
350     }
351
352     // FIXME: Inelegant to call these both event names and event types.
353     // We should choose one term and stick to it.
354     bool isWheelEventType(const AtomicString& eventType) const;
355     bool isGestureEventType(const AtomicString& eventType) const;
356     bool isTouchEventType(const AtomicString& eventType) const;
357     bool isTouchScrollBlockingEventType(const AtomicString& eventType) const;
358 #if ENABLE(GAMEPAD)
359     bool isGamepadEventType(const AtomicString& eventType) const;
360 #endif
361
362     std::array<std::reference_wrapper<const AtomicString>, 5> touchEventNames() const;
363     std::array<std::reference_wrapper<const AtomicString>, 3> gestureEventNames() const;
364
365 private:
366     EventNames(); // Private to prevent accidental call to EventNames() instead of eventNames().
367     friend class ThreadGlobalData; // Allow ThreadGlobalData to create the per-thread EventNames object.
368
369     int dummy; // Needed to make initialization macro work.
370 };
371
372 const EventNames& eventNames();
373
374 inline const EventNames& eventNames()
375 {
376     return threadGlobalData().eventNames();
377 }
378
379 inline bool EventNames::isGestureEventType(const AtomicString& eventType) const
380 {
381     return eventType == gesturestartEvent || eventType == gesturechangeEvent || eventType == gestureendEvent;
382 }
383
384 inline bool EventNames::isTouchScrollBlockingEventType(const AtomicString& eventType) const
385 {
386     return eventType == touchstartEvent
387         || eventType == touchmoveEvent;
388 }
389
390 inline bool EventNames::isTouchEventType(const AtomicString& eventType) const
391 {
392     return eventType == touchstartEvent
393         || eventType == touchmoveEvent
394         || eventType == touchendEvent
395         || eventType == touchcancelEvent
396         || eventType == touchforcechangeEvent;
397 }
398
399 inline bool EventNames::isWheelEventType(const AtomicString& eventType) const
400 {
401     return eventType == wheelEvent
402         || eventType == mousewheelEvent;
403 }
404
405 inline std::array<std::reference_wrapper<const AtomicString>, 5> EventNames::touchEventNames() const
406 {
407     return { { touchstartEvent, touchmoveEvent, touchendEvent, touchcancelEvent, touchforcechangeEvent } };
408 }
409
410 inline std::array<std::reference_wrapper<const AtomicString>, 3> EventNames::gestureEventNames() const
411 {
412     return { { gesturestartEvent, gesturechangeEvent, gestureendEvent } };
413 }
414
415 #if ENABLE(GAMEPAD)
416
417 inline bool EventNames::isGamepadEventType(const AtomicString& eventType) const
418 {
419     return eventType == gamepadconnectedEvent
420         || eventType == gamepaddisconnectedEvent;
421 }
422
423 #endif
424
425 } // namespace WebCore