OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/test/render_view_test.h" | 5 #include "content/test/render_view_test.h" |
6 | 6 |
7 #include "content/common/dom_storage_common.h" | 7 #include "content/common/dom_storage_common.h" |
8 #include "content/common/view_messages.h" | 8 #include "content/common/view_messages.h" |
9 #include "content/public/browser/native_web_keyboard_event.h" | 9 #include "content/public/browser/native_web_keyboard_event.h" |
10 #include "content/public/common/renderer_preferences.h" | 10 #include "content/public/common/renderer_preferences.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 #if defined(OS_LINUX) && !defined(USE_AURA) | 23 #if defined(OS_LINUX) && !defined(USE_AURA) |
24 #include "ui/base/gtk/event_synthesis_gtk.h" | 24 #include "ui/base/gtk/event_synthesis_gtk.h" |
25 #endif | 25 #endif |
26 | 26 |
27 #if defined(USE_AURA) | 27 #if defined(USE_AURA) |
28 #include "ui/aura/event.h" | 28 #include "ui/aura/event.h" |
29 #endif | 29 #endif |
30 | 30 |
31 #if defined(USE_AURA) && defined(USE_X11) | 31 #if defined(USE_AURA) && defined(USE_X11) |
32 #include <X11/Xlib.h> | 32 #include <X11/Xlib.h> |
33 #include <X11/keysym.h> | |
34 #include "ui/base/events.h" | 33 #include "ui/base/events.h" |
35 #include "ui/base/keycodes/keyboard_code_conversion.h" | 34 #include "ui/base/keycodes/keyboard_code_conversion.h" |
36 #include "ui/base/keycodes/keyboard_code_conversion_x.h" | |
37 #include "ui/base/x/x11_util.h" | 35 #include "ui/base/x/x11_util.h" |
38 #endif | 36 #endif |
39 | 37 |
40 using WebKit::WebFrame; | 38 using WebKit::WebFrame; |
41 using WebKit::WebInputEvent; | 39 using WebKit::WebInputEvent; |
42 using WebKit::WebMouseEvent; | 40 using WebKit::WebMouseEvent; |
43 using WebKit::WebScriptController; | 41 using WebKit::WebScriptController; |
44 using WebKit::WebScriptSource; | 42 using WebKit::WebScriptSource; |
45 using WebKit::WebString; | 43 using WebKit::WebString; |
46 using WebKit::WebURLRequest; | 44 using WebKit::WebURLRequest; |
47 | 45 |
48 namespace { | 46 namespace { |
49 const int32 kOpenerId = 7; | 47 const int32 kOpenerId = 7; |
50 const int32 kRouteId = 5; | 48 const int32 kRouteId = 5; |
51 | 49 |
52 #if defined(USE_AURA) && defined(USE_X11) | 50 #if defined(USE_AURA) && defined(USE_X11) |
53 // Converts ui::EventType to XKeyEvent state. | |
54 unsigned int XKeyEventState(int flags) { | |
55 return | |
56 ((flags & ui::EF_SHIFT_DOWN) ? ShiftMask : 0) | | |
57 ((flags & ui::EF_CONTROL_DOWN) ? ControlMask : 0) | | |
58 ((flags & ui::EF_CAPS_LOCK_DOWN) ? LockMask : 0); | |
59 } | |
60 | |
61 // Converts ui::EventType to XKeyEvent type. | |
62 int XKeyEventType(ui::EventType type) { | |
63 switch (type) { | |
64 case ui::ET_KEY_PRESSED: | |
65 return KeyPress; | |
66 case ui::ET_KEY_RELEASED: | |
67 return KeyRelease; | |
68 default: | |
69 return 0; | |
70 } | |
71 } | |
72 | |
73 // Converts ui::KeyboardCode to XKeyEvent keycode. | |
74 unsigned int XKeyEventKeyCode(ui::KeyboardCode key_code, | |
75 int flags, | |
76 Display* display) { | |
77 const int keysym = ui::XKeysymForWindowsKeyCode(key_code, | |
78 flags & ui::EF_SHIFT_DOWN); | |
79 // The test assumes the keycode for XK_less is equal to the one of XK_comma, | |
80 // but XKeysymToKeycode returns 94 for XK_less while it returns 59 for | |
81 // XK_comma. Here we convert the value for XK_less to the value for XK_comma. | |
82 return (keysym == XK_less) ? 59 : XKeysymToKeycode(display, keysym); | |
83 } | |
84 | |
85 // Creates a fake XEvent for testing. | |
86 XEvent* CreateFakeXEvent(ui::EventType type, | |
87 ui::KeyboardCode key_code, | |
88 int flags) { | |
89 Display* display = ui::GetXDisplay(); | |
90 XKeyEvent key_event; | |
91 key_event.type = XKeyEventType(type); | |
92 key_event.serial = 0; | |
93 key_event.send_event = 0; | |
94 key_event.display = display; | |
95 key_event.time = 0; | |
96 key_event.window = 0; | |
97 key_event.root = 0; | |
98 key_event.subwindow = 0; | |
99 key_event.x = 0; | |
100 key_event.y = 0; | |
101 key_event.x_root = 0; | |
102 key_event.y_root = 0; | |
103 key_event.state = XKeyEventState(flags); | |
104 key_event.keycode = XKeyEventKeyCode(key_code, flags, display); | |
105 key_event.same_screen = 1; | |
106 XEvent* event = new XEvent; | |
107 event->type = key_event.type; | |
108 event->xkey = key_event; | |
109 return event; | |
110 } | |
111 | |
112 // Converts MockKeyboard::Modifiers to ui::EventFlags. | 51 // Converts MockKeyboard::Modifiers to ui::EventFlags. |
113 int ConvertMockKeyboardModifier(MockKeyboard::Modifiers modifiers) { | 52 int ConvertMockKeyboardModifier(MockKeyboard::Modifiers modifiers) { |
114 static struct ModifierMap { | 53 static struct ModifierMap { |
115 MockKeyboard::Modifiers src; | 54 MockKeyboard::Modifiers src; |
116 int dst; | 55 int dst; |
117 } kModifierMap[] = { | 56 } kModifierMap[] = { |
118 { MockKeyboard::LEFT_SHIFT, ui::EF_SHIFT_DOWN }, | 57 { MockKeyboard::LEFT_SHIFT, ui::EF_SHIFT_DOWN }, |
119 { MockKeyboard::RIGHT_SHIFT, ui::EF_SHIFT_DOWN }, | 58 { MockKeyboard::RIGHT_SHIFT, ui::EF_SHIFT_DOWN }, |
120 { MockKeyboard::LEFT_CONTROL, ui::EF_CONTROL_DOWN }, | 59 { MockKeyboard::LEFT_CONTROL, ui::EF_CONTROL_DOWN }, |
121 { MockKeyboard::RIGHT_CONTROL, ui::EF_CONTROL_DOWN }, | 60 { MockKeyboard::RIGHT_CONTROL, ui::EF_CONTROL_DOWN }, |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 #endif | 238 #endif |
300 SendNativeKeyEvent(keyup_event); | 239 SendNativeKeyEvent(keyup_event); |
301 | 240 |
302 return length; | 241 return length; |
303 #elif defined(USE_AURA) && defined(USE_X11) | 242 #elif defined(USE_AURA) && defined(USE_X11) |
304 // We ignore |layout|, which means we are only testing the layout of the | 243 // We ignore |layout|, which means we are only testing the layout of the |
305 // current locale. TODO(mazda): fix this to respect |layout|. | 244 // current locale. TODO(mazda): fix this to respect |layout|. |
306 CHECK(output); | 245 CHECK(output); |
307 const int flags = ConvertMockKeyboardModifier(modifiers); | 246 const int flags = ConvertMockKeyboardModifier(modifiers); |
308 | 247 |
309 scoped_ptr<XEvent> xevent1(CreateFakeXEvent( | 248 XEvent xevent1; |
310 ui::ET_KEY_PRESSED, | 249 InitXKeyEventForTesting(ui::ET_KEY_PRESSED, |
311 static_cast<ui::KeyboardCode>(key_code), | 250 static_cast<ui::KeyboardCode>(key_code), |
312 flags)); | 251 flags, |
313 aura::KeyEvent event1(xevent1.get(), false); | 252 &xevent1); |
| 253 aura::KeyEvent event1(&xevent1, false); |
314 NativeWebKeyboardEvent keydown_event(&event1); | 254 NativeWebKeyboardEvent keydown_event(&event1); |
315 SendNativeKeyEvent(keydown_event); | 255 SendNativeKeyEvent(keydown_event); |
316 | 256 |
317 scoped_ptr<XEvent> xevent2(CreateFakeXEvent( | 257 XEvent xevent2; |
318 ui::ET_KEY_PRESSED, | 258 InitXKeyEventForTesting(ui::ET_KEY_PRESSED, |
319 static_cast<ui::KeyboardCode>(key_code), | 259 static_cast<ui::KeyboardCode>(key_code), |
320 flags)); | 260 flags, |
321 aura::KeyEvent event2(xevent2.get(), true); | 261 &xevent2); |
| 262 aura::KeyEvent event2(&xevent2, true); |
322 NativeWebKeyboardEvent char_event(&event2); | 263 NativeWebKeyboardEvent char_event(&event2); |
323 SendNativeKeyEvent(char_event); | 264 SendNativeKeyEvent(char_event); |
324 | 265 |
325 scoped_ptr<XEvent> xevent3(CreateFakeXEvent( | 266 XEvent xevent3; |
326 ui::ET_KEY_RELEASED, | 267 InitXKeyEventForTesting(ui::ET_KEY_RELEASED, |
327 static_cast<ui::KeyboardCode>(key_code), | 268 static_cast<ui::KeyboardCode>(key_code), |
328 flags)); | 269 flags, |
329 aura::KeyEvent event3(xevent3.get(), false); | 270 &xevent3); |
| 271 aura::KeyEvent event3(&xevent3, false); |
330 NativeWebKeyboardEvent keyup_event(&event3); | 272 NativeWebKeyboardEvent keyup_event(&event3); |
331 SendNativeKeyEvent(keyup_event); | 273 SendNativeKeyEvent(keyup_event); |
332 | 274 |
333 long c = GetCharacterFromKeyCode(static_cast<ui::KeyboardCode>(key_code), | 275 long c = GetCharacterFromKeyCode(static_cast<ui::KeyboardCode>(key_code), |
334 flags); | 276 flags); |
335 output->assign(1, static_cast<char16>(c)); | 277 output->assign(1, static_cast<char16>(c)); |
336 return 1; | 278 return 1; |
337 #elif defined(OS_LINUX) | 279 #elif defined(OS_LINUX) |
338 // We ignore |layout|, which means we are only testing the layout of the | 280 // We ignore |layout|, which means we are only testing the layout of the |
339 // current locale. TODO(estade): fix this to respect |layout|. | 281 // current locale. TODO(estade): fix this to respect |layout|. |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_); | 428 RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_); |
487 impl->set_send_content_state_immediately(true); | 429 impl->set_send_content_state_immediately(true); |
488 } | 430 } |
489 | 431 |
490 WebKit::WebWidget* RenderViewTest::GetWebWidget() { | 432 WebKit::WebWidget* RenderViewTest::GetWebWidget() { |
491 RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_); | 433 RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_); |
492 return impl->webwidget(); | 434 return impl->webwidget(); |
493 } | 435 } |
494 | 436 |
495 } // namespace content | 437 } // namespace content |
OLD | NEW |