| Index: webkit/tools/test_shell/event_sending_controller.cc
|
| ===================================================================
|
| --- webkit/tools/test_shell/event_sending_controller.cc (revision 1852)
|
| +++ webkit/tools/test_shell/event_sending_controller.cc (working copy)
|
| @@ -16,11 +16,14 @@
|
|
|
| #include "webkit/tools/test_shell/event_sending_controller.h"
|
|
|
| +#if defined(OS_WIN)
|
| #include <objidl.h>
|
| +#endif
|
| #include <queue>
|
|
|
| #include "base/ref_counted.h"
|
| #include "base/string_util.h"
|
| +#include "base/time.h"
|
| #include "webkit/glue/webview.h"
|
| #include "webkit/tools/test_shell/test_shell.h"
|
|
|
| @@ -34,7 +37,12 @@
|
|
|
| namespace {
|
|
|
| +#if defined(OS_WIN)
|
| static scoped_refptr<IDataObject> drag_data_object;
|
| +#elif defined(OS_MACOSX)
|
| +// Throughout this file, drag support is #ifdef-ed out. TODO(port): Add it in
|
| +// for the Mac.
|
| +#endif
|
| static bool replaying_saved_events = false;
|
| static std::queue<WebMouseEvent> mouse_event_queue;
|
|
|
| @@ -59,7 +67,9 @@
|
| static uint32 time_offset_ms = 0;
|
|
|
| double GetCurrentEventTimeSec() {
|
| - return (GetTickCount() + time_offset_ms) / 1000.0;
|
| + return (TimeTicks::Now().ToInternalValue()
|
| + / Time::kMicrosecondsPerMillisecond +
|
| + time_offset_ms) / 1000.0;
|
| }
|
|
|
| void AdvanceEventTime(int32 delta_ms) {
|
| @@ -90,7 +100,9 @@
|
| event->modifiers |= WebInputEvent::SHIFT_KEY;
|
| } else if (!wcscmp(arg_string, L"altKey")) {
|
| event->modifiers |= WebInputEvent::ALT_KEY;
|
| +#if defined(OS_WIN)
|
| event->system_key = true;
|
| +#endif
|
| } else if (!wcscmp(arg_string, L"metaKey")) {
|
| event->modifiers |= WebInputEvent::META_KEY;
|
| }
|
| @@ -129,8 +141,10 @@
|
|
|
| void EventSendingController::Reset() {
|
| // The test should have finished a drag and the mouse button state.
|
| +#if defined(OS_WIN)
|
| DCHECK(!drag_data_object);
|
| drag_data_object = NULL;
|
| +#endif
|
| pressed_button_ = WebMouseEvent::BUTTON_NONE;
|
| dragMode.Set(true);
|
| last_click_time_sec = 0;
|
| @@ -141,6 +155,7 @@
|
| return shell_->webView();
|
| }
|
|
|
| +#if defined(OS_WIN)
|
| /* static */ void EventSendingController::DoDragDrop(IDataObject* data_obj) {
|
| drag_data_object = data_obj;
|
|
|
| @@ -153,6 +168,7 @@
|
| // Finish processing events.
|
| ReplaySavedEvents();
|
| }
|
| +#endif
|
|
|
| // static
|
| WebMouseEvent::Button EventSendingController::GetButtonTypeFromSingleArg(
|
| @@ -219,6 +235,7 @@
|
| webview()->HandleInputEvent(&e);
|
| pressed_button_ = WebMouseEvent::BUTTON_NONE;
|
|
|
| +#if defined(OS_WIN)
|
| // If we're in a drag operation, complete it.
|
| if (drag_data_object) {
|
| TestWebViewDelegate* delegate = shell_->delegate();
|
| @@ -240,6 +257,7 @@
|
| }
|
| drag_data_object = NULL;
|
| }
|
| +#endif
|
| }
|
|
|
| void EventSendingController::mouseMoveTo(
|
| @@ -266,6 +284,7 @@
|
| /* static */ void EventSendingController::DoMouseMove(const WebMouseEvent& e) {
|
| webview()->HandleInputEvent(&e);
|
|
|
| +#if defined(OS_WIN)
|
| if (pressed_button_ != WebMouseEvent::BUTTON_NONE && drag_data_object) {
|
| TestWebViewDelegate* delegate = shell_->delegate();
|
| // Get screen mouse position.
|
| @@ -280,6 +299,7 @@
|
|
|
| delegate->drag_delegate()->GiveFeedback(effect);
|
| }
|
| +#endif
|
| }
|
|
|
| void EventSendingController::keyDown(
|
| @@ -292,8 +312,10 @@
|
| static const int kLeftParenthesesVirtualKeyCode = 0x28;
|
| static const int kRightParenthesesVirtualKeyCode = 0x29;
|
|
|
| +#if defined(OS_WIN)
|
| static const int kLeftCurlyBracketVirtualKeyCode = 0x7B;
|
| static const int kRightCurlyBracketVirtualKeyCode = 0x7D;
|
| +#endif
|
|
|
| bool generate_char = false;
|
|
|
| @@ -307,6 +329,7 @@
|
| // Windows uses \r for "Enter".
|
| wchar_t code;
|
| bool needs_shift_key_modifier = false;
|
| +#if defined(OS_WIN)
|
| if (L"\n" == code_str) {
|
| generate_char = true;
|
| code = VK_RETURN;
|
| @@ -320,7 +343,30 @@
|
| code = VK_UP;
|
| } else if (L"delete" == code_str) {
|
| code = VK_BACK;
|
| - } else {
|
| + }
|
| +#elif defined(OS_MACOSX)
|
| + // I don't quite understand this code enough to change the way it works. As
|
| + // for the keycodes, they were documented once in Inside Macintosh and
|
| + // haven't been documented since, either on paper or in a header. The
|
| + // reference I'm going by is http://www.meandmark.com/keycodes.html .
|
| + // TODO(avi): Find someone who knows keyboard handling in WebCore and have
|
| + // them take a look at this.
|
| + if (L"\n" == code_str) {
|
| + generate_char = true;
|
| + code = 0x24;
|
| + } else if (L"rightArrow" == code_str) {
|
| + code = 0x7C;
|
| + } else if (L"downArrow" == code_str) {
|
| + code = 0x7D;
|
| + } else if (L"leftArrow" == code_str) {
|
| + code = 0x7B;
|
| + } else if (L"upArrow" == code_str) {
|
| + code = 0x7E;
|
| + } else if (L"delete" == code_str) {
|
| + code = 0x33;
|
| + }
|
| +#endif
|
| + else {
|
| DCHECK(code_str.length() == 1);
|
| code = code_str[0];
|
| needs_shift_key_modifier = NeedsShiftModifer(code);
|
| @@ -378,6 +424,7 @@
|
| event_char.key_code = kRightParenthesesVirtualKeyCode;
|
| event_char.key_data = kRightParenthesesVirtualKeyCode;
|
| break;
|
| +#if defined(OS_WIN)
|
| // '[{' for US
|
| case VK_OEM_4:
|
| event_char.key_code = kLeftCurlyBracketVirtualKeyCode;
|
| @@ -388,6 +435,7 @@
|
| event_char.key_code = kRightCurlyBracketVirtualKeyCode;
|
| event_char.key_data = kRightCurlyBracketVirtualKeyCode;
|
| break;
|
| +#endif
|
| default:
|
| break;
|
| }
|
| @@ -404,7 +452,7 @@
|
| // If code is an uppercase letter, assign a SHIFT key to
|
| // event_down.modifier, this logic comes from
|
| // WebKit/WebKitTools/DumpRenderTree/Win/EventSender.cpp
|
| - if ((LOBYTE(key_code)) >= 'A' && (LOBYTE(key_code)) <= 'Z')
|
| + if ((key_code & 0xFF) >= 'A' && (key_code & 0xFF) <= 'Z')
|
| return true;
|
| return false;
|
| }
|
|
|