1/*
2 * Copyright (C) 2010-2018 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
17 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
20 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
21 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 */
24
25#pragma once
26
27#include "ArgumentCoders.h"
28#include "Connection.h"
29#include <WebCore/PageIdentifier.h>
30#include <wtf/Forward.h>
31#include <wtf/ThreadSafeRefCounted.h>
32
33namespace WebKit {
34class WebGestureEvent;
35class WebTouchEvent;
36class WebWheelEvent;
37}
38
39namespace Messages {
40namespace EventDispatcher {
41
42static inline IPC::StringReference messageReceiverName()
43{
44 return IPC::StringReference("EventDispatcher");
45}
46
47class WheelEvent {
48public:
49 typedef std::tuple<const WebCore::PageIdentifier&, const WebKit::WebWheelEvent&, bool, bool, bool, bool> Arguments;
50
51 static IPC::StringReference receiverName() { return messageReceiverName(); }
52 static IPC::StringReference name() { return IPC::StringReference("WheelEvent"); }
53 static const bool isSync = false;
54
55 WheelEvent(const WebCore::PageIdentifier& pageID, const WebKit::WebWheelEvent& event, bool canRubberBandAtLeft, bool canRubberBandAtRight, bool canRubberBandAtTop, bool canRubberBandAtBottom)
56 : m_arguments(pageID, event, canRubberBandAtLeft, canRubberBandAtRight, canRubberBandAtTop, canRubberBandAtBottom)
57 {
58 }
59
60 const Arguments& arguments() const
61 {
62 return m_arguments;
63 }
64
65private:
66 Arguments m_arguments;
67};
68
69#if ENABLE(IOS_TOUCH_EVENTS)
70class TouchEvent {
71public:
72 typedef std::tuple<const WebCore::PageIdentifier&, const WebKit::WebTouchEvent&> Arguments;
73
74 static IPC::StringReference receiverName() { return messageReceiverName(); }
75 static IPC::StringReference name() { return IPC::StringReference("TouchEvent"); }
76 static const bool isSync = false;
77
78 TouchEvent(const WebCore::PageIdentifier& pageID, const WebKit::WebTouchEvent& event)
79 : m_arguments(pageID, event)
80 {
81 }
82
83 const Arguments& arguments() const
84 {
85 return m_arguments;
86 }
87
88private:
89 Arguments m_arguments;
90};
91#endif
92
93#if ENABLE(MAC_GESTURE_EVENTS)
94class GestureEvent {
95public:
96 typedef std::tuple<const WebCore::PageIdentifier&, const WebKit::WebGestureEvent&> Arguments;
97
98 static IPC::StringReference receiverName() { return messageReceiverName(); }
99 static IPC::StringReference name() { return IPC::StringReference("GestureEvent"); }
100 static const bool isSync = false;
101
102 GestureEvent(const WebCore::PageIdentifier& pageID, const WebKit::WebGestureEvent& event)
103 : m_arguments(pageID, event)
104 {
105 }
106
107 const Arguments& arguments() const
108 {
109 return m_arguments;
110 }
111
112private:
113 Arguments m_arguments;
114};
115#endif
116
117} // namespace EventDispatcher
118} // namespace Messages
119