a6cbcabce2ac87c4e26596eefa0d82fbfddb1955
[WebKit-https.git] / Source / WebKit2 / Shared / WebKeyboardEvent.cpp
1 /*
2  * Copyright (C) 2010 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''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "WebEvent.h"
28
29 #include "WebCoreArgumentCoders.h"
30 #include <WebCore/KeypressCommand.h>
31
32 namespace WebKit {
33
34 WebKeyboardEvent::WebKeyboardEvent()
35 {
36 }
37
38 #if USE(APPKIT)
39
40 WebKeyboardEvent::WebKeyboardEvent(Type type, const String& text, const String& unmodifiedText, const String& key, const String& code, const String& keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, int macCharCode, bool handledByInputMethod, const Vector<WebCore::KeypressCommand>& commands, bool isAutoRepeat, bool isKeypad, bool isSystemKey, Modifiers modifiers, double timestamp)
41     : WebEvent(type, modifiers, timestamp)
42     , m_text(text)
43     , m_unmodifiedText(unmodifiedText)
44     , m_key(key)
45     , m_code(code)
46     , m_keyIdentifier(keyIdentifier)
47     , m_windowsVirtualKeyCode(windowsVirtualKeyCode)
48     , m_nativeVirtualKeyCode(nativeVirtualKeyCode)
49     , m_macCharCode(macCharCode)
50     , m_handledByInputMethod(handledByInputMethod)
51     , m_commands(commands)
52     , m_isAutoRepeat(isAutoRepeat)
53     , m_isKeypad(isKeypad)
54     , m_isSystemKey(isSystemKey)
55 {
56     ASSERT(isKeyboardEventType(type));
57 }
58
59 #elif PLATFORM(GTK)
60
61 WebKeyboardEvent::WebKeyboardEvent(Type type, const String& text, const String& key, const String& code, const String& keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, bool handledByInputMethod, Vector<String>&& commands, bool isKeypad, Modifiers modifiers, double timestamp)
62     : WebEvent(type, modifiers, timestamp)
63     , m_text(text)
64     , m_unmodifiedText(text)
65     , m_key(key)
66     , m_code(code)
67     , m_keyIdentifier(keyIdentifier)
68     , m_windowsVirtualKeyCode(windowsVirtualKeyCode)
69     , m_nativeVirtualKeyCode(nativeVirtualKeyCode)
70     , m_macCharCode(0)
71     , m_handledByInputMethod(handledByInputMethod)
72     , m_commands(WTFMove(commands))
73     , m_isAutoRepeat(false)
74     , m_isKeypad(isKeypad)
75     , m_isSystemKey(false)
76 {
77     ASSERT(isKeyboardEventType(type));
78 }
79
80 #else
81
82 WebKeyboardEvent::WebKeyboardEvent(Type type, const String& text, const String& unmodifiedText, const String& keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, int macCharCode, bool isAutoRepeat, bool isKeypad, bool isSystemKey, Modifiers modifiers, double timestamp)
83     : WebEvent(type, modifiers, timestamp)
84     , m_text(text)
85     , m_unmodifiedText(unmodifiedText)
86     , m_keyIdentifier(keyIdentifier)
87     , m_windowsVirtualKeyCode(windowsVirtualKeyCode)
88     , m_nativeVirtualKeyCode(nativeVirtualKeyCode)
89     , m_macCharCode(macCharCode)
90     , m_isAutoRepeat(isAutoRepeat)
91     , m_isKeypad(isKeypad)
92     , m_isSystemKey(isSystemKey)
93 {
94     ASSERT(isKeyboardEventType(type));
95 }
96
97 #endif
98
99 WebKeyboardEvent::~WebKeyboardEvent()
100 {
101 }
102
103 void WebKeyboardEvent::encode(IPC::Encoder& encoder) const
104 {
105     WebEvent::encode(encoder);
106
107     encoder << m_text;
108     encoder << m_unmodifiedText;
109 #if ENABLE(KEYBOARD_KEY_ATTRIBUTE)
110     encoder << m_key;
111 #endif
112 #if ENABLE(KEYBOARD_CODE_ATTRIBUTE)
113     encoder << m_code;
114 #endif
115     encoder << m_keyIdentifier;
116     encoder << m_windowsVirtualKeyCode;
117     encoder << m_nativeVirtualKeyCode;
118     encoder << m_macCharCode;
119 #if USE(APPKIT) || PLATFORM(GTK)
120     encoder << m_handledByInputMethod;
121     encoder << m_commands;
122 #endif
123     encoder << m_isAutoRepeat;
124     encoder << m_isKeypad;
125     encoder << m_isSystemKey;
126 }
127
128 bool WebKeyboardEvent::decode(IPC::Decoder& decoder, WebKeyboardEvent& result)
129 {
130     if (!WebEvent::decode(decoder, result))
131         return false;
132
133     if (!decoder.decode(result.m_text))
134         return false;
135     if (!decoder.decode(result.m_unmodifiedText))
136         return false;
137 #if ENABLE(KEYBOARD_KEY_ATTRIBUTE)
138     if (!decoder.decode(result.m_key))
139         return false;
140 #endif
141 #if ENABLE(KEYBOARD_CODE_ATTRIBUTE)
142     if (!decoder.decode(result.m_code))
143         return false;
144 #endif
145     if (!decoder.decode(result.m_keyIdentifier))
146         return false;
147     if (!decoder.decode(result.m_windowsVirtualKeyCode))
148         return false;
149     if (!decoder.decode(result.m_nativeVirtualKeyCode))
150         return false;
151     if (!decoder.decode(result.m_macCharCode))
152         return false;
153 #if USE(APPKIT) || PLATFORM(GTK)
154     if (!decoder.decode(result.m_handledByInputMethod))
155         return false;
156     if (!decoder.decode(result.m_commands))
157         return false;
158 #endif
159     if (!decoder.decode(result.m_isAutoRepeat))
160         return false;
161     if (!decoder.decode(result.m_isKeypad))
162         return false;
163     if (!decoder.decode(result.m_isSystemKey))
164         return false;
165
166     return true;
167 }
168
169 bool WebKeyboardEvent::isKeyboardEventType(Type type)
170 {
171     return type == RawKeyDown || type == KeyDown || type == KeyUp || type == Char;
172 }
173
174 } // namespace WebKit