Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(689)

Unified Diff: chrome/test/render_view_test.cc

Issue 92122: Implements keyboard events for RenderViewTest.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/render_view_test.h ('k') | chrome/test/unit/unittests.vcproj » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/render_view_test.cc
===================================================================
--- chrome/test/render_view_test.cc (revision 15745)
+++ chrome/test/render_view_test.cc (working copy)
@@ -4,12 +4,14 @@
#include "chrome/test/render_view_test.h"
+#include "chrome/common/native_web_keyboard_event.h"
#include "chrome/common/render_messages.h"
#include "chrome/browser/extensions/extension_function_dispatcher.h"
#include "chrome/renderer/extensions/event_bindings.h"
#include "chrome/renderer/extensions/extension_process_bindings.h"
#include "chrome/renderer/extensions/renderer_extension_bindings.h"
#include "chrome/renderer/js_only_v8_extensions.h"
+#include "WebKit/api/public/WebInputEvent.h"
#include "webkit/api/public/WebKit.h"
#include "webkit/api/public/WebScriptSource.h"
#include "webkit/glue/weburlrequest.h"
@@ -74,6 +76,9 @@
view_ = RenderView::Create(&render_thread_, NULL, NULL, kOpenerId,
WebPreferences(),
new SharedRenderViewCounter(0), kRouteId);
+
+ // Attach a pseudo keyboard device to this object.
+ mock_keyboard_.reset(new MockKeyboard());
}
void RenderViewTest::TearDown() {
render_thread_.SendCloseMessage();
@@ -89,4 +94,53 @@
WebKit::shutdown();
msg_loop_.RunAllPending();
+
+ mock_keyboard_.reset();
}
+
+int RenderViewTest::SendKeyEvent(MockKeyboard::Layout layout,
+ int key_code,
+ MockKeyboard::Modifiers modifiers,
+ std::wstring* output) {
+#if defined(OS_WIN)
+ // Retrieve the Unicode character for the given tuple (keyboard-layout,
+ // key-code, and modifiers).
+ // Exit when a keyboard-layout driver cannot assign a Unicode character to
+ // the tuple to prevent sending an invalid key code to the RenderView object.
+ CHECK(mock_keyboard_.get());
+ CHECK(output);
+ int length = mock_keyboard_->GetCharacters(layout, key_code, modifiers,
+ output);
+ if (length != 1)
+ return -1;
+
+ // Create IPC messages from Windows messages and send them to our
+ // back-end.
+ // A keyboard event of Windows consists of three Windows messages:
+ // WM_KEYDOWN, WM_CHAR, and WM_KEYUP.
+ // WM_KEYDOWN and WM_KEYUP sends virtual-key codes. On the other hand,
+ // WM_CHAR sends a composed Unicode character.
+ NativeWebKeyboardEvent keydown_event(NULL, WM_KEYDOWN, key_code, 0);
+ scoped_ptr<IPC::Message> keydown_message(new ViewMsg_HandleInputEvent(0));
+ keydown_message->WriteData(reinterpret_cast<const char*>(&keydown_event),
+ sizeof(WebKit::WebKeyboardEvent));
+ view_->OnHandleInputEvent(*keydown_message);
+
+ NativeWebKeyboardEvent char_event(NULL, WM_CHAR, (*output)[0], 0);
+ scoped_ptr<IPC::Message> char_message(new ViewMsg_HandleInputEvent(0));
+ char_message->WriteData(reinterpret_cast<const char*>(&char_event),
+ sizeof(WebKit::WebKeyboardEvent));
+ view_->OnHandleInputEvent(*char_message);
+
+ NativeWebKeyboardEvent keyup_event(NULL, WM_KEYUP, key_code, 0);
+ scoped_ptr<IPC::Message> keyup_message(new ViewMsg_HandleInputEvent(0));
+ keyup_message->WriteData(reinterpret_cast<const char*>(&keyup_event),
+ sizeof(WebKit::WebKeyboardEvent));
+ view_->OnHandleInputEvent(*keyup_message);
+
+ return length;
+#else
+ NOTIMPLEMENTED();
+ return L'\0';
+#endif
+}
« no previous file with comments | « chrome/test/render_view_test.h ('k') | chrome/test/unit/unittests.vcproj » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698