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

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: 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 char* kPointerTypeStringUnknown = "";
62 const char* kPointerTypeStringMouse = "mouse";
63 const char* kPointerTypeStringPen = "pen";
64 const char* kPointerTypeStringTouch = "touch";
65
dtapuska 2016/04/05 20:30:40 I'd invert the function to return false on failure
Navid Zolghadr 2016/04/06 15:27:10 Sure
66 bool getPointerType(gin::Arguments* args,
67 blink::WebPointerProperties::PointerType &t,
68 bool isOnlyMouseAndPenAllowed = false) {
69 if (!args->PeekNext().IsEmpty()) {
70 std::string pointer_type_string;
71 if (!args->GetNext(&pointer_type_string)) {
72 args->ThrowError();
73 return true;
74 }
75 if (pointer_type_string == kPointerTypeStringUnknown) {
76 if (isOnlyMouseAndPenAllowed) {
77 args->ThrowError();
78 return true;
79 }
80 t = WebMouseEvent::PointerType::Unknown;
81 } else if (pointer_type_string == kPointerTypeStringMouse) {
82 t = WebMouseEvent::PointerType::Mouse;
83 } else if (pointer_type_string == kPointerTypeStringPen) {
84 t = WebMouseEvent::PointerType::Pen;
85 } else if (pointer_type_string == kPointerTypeStringTouch) {
86 if (isOnlyMouseAndPenAllowed) {
87 args->ThrowError();
88 return true;
89 }
90 t = WebMouseEvent::PointerType::Touch;
91 } else {
92 args->ThrowError();
93 return true;
94 }
95 }
96 return false;
97 }
98
61 WebMouseEvent::Button GetButtonTypeFromButtonNumber(int button_code) { 99 WebMouseEvent::Button GetButtonTypeFromButtonNumber(int button_code) {
62 switch (button_code) { 100 switch (button_code) {
63 case -1: 101 case -1:
64 return WebMouseEvent::ButtonNone; 102 return WebMouseEvent::ButtonNone;
65 case 0: 103 case 0:
66 return WebMouseEvent::ButtonLeft; 104 return WebMouseEvent::ButtonLeft;
67 case 1: 105 case 1:
68 return WebMouseEvent::ButtonMiddle; 106 return WebMouseEvent::ButtonMiddle;
69 case 2: 107 case 2:
70 return WebMouseEvent::ButtonRight; 108 return WebMouseEvent::ButtonRight;
(...skipping 25 matching lines...) Expand all
96 | (buttons & kButtonsInModifiers); 134 | (buttons & kButtonsInModifiers);
97 } 135 }
98 136
99 void InitMouseEvent(WebInputEvent::Type t, 137 void InitMouseEvent(WebInputEvent::Type t,
100 WebMouseEvent::Button b, 138 WebMouseEvent::Button b,
101 int current_buttons, 139 int current_buttons,
102 const WebPoint& pos, 140 const WebPoint& pos,
103 double time_stamp, 141 double time_stamp,
104 int click_count, 142 int click_count,
105 int modifiers, 143 int modifiers,
144 blink::WebPointerProperties::PointerType pointerType,
145 int pointerId,
106 WebMouseEvent* e) { 146 WebMouseEvent* e) {
107 e->type = t; 147 e->type = t;
108 e->button = b; 148 e->button = b;
109 e->modifiers = modifiersWithButtons(modifiers, current_buttons); 149 e->modifiers = modifiersWithButtons(modifiers, current_buttons);
110 e->x = pos.x; 150 e->x = pos.x;
111 e->y = pos.y; 151 e->y = pos.y;
112 e->globalX = pos.x; 152 e->globalX = pos.x;
113 e->globalY = pos.y; 153 e->globalY = pos.y;
114 e->pointerType = blink::WebPointerProperties::PointerType::Mouse; 154 e->pointerType = pointerType;
155 e->id = pointerId;
115 e->timeStampSeconds = time_stamp; 156 e->timeStampSeconds = time_stamp;
116 e->clickCount = click_count; 157 e->clickCount = click_count;
117 } 158 }
118 159
119 void InitGestureEventFromMouseWheel(WebInputEvent::Type type, 160 void InitGestureEventFromMouseWheel(WebInputEvent::Type type,
120 double time_stamp, 161 double time_stamp,
121 const WebMouseWheelEvent& wheel_event, 162 const WebMouseWheelEvent& wheel_event,
122 WebGestureEvent* gesture_event) { 163 WebGestureEvent* gesture_event) {
123 gesture_event->type = type; 164 gesture_event->type = type;
124 gesture_event->sourceDevice = blink::WebGestureDeviceTouchpad; 165 gesture_event->sourceDevice = blink::WebGestureDeviceTouchpad;
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 } 489 }
449 } else { 490 } else {
450 *units = WebGestureEvent::PrecisePixels; 491 *units = WebGestureEvent::PrecisePixels;
451 return true; 492 return true;
452 } 493 }
453 } 494 }
454 495
455 const char* kSourceDeviceStringTouchpad = "touchpad"; 496 const char* kSourceDeviceStringTouchpad = "touchpad";
456 const char* kSourceDeviceStringTouchscreen = "touchscreen"; 497 const char* kSourceDeviceStringTouchscreen = "touchscreen";
457 498
458 const char* kPointerTypeStringUnknown = "";
459 const char* kPointerTypeStringMouse = "mouse";
460 const char* kPointerTypeStringPen = "pen";
461 const char* kPointerTypeStringTouch = "touch";
462
463 } // namespace 499 } // namespace
464 500
465 class EventSenderBindings : public gin::Wrappable<EventSenderBindings> { 501 class EventSenderBindings : public gin::Wrappable<EventSenderBindings> {
466 public: 502 public:
467 static gin::WrapperInfo kWrapperInfo; 503 static gin::WrapperInfo kWrapperInfo;
468 504
469 static void Install(base::WeakPtr<EventSender> sender, 505 static void Install(base::WeakPtr<EventSender> sender,
470 blink::WebFrame* frame); 506 blink::WebFrame* frame);
471 507
472 private: 508 private:
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 sender_->ScheduleAsynchronousKeyDown(code_str, modifiers, 1007 sender_->ScheduleAsynchronousKeyDown(code_str, modifiers,
972 static_cast<KeyLocationCode>(location)); 1008 static_cast<KeyLocationCode>(location));
973 } 1009 }
974 1010
975 void EventSenderBindings::MouseDown(gin::Arguments* args) { 1011 void EventSenderBindings::MouseDown(gin::Arguments* args) {
976 if (!sender_) 1012 if (!sender_)
977 return; 1013 return;
978 1014
979 int button_number = 0; 1015 int button_number = 0;
980 int modifiers = 0; 1016 int modifiers = 0;
1017 blink::WebPointerProperties::PointerType pointerType =
1018 blink::WebPointerProperties::PointerType::Mouse;
1019 int pointerId = 0;
981 if (!args->PeekNext().IsEmpty()) { 1020 if (!args->PeekNext().IsEmpty()) {
982 args->GetNext(&button_number); 1021 if (!args->GetNext(&button_number)) {
983 if (!args->PeekNext().IsEmpty()) 1022 args->ThrowError();
1023 return;
1024 }
1025 if (!args->PeekNext().IsEmpty()) {
984 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); 1026 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext());
1027 args->Skip();
1028 }
985 } 1029 }
986 sender_->MouseDown(button_number, modifiers); 1030
1031 // Only allow pen or mouse through this API.
1032 if (getPointerType(args, pointerType, true))
1033 return;
1034 if (!args->PeekNext().IsEmpty()) {
1035 if (!args->GetNext(&pointerId)) {
1036 args->ThrowError();
1037 return;
1038 }
1039 }
1040
1041 sender_->MouseDown(button_number, modifiers, pointerType, pointerId);
987 } 1042 }
988 1043
989 void EventSenderBindings::MouseUp(gin::Arguments* args) { 1044 void EventSenderBindings::MouseUp(gin::Arguments* args) {
990 if (!sender_) 1045 if (!sender_)
991 return; 1046 return;
992 1047
993 int button_number = 0; 1048 int button_number = 0;
994 int modifiers = 0; 1049 int modifiers = 0;
1050 blink::WebPointerProperties::PointerType pointerType =
1051 blink::WebPointerProperties::PointerType::Mouse;
1052 int pointerId = 0;
995 if (!args->PeekNext().IsEmpty()) { 1053 if (!args->PeekNext().IsEmpty()) {
996 args->GetNext(&button_number); 1054 if (!args->GetNext(&button_number)) {
997 if (!args->PeekNext().IsEmpty()) 1055 args->ThrowError();
1056 return;
1057 }
1058 if (!args->PeekNext().IsEmpty()) {
998 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); 1059 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext());
1060 args->Skip();
1061 }
999 } 1062 }
1000 sender_->MouseUp(button_number, modifiers); 1063
1064 // Only allow pen or mouse through this API.
1065 if (getPointerType(args, pointerType))
1066 return;
1067 if (!args->PeekNext().IsEmpty()) {
1068 if (!args->GetNext(&pointerId)) {
1069 args->ThrowError();
1070 return;
1071 }
1072 }
1073
1074 sender_->MouseUp(button_number, modifiers, pointerType, pointerId);
1001 } 1075 }
1002 1076
1003 void EventSenderBindings::SetMouseButtonState(gin::Arguments* args) { 1077 void EventSenderBindings::SetMouseButtonState(gin::Arguments* args) {
1004 if (!sender_) 1078 if (!sender_)
1005 return; 1079 return;
1006 1080
1007 int button_number; 1081 int button_number;
1008 if (!args->GetNext(&button_number)) { 1082 if (!args->GetNext(&button_number)) {
1009 args->ThrowError(); 1083 args->ThrowError();
1010 return; 1084 return;
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
1196 1270
1197 EventSender::~EventSender() {} 1271 EventSender::~EventSender() {}
1198 1272
1199 void EventSender::Reset() { 1273 void EventSender::Reset() {
1200 DCHECK(current_drag_data_.isNull()); 1274 DCHECK(current_drag_data_.isNull());
1201 current_drag_data_.reset(); 1275 current_drag_data_.reset();
1202 current_drag_effect_ = blink::WebDragOperationNone; 1276 current_drag_effect_ = blink::WebDragOperationNone;
1203 current_drag_effects_allowed_ = blink::WebDragOperationNone; 1277 current_drag_effects_allowed_ = blink::WebDragOperationNone;
1204 if (view_ && pressed_button_ != WebMouseEvent::ButtonNone) 1278 if (view_ && pressed_button_ != WebMouseEvent::ButtonNone)
1205 view_->mouseCaptureLost(); 1279 view_->mouseCaptureLost();
1280 current_pen_state_.clear();
1206 pressed_button_ = WebMouseEvent::ButtonNone; 1281 pressed_button_ = WebMouseEvent::ButtonNone;
1207 current_buttons_ = 0; 1282 current_buttons_ = 0;
1208 modifiers_ = 0; 1283 modifiers_ = 0;
1209 is_drag_mode_ = true; 1284 is_drag_mode_ = true;
1210 force_layout_on_events_ = true; 1285 force_layout_on_events_ = true;
1211 1286
1212 #if defined(OS_WIN) 1287 #if defined(OS_WIN)
1213 wm_key_down_ = WM_KEYDOWN; 1288 wm_key_down_ = WM_KEYDOWN;
1214 wm_key_up_ = WM_KEYUP; 1289 wm_key_up_ = WM_KEYUP;
1215 wm_char_ = WM_CHAR; 1290 wm_char_ = WM_CHAR;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1257 void EventSender::DoDragDrop(const WebDragData& drag_data, 1332 void EventSender::DoDragDrop(const WebDragData& drag_data,
1258 WebDragOperationsMask mask) { 1333 WebDragOperationsMask mask) {
1259 WebMouseEvent event; 1334 WebMouseEvent event;
1260 InitMouseEvent(WebInputEvent::MouseDown, 1335 InitMouseEvent(WebInputEvent::MouseDown,
1261 pressed_button_, 1336 pressed_button_,
1262 current_buttons_, 1337 current_buttons_,
1263 last_mouse_pos_, 1338 last_mouse_pos_,
1264 GetCurrentEventTimeSec(), 1339 GetCurrentEventTimeSec(),
1265 click_count_, 1340 click_count_,
1266 modifiers_, 1341 modifiers_,
1342 blink::WebPointerProperties::PointerType::Mouse,
1343 0,
1267 &event); 1344 &event);
1268 WebPoint client_point(event.x, event.y); 1345 WebPoint client_point(event.x, event.y);
1269 WebPoint screen_point(event.globalX, event.globalY); 1346 WebPoint screen_point(event.globalX, event.globalY);
1270 current_drag_data_ = drag_data; 1347 current_drag_data_ = drag_data;
1271 current_drag_effects_allowed_ = mask; 1348 current_drag_effects_allowed_ = mask;
1272 current_drag_effect_ = view_->dragTargetDragEnter( 1349 current_drag_effect_ = view_->dragTargetDragEnter(
1273 drag_data, 1350 drag_data,
1274 client_point, 1351 client_point,
1275 screen_point, 1352 screen_point,
1276 current_drag_effects_allowed_, 1353 current_drag_effects_allowed_,
1277 modifiersWithButtons(modifiers_, current_buttons_)); 1354 modifiersWithButtons(modifiers_, current_buttons_));
1278 1355
1279 // Finish processing events. 1356 // Finish processing events.
1280 ReplaySavedEvents(); 1357 ReplaySavedEvents();
1281 } 1358 }
1282 1359
1283 void EventSender::MouseDown(int button_number, int modifiers) { 1360 void EventSender::MouseDown(int button_number, int modifiers,
1361 blink::WebPointerProperties::PointerType pointerType, int pointerId) {
1284 if (force_layout_on_events_) 1362 if (force_layout_on_events_)
1285 view_->updateAllLifecyclePhases(); 1363 view_->updateAllLifecyclePhases();
1286 1364
1287 DCHECK_NE(-1, button_number); 1365 DCHECK_NE(-1, button_number);
1288 1366
1289 WebMouseEvent::Button button_type = 1367 WebMouseEvent::Button button_type =
1290 GetButtonTypeFromButtonNumber(button_number); 1368 GetButtonTypeFromButtonNumber(button_number);
1291 1369
1292 UpdateClickCountForButton(button_type); 1370 WebMouseEvent event;
1371 if (pointerType == blink::WebPointerProperties::PointerType::Mouse) {
1372 UpdateClickCountForButton(button_type);
1293 1373
1294 pressed_button_ = button_type; 1374 pressed_button_ = button_type;
1295 current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_); 1375 current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_);
1296 modifiers_ = modifiers; 1376 modifiers_ = modifiers;
1377 InitMouseEvent(WebInputEvent::MouseDown,
1378 pressed_button_,
1379 current_buttons_,
1380 last_mouse_pos_,
1381 GetCurrentEventTimeSec(),
1382 click_count_,
1383 modifiers_,
1384 pointerType,
1385 0,
1386 &event);
1387 } else {
1388 current_pen_state_[pointerId].pressed_button_ = button_type;
1389 current_pen_state_[pointerId].current_buttons_ |=
1390 GetWebMouseEventModifierForButton(pressed_button_);
1391 current_pen_state_[pointerId].modifiers_ = modifiers;
1392 InitMouseEvent(WebInputEvent::MouseDown,
1393 current_pen_state_[pointerId].pressed_button_,
1394 current_pen_state_[pointerId].current_buttons_,
1395 current_pen_state_[pointerId].last_pos_,
1396 GetCurrentEventTimeSec(),
1397 0,
1398 modifiers_,
1399 pointerType,
1400 pointerId,
1401 &event);
1402 }
1297 1403
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); 1404 HandleInputEventOnViewOrPopup(event);
1308 } 1405 }
1309 1406
1310 void EventSender::MouseUp(int button_number, int modifiers) { 1407 void EventSender::MouseUp(int button_number, int modifiers,
1408 blink::WebPointerProperties::PointerType pointerType, int pointerId) {
1311 if (force_layout_on_events_) 1409 if (force_layout_on_events_)
1312 view_->updateAllLifecyclePhases(); 1410 view_->updateAllLifecyclePhases();
1313 1411
1314 DCHECK_NE(-1, button_number); 1412 DCHECK_NE(-1, button_number);
1315 1413
1316 WebMouseEvent::Button button_type = 1414 WebMouseEvent::Button button_type =
1317 GetButtonTypeFromButtonNumber(button_number); 1415 GetButtonTypeFromButtonNumber(button_number);
1318 1416
1319 if (is_drag_mode_ && !replaying_saved_events_) { 1417 if (pointerType == blink::WebPointerProperties::PointerType::Mouse) {
1320 SavedEvent saved_event; 1418 if (is_drag_mode_ && !replaying_saved_events_) {
1321 saved_event.type = SavedEvent::TYPE_MOUSE_UP; 1419 SavedEvent saved_event;
1322 saved_event.button_type = button_type; 1420 saved_event.type = SavedEvent::TYPE_MOUSE_UP;
1323 saved_event.modifiers = modifiers; 1421 saved_event.button_type = button_type;
1324 mouse_event_queue_.push_back(saved_event); 1422 saved_event.modifiers = modifiers;
1325 ReplaySavedEvents(); 1423 mouse_event_queue_.push_back(saved_event);
1424 ReplaySavedEvents();
1425 } else {
1426 current_buttons_ &= ~GetWebMouseEventModifierForButton(button_type);
1427 pressed_button_ = WebMouseEvent::ButtonNone;
1428
1429 WebMouseEvent event;
1430 InitMouseEvent(WebInputEvent::MouseUp,
1431 button_type,
1432 current_buttons_,
1433 last_mouse_pos_,
1434 GetCurrentEventTimeSec(),
1435 click_count_,
1436 modifiers,
1437 pointerType,
1438 0,
1439 &event);
1440 DoMouseUp(event);
1441 }
1326 } else { 1442 } else {
1327 current_buttons_ &= ~GetWebMouseEventModifierForButton(button_type); 1443 current_pen_state_[pointerId].current_buttons_ &=
1328 pressed_button_ = WebMouseEvent::ButtonNone; 1444 ~GetWebMouseEventModifierForButton(button_type);
1445 current_pen_state_[pointerId].pressed_button_ = WebMouseEvent::ButtonNone;
1329 1446
1330 WebMouseEvent event; 1447 WebMouseEvent event;
1331 InitMouseEvent(WebInputEvent::MouseUp, 1448 InitMouseEvent(WebInputEvent::MouseUp,
1332 button_type, 1449 button_type,
1333 current_buttons_, 1450 current_pen_state_[pointerId].current_buttons_,
1334 last_mouse_pos_, 1451 current_pen_state_[pointerId].last_pos_,
1335 GetCurrentEventTimeSec(), 1452 GetCurrentEventTimeSec(),
1336 click_count_, 1453 0,
1337 modifiers, 1454 modifiers,
1338 &event); 1455 pointerType,
1339 DoMouseUp(event); 1456 pointerId,
1457 &event);
1458 HandleInputEventOnViewOrPopup(event);
1340 } 1459 }
1341 } 1460 }
1342 1461
1343 void EventSender::SetMouseButtonState(int button_number, int modifiers) { 1462 void EventSender::SetMouseButtonState(int button_number, int modifiers) {
1344 pressed_button_ = GetButtonTypeFromButtonNumber(button_number); 1463 pressed_button_ = GetButtonTypeFromButtonNumber(button_number);
1345 current_buttons_ = (modifiers == -1) ? 1464 current_buttons_ = (modifiers == -1) ?
1346 GetWebMouseEventModifierForButton(pressed_button_) : 1465 GetWebMouseEventModifierForButton(pressed_button_) :
1347 modifiers & kButtonsInModifiers; 1466 modifiers & kButtonsInModifiers;
1348 } 1467 }
1349 1468
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1543 1662
1544 if (code == ui::VKEY_ESCAPE && !current_drag_data_.isNull()) { 1663 if (code == ui::VKEY_ESCAPE && !current_drag_data_.isNull()) {
1545 WebMouseEvent event; 1664 WebMouseEvent event;
1546 InitMouseEvent(WebInputEvent::MouseDown, 1665 InitMouseEvent(WebInputEvent::MouseDown,
1547 pressed_button_, 1666 pressed_button_,
1548 current_buttons_, 1667 current_buttons_,
1549 last_mouse_pos_, 1668 last_mouse_pos_,
1550 GetCurrentEventTimeSec(), 1669 GetCurrentEventTimeSec(),
1551 click_count_, 1670 click_count_,
1552 0, 1671 0,
1672 blink::WebPointerProperties::PointerType::Mouse,
1673 0,
1553 &event); 1674 &event);
1554 FinishDragAndDrop(event, blink::WebDragOperationNone); 1675 FinishDragAndDrop(event, blink::WebDragOperationNone);
1555 } 1676 }
1556 1677
1557 delegate_->ClearEditCommand(); 1678 delegate_->ClearEditCommand();
1558 1679
1559 if (generate_char) { 1680 if (generate_char) {
1560 WebKeyboardEvent event_char = event_up; 1681 WebKeyboardEvent event_char = event_up;
1561 event_char.type = WebInputEvent::Char; 1682 event_char.type = WebInputEvent::Char;
1562 // keyIdentifier is an empty string, unless the Enter key was pressed. 1683 // keyIdentifier is an empty string, unless the Enter key was pressed.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1598 pressed_button_ = WebMouseEvent::ButtonRight; 1719 pressed_button_ = WebMouseEvent::ButtonRight;
1599 current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_); 1720 current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_);
1600 } 1721 }
1601 InitMouseEvent(WebInputEvent::MouseDown, 1722 InitMouseEvent(WebInputEvent::MouseDown,
1602 WebMouseEvent::ButtonRight, 1723 WebMouseEvent::ButtonRight,
1603 current_buttons_, 1724 current_buttons_,
1604 last_mouse_pos_, 1725 last_mouse_pos_,
1605 GetCurrentEventTimeSec(), 1726 GetCurrentEventTimeSec(),
1606 click_count_, 1727 click_count_,
1607 0, 1728 0,
1729 blink::WebPointerProperties::PointerType::Mouse,
1730 0,
1608 &event); 1731 &event);
1609 HandleInputEventOnViewOrPopup(event); 1732 HandleInputEventOnViewOrPopup(event);
1610 1733
1611 #if defined(OS_WIN) 1734 #if defined(OS_WIN)
1612 current_buttons_ &= 1735 current_buttons_ &=
1613 ~GetWebMouseEventModifierForButton(WebMouseEvent::ButtonRight); 1736 ~GetWebMouseEventModifierForButton(WebMouseEvent::ButtonRight);
1614 pressed_button_ = WebMouseEvent::ButtonNone; 1737 pressed_button_ = WebMouseEvent::ButtonNone;
1615 1738
1616 InitMouseEvent(WebInputEvent::MouseUp, 1739 InitMouseEvent(WebInputEvent::MouseUp,
1617 WebMouseEvent::ButtonRight, 1740 WebMouseEvent::ButtonRight,
1618 current_buttons_, 1741 current_buttons_,
1619 last_mouse_pos_, 1742 last_mouse_pos_,
1620 GetCurrentEventTimeSec(), 1743 GetCurrentEventTimeSec(),
1621 click_count_, 1744 click_count_,
1622 0, 1745 0,
1746 blink::WebPointerProperties::PointerType::Mouse,
1747 0,
1623 &event); 1748 &event);
1624 HandleInputEventOnViewOrPopup(event); 1749 HandleInputEventOnViewOrPopup(event);
1625 #endif 1750 #endif
1626 1751
1627 std::vector<std::string> menu_items = 1752 std::vector<std::string> menu_items =
1628 MakeMenuItemStringsFor(last_context_menu_data_.get(), delegate_); 1753 MakeMenuItemStringsFor(last_context_menu_data_.get(), delegate_);
1629 last_context_menu_data_.reset(); 1754 last_context_menu_data_.reset();
1630 return menu_items; 1755 return menu_items;
1631 } 1756 }
1632 1757
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
1966 SendGesturesForMouseWheelEvent(wheel_event); 2091 SendGesturesForMouseWheelEvent(wheel_event);
1967 } 2092 }
1968 } 2093 }
1969 2094
1970 void EventSender::MouseMoveTo(gin::Arguments* args) { 2095 void EventSender::MouseMoveTo(gin::Arguments* args) {
1971 if (force_layout_on_events_) 2096 if (force_layout_on_events_)
1972 view_->updateAllLifecyclePhases(); 2097 view_->updateAllLifecyclePhases();
1973 2098
1974 double x; 2099 double x;
1975 double y; 2100 double y;
2101 blink::WebPointerProperties::PointerType pointerType =
2102 blink::WebPointerProperties::PointerType::Mouse;
2103 int pointerId = 0;
1976 if (!args->GetNext(&x) || !args->GetNext(&y)) { 2104 if (!args->GetNext(&x) || !args->GetNext(&y)) {
1977 args->ThrowError(); 2105 args->ThrowError();
1978 return; 2106 return;
1979 } 2107 }
1980 WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y)); 2108 WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y));
1981 2109
1982 int modifiers = 0; 2110 int modifiers = 0;
1983 if (!args->PeekNext().IsEmpty()) 2111 if (!args->PeekNext().IsEmpty()) {
1984 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); 2112 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext());
2113 args->Skip();
2114 }
1985 2115
1986 if (is_drag_mode_ && pressed_button_ == WebMouseEvent::ButtonLeft && 2116 // Only allow pen or mouse through this API.
1987 !replaying_saved_events_) { 2117 if (getPointerType(args, pointerType, true))
1988 SavedEvent saved_event; 2118 return;
1989 saved_event.type = SavedEvent::TYPE_MOUSE_MOVE; 2119 if (!args->PeekNext().IsEmpty()) {
1990 saved_event.pos = mouse_pos; 2120 if (!args->GetNext(&pointerId)) {
1991 saved_event.modifiers = modifiers; 2121 args->ThrowError();
1992 mouse_event_queue_.push_back(saved_event); 2122 return;
2123 }
2124 }
2125
2126 if (pointerType == blink::WebPointerProperties::PointerType::Mouse) {
2127 if (is_drag_mode_ && pressed_button_ == WebMouseEvent::ButtonLeft &&
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 pressed_button_,
2138 current_buttons_,
2139 mouse_pos,
2140 GetCurrentEventTimeSec(),
2141 click_count_,
2142 modifiers,
2143 pointerType,
2144 0,
2145 &event);
2146 DoMouseMove(event);
2147 }
1993 } else { 2148 } else {
1994 WebMouseEvent event; 2149 current_pen_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_pen_state_[pointerId].pressed_button_,
1999 GetCurrentEventTimeSec(), 2154 current_pen_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 last_mouse_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 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 pressed_button_,
2331 current_buttons_, 2492 current_buttons_,
2332 WebPoint(x, y), 2493 WebPoint(x, y),
2333 GetCurrentEventTimeSec(), 2494 GetCurrentEventTimeSec(),
2334 click_count_, 2495 click_count_,
2335 modifiers_, 2496 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_ <
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
2397 *send_gestures = true; 2560 *send_gestures = true;
2398 } 2561 }
2399 2562
2400 InitMouseEvent(WebInputEvent::MouseWheel, 2563 InitMouseEvent(WebInputEvent::MouseWheel,
2401 pressed_button_, 2564 pressed_button_,
2402 current_buttons_, 2565 current_buttons_,
2403 last_mouse_pos_, 2566 last_mouse_pos_,
2404 GetCurrentEventTimeSec(), 2567 GetCurrentEventTimeSec(),
2405 click_count_, 2568 click_count_,
2406 modifiers, 2569 modifiers,
2570 blink::WebPointerProperties::PointerType::Mouse,
2571 0,
2407 event); 2572 event);
2408 event->wheelTicksX = static_cast<float>(horizontal); 2573 event->wheelTicksX = static_cast<float>(horizontal);
2409 event->wheelTicksY = static_cast<float>(vertical); 2574 event->wheelTicksY = static_cast<float>(vertical);
2410 event->deltaX = event->wheelTicksX; 2575 event->deltaX = event->wheelTicksX;
2411 event->deltaY = event->wheelTicksY; 2576 event->deltaY = event->wheelTicksY;
2412 event->scrollByPage = paged; 2577 event->scrollByPage = paged;
2413 event->hasPreciseScrollingDeltas = has_precise_scrolling_deltas; 2578 event->hasPreciseScrollingDeltas = has_precise_scrolling_deltas;
2414 event->canScroll = can_scroll; 2579 event->canScroll = can_scroll;
2415 if (scroll_type == MouseScrollType::PIXEL) { 2580 if (scroll_type == MouseScrollType::PIXEL) {
2416 event->wheelTicksX /= kScrollbarPixelsPerTick; 2581 event->wheelTicksX /= kScrollbarPixelsPerTick;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2459 if (!args->PeekNext().IsEmpty()) { 2624 if (!args->PeekNext().IsEmpty()) {
2460 int tiltX, tiltY; 2625 int tiltX, tiltY;
2461 if (!args->GetNext(&tiltX) || !args->GetNext(&tiltY)) { 2626 if (!args->GetNext(&tiltX) || !args->GetNext(&tiltY)) {
2462 args->ThrowError(); 2627 args->ThrowError();
2463 return; 2628 return;
2464 } 2629 }
2465 e->tiltX = tiltX; 2630 e->tiltX = tiltX;
2466 e->tiltY = tiltY; 2631 e->tiltY = tiltY;
2467 } 2632 }
2468 2633
2469 if (!args->PeekNext().IsEmpty()) { 2634 if (getPointerType(args, e->pointerType))
2470 std::string pointer_type_string; 2635 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 } 2636 }
2489 2637
2490 void EventSender::FinishDragAndDrop(const WebMouseEvent& e, 2638 void EventSender::FinishDragAndDrop(const WebMouseEvent& e,
2491 blink::WebDragOperation drag_effect) { 2639 blink::WebDragOperation drag_effect) {
2492 WebPoint client_point(e.x, e.y); 2640 WebPoint client_point(e.x, e.y);
2493 WebPoint screen_point(e.globalX, e.globalY); 2641 WebPoint screen_point(e.globalX, e.globalY);
2494 current_drag_effect_ = drag_effect; 2642 current_drag_effect_ = drag_effect;
2495 if (current_drag_effect_) { 2643 if (current_drag_effect_) {
2496 // Specifically pass any keyboard modifiers to the drop method. This allows 2644 // Specifically pass any keyboard modifiers to the drop method. This allows
2497 // tests to control the drop type (i.e. copy or move). 2645 // tests to control the drop type (i.e. copy or move).
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2555 switch (e.type) { 2703 switch (e.type) {
2556 case SavedEvent::TYPE_MOUSE_MOVE: { 2704 case SavedEvent::TYPE_MOUSE_MOVE: {
2557 WebMouseEvent event; 2705 WebMouseEvent event;
2558 InitMouseEvent(WebInputEvent::MouseMove, 2706 InitMouseEvent(WebInputEvent::MouseMove,
2559 pressed_button_, 2707 pressed_button_,
2560 current_buttons_, 2708 current_buttons_,
2561 e.pos, 2709 e.pos,
2562 GetCurrentEventTimeSec(), 2710 GetCurrentEventTimeSec(),
2563 click_count_, 2711 click_count_,
2564 e.modifiers, 2712 e.modifiers,
2713 blink::WebPointerProperties::PointerType::Mouse,
2714 0,
2565 &event); 2715 &event);
2566 DoMouseMove(event); 2716 DoMouseMove(event);
2567 break; 2717 break;
2568 } 2718 }
2569 case SavedEvent::TYPE_LEAP_FORWARD: 2719 case SavedEvent::TYPE_LEAP_FORWARD:
2570 DoLeapForward(e.milliseconds); 2720 DoLeapForward(e.milliseconds);
2571 break; 2721 break;
2572 case SavedEvent::TYPE_MOUSE_UP: { 2722 case SavedEvent::TYPE_MOUSE_UP: {
2573 current_buttons_ &= ~GetWebMouseEventModifierForButton(e.button_type); 2723 current_buttons_ &= ~GetWebMouseEventModifierForButton(e.button_type);
2574 pressed_button_ = WebMouseEvent::ButtonNone; 2724 pressed_button_ = WebMouseEvent::ButtonNone;
2575 2725
2576 WebMouseEvent event; 2726 WebMouseEvent event;
2577 InitMouseEvent(WebInputEvent::MouseUp, 2727 InitMouseEvent(WebInputEvent::MouseUp,
2578 e.button_type, 2728 e.button_type,
2579 current_buttons_, 2729 current_buttons_,
2580 last_mouse_pos_, 2730 last_mouse_pos_,
2581 GetCurrentEventTimeSec(), 2731 GetCurrentEventTimeSec(),
2582 click_count_, 2732 click_count_,
2583 e.modifiers, 2733 e.modifiers,
2734 blink::WebPointerProperties::PointerType::Mouse,
2735 0,
2584 &event); 2736 &event);
2585 DoMouseUp(event); 2737 DoMouseUp(event);
2586 break; 2738 break;
2587 } 2739 }
2588 default: 2740 default:
2589 NOTREACHED(); 2741 NOTREACHED();
2590 } 2742 }
2591 } 2743 }
2592 2744
2593 replaying_saved_events_ = false; 2745 replaying_saved_events_ = false;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
2655 &end_event); 2807 &end_event);
2656 end_event.data.scrollEnd.deltaUnits = 2808 end_event.data.scrollEnd.deltaUnits =
2657 begin_event.data.scrollBegin.deltaHintUnits; 2809 begin_event.data.scrollBegin.deltaHintUnits;
2658 2810
2659 if (force_layout_on_events_) 2811 if (force_layout_on_events_)
2660 view_->updateAllLifecyclePhases(); 2812 view_->updateAllLifecyclePhases();
2661 HandleInputEventOnViewOrPopup(end_event); 2813 HandleInputEventOnViewOrPopup(end_event);
2662 } 2814 }
2663 2815
2664 } // namespace test_runner 2816 } // namespace test_runner
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698