| 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 |