[iOS][WK2] KeyboardEvent.key always returns an empty string
[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 #elif PLATFORM(IOS)
81
82 WebKeyboardEvent::WebKeyboardEvent(Type type, const String& text, const String& unmodifiedText, const String& key, 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_key(key)
87     , m_keyIdentifier(keyIdentifier)
88     , m_windowsVirtualKeyCode(windowsVirtualKeyCode)
89     , m_nativeVirtualKeyCode(nativeVirtualKeyCode)
90     , m_macCharCode(macCharCode)
91     , m_isAutoRepeat(isAutoRepeat)
92     , m_isKeypad(isKeypad)
93     , m_isSystemKey(isSystemKey)
94 {
95     ASSERT(isKeyboardEventType(type));
96 }
97
98 #else
99
100 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)
101     : WebEvent(type, modifiers, timestamp)
102     , m_text(text)
103     , m_unmodifiedText(unmodifiedText)
104     , m_keyIdentifier(keyIdentifier)
105     , m_windowsVirtualKeyCode(windowsVirtualKeyCode)
106     , m_nativeVirtualKeyCode(nativeVirtualKeyCode)
107     , m_macCharCode(macCharCode)
108     , m_isAutoRepeat(isAutoRepeat)
109     , m_isKeypad(isKeypad)
110     , m_isSystemKey(isSystemKey)
111 {
112     ASSERT(isKeyboardEventType(type));
113 }
114
115 #endif
116
117 WebKeyboardEvent::~WebKeyboardEvent()
118 {
119 }
120
121 void WebKeyboardEvent::encode(IPC::Encoder& encoder) const
122 {
123     WebEvent::encode(encoder);
124
125     encoder << m_text;
126     encoder << m_unmodifiedText;
127 #if ENABLE(KEYBOARD_KEY_ATTRIBUTE)
128     encoder << m_key;
129 #endif
130 #if ENABLE(KEYBOARD_CODE_ATTRIBUTE)
131     encoder << m_code;
132 #endif
133     encoder << m_keyIdentifier;
134     encoder << m_windowsVirtualKeyCode;
135     encoder << m_nativeVirtualKeyCode;
136     encoder << m_macCharCode;
137 #if USE(APPKIT) || PLATFORM(GTK)
138     encoder << m_handledByInputMethod;
139     encoder << m_commands;
140 #endif
141     encoder << m_isAutoRepeat;
142     encoder << m_isKeypad;
143     encoder << m_isSystemKey;
144 }
145
146 bool WebKeyboardEvent::decode(IPC::Decoder& decoder, WebKeyboardEvent& result)
147 {
148     if (!WebEvent::decode(decoder, result))
149         return false;
150
151     if (!decoder.decode(result.m_text))
152         return false;
153     if (!decoder.decode(result.m_unmodifiedText))
154         return false;
155 #if ENABLE(KEYBOARD_KEY_ATTRIBUTE)
156     if (!decoder.decode(result.m_key))
157         return false;
158 #endif
159 #if ENABLE(KEYBOARD_CODE_ATTRIBUTE)
160     if (!decoder.decode(result.m_code))
161         return false;
162 #endif
163     if (!decoder.decode(result.m_keyIdentifier))
164         return false;
165     if (!decoder.decode(result.m_windowsVirtualKeyCode))
166         return false;
167     if (!decoder.decode(result.m_nativeVirtualKeyCode))
168         return false;
169     if (!decoder.decode(result.m_macCharCode))
170         return false;
171 #if USE(APPKIT) || PLATFORM(GTK)
172     if (!decoder.decode(result.m_handledByInputMethod))
173         return false;
174     if (!decoder.decode(result.m_commands))
175         return false;
176 #endif
177     if (!decoder.decode(result.m_isAutoRepeat))
178         return false;
179     if (!decoder.decode(result.m_isKeypad))
180         return false;
181     if (!decoder.decode(result.m_isSystemKey))
182         return false;
183
184     return true;
185 }
186
187 bool WebKeyboardEvent::isKeyboardEventType(Type type)
188 {
189     return type == RawKeyDown || type == KeyDown || type == KeyUp || type == Char;
190 }
191
192 } // namespace WebKit