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

Side by Side Diff: components/test_runner/event_sender.cc

Issue 1855513002: Consider isPrimary and pointerType when preventing compat mouse (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Win compile error Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/test_runner/event_sender.h" 5 #include "components/test_runner/event_sender.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 using blink::WebString; 51 using blink::WebString;
52 using blink::WebTouchEvent; 52 using blink::WebTouchEvent;
53 using blink::WebTouchPoint; 53 using blink::WebTouchPoint;
54 using blink::WebVector; 54 using blink::WebVector;
55 using blink::WebView; 55 using blink::WebView;
56 56
57 namespace test_runner { 57 namespace test_runner {
58 58
59 namespace { 59 namespace {
60 60
61 const int kMousePointerId = -1;
62 const char* kPointerTypeStringUnknown = "";
63 const char* kPointerTypeStringMouse = "mouse";
64 const char* kPointerTypeStringPen = "pen";
65 const char* kPointerTypeStringTouch = "touch";
66
67 bool getPointerType(gin::Arguments* args,
68 blink::WebPointerProperties::PointerType &t,
dtapuska 2016/04/07 02:35:41 Should be PointerType& t. Both styles are allowed
Navid Zolghadr 2016/04/08 17:38:44 Done. I got rid of the default value and in that s
69 bool isOnlyMouseAndPenAllowed = false) {
70 if (!args->PeekNext().IsEmpty()) {
71 std::string pointer_type_string;
72 if (!args->GetNext(&pointer_type_string)) {
73 args->ThrowError();
74 return false;
75 }
76 if (pointer_type_string == kPointerTypeStringUnknown) {
77 if (isOnlyMouseAndPenAllowed) {
78 args->ThrowError();
79 return false;
80 }
81 t = WebMouseEvent::PointerType::Unknown;
82 } else if (pointer_type_string == kPointerTypeStringMouse) {
83 t = WebMouseEvent::PointerType::Mouse;
84 } else if (pointer_type_string == kPointerTypeStringPen) {
85 t = WebMouseEvent::PointerType::Pen;
86 } else if (pointer_type_string == kPointerTypeStringTouch) {
87 if (isOnlyMouseAndPenAllowed) {
88 args->ThrowError();
89 return false;
90 }
91 t = WebMouseEvent::PointerType::Touch;
92 } else {
93 args->ThrowError();
94 return false;
95 }
96 }
97 return true;
mustaq 2016/04/07 19:30:02 Nit: Please avoid three levels of nested |if|s, by
Navid Zolghadr 2016/04/08 17:38:44 Done.
98 }
99
100 bool getMousePenPointerTypeAndId(gin::Arguments* args,
101 blink::WebPointerProperties::PointerType &t,
dtapuska 2016/04/07 02:35:41 ditto; comments as above.
Navid Zolghadr 2016/04/08 17:38:44 Done.
102 int &id) {
103 t = blink::WebPointerProperties::PointerType::Mouse;
104 id = kMousePointerId;
105 // Only allow pen or mouse through this API.
106 if (!getPointerType(args, t, true))
107 return false;
108 if (!args->PeekNext().IsEmpty()) {
109 if (!args->GetNext(&id)) {
110 args->ThrowError();
111 return false;
112 }
113 if (t != blink::WebPointerProperties::PointerType::Mouse
114 && id == kMousePointerId) {
115 args->ThrowError();
116 return false;
117 }
118 } else if (t == blink::WebPointerProperties::PointerType::Pen) {
119 id = 1; // A default value for the id of the pen
120 }
121 return true;
122 }
123
61 WebMouseEvent::Button GetButtonTypeFromButtonNumber(int button_code) { 124 WebMouseEvent::Button GetButtonTypeFromButtonNumber(int button_code) {
62 switch (button_code) { 125 switch (button_code) {
63 case -1: 126 case -1:
64 return WebMouseEvent::ButtonNone; 127 return WebMouseEvent::ButtonNone;
65 case 0: 128 case 0:
66 return WebMouseEvent::ButtonLeft; 129 return WebMouseEvent::ButtonLeft;
67 case 1: 130 case 1:
68 return WebMouseEvent::ButtonMiddle; 131 return WebMouseEvent::ButtonMiddle;
69 case 2: 132 case 2:
70 return WebMouseEvent::ButtonRight; 133 return WebMouseEvent::ButtonRight;
(...skipping 25 matching lines...) Expand all
96 | (buttons & kButtonsInModifiers); 159 | (buttons & kButtonsInModifiers);
97 } 160 }
98 161
99 void InitMouseEvent(WebInputEvent::Type t, 162 void InitMouseEvent(WebInputEvent::Type t,
100 WebMouseEvent::Button b, 163 WebMouseEvent::Button b,
101 int current_buttons, 164 int current_buttons,
102 const WebPoint& pos, 165 const WebPoint& pos,
103 double time_stamp, 166 double time_stamp,
104 int click_count, 167 int click_count,
105 int modifiers, 168 int modifiers,
169 blink::WebPointerProperties::PointerType pointerType,
170 int pointerId,
106 WebMouseEvent* e) { 171 WebMouseEvent* e) {
107 e->type = t; 172 e->type = t;
108 e->button = b; 173 e->button = b;
109 e->modifiers = modifiersWithButtons(modifiers, current_buttons); 174 e->modifiers = modifiersWithButtons(modifiers, current_buttons);
110 e->x = pos.x; 175 e->x = pos.x;
111 e->y = pos.y; 176 e->y = pos.y;
112 e->globalX = pos.x; 177 e->globalX = pos.x;
113 e->globalY = pos.y; 178 e->globalY = pos.y;
114 e->pointerType = blink::WebPointerProperties::PointerType::Mouse; 179 e->pointerType = pointerType;
180 if (pointerType != blink::WebPointerProperties::PointerType::Mouse)
mustaq 2016/04/07 19:30:02 I think it's better to allow any ids here. This wo
Navid Zolghadr 2016/04/08 17:38:44 Sure. Then here for mouse by default we are sendin
181 e->id = pointerId;
115 e->timeStampSeconds = time_stamp; 182 e->timeStampSeconds = time_stamp;
116 e->clickCount = click_count; 183 e->clickCount = click_count;
117 } 184 }
118 185
119 void InitGestureEventFromMouseWheel(WebInputEvent::Type type, 186 void InitGestureEventFromMouseWheel(WebInputEvent::Type type,
120 double time_stamp, 187 double time_stamp,
121 const WebMouseWheelEvent& wheel_event, 188 const WebMouseWheelEvent& wheel_event,
122 WebGestureEvent* gesture_event) { 189 WebGestureEvent* gesture_event) {
123 gesture_event->type = type; 190 gesture_event->type = type;
124 gesture_event->sourceDevice = blink::WebGestureDeviceTouchpad; 191 gesture_event->sourceDevice = blink::WebGestureDeviceTouchpad;
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 } 515 }
449 } else { 516 } else {
450 *units = WebGestureEvent::PrecisePixels; 517 *units = WebGestureEvent::PrecisePixels;
451 return true; 518 return true;
452 } 519 }
453 } 520 }
454 521
455 const char* kSourceDeviceStringTouchpad = "touchpad"; 522 const char* kSourceDeviceStringTouchpad = "touchpad";
456 const char* kSourceDeviceStringTouchscreen = "touchscreen"; 523 const char* kSourceDeviceStringTouchscreen = "touchscreen";
457 524
458 const char* kPointerTypeStringUnknown = "";
459 const char* kPointerTypeStringMouse = "mouse";
460 const char* kPointerTypeStringPen = "pen";
461 const char* kPointerTypeStringTouch = "touch";
462
463 } // namespace 525 } // namespace
464 526
465 class EventSenderBindings : public gin::Wrappable<EventSenderBindings> { 527 class EventSenderBindings : public gin::Wrappable<EventSenderBindings> {
466 public: 528 public:
467 static gin::WrapperInfo kWrapperInfo; 529 static gin::WrapperInfo kWrapperInfo;
468 530
469 static void Install(base::WeakPtr<EventSender> sender, 531 static void Install(base::WeakPtr<EventSender> sender,
470 blink::WebFrame* frame); 532 blink::WebFrame* frame);
471 533
472 private: 534 private:
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 sender_->ScheduleAsynchronousKeyDown(code_str, modifiers, 1033 sender_->ScheduleAsynchronousKeyDown(code_str, modifiers,
972 static_cast<KeyLocationCode>(location)); 1034 static_cast<KeyLocationCode>(location));
973 } 1035 }
974 1036
975 void EventSenderBindings::MouseDown(gin::Arguments* args) { 1037 void EventSenderBindings::MouseDown(gin::Arguments* args) {
976 if (!sender_) 1038 if (!sender_)
977 return; 1039 return;
978 1040
979 int button_number = 0; 1041 int button_number = 0;
980 int modifiers = 0; 1042 int modifiers = 0;
1043 blink::WebPointerProperties::PointerType pointerType =
1044 blink::WebPointerProperties::PointerType::Mouse;
1045 int pointerId = 0;
981 if (!args->PeekNext().IsEmpty()) { 1046 if (!args->PeekNext().IsEmpty()) {
982 args->GetNext(&button_number); 1047 if (!args->GetNext(&button_number)) {
983 if (!args->PeekNext().IsEmpty()) 1048 args->ThrowError();
1049 return;
1050 }
1051 if (!args->PeekNext().IsEmpty()) {
984 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); 1052 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext());
1053 args->Skip();
1054 }
985 } 1055 }
986 sender_->MouseDown(button_number, modifiers); 1056
1057 if (!getMousePenPointerTypeAndId(args, pointerType, pointerId))
1058 return;
1059
1060 sender_->MouseDown(button_number, modifiers, pointerType, pointerId);
987 } 1061 }
988 1062
989 void EventSenderBindings::MouseUp(gin::Arguments* args) { 1063 void EventSenderBindings::MouseUp(gin::Arguments* args) {
990 if (!sender_) 1064 if (!sender_)
991 return; 1065 return;
992 1066
993 int button_number = 0; 1067 int button_number = 0;
994 int modifiers = 0; 1068 int modifiers = 0;
1069 blink::WebPointerProperties::PointerType pointerType =
1070 blink::WebPointerProperties::PointerType::Mouse;
1071 int pointerId = 0;
995 if (!args->PeekNext().IsEmpty()) { 1072 if (!args->PeekNext().IsEmpty()) {
996 args->GetNext(&button_number); 1073 if (!args->GetNext(&button_number)) {
997 if (!args->PeekNext().IsEmpty()) 1074 args->ThrowError();
1075 return;
1076 }
1077 if (!args->PeekNext().IsEmpty()) {
998 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); 1078 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext());
1079 args->Skip();
1080 }
999 } 1081 }
1000 sender_->MouseUp(button_number, modifiers); 1082
1083 if (!getMousePenPointerTypeAndId(args, pointerType, pointerId))
1084 return;
1085
1086 sender_->MouseUp(button_number, modifiers, pointerType, pointerId);
1001 } 1087 }
1002 1088
1003 void EventSenderBindings::SetMouseButtonState(gin::Arguments* args) { 1089 void EventSenderBindings::SetMouseButtonState(gin::Arguments* args) {
1004 if (!sender_) 1090 if (!sender_)
1005 return; 1091 return;
1006 1092
1007 int button_number; 1093 int button_number;
1008 if (!args->GetNext(&button_number)) { 1094 if (!args->GetNext(&button_number)) {
1009 args->ThrowError(); 1095 args->ThrowError();
1010 return; 1096 return;
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
1143 } 1229 }
1144 1230
1145 void EventSenderBindings::SetWmSysDeadChar(int sys_dead_char) { 1231 void EventSenderBindings::SetWmSysDeadChar(int sys_dead_char) {
1146 if (sender_) 1232 if (sender_)
1147 sender_->set_wm_sys_dead_char(sys_dead_char); 1233 sender_->set_wm_sys_dead_char(sys_dead_char);
1148 } 1234 }
1149 #endif 1235 #endif
1150 1236
1151 // EventSender ----------------------------------------------------------------- 1237 // EventSender -----------------------------------------------------------------
1152 1238
1153 WebMouseEvent::Button EventSender::pressed_button_ = WebMouseEvent::ButtonNone;
1154 int EventSender::current_buttons_ = 0;
1155 int EventSender::modifiers_ = 0;
1156
1157 WebPoint EventSender::last_mouse_pos_;
1158
1159 WebMouseEvent::Button EventSender::last_button_type_ = 1239 WebMouseEvent::Button EventSender::last_button_type_ =
1160 WebMouseEvent::ButtonNone; 1240 WebMouseEvent::ButtonNone;
1161 1241
1162 EventSender::SavedEvent::SavedEvent() 1242 EventSender::SavedEvent::SavedEvent()
1163 : type(TYPE_UNSPECIFIED), 1243 : type(TYPE_UNSPECIFIED),
1164 button_type(WebMouseEvent::ButtonNone), 1244 button_type(WebMouseEvent::ButtonNone),
1165 milliseconds(0), 1245 milliseconds(0),
1166 modifiers(0) {} 1246 modifiers(0) {}
1167 1247
1168 EventSender::EventSender(TestInterfaces* interfaces) 1248 EventSender::EventSender(TestInterfaces* interfaces)
(...skipping 25 matching lines...) Expand all
1194 weak_factory_(this) { 1274 weak_factory_(this) {
1195 } 1275 }
1196 1276
1197 EventSender::~EventSender() {} 1277 EventSender::~EventSender() {}
1198 1278
1199 void EventSender::Reset() { 1279 void EventSender::Reset() {
1200 DCHECK(current_drag_data_.isNull()); 1280 DCHECK(current_drag_data_.isNull());
1201 current_drag_data_.reset(); 1281 current_drag_data_.reset();
1202 current_drag_effect_ = blink::WebDragOperationNone; 1282 current_drag_effect_ = blink::WebDragOperationNone;
1203 current_drag_effects_allowed_ = blink::WebDragOperationNone; 1283 current_drag_effects_allowed_ = blink::WebDragOperationNone;
1204 if (view_ && pressed_button_ != WebMouseEvent::ButtonNone) 1284 if (view_ && current_pointer_state_[kMousePointerId].pressed_button_
1285 != WebMouseEvent::ButtonNone)
1205 view_->mouseCaptureLost(); 1286 view_->mouseCaptureLost();
1206 pressed_button_ = WebMouseEvent::ButtonNone; 1287 current_pointer_state_.clear();
1207 current_buttons_ = 0;
1208 modifiers_ = 0;
1209 is_drag_mode_ = true; 1288 is_drag_mode_ = true;
1210 force_layout_on_events_ = true; 1289 force_layout_on_events_ = true;
1211 1290
1212 #if defined(OS_WIN) 1291 #if defined(OS_WIN)
1213 wm_key_down_ = WM_KEYDOWN; 1292 wm_key_down_ = WM_KEYDOWN;
1214 wm_key_up_ = WM_KEYUP; 1293 wm_key_up_ = WM_KEYUP;
1215 wm_char_ = WM_CHAR; 1294 wm_char_ = WM_CHAR;
1216 wm_dead_char_ = WM_DEADCHAR; 1295 wm_dead_char_ = WM_DEADCHAR;
1217 wm_sys_key_down_ = WM_SYSKEYDOWN; 1296 wm_sys_key_down_ = WM_SYSKEYDOWN;
1218 wm_sys_key_up_ = WM_SYSKEYUP; 1297 wm_sys_key_up_ = WM_SYSKEYUP;
1219 wm_sys_char_ = WM_SYSCHAR; 1298 wm_sys_char_ = WM_SYSCHAR;
1220 wm_sys_dead_char_ = WM_SYSDEADCHAR; 1299 wm_sys_dead_char_ = WM_SYSDEADCHAR;
1221 #endif 1300 #endif
1222 1301
1223 last_mouse_pos_ = WebPoint(0, 0);
1224 last_click_time_sec_ = 0; 1302 last_click_time_sec_ = 0;
1225 last_click_pos_ = WebPoint(0, 0); 1303 last_click_pos_ = WebPoint(0, 0);
1226 last_button_type_ = WebMouseEvent::ButtonNone; 1304 last_button_type_ = WebMouseEvent::ButtonNone;
1227 touch_points_.clear(); 1305 touch_points_.clear();
1228 last_context_menu_data_.reset(); 1306 last_context_menu_data_.reset();
1229 task_list_.RevokeAll(); 1307 task_list_.RevokeAll();
1230 current_gesture_location_ = WebPoint(0, 0); 1308 current_gesture_location_ = WebPoint(0, 0);
1231 mouse_event_queue_.clear(); 1309 mouse_event_queue_.clear();
1232 1310
1233 time_offset_ms_ = 0; 1311 time_offset_ms_ = 0;
(...skipping 17 matching lines...) Expand all
1251 } 1329 }
1252 1330
1253 void EventSender::SetContextMenuData(const WebContextMenuData& data) { 1331 void EventSender::SetContextMenuData(const WebContextMenuData& data) {
1254 last_context_menu_data_.reset(new WebContextMenuData(data)); 1332 last_context_menu_data_.reset(new WebContextMenuData(data));
1255 } 1333 }
1256 1334
1257 void EventSender::DoDragDrop(const WebDragData& drag_data, 1335 void EventSender::DoDragDrop(const WebDragData& drag_data,
1258 WebDragOperationsMask mask) { 1336 WebDragOperationsMask mask) {
1259 WebMouseEvent event; 1337 WebMouseEvent event;
1260 InitMouseEvent(WebInputEvent::MouseDown, 1338 InitMouseEvent(WebInputEvent::MouseDown,
1261 pressed_button_, 1339 current_pointer_state_[kMousePointerId].pressed_button_,
1262 current_buttons_, 1340 current_pointer_state_[kMousePointerId].current_buttons_,
1263 last_mouse_pos_, 1341 current_pointer_state_[kMousePointerId].last_pos_,
1264 GetCurrentEventTimeSec(), 1342 GetCurrentEventTimeSec(),
1265 click_count_, 1343 click_count_,
1266 modifiers_, 1344 current_pointer_state_[kMousePointerId].modifiers_,
1345 blink::WebPointerProperties::PointerType::Mouse,
1346 0,
1267 &event); 1347 &event);
1268 WebPoint client_point(event.x, event.y); 1348 WebPoint client_point(event.x, event.y);
1269 WebPoint screen_point(event.globalX, event.globalY); 1349 WebPoint screen_point(event.globalX, event.globalY);
1270 current_drag_data_ = drag_data; 1350 current_drag_data_ = drag_data;
1271 current_drag_effects_allowed_ = mask; 1351 current_drag_effects_allowed_ = mask;
1272 current_drag_effect_ = view_->dragTargetDragEnter( 1352 current_drag_effect_ = view_->dragTargetDragEnter(
1273 drag_data, 1353 drag_data,
1274 client_point, 1354 client_point,
1275 screen_point, 1355 screen_point,
1276 current_drag_effects_allowed_, 1356 current_drag_effects_allowed_,
1277 modifiersWithButtons(modifiers_, current_buttons_)); 1357 modifiersWithButtons(current_pointer_state_[kMousePointerId].modifiers_,
1358 current_pointer_state_[kMousePointerId].current_buttons_));
1278 1359
1279 // Finish processing events. 1360 // Finish processing events.
1280 ReplaySavedEvents(); 1361 ReplaySavedEvents();
1281 } 1362 }
1282 1363
1283 void EventSender::MouseDown(int button_number, int modifiers) { 1364 void EventSender::MouseDown(int button_number, int modifiers,
1365 blink::WebPointerProperties::PointerType pointerType, int pointerId) {
1284 if (force_layout_on_events_) 1366 if (force_layout_on_events_)
1285 view_->updateAllLifecyclePhases(); 1367 view_->updateAllLifecyclePhases();
1286 1368
1287 DCHECK_NE(-1, button_number); 1369 DCHECK_NE(-1, button_number);
1288 1370
1289 WebMouseEvent::Button button_type = 1371 WebMouseEvent::Button button_type =
1290 GetButtonTypeFromButtonNumber(button_number); 1372 GetButtonTypeFromButtonNumber(button_number);
1291 1373
1292 UpdateClickCountForButton(button_type); 1374 WebMouseEvent event;
1375 int click_count = 0;
1376 current_pointer_state_[pointerId].pressed_button_ = button_type;
1377 current_pointer_state_[pointerId].current_buttons_ |=
1378 GetWebMouseEventModifierForButton(button_type);
1379 current_pointer_state_[pointerId].modifiers_ = modifiers;
1293 1380
1294 pressed_button_ = button_type; 1381 if (pointerType == blink::WebPointerProperties::PointerType::Mouse) {
1295 current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_); 1382 UpdateClickCountForButton(button_type);
1296 modifiers_ = modifiers; 1383 click_count = click_count_;
1384 }
1385 InitMouseEvent(WebInputEvent::MouseDown,
1386 current_pointer_state_[pointerId].pressed_button_,
1387 current_pointer_state_[pointerId].current_buttons_,
1388 current_pointer_state_[pointerId].last_pos_,
1389 GetCurrentEventTimeSec(),
1390 click_count,
1391 current_pointer_state_[pointerId].modifiers_,
1392 pointerType,
1393 pointerId,
dtapuska 2016/04/07 02:35:41 Do we need to be concerned we are passing -1 poten
Navid Zolghadr 2016/04/07 03:08:04 There is a check in InitMouseEvent which ignores t
mustaq 2016/04/07 19:30:02 I am fine with allowing unexpected values here, to
Navid Zolghadr 2016/04/08 17:38:44 I removed the check in InitMouseEvent to set any i
1394 &event);
1297 1395
1298 WebMouseEvent event;
1299 InitMouseEvent(WebInputEvent::MouseDown,
1300 pressed_button_,
1301 current_buttons_,
1302 last_mouse_pos_,
1303 GetCurrentEventTimeSec(),
1304 click_count_,
1305 modifiers_,
1306 &event);
1307 HandleInputEventOnViewOrPopup(event); 1396 HandleInputEventOnViewOrPopup(event);
1308 } 1397 }
1309 1398
1310 void EventSender::MouseUp(int button_number, int modifiers) { 1399 void EventSender::MouseUp(int button_number, int modifiers,
1400 blink::WebPointerProperties::PointerType pointerType, int pointerId) {
1311 if (force_layout_on_events_) 1401 if (force_layout_on_events_)
1312 view_->updateAllLifecyclePhases(); 1402 view_->updateAllLifecyclePhases();
1313 1403
1314 DCHECK_NE(-1, button_number); 1404 DCHECK_NE(-1, button_number);
1315 1405
1316 WebMouseEvent::Button button_type = 1406 WebMouseEvent::Button button_type =
1317 GetButtonTypeFromButtonNumber(button_number); 1407 GetButtonTypeFromButtonNumber(button_number);
1318 1408
1319 if (is_drag_mode_ && !replaying_saved_events_) { 1409 if (pointerType == blink::WebPointerProperties::PointerType::Mouse) {
1320 SavedEvent saved_event; 1410 if (is_drag_mode_ && !replaying_saved_events_) {
1321 saved_event.type = SavedEvent::TYPE_MOUSE_UP; 1411 SavedEvent saved_event;
1322 saved_event.button_type = button_type; 1412 saved_event.type = SavedEvent::TYPE_MOUSE_UP;
1323 saved_event.modifiers = modifiers; 1413 saved_event.button_type = button_type;
1324 mouse_event_queue_.push_back(saved_event); 1414 saved_event.modifiers = modifiers;
1325 ReplaySavedEvents(); 1415 mouse_event_queue_.push_back(saved_event);
1416 ReplaySavedEvents();
1417 } else {
1418 current_pointer_state_[kMousePointerId].current_buttons_ &=
1419 ~GetWebMouseEventModifierForButton(button_type);
1420 current_pointer_state_[kMousePointerId].pressed_button_ =
1421 WebMouseEvent::ButtonNone;
1422
1423 WebMouseEvent event;
1424 InitMouseEvent(WebInputEvent::MouseUp,
1425 button_type,
1426 current_pointer_state_[kMousePointerId].current_buttons_,
1427 current_pointer_state_[kMousePointerId].last_pos_,
1428 GetCurrentEventTimeSec(),
1429 click_count_,
1430 modifiers,
1431 pointerType,
1432 0,
dtapuska 2016/04/07 02:35:41 Whereas we pass 0 in here for mouseup? This code
Navid Zolghadr 2016/04/07 03:08:04 I was thinking of doing this similar to what I did
dtapuska 2016/04/07 03:15:24 Personally; I'd probably look at pulling the Handl
mustaq 2016/04/07 19:30:02 I agree, the two DoMouse* methods are doing local
Navid Zolghadr 2016/04/08 17:38:44 Done.
1433 &event);
1434 DoMouseUp(event);
1435 }
1326 } else { 1436 } else {
1327 current_buttons_ &= ~GetWebMouseEventModifierForButton(button_type); 1437 current_pointer_state_[pointerId].current_buttons_ &=
1328 pressed_button_ = WebMouseEvent::ButtonNone; 1438 ~GetWebMouseEventModifierForButton(button_type);
1439 current_pointer_state_[pointerId].pressed_button_ =
1440 WebMouseEvent::ButtonNone;
1329 1441
1330 WebMouseEvent event; 1442 WebMouseEvent event;
1331 InitMouseEvent(WebInputEvent::MouseUp, 1443 InitMouseEvent(WebInputEvent::MouseUp,
1332 button_type, 1444 button_type,
1333 current_buttons_, 1445 current_pointer_state_[pointerId].current_buttons_,
1334 last_mouse_pos_, 1446 current_pointer_state_[pointerId].last_pos_,
1335 GetCurrentEventTimeSec(), 1447 GetCurrentEventTimeSec(),
1336 click_count_, 1448 0,
1337 modifiers, 1449 modifiers,
1338 &event); 1450 pointerType,
1339 DoMouseUp(event); 1451 pointerId,
1452 &event);
1453 HandleInputEventOnViewOrPopup(event);
1340 } 1454 }
1341 } 1455 }
1342 1456
1343 void EventSender::SetMouseButtonState(int button_number, int modifiers) { 1457 void EventSender::SetMouseButtonState(int button_number, int modifiers) {
1344 pressed_button_ = GetButtonTypeFromButtonNumber(button_number); 1458 current_pointer_state_[kMousePointerId].pressed_button_ =
1345 current_buttons_ = (modifiers == -1) ? 1459 GetButtonTypeFromButtonNumber(button_number);
1346 GetWebMouseEventModifierForButton(pressed_button_) : 1460 current_pointer_state_[kMousePointerId].current_buttons_ = (modifiers == -1) ?
1461 GetWebMouseEventModifierForButton(
1462 current_pointer_state_[kMousePointerId].pressed_button_) :
1347 modifiers & kButtonsInModifiers; 1463 modifiers & kButtonsInModifiers;
1348 } 1464 }
1349 1465
1350 void EventSender::KeyDown(const std::string& code_str, 1466 void EventSender::KeyDown(const std::string& code_str,
1351 int modifiers, 1467 int modifiers,
1352 KeyLocationCode location) { 1468 KeyLocationCode location) {
1353 // FIXME: I'm not exactly sure how we should convert the string to a key 1469 // FIXME: I'm not exactly sure how we should convert the string to a key
1354 // event. This seems to work in the cases I tested. 1470 // event. This seems to work in the cases I tested.
1355 // FIXME: Should we also generate a KEY_UP? 1471 // FIXME: Should we also generate a KEY_UP?
1356 1472
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 // We just simulate the same behavior here. 1653 // We just simulate the same behavior here.
1538 std::string edit_command; 1654 std::string edit_command;
1539 if (GetEditCommand(event_down, &edit_command)) 1655 if (GetEditCommand(event_down, &edit_command))
1540 delegate_->SetEditCommand(edit_command, ""); 1656 delegate_->SetEditCommand(edit_command, "");
1541 1657
1542 HandleInputEventOnViewOrPopup(event_down); 1658 HandleInputEventOnViewOrPopup(event_down);
1543 1659
1544 if (code == ui::VKEY_ESCAPE && !current_drag_data_.isNull()) { 1660 if (code == ui::VKEY_ESCAPE && !current_drag_data_.isNull()) {
1545 WebMouseEvent event; 1661 WebMouseEvent event;
1546 InitMouseEvent(WebInputEvent::MouseDown, 1662 InitMouseEvent(WebInputEvent::MouseDown,
1547 pressed_button_, 1663 current_pointer_state_[kMousePointerId].pressed_button_,
1548 current_buttons_, 1664 current_pointer_state_[kMousePointerId].current_buttons_,
1549 last_mouse_pos_, 1665 current_pointer_state_[kMousePointerId].last_pos_,
1550 GetCurrentEventTimeSec(), 1666 GetCurrentEventTimeSec(),
1551 click_count_, 1667 click_count_,
1552 0, 1668 0,
1669 blink::WebPointerProperties::PointerType::Mouse,
1670 0,
1553 &event); 1671 &event);
1554 FinishDragAndDrop(event, blink::WebDragOperationNone); 1672 FinishDragAndDrop(event, blink::WebDragOperationNone);
1555 } 1673 }
1556 1674
1557 delegate_->ClearEditCommand(); 1675 delegate_->ClearEditCommand();
1558 1676
1559 if (generate_char) { 1677 if (generate_char) {
1560 WebKeyboardEvent event_char = event_up; 1678 WebKeyboardEvent event_char = event_up;
1561 event_char.type = WebInputEvent::Char; 1679 event_char.type = WebInputEvent::Char;
1562 // keyIdentifier is an empty string, unless the Enter key was pressed. 1680 // keyIdentifier is an empty string, unless the Enter key was pressed.
(...skipping 24 matching lines...) Expand all
1587 // be requested after following mouse events. 1705 // be requested after following mouse events.
1588 last_context_menu_data_.reset(); 1706 last_context_menu_data_.reset();
1589 1707
1590 // Generate right mouse down and up. 1708 // Generate right mouse down and up.
1591 WebMouseEvent event; 1709 WebMouseEvent event;
1592 // This is a hack to work around only allowing a single pressed button since 1710 // This is a hack to work around only allowing a single pressed button since
1593 // we want to test the case where both the left and right mouse buttons are 1711 // we want to test the case where both the left and right mouse buttons are
1594 // pressed. 1712 // pressed.
1595 // TODO(mustaq): This hack seems unused here! But do we need this hack at all 1713 // TODO(mustaq): This hack seems unused here! But do we need this hack at all
1596 // after adding current_buttons_. 1714 // after adding current_buttons_.
1597 if (pressed_button_ == WebMouseEvent::ButtonNone) { 1715 if (current_pointer_state_[kMousePointerId].pressed_button_
1598 pressed_button_ = WebMouseEvent::ButtonRight; 1716 == WebMouseEvent::ButtonNone) {
1599 current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_); 1717 current_pointer_state_[kMousePointerId].pressed_button_ =
1718 WebMouseEvent::ButtonRight;
1719 current_pointer_state_[kMousePointerId].current_buttons_ |=
1720 GetWebMouseEventModifierForButton(
1721 current_pointer_state_[kMousePointerId].pressed_button_);
1600 } 1722 }
1601 InitMouseEvent(WebInputEvent::MouseDown, 1723 InitMouseEvent(WebInputEvent::MouseDown,
1602 WebMouseEvent::ButtonRight, 1724 WebMouseEvent::ButtonRight,
1603 current_buttons_, 1725 current_pointer_state_[kMousePointerId].current_buttons_,
1604 last_mouse_pos_, 1726 current_pointer_state_[kMousePointerId].last_pos_,
1605 GetCurrentEventTimeSec(), 1727 GetCurrentEventTimeSec(),
1606 click_count_, 1728 click_count_,
1607 0, 1729 0,
1730 blink::WebPointerProperties::PointerType::Mouse,
1731 0,
1608 &event); 1732 &event);
1609 HandleInputEventOnViewOrPopup(event); 1733 HandleInputEventOnViewOrPopup(event);
1610 1734
1611 #if defined(OS_WIN) 1735 #if defined(OS_WIN)
1612 current_buttons_ &= 1736 current_pointer_state_[kMousePointerId].current_buttons_ &=
1613 ~GetWebMouseEventModifierForButton(WebMouseEvent::ButtonRight); 1737 ~GetWebMouseEventModifierForButton(WebMouseEvent::ButtonRight);
1614 pressed_button_ = WebMouseEvent::ButtonNone; 1738 current_pointer_state_[kMousePointerId].pressed_button_ =
1739 WebMouseEvent::ButtonNone;
1615 1740
1616 InitMouseEvent(WebInputEvent::MouseUp, 1741 InitMouseEvent(WebInputEvent::MouseUp,
1617 WebMouseEvent::ButtonRight, 1742 WebMouseEvent::ButtonRight,
1618 current_buttons_, 1743 current_pointer_state_[kMousePointerId].current_buttons_,
1619 last_mouse_pos_, 1744 current_pointer_state_[kMousePointerId].last_pos_,
1620 GetCurrentEventTimeSec(), 1745 GetCurrentEventTimeSec(),
1621 click_count_, 1746 click_count_,
1622 0, 1747 0,
1748 blink::WebPointerProperties::PointerType::Mouse,
1749 0,
1623 &event); 1750 &event);
1624 HandleInputEventOnViewOrPopup(event); 1751 HandleInputEventOnViewOrPopup(event);
1625 #endif 1752 #endif
1626 1753
1627 std::vector<std::string> menu_items = 1754 std::vector<std::string> menu_items =
1628 MakeMenuItemStringsFor(last_context_menu_data_.get(), delegate_); 1755 MakeMenuItemStringsFor(last_context_menu_data_.get(), delegate_);
1629 last_context_menu_data_.reset(); 1756 last_context_menu_data_.reset();
1630 return menu_items; 1757 return menu_items;
1631 } 1758 }
1632 1759
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
1819 1946
1820 void EventSender::TouchCancel() { 1947 void EventSender::TouchCancel() {
1821 SendCurrentTouchEvent(WebInputEvent::TouchCancel, false); 1948 SendCurrentTouchEvent(WebInputEvent::TouchCancel, false);
1822 } 1949 }
1823 1950
1824 void EventSender::TouchEnd() { 1951 void EventSender::TouchEnd() {
1825 SendCurrentTouchEvent(WebInputEvent::TouchEnd, false); 1952 SendCurrentTouchEvent(WebInputEvent::TouchEnd, false);
1826 } 1953 }
1827 1954
1828 void EventSender::LeapForward(int milliseconds) { 1955 void EventSender::LeapForward(int milliseconds) {
1829 if (is_drag_mode_ && pressed_button_ == WebMouseEvent::ButtonLeft && 1956 if (is_drag_mode_ && current_pointer_state_[kMousePointerId].pressed_button_
1957 == WebMouseEvent::ButtonLeft &&
1830 !replaying_saved_events_) { 1958 !replaying_saved_events_) {
1831 SavedEvent saved_event; 1959 SavedEvent saved_event;
1832 saved_event.type = SavedEvent::TYPE_LEAP_FORWARD; 1960 saved_event.type = SavedEvent::TYPE_LEAP_FORWARD;
1833 saved_event.milliseconds = milliseconds; 1961 saved_event.milliseconds = milliseconds;
1834 mouse_event_queue_.push_back(saved_event); 1962 mouse_event_queue_.push_back(saved_event);
1835 } else { 1963 } else {
1836 DoLeapForward(milliseconds); 1964 DoLeapForward(milliseconds);
1837 } 1965 }
1838 } 1966 }
1839 1967
(...skipping 16 matching lines...) Expand all
1856 item.filenameData = delegate_->GetAbsoluteWebStringFromUTF8Path(files[i]); 1984 item.filenameData = delegate_->GetAbsoluteWebStringFromUTF8Path(files[i]);
1857 current_drag_data_.addItem(item); 1985 current_drag_data_.addItem(item);
1858 absolute_filenames[i] = item.filenameData; 1986 absolute_filenames[i] = item.filenameData;
1859 } 1987 }
1860 current_drag_data_.setFilesystemId( 1988 current_drag_data_.setFilesystemId(
1861 delegate_->RegisterIsolatedFileSystem(absolute_filenames)); 1989 delegate_->RegisterIsolatedFileSystem(absolute_filenames));
1862 current_drag_effects_allowed_ = blink::WebDragOperationCopy; 1990 current_drag_effects_allowed_ = blink::WebDragOperationCopy;
1863 1991
1864 // Provide a drag source. 1992 // Provide a drag source.
1865 view_->dragTargetDragEnter(current_drag_data_, 1993 view_->dragTargetDragEnter(current_drag_data_,
1866 last_mouse_pos_, 1994 current_pointer_state_[kMousePointerId].last_pos_,
1867 last_mouse_pos_, 1995 current_pointer_state_[kMousePointerId].last_pos_,
1868 current_drag_effects_allowed_, 1996 current_drag_effects_allowed_,
1869 0); 1997 0);
1870 // |is_drag_mode_| saves events and then replays them later. We don't 1998 // |is_drag_mode_| saves events and then replays them later. We don't
1871 // need/want that. 1999 // need/want that.
1872 is_drag_mode_ = false; 2000 is_drag_mode_ = false;
1873 2001
1874 // Make the rest of eventSender think a drag is in progress. 2002 // Make the rest of eventSender think a drag is in progress.
1875 pressed_button_ = WebMouseEvent::ButtonLeft; 2003 current_pointer_state_[kMousePointerId].pressed_button_ =
1876 current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_); 2004 WebMouseEvent::ButtonLeft;
2005 current_pointer_state_[kMousePointerId].current_buttons_ |=
2006 GetWebMouseEventModifierForButton(
2007 current_pointer_state_[kMousePointerId].pressed_button_);
1877 } 2008 }
1878 2009
1879 void EventSender::AddTouchPoint(float x, float y, gin::Arguments* args) { 2010 void EventSender::AddTouchPoint(float x, float y, gin::Arguments* args) {
1880 WebTouchPoint touch_point; 2011 WebTouchPoint touch_point;
1881 touch_point.pointerType = WebPointerProperties::PointerType::Touch; 2012 touch_point.pointerType = WebPointerProperties::PointerType::Touch;
1882 touch_point.state = WebTouchPoint::StatePressed; 2013 touch_point.state = WebTouchPoint::StatePressed;
1883 touch_point.position = WebFloatPoint(x, y); 2014 touch_point.position = WebFloatPoint(x, y);
1884 touch_point.screenPosition = touch_point.position; 2015 touch_point.screenPosition = touch_point.position;
1885 2016
1886 int highest_id = -1; 2017 int highest_id = -1;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1966 SendGesturesForMouseWheelEvent(wheel_event); 2097 SendGesturesForMouseWheelEvent(wheel_event);
1967 } 2098 }
1968 } 2099 }
1969 2100
1970 void EventSender::MouseMoveTo(gin::Arguments* args) { 2101 void EventSender::MouseMoveTo(gin::Arguments* args) {
1971 if (force_layout_on_events_) 2102 if (force_layout_on_events_)
1972 view_->updateAllLifecyclePhases(); 2103 view_->updateAllLifecyclePhases();
1973 2104
1974 double x; 2105 double x;
1975 double y; 2106 double y;
2107 blink::WebPointerProperties::PointerType pointerType =
2108 blink::WebPointerProperties::PointerType::Mouse;
2109 int pointerId = 0;
1976 if (!args->GetNext(&x) || !args->GetNext(&y)) { 2110 if (!args->GetNext(&x) || !args->GetNext(&y)) {
1977 args->ThrowError(); 2111 args->ThrowError();
1978 return; 2112 return;
1979 } 2113 }
1980 WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y)); 2114 WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y));
1981 2115
1982 int modifiers = 0; 2116 int modifiers = 0;
1983 if (!args->PeekNext().IsEmpty()) 2117 if (!args->PeekNext().IsEmpty()) {
1984 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); 2118 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext());
2119 args->Skip();
2120 }
1985 2121
1986 if (is_drag_mode_ && pressed_button_ == WebMouseEvent::ButtonLeft && 2122 if (!getMousePenPointerTypeAndId(args, pointerType, pointerId))
1987 !replaying_saved_events_) { 2123 return;
1988 SavedEvent saved_event; 2124
1989 saved_event.type = SavedEvent::TYPE_MOUSE_MOVE; 2125 if (pointerType == blink::WebPointerProperties::PointerType::Mouse) {
1990 saved_event.pos = mouse_pos; 2126 if (is_drag_mode_ && current_pointer_state_[kMousePointerId].pressed_button_
1991 saved_event.modifiers = modifiers; 2127 == WebMouseEvent::ButtonLeft
1992 mouse_event_queue_.push_back(saved_event); 2128 && !replaying_saved_events_) {
2129 SavedEvent saved_event;
2130 saved_event.type = SavedEvent::TYPE_MOUSE_MOVE;
2131 saved_event.pos = mouse_pos;
2132 saved_event.modifiers = modifiers;
2133 mouse_event_queue_.push_back(saved_event);
2134 } else {
2135 WebMouseEvent event;
2136 InitMouseEvent(WebInputEvent::MouseMove,
2137 current_pointer_state_[kMousePointerId].pressed_button_,
2138 current_pointer_state_[kMousePointerId].current_buttons_,
2139 mouse_pos,
2140 GetCurrentEventTimeSec(),
2141 click_count_,
2142 modifiers,
2143 pointerType,
2144 0,
mustaq 2016/04/07 19:30:02 Same as before, don't worry about pointerId, and u
Navid Zolghadr 2016/04/08 17:38:44 Done.
2145 &event);
2146 DoMouseMove(event);
2147 }
1993 } else { 2148 } else {
1994 WebMouseEvent event; 2149 current_pointer_state_[pointerId].last_pos_ = mouse_pos;
1995 InitMouseEvent(WebInputEvent::MouseMove, 2150
1996 pressed_button_, 2151 WebMouseEvent event;
1997 current_buttons_, 2152 InitMouseEvent(WebInputEvent::MouseMove,
1998 mouse_pos, 2153 current_pointer_state_[pointerId].pressed_button_,
1999 GetCurrentEventTimeSec(), 2154 current_pointer_state_[pointerId].current_buttons_,
2000 click_count_, 2155 mouse_pos,
2001 modifiers, 2156 GetCurrentEventTimeSec(),
2002 &event); 2157 0,
2003 DoMouseMove(event); 2158 modifiers,
2159 pointerType,
2160 pointerId,
2161 &event);
2162 HandleInputEventOnViewOrPopup(event);
2004 } 2163 }
2005 } 2164 }
2006 2165
2007 void EventSender::MouseLeave() { 2166 void EventSender::MouseLeave() {
2008 if (force_layout_on_events_) 2167 if (force_layout_on_events_)
2009 view_->updateAllLifecyclePhases(); 2168 view_->updateAllLifecyclePhases();
2010 2169
2011 WebMouseEvent event; 2170 WebMouseEvent event;
2012 InitMouseEvent(WebInputEvent::MouseLeave, 2171 InitMouseEvent(WebInputEvent::MouseLeave,
2013 WebMouseEvent::ButtonNone, 2172 WebMouseEvent::ButtonNone,
2014 0, 2173 0,
2015 last_mouse_pos_, 2174 current_pointer_state_[kMousePointerId].last_pos_,
2016 GetCurrentEventTimeSec(), 2175 GetCurrentEventTimeSec(),
2017 click_count_, 2176 click_count_,
2018 0, 2177 0,
2178 blink::WebPointerProperties::PointerType::Mouse,
2179 0,
2019 &event); 2180 &event);
2020 HandleInputEventOnViewOrPopup(event); 2181 HandleInputEventOnViewOrPopup(event);
2021 } 2182 }
2022 2183
2023 2184
2024 void EventSender::ScheduleAsynchronousClick(int button_number, int modifiers) { 2185 void EventSender::ScheduleAsynchronousClick(int button_number, int modifiers) {
2025 delegate_->PostTask(new MouseDownTask(this, button_number, modifiers)); 2186 delegate_->PostTask(new MouseDownTask(this, button_number, modifiers));
2026 delegate_->PostTask(new MouseUpTask(this, button_number, modifiers)); 2187 delegate_->PostTask(new MouseUpTask(this, button_number, modifiers));
2027 } 2188 }
2028 2189
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
2320 2481
2321 if (force_layout_on_events_) 2482 if (force_layout_on_events_)
2322 view_->updateAllLifecyclePhases(); 2483 view_->updateAllLifecyclePhases();
2323 2484
2324 WebInputEventResult result = HandleInputEventOnViewOrPopup(event); 2485 WebInputEventResult result = HandleInputEventOnViewOrPopup(event);
2325 2486
2326 // Long press might start a drag drop session. Complete it if so. 2487 // Long press might start a drag drop session. Complete it if so.
2327 if (type == WebInputEvent::GestureLongPress && !current_drag_data_.isNull()) { 2488 if (type == WebInputEvent::GestureLongPress && !current_drag_data_.isNull()) {
2328 WebMouseEvent mouse_event; 2489 WebMouseEvent mouse_event;
2329 InitMouseEvent(WebInputEvent::MouseDown, 2490 InitMouseEvent(WebInputEvent::MouseDown,
2330 pressed_button_, 2491 current_pointer_state_[kMousePointerId].pressed_button_,
2331 current_buttons_, 2492 current_pointer_state_[kMousePointerId].current_buttons_,
2332 WebPoint(x, y), 2493 WebPoint(x, y),
2333 GetCurrentEventTimeSec(), 2494 GetCurrentEventTimeSec(),
2334 click_count_, 2495 click_count_,
2335 modifiers_, 2496 current_pointer_state_[kMousePointerId].modifiers_,
2497 blink::WebPointerProperties::PointerType::Mouse,
2498 0,
2336 &mouse_event); 2499 &mouse_event);
2337 2500
2338 FinishDragAndDrop(mouse_event, blink::WebDragOperationNone); 2501 FinishDragAndDrop(mouse_event, blink::WebDragOperationNone);
2339 } 2502 }
2340 args->Return(result != WebInputEventResult::NotHandled); 2503 args->Return(result != WebInputEventResult::NotHandled);
2341 } 2504 }
2342 2505
2343 void EventSender::UpdateClickCountForButton( 2506 void EventSender::UpdateClickCountForButton(
2344 WebMouseEvent::Button button_type) { 2507 WebMouseEvent::Button button_type) {
2345 if ((GetCurrentEventTimeSec() - last_click_time_sec_ < 2508 if ((GetCurrentEventTimeSec() - last_click_time_sec_ <
2346 kMultipleClickTimeSec) && 2509 kMultipleClickTimeSec) &&
2347 (!OutsideMultiClickRadius(last_mouse_pos_, last_click_pos_)) && 2510 (!OutsideMultiClickRadius(
2348 (button_type == last_button_type_)) { 2511 current_pointer_state_[kMousePointerId].last_pos_, last_click_pos_))
2512 && (button_type == last_button_type_)) {
2349 ++click_count_; 2513 ++click_count_;
2350 } else { 2514 } else {
2351 click_count_ = 1; 2515 click_count_ = 1;
2352 last_button_type_ = button_type; 2516 last_button_type_ = button_type;
2353 } 2517 }
2354 } 2518 }
2355 2519
2356 void EventSender::InitMouseWheelEvent(gin::Arguments* args, 2520 void EventSender::InitMouseWheelEvent(gin::Arguments* args,
2357 MouseScrollType scroll_type, 2521 MouseScrollType scroll_type,
2358 WebMouseWheelEvent* event, 2522 WebMouseWheelEvent* event,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2391 } 2555 }
2392 } 2556 }
2393 } 2557 }
2394 } 2558 }
2395 if (can_scroll && send_wheel_gestures_) { 2559 if (can_scroll && send_wheel_gestures_) {
2396 can_scroll = false; 2560 can_scroll = false;
2397 *send_gestures = true; 2561 *send_gestures = true;
2398 } 2562 }
2399 2563
2400 InitMouseEvent(WebInputEvent::MouseWheel, 2564 InitMouseEvent(WebInputEvent::MouseWheel,
2401 pressed_button_, 2565 current_pointer_state_[kMousePointerId].pressed_button_,
2402 current_buttons_, 2566 current_pointer_state_[kMousePointerId].current_buttons_,
2403 last_mouse_pos_, 2567 current_pointer_state_[kMousePointerId].last_pos_,
2404 GetCurrentEventTimeSec(), 2568 GetCurrentEventTimeSec(),
2405 click_count_, 2569 click_count_,
2406 modifiers, 2570 modifiers,
2571 blink::WebPointerProperties::PointerType::Mouse,
2572 0,
2407 event); 2573 event);
2408 event->wheelTicksX = static_cast<float>(horizontal); 2574 event->wheelTicksX = static_cast<float>(horizontal);
2409 event->wheelTicksY = static_cast<float>(vertical); 2575 event->wheelTicksY = static_cast<float>(vertical);
2410 event->deltaX = event->wheelTicksX; 2576 event->deltaX = event->wheelTicksX;
2411 event->deltaY = event->wheelTicksY; 2577 event->deltaY = event->wheelTicksY;
2412 event->scrollByPage = paged; 2578 event->scrollByPage = paged;
2413 event->hasPreciseScrollingDeltas = has_precise_scrolling_deltas; 2579 event->hasPreciseScrollingDeltas = has_precise_scrolling_deltas;
2414 event->canScroll = can_scroll; 2580 event->canScroll = can_scroll;
2415 if (scroll_type == MouseScrollType::PIXEL) { 2581 if (scroll_type == MouseScrollType::PIXEL) {
2416 event->wheelTicksX /= kScrollbarPixelsPerTick; 2582 event->wheelTicksX /= kScrollbarPixelsPerTick;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2459 if (!args->PeekNext().IsEmpty()) { 2625 if (!args->PeekNext().IsEmpty()) {
2460 int tiltX, tiltY; 2626 int tiltX, tiltY;
2461 if (!args->GetNext(&tiltX) || !args->GetNext(&tiltY)) { 2627 if (!args->GetNext(&tiltX) || !args->GetNext(&tiltY)) {
2462 args->ThrowError(); 2628 args->ThrowError();
2463 return; 2629 return;
2464 } 2630 }
2465 e->tiltX = tiltX; 2631 e->tiltX = tiltX;
2466 e->tiltY = tiltY; 2632 e->tiltY = tiltY;
2467 } 2633 }
2468 2634
2469 if (!args->PeekNext().IsEmpty()) { 2635 if (!getPointerType(args, e->pointerType))
2470 std::string pointer_type_string; 2636 return;
2471 if (!args->GetNext(&pointer_type_string)) {
2472 args->ThrowError();
2473 return;
2474 }
2475 if (pointer_type_string == kPointerTypeStringUnknown) {
2476 e->pointerType = WebMouseEvent::PointerType::Unknown;
2477 } else if (pointer_type_string == kPointerTypeStringMouse) {
2478 e->pointerType = WebMouseEvent::PointerType::Mouse;
2479 } else if (pointer_type_string == kPointerTypeStringPen) {
2480 e->pointerType = WebMouseEvent::PointerType::Pen;
2481 } else if (pointer_type_string == kPointerTypeStringTouch) {
2482 e->pointerType = WebMouseEvent::PointerType::Touch;
2483 } else {
2484 args->ThrowError();
2485 return;
2486 }
2487 }
2488 } 2637 }
2489 2638
2490 void EventSender::FinishDragAndDrop(const WebMouseEvent& e, 2639 void EventSender::FinishDragAndDrop(const WebMouseEvent& e,
2491 blink::WebDragOperation drag_effect) { 2640 blink::WebDragOperation drag_effect) {
2492 WebPoint client_point(e.x, e.y); 2641 WebPoint client_point(e.x, e.y);
2493 WebPoint screen_point(e.globalX, e.globalY); 2642 WebPoint screen_point(e.globalX, e.globalY);
2494 current_drag_effect_ = drag_effect; 2643 current_drag_effect_ = drag_effect;
2495 if (current_drag_effect_) { 2644 if (current_drag_effect_) {
2496 // Specifically pass any keyboard modifiers to the drop method. This allows 2645 // Specifically pass any keyboard modifiers to the drop method. This allows
2497 // tests to control the drop type (i.e. copy or move). 2646 // tests to control the drop type (i.e. copy or move).
2498 view_->dragTargetDrop(client_point, screen_point, e.modifiers); 2647 view_->dragTargetDrop(client_point, screen_point, e.modifiers);
2499 } else { 2648 } else {
2500 view_->dragTargetDragLeave(); 2649 view_->dragTargetDragLeave();
2501 } 2650 }
2502 view_->dragSourceEndedAt(client_point, screen_point, current_drag_effect_); 2651 view_->dragSourceEndedAt(client_point, screen_point, current_drag_effect_);
2503 view_->dragSourceSystemDragEnded(); 2652 view_->dragSourceSystemDragEnded();
2504 2653
2505 current_drag_data_.reset(); 2654 current_drag_data_.reset();
2506 } 2655 }
2507 2656
2508 void EventSender::DoMouseUp(const WebMouseEvent& e) { 2657 void EventSender::DoMouseUp(const WebMouseEvent& e) {
2509 HandleInputEventOnViewOrPopup(e); 2658 HandleInputEventOnViewOrPopup(e);
2510 2659
2511 last_click_time_sec_ = e.timeStampSeconds; 2660 last_click_time_sec_ = e.timeStampSeconds;
2512 last_click_pos_ = last_mouse_pos_; 2661 last_click_pos_ = current_pointer_state_[kMousePointerId].last_pos_;
2513 2662
2514 // If we're in a drag operation, complete it. 2663 // If we're in a drag operation, complete it.
2515 if (current_drag_data_.isNull()) 2664 if (current_drag_data_.isNull())
2516 return; 2665 return;
2517 2666
2518 WebPoint client_point(e.x, e.y); 2667 WebPoint client_point(e.x, e.y);
2519 WebPoint screen_point(e.globalX, e.globalY); 2668 WebPoint screen_point(e.globalX, e.globalY);
2520 blink::WebDragOperation drag_effect = view_->dragTargetDragOver( 2669 blink::WebDragOperation drag_effect = view_->dragTargetDragOver(
2521 client_point, 2670 client_point,
2522 screen_point, 2671 screen_point,
2523 current_drag_effects_allowed_, 2672 current_drag_effects_allowed_,
2524 e.modifiers); 2673 e.modifiers);
2525 2674
2526 // Bail if dragover caused cancellation. 2675 // Bail if dragover caused cancellation.
2527 if (current_drag_data_.isNull()) 2676 if (current_drag_data_.isNull())
2528 return; 2677 return;
2529 2678
2530 FinishDragAndDrop(e, drag_effect); 2679 FinishDragAndDrop(e, drag_effect);
2531 } 2680 }
2532 2681
2533 void EventSender::DoMouseMove(const WebMouseEvent& e) { 2682 void EventSender::DoMouseMove(const WebMouseEvent& e) {
2534 last_mouse_pos_ = WebPoint(e.x, e.y); 2683 current_pointer_state_[kMousePointerId].last_pos_ = WebPoint(e.x, e.y);
2535 2684
2536 HandleInputEventOnViewOrPopup(e); 2685 HandleInputEventOnViewOrPopup(e);
2537 2686
2538 if (pressed_button_ == WebMouseEvent::ButtonNone || 2687 if (current_pointer_state_[kMousePointerId].pressed_button_
2539 current_drag_data_.isNull()) { 2688 == WebMouseEvent::ButtonNone
2689 || current_drag_data_.isNull()) {
2540 return; 2690 return;
2541 } 2691 }
2542 2692
2543 WebPoint client_point(e.x, e.y); 2693 WebPoint client_point(e.x, e.y);
2544 WebPoint screen_point(e.globalX, e.globalY); 2694 WebPoint screen_point(e.globalX, e.globalY);
2545 current_drag_effect_ = view_->dragTargetDragOver( 2695 current_drag_effect_ = view_->dragTargetDragOver(
2546 client_point, screen_point, current_drag_effects_allowed_, e.modifiers); 2696 client_point, screen_point, current_drag_effects_allowed_, e.modifiers);
2547 } 2697 }
2548 2698
2549 void EventSender::ReplaySavedEvents() { 2699 void EventSender::ReplaySavedEvents() {
2550 replaying_saved_events_ = true; 2700 replaying_saved_events_ = true;
2551 while (!mouse_event_queue_.empty()) { 2701 while (!mouse_event_queue_.empty()) {
2552 SavedEvent e = mouse_event_queue_.front(); 2702 SavedEvent e = mouse_event_queue_.front();
2553 mouse_event_queue_.pop_front(); 2703 mouse_event_queue_.pop_front();
2554 2704
2555 switch (e.type) { 2705 switch (e.type) {
2556 case SavedEvent::TYPE_MOUSE_MOVE: { 2706 case SavedEvent::TYPE_MOUSE_MOVE: {
2557 WebMouseEvent event; 2707 WebMouseEvent event;
2558 InitMouseEvent(WebInputEvent::MouseMove, 2708 InitMouseEvent(WebInputEvent::MouseMove,
2559 pressed_button_, 2709 current_pointer_state_[kMousePointerId].pressed_button_,
2560 current_buttons_, 2710 current_pointer_state_[kMousePointerId].current_buttons_,
2561 e.pos, 2711 e.pos,
2562 GetCurrentEventTimeSec(), 2712 GetCurrentEventTimeSec(),
2563 click_count_, 2713 click_count_,
2564 e.modifiers, 2714 e.modifiers,
2715 blink::WebPointerProperties::PointerType::Mouse,
2716 0,
2565 &event); 2717 &event);
2566 DoMouseMove(event); 2718 DoMouseMove(event);
2567 break; 2719 break;
2568 } 2720 }
2569 case SavedEvent::TYPE_LEAP_FORWARD: 2721 case SavedEvent::TYPE_LEAP_FORWARD:
2570 DoLeapForward(e.milliseconds); 2722 DoLeapForward(e.milliseconds);
2571 break; 2723 break;
2572 case SavedEvent::TYPE_MOUSE_UP: { 2724 case SavedEvent::TYPE_MOUSE_UP: {
2573 current_buttons_ &= ~GetWebMouseEventModifierForButton(e.button_type); 2725 current_pointer_state_[kMousePointerId].current_buttons_ &=
2574 pressed_button_ = WebMouseEvent::ButtonNone; 2726 ~GetWebMouseEventModifierForButton(e.button_type);
2727 current_pointer_state_[kMousePointerId].pressed_button_ =
2728 WebMouseEvent::ButtonNone;
2575 2729
2576 WebMouseEvent event; 2730 WebMouseEvent event;
2577 InitMouseEvent(WebInputEvent::MouseUp, 2731 InitMouseEvent(WebInputEvent::MouseUp,
2578 e.button_type, 2732 e.button_type,
2579 current_buttons_, 2733 current_pointer_state_[kMousePointerId].current_buttons_,
2580 last_mouse_pos_, 2734 current_pointer_state_[kMousePointerId].last_pos_,
2581 GetCurrentEventTimeSec(), 2735 GetCurrentEventTimeSec(),
2582 click_count_, 2736 click_count_,
2583 e.modifiers, 2737 e.modifiers,
2738 blink::WebPointerProperties::PointerType::Mouse,
2739 0,
2584 &event); 2740 &event);
2585 DoMouseUp(event); 2741 DoMouseUp(event);
2586 break; 2742 break;
2587 } 2743 }
2588 default: 2744 default:
2589 NOTREACHED(); 2745 NOTREACHED();
2590 } 2746 }
2591 } 2747 }
2592 2748
2593 replaying_saved_events_ = false; 2749 replaying_saved_events_ = false;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
2655 &end_event); 2811 &end_event);
2656 end_event.data.scrollEnd.deltaUnits = 2812 end_event.data.scrollEnd.deltaUnits =
2657 begin_event.data.scrollBegin.deltaHintUnits; 2813 begin_event.data.scrollBegin.deltaHintUnits;
2658 2814
2659 if (force_layout_on_events_) 2815 if (force_layout_on_events_)
2660 view_->updateAllLifecyclePhases(); 2816 view_->updateAllLifecyclePhases();
2661 HandleInputEventOnViewOrPopup(end_event); 2817 HandleInputEventOnViewOrPopup(end_event);
2662 } 2818 }
2663 2819
2664 } // namespace test_runner 2820 } // namespace test_runner
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698