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

Unified Diff: webkit/tools/test_shell/event_sending_controller.cc

Issue 266076: Fix EventSendingController so that we do event saving and replay like what We... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 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
Index: webkit/tools/test_shell/event_sending_controller.cc
===================================================================
--- webkit/tools/test_shell/event_sending_controller.cc (revision 28925)
+++ webkit/tools/test_shell/event_sending_controller.cc (working copy)
@@ -68,11 +68,31 @@
namespace {
+struct SavedEvent {
+ enum SavedEventType {
+ Unspecified,
+ MouseUp,
+ MouseMove,
+ LeapForward
+ };
+
+ SavedEventType type;
+ WebMouseEvent::Button button_type; // For MouseUp
+ gfx::Point pos; // For MouseMove.
+ int milliseconds; // For LeapForward.
+
+ SavedEvent()
+ : type(Unspecified),
+ button_type(WebMouseEvent::ButtonNone),
+ milliseconds(0) {
+ }
+};
+
static WebDragData current_drag_data;
static WebDragOperation current_drag_effect;
static WebDragOperationsMask current_drag_effects_allowed;
static bool replaying_saved_events = false;
-static std::queue<WebMouseEvent> mouse_event_queue;
+static std::queue<SavedEvent> mouse_event_queue;
// Time and place of the last mouse up event.
static double last_click_time_sec = 0;
@@ -213,9 +233,12 @@
wmSysChar.Set(WM_SYSCHAR);
wmSysDeadChar.Set(WM_SYSDEADCHAR);
#endif
+ last_mouse_pos_.SetPoint(0, 0);
last_click_time_sec = 0;
+ last_click_pos.SetPoint(0, 0);
click_count = 0;
last_button_number_ = -1;
+ time_offset_ms = 0;
}
// static
@@ -228,7 +251,7 @@
const WebDragData& drag_data,
WebDragOperationsMask mask) {
WebMouseEvent event;
- InitMouseEvent(WebInputEvent::MouseDown, pressed_button_, event_pos, &event);
+ InitMouseEvent(WebInputEvent::MouseDown, pressed_button_, last_mouse_pos_, &event);
WebPoint client_point(event.x, event.y);
WebPoint screen_point(event.globalX, event.globalY);
current_drag_data = drag_data;
@@ -262,6 +285,17 @@
return button_code;
}
+void EventSendingController::UpdateClickCountForButton(int button_number) {
dglazkov 2009/10/14 01:32:00 Can this take an enum instead?
+ if ((GetCurrentEventTimeSec() - last_click_time_sec < kMultiClickTimeSec) &&
+ (!outside_multiclick_radius(last_mouse_pos_, last_click_pos)) &&
+ (button_number == last_button_number_)) {
+ ++click_count;
+ } else {
+ click_count = 1;
+ last_button_number_ = button_number;
+ }
+}
+
//
// Implemented javascript methods.
//
@@ -279,16 +313,8 @@
WebMouseEvent::Button button_type = GetButtonTypeFromButtonNumber(
button_number);
- if ((GetCurrentEventTimeSec() - last_click_time_sec < kMultiClickTimeSec) &&
- (!outside_multiclick_radius(last_mouse_pos_, last_click_pos)) &&
- (button_number == last_button_number_)) {
- ++click_count;
- } else {
- click_count = 1;
- }
+ UpdateClickCountForButton(button_number);
- last_button_number_ = button_number;
-
WebMouseEvent event;
pressed_button_ = button_type;
InitMouseEvent(WebInputEvent::MouseDown, button_type,
@@ -309,25 +335,26 @@
WebMouseEvent::Button button_type = GetButtonTypeFromButtonNumber(
button_number);
- last_button_number_ = button_number;
-
- WebMouseEvent event;
- InitMouseEvent(WebInputEvent::MouseUp, button_type,
- last_mouse_pos_, &event);
if (drag_mode() && !replaying_saved_events) {
- mouse_event_queue.push(event);
+ SavedEvent saved_event;
+ saved_event.type = SavedEvent::MouseUp;
+ saved_event.button_type = button_type;
+ mouse_event_queue.push(saved_event);
ReplaySavedEvents();
} else {
+ WebMouseEvent event;
+ InitMouseEvent(WebInputEvent::MouseUp, button_type,
+ last_mouse_pos_, &event);
DoMouseUp(event);
}
-
- last_click_time_sec = event.timeStampSeconds;
- last_click_pos = gfx::Point(event.x, event.y);
}
/* static */ void EventSendingController::DoMouseUp(const WebMouseEvent& e) {
webview()->handleInputEvent(e);
+
pressed_button_ = WebMouseEvent::ButtonNone;
+ last_click_time_sec = e.timeStampSeconds;
+ last_click_pos = last_mouse_pos_;
// If we're in a drag operation, complete it.
if (!current_drag_data.isNull()) {
@@ -344,6 +371,7 @@
}
webview()->dragSourceEndedAt(
client_point, screen_point, current_drag_effect);
+ webview()->dragSourceSystemDragEnded();
current_drag_data.reset();
}
@@ -356,15 +384,19 @@
if (args.size() >= 2 && args[0].isNumber() && args[1].isNumber()) {
webview()->layout();
- WebMouseEvent event;
- last_mouse_pos_.SetPoint(args[0].ToInt32(), args[1].ToInt32());
- InitMouseEvent(WebInputEvent::MouseMove, pressed_button_,
- last_mouse_pos_, &event);
+ gfx::Point mouse_pos;
+ mouse_pos.SetPoint(args[0].ToInt32(), args[1].ToInt32());
- if (drag_mode() && pressed_button_ != WebMouseEvent::ButtonNone &&
+ if (drag_mode() && pressed_button_ == WebMouseEvent::ButtonLeft &&
!replaying_saved_events) {
- mouse_event_queue.push(event);
+ SavedEvent saved_event;
+ saved_event.type = SavedEvent::MouseMove;
+ saved_event.pos = mouse_pos;
+ mouse_event_queue.push(saved_event);
} else {
+ WebMouseEvent event;
+ InitMouseEvent(WebInputEvent::MouseMove, pressed_button_,
+ mouse_pos, &event);
DoMouseMove(event);
}
}
@@ -372,6 +404,8 @@
// static
void EventSendingController::DoMouseMove(const WebMouseEvent& e) {
+ last_mouse_pos_.SetPoint(e.x, e.y);
+
webview()->handleInputEvent(e);
if (pressed_button_ != WebMouseEvent::ButtonNone &&
@@ -528,13 +562,25 @@
const CppArgumentList& args, CppVariant* result) {
result->SetNull();
- // TODO(mpcomplete): DumpRenderTree defers this under certain conditions.
+ if (args.size() <1 || !args[0].isNumber())
+ return;
- if (args.size() >=1 && args[0].isNumber()) {
- AdvanceEventTime(args[0].ToInt32());
+ int milliseconds = args[0].ToInt32();
+ if (drag_mode() && pressed_button_ == WebMouseEvent::ButtonLeft &&
+ !replaying_saved_events) {
+ SavedEvent saved_event;
+ saved_event.type = SavedEvent::LeapForward;
+ saved_event.milliseconds = milliseconds;
+ mouse_event_queue.push(saved_event);
+ } else {
+ DoLeapForward(milliseconds);
}
}
+/* static */ void EventSendingController::DoLeapForward(int milliseconds) {
dglazkov 2009/10/14 01:32:00 I think you should just do // static at the top of
+ AdvanceEventTime(milliseconds);
+}
+
// Apple's port of WebKit zooms by a factor of 1.2 (see
// WebKit/WebView/WebView.mm)
void EventSendingController::textZoomIn(
@@ -564,16 +610,27 @@
void EventSendingController::ReplaySavedEvents() {
replaying_saved_events = true;
while (!mouse_event_queue.empty()) {
- WebMouseEvent event = mouse_event_queue.front();
+ SavedEvent e = mouse_event_queue.front();
mouse_event_queue.pop();
- switch (event.type) {
- case WebInputEvent::MouseUp:
+ switch (e.type) {
+ case SavedEvent::MouseMove: {
+ WebMouseEvent event;
+ InitMouseEvent(WebInputEvent::MouseMove, pressed_button_,
+ e.pos, &event);
+ DoMouseMove(event);
+ break;
+ }
+ case SavedEvent::LeapForward:
+ DoLeapForward(e.milliseconds);
+ break;
+ case SavedEvent::MouseUp: {
+ WebMouseEvent event;
+ InitMouseEvent(WebInputEvent::MouseUp, e.button_type,
+ last_mouse_pos_, &event);
DoMouseUp(event);
break;
- case WebInputEvent::MouseMove:
- DoMouseMove(event);
- break;
+ }
default:
NOTREACHED();
}
@@ -588,11 +645,7 @@
webview()->layout();
- if (GetCurrentEventTimeSec() - last_click_time_sec >= 1) {
- click_count = 1;
- } else {
- ++click_count;
- }
+ UpdateClickCountForButton(2 /*RightMouseButton*/);
// Generate right mouse down and up.
« no previous file with comments | « webkit/tools/test_shell/event_sending_controller.h ('k') | webkit/tools/test_shell/test_webview_delegate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698