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

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: Running "cl format" 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
« no previous file with comments | « components/test_runner/event_sender.h ('k') | third_party/WebKit/LayoutTests/TestExpectations » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 using blink::WebString; 54 using blink::WebString;
55 using blink::WebTouchEvent; 55 using blink::WebTouchEvent;
56 using blink::WebTouchPoint; 56 using blink::WebTouchPoint;
57 using blink::WebVector; 57 using blink::WebVector;
58 using blink::WebView; 58 using blink::WebView;
59 59
60 namespace test_runner { 60 namespace test_runner {
61 61
62 namespace { 62 namespace {
63 63
64 const int kMousePointerId = -1;
65 const char* kPointerTypeStringUnknown = "";
66 const char* kPointerTypeStringMouse = "mouse";
67 const char* kPointerTypeStringPen = "pen";
68 const char* kPointerTypeStringTouch = "touch";
69
70 // Assigns |pointerType| from the provided |args|. Returns false if there was
71 // any error.
72 bool getPointerType(gin::Arguments* args,
73 bool isOnlyMouseAndPenAllowed,
74 blink::WebPointerProperties::PointerType& pointerType) {
75 if (args->PeekNext().IsEmpty())
76 return true;
77 std::string pointer_type_string;
78 if (!args->GetNext(&pointer_type_string)) {
79 args->ThrowError();
80 return false;
81 }
82 if (isOnlyMouseAndPenAllowed &&
83 (pointer_type_string == kPointerTypeStringUnknown ||
84 pointer_type_string == kPointerTypeStringTouch)) {
85 args->ThrowError();
86 return false;
87 }
88 if (pointer_type_string == kPointerTypeStringUnknown) {
89 pointerType = WebMouseEvent::PointerType::Unknown;
90 } else if (pointer_type_string == kPointerTypeStringMouse) {
91 pointerType = WebMouseEvent::PointerType::Mouse;
92 } else if (pointer_type_string == kPointerTypeStringPen) {
93 pointerType = WebMouseEvent::PointerType::Pen;
94 } else if (pointer_type_string == kPointerTypeStringTouch) {
95 pointerType = WebMouseEvent::PointerType::Touch;
96 } else {
97 args->ThrowError();
98 return false;
99 }
100 return true;
101 }
102
103 // Assigns |pointerType| and |pointerId| from the provided |args|. Returns
104 // false if there was any error.
105 bool getMousePenPointerTypeAndId(
106 gin::Arguments* args,
107 blink::WebPointerProperties::PointerType& pointerType,
108 int& pointerId) {
109 pointerType = blink::WebPointerProperties::PointerType::Mouse;
110 pointerId = kMousePointerId;
111 // Only allow pen or mouse through this API.
112 if (!getPointerType(args, false, pointerType))
113 return false;
114 if (!args->PeekNext().IsEmpty()) {
115 if (!args->GetNext(&pointerId)) {
116 args->ThrowError();
117 return false;
118 }
119 if (pointerType != blink::WebPointerProperties::PointerType::Mouse &&
120 pointerId == kMousePointerId) {
121 args->ThrowError();
122 return false;
123 }
124 } else if (pointerType == blink::WebPointerProperties::PointerType::Pen) {
125 pointerId = 1; // A default value for the id of the pen.
126 }
127 return true;
128 }
129
64 WebMouseEvent::Button GetButtonTypeFromButtonNumber(int button_code) { 130 WebMouseEvent::Button GetButtonTypeFromButtonNumber(int button_code) {
65 switch (button_code) { 131 switch (button_code) {
66 case -1: 132 case -1:
67 return WebMouseEvent::ButtonNone; 133 return WebMouseEvent::ButtonNone;
68 case 0: 134 case 0:
69 return WebMouseEvent::ButtonLeft; 135 return WebMouseEvent::ButtonLeft;
70 case 1: 136 case 1:
71 return WebMouseEvent::ButtonMiddle; 137 return WebMouseEvent::ButtonMiddle;
72 case 2: 138 case 2:
73 return WebMouseEvent::ButtonRight; 139 return WebMouseEvent::ButtonRight;
(...skipping 25 matching lines...) Expand all
99 | (buttons & kButtonsInModifiers); 165 | (buttons & kButtonsInModifiers);
100 } 166 }
101 167
102 void InitMouseEvent(WebInputEvent::Type t, 168 void InitMouseEvent(WebInputEvent::Type t,
103 WebMouseEvent::Button b, 169 WebMouseEvent::Button b,
104 int current_buttons, 170 int current_buttons,
105 const WebPoint& pos, 171 const WebPoint& pos,
106 double time_stamp, 172 double time_stamp,
107 int click_count, 173 int click_count,
108 int modifiers, 174 int modifiers,
175 blink::WebPointerProperties::PointerType pointerType,
176 int pointerId,
109 WebMouseEvent* e) { 177 WebMouseEvent* e) {
110 e->type = t; 178 e->type = t;
111 e->button = b; 179 e->button = b;
112 e->modifiers = modifiersWithButtons(modifiers, current_buttons); 180 e->modifiers = modifiersWithButtons(modifiers, current_buttons);
113 e->x = pos.x; 181 e->x = pos.x;
114 e->y = pos.y; 182 e->y = pos.y;
115 e->globalX = pos.x; 183 e->globalX = pos.x;
116 e->globalY = pos.y; 184 e->globalY = pos.y;
117 e->pointerType = blink::WebPointerProperties::PointerType::Mouse; 185 e->pointerType = pointerType;
186 e->id = pointerId;
118 e->timeStampSeconds = time_stamp; 187 e->timeStampSeconds = time_stamp;
119 e->clickCount = click_count; 188 e->clickCount = click_count;
120 } 189 }
121 190
122 void InitGestureEventFromMouseWheel(WebInputEvent::Type type, 191 void InitGestureEventFromMouseWheel(WebInputEvent::Type type,
123 double time_stamp, 192 double time_stamp,
124 const WebMouseWheelEvent& wheel_event, 193 const WebMouseWheelEvent& wheel_event,
125 WebGestureEvent* gesture_event) { 194 WebGestureEvent* gesture_event) {
126 gesture_event->type = type; 195 gesture_event->type = type;
127 gesture_event->sourceDevice = blink::WebGestureDeviceTouchpad; 196 gesture_event->sourceDevice = blink::WebGestureDeviceTouchpad;
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 } 471 }
403 } else { 472 } else {
404 *units = WebGestureEvent::PrecisePixels; 473 *units = WebGestureEvent::PrecisePixels;
405 return true; 474 return true;
406 } 475 }
407 } 476 }
408 477
409 const char* kSourceDeviceStringTouchpad = "touchpad"; 478 const char* kSourceDeviceStringTouchpad = "touchpad";
410 const char* kSourceDeviceStringTouchscreen = "touchscreen"; 479 const char* kSourceDeviceStringTouchscreen = "touchscreen";
411 480
412 const char* kPointerTypeStringUnknown = "";
413 const char* kPointerTypeStringMouse = "mouse";
414 const char* kPointerTypeStringPen = "pen";
415 const char* kPointerTypeStringTouch = "touch";
416
417 } // namespace 481 } // namespace
418 482
419 class EventSenderBindings : public gin::Wrappable<EventSenderBindings> { 483 class EventSenderBindings : public gin::Wrappable<EventSenderBindings> {
420 public: 484 public:
421 static gin::WrapperInfo kWrapperInfo; 485 static gin::WrapperInfo kWrapperInfo;
422 486
423 static void Install(base::WeakPtr<EventSender> sender, 487 static void Install(base::WeakPtr<EventSender> sender,
424 blink::WebFrame* frame); 488 blink::WebFrame* frame);
425 489
426 private: 490 private:
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 sender_->ScheduleAsynchronousKeyDown(code_str, modifiers, 989 sender_->ScheduleAsynchronousKeyDown(code_str, modifiers,
926 static_cast<KeyLocationCode>(location)); 990 static_cast<KeyLocationCode>(location));
927 } 991 }
928 992
929 void EventSenderBindings::MouseDown(gin::Arguments* args) { 993 void EventSenderBindings::MouseDown(gin::Arguments* args) {
930 if (!sender_) 994 if (!sender_)
931 return; 995 return;
932 996
933 int button_number = 0; 997 int button_number = 0;
934 int modifiers = 0; 998 int modifiers = 0;
999 blink::WebPointerProperties::PointerType pointerType =
1000 blink::WebPointerProperties::PointerType::Mouse;
1001 int pointerId = 0;
935 if (!args->PeekNext().IsEmpty()) { 1002 if (!args->PeekNext().IsEmpty()) {
936 args->GetNext(&button_number); 1003 if (!args->GetNext(&button_number)) {
937 if (!args->PeekNext().IsEmpty()) 1004 args->ThrowError();
1005 return;
1006 }
1007 if (!args->PeekNext().IsEmpty()) {
938 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); 1008 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext());
1009 args->Skip();
1010 }
939 } 1011 }
940 sender_->MouseDown(button_number, modifiers); 1012
1013 if (!getMousePenPointerTypeAndId(args, pointerType, pointerId))
1014 return;
1015
1016 sender_->PointerDown(button_number, modifiers, pointerType, pointerId);
941 } 1017 }
942 1018
943 void EventSenderBindings::MouseUp(gin::Arguments* args) { 1019 void EventSenderBindings::MouseUp(gin::Arguments* args) {
944 if (!sender_) 1020 if (!sender_)
945 return; 1021 return;
946 1022
947 int button_number = 0; 1023 int button_number = 0;
948 int modifiers = 0; 1024 int modifiers = 0;
1025 blink::WebPointerProperties::PointerType pointerType =
1026 blink::WebPointerProperties::PointerType::Mouse;
1027 int pointerId = 0;
949 if (!args->PeekNext().IsEmpty()) { 1028 if (!args->PeekNext().IsEmpty()) {
950 args->GetNext(&button_number); 1029 if (!args->GetNext(&button_number)) {
951 if (!args->PeekNext().IsEmpty()) 1030 args->ThrowError();
1031 return;
1032 }
1033 if (!args->PeekNext().IsEmpty()) {
952 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); 1034 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext());
1035 args->Skip();
1036 }
953 } 1037 }
954 sender_->MouseUp(button_number, modifiers); 1038
1039 if (!getMousePenPointerTypeAndId(args, pointerType, pointerId))
1040 return;
1041
1042 sender_->PointerUp(button_number, modifiers, pointerType, pointerId);
955 } 1043 }
956 1044
957 void EventSenderBindings::SetMouseButtonState(gin::Arguments* args) { 1045 void EventSenderBindings::SetMouseButtonState(gin::Arguments* args) {
958 if (!sender_) 1046 if (!sender_)
959 return; 1047 return;
960 1048
961 int button_number; 1049 int button_number;
962 if (!args->GetNext(&button_number)) { 1050 if (!args->GetNext(&button_number)) {
963 args->ThrowError(); 1051 args->ThrowError();
964 return; 1052 return;
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
1097 } 1185 }
1098 1186
1099 void EventSenderBindings::SetWmSysDeadChar(int sys_dead_char) { 1187 void EventSenderBindings::SetWmSysDeadChar(int sys_dead_char) {
1100 if (sender_) 1188 if (sender_)
1101 sender_->set_wm_sys_dead_char(sys_dead_char); 1189 sender_->set_wm_sys_dead_char(sys_dead_char);
1102 } 1190 }
1103 #endif 1191 #endif
1104 1192
1105 // EventSender ----------------------------------------------------------------- 1193 // EventSender -----------------------------------------------------------------
1106 1194
1107 WebMouseEvent::Button EventSender::pressed_button_ = WebMouseEvent::ButtonNone;
1108 int EventSender::current_buttons_ = 0;
1109 int EventSender::modifiers_ = 0;
1110
1111 WebPoint EventSender::last_mouse_pos_;
1112
1113 WebMouseEvent::Button EventSender::last_button_type_ = 1195 WebMouseEvent::Button EventSender::last_button_type_ =
1114 WebMouseEvent::ButtonNone; 1196 WebMouseEvent::ButtonNone;
1115 1197
1116 EventSender::SavedEvent::SavedEvent() 1198 EventSender::SavedEvent::SavedEvent()
1117 : type(TYPE_UNSPECIFIED), 1199 : type(TYPE_UNSPECIFIED),
1118 button_type(WebMouseEvent::ButtonNone), 1200 button_type(WebMouseEvent::ButtonNone),
1119 milliseconds(0), 1201 milliseconds(0),
1120 modifiers(0) {} 1202 modifiers(0) {}
1121 1203
1122 EventSender::EventSender(TestInterfaces* interfaces) 1204 EventSender::EventSender(TestInterfaces* interfaces)
(...skipping 25 matching lines...) Expand all
1148 weak_factory_(this) { 1230 weak_factory_(this) {
1149 } 1231 }
1150 1232
1151 EventSender::~EventSender() {} 1233 EventSender::~EventSender() {}
1152 1234
1153 void EventSender::Reset() { 1235 void EventSender::Reset() {
1154 DCHECK(current_drag_data_.isNull()); 1236 DCHECK(current_drag_data_.isNull());
1155 current_drag_data_.reset(); 1237 current_drag_data_.reset();
1156 current_drag_effect_ = blink::WebDragOperationNone; 1238 current_drag_effect_ = blink::WebDragOperationNone;
1157 current_drag_effects_allowed_ = blink::WebDragOperationNone; 1239 current_drag_effects_allowed_ = blink::WebDragOperationNone;
1158 if (view_ && pressed_button_ != WebMouseEvent::ButtonNone) 1240 if (view_ &&
1241 current_pointer_state_[kMousePointerId].pressed_button_ !=
1242 WebMouseEvent::ButtonNone)
1159 view_->mouseCaptureLost(); 1243 view_->mouseCaptureLost();
1160 pressed_button_ = WebMouseEvent::ButtonNone; 1244 current_pointer_state_.clear();
1161 current_buttons_ = 0;
1162 modifiers_ = 0;
1163 is_drag_mode_ = true; 1245 is_drag_mode_ = true;
1164 force_layout_on_events_ = true; 1246 force_layout_on_events_ = true;
1165 1247
1166 #if defined(OS_WIN) 1248 #if defined(OS_WIN)
1167 wm_key_down_ = WM_KEYDOWN; 1249 wm_key_down_ = WM_KEYDOWN;
1168 wm_key_up_ = WM_KEYUP; 1250 wm_key_up_ = WM_KEYUP;
1169 wm_char_ = WM_CHAR; 1251 wm_char_ = WM_CHAR;
1170 wm_dead_char_ = WM_DEADCHAR; 1252 wm_dead_char_ = WM_DEADCHAR;
1171 wm_sys_key_down_ = WM_SYSKEYDOWN; 1253 wm_sys_key_down_ = WM_SYSKEYDOWN;
1172 wm_sys_key_up_ = WM_SYSKEYUP; 1254 wm_sys_key_up_ = WM_SYSKEYUP;
1173 wm_sys_char_ = WM_SYSCHAR; 1255 wm_sys_char_ = WM_SYSCHAR;
1174 wm_sys_dead_char_ = WM_SYSDEADCHAR; 1256 wm_sys_dead_char_ = WM_SYSDEADCHAR;
1175 #endif 1257 #endif
1176 1258
1177 last_mouse_pos_ = WebPoint(0, 0);
1178 last_click_time_sec_ = 0; 1259 last_click_time_sec_ = 0;
1179 last_click_pos_ = WebPoint(0, 0); 1260 last_click_pos_ = WebPoint(0, 0);
1180 last_button_type_ = WebMouseEvent::ButtonNone; 1261 last_button_type_ = WebMouseEvent::ButtonNone;
1181 touch_points_.clear(); 1262 touch_points_.clear();
1182 last_context_menu_data_.reset(); 1263 last_context_menu_data_.reset();
1183 weak_factory_.InvalidateWeakPtrs(); 1264 weak_factory_.InvalidateWeakPtrs();
1184 current_gesture_location_ = WebPoint(0, 0); 1265 current_gesture_location_ = WebPoint(0, 0);
1185 mouse_event_queue_.clear(); 1266 mouse_event_queue_.clear();
1186 1267
1187 time_offset_ms_ = 0; 1268 time_offset_ms_ = 0;
(...skipping 17 matching lines...) Expand all
1205 } 1286 }
1206 1287
1207 void EventSender::SetContextMenuData(const WebContextMenuData& data) { 1288 void EventSender::SetContextMenuData(const WebContextMenuData& data) {
1208 last_context_menu_data_.reset(new WebContextMenuData(data)); 1289 last_context_menu_data_.reset(new WebContextMenuData(data));
1209 } 1290 }
1210 1291
1211 void EventSender::DoDragDrop(const WebDragData& drag_data, 1292 void EventSender::DoDragDrop(const WebDragData& drag_data,
1212 WebDragOperationsMask mask) { 1293 WebDragOperationsMask mask) {
1213 WebMouseEvent event; 1294 WebMouseEvent event;
1214 InitMouseEvent(WebInputEvent::MouseDown, 1295 InitMouseEvent(WebInputEvent::MouseDown,
1215 pressed_button_, 1296 current_pointer_state_[kMousePointerId].pressed_button_,
1216 current_buttons_, 1297 current_pointer_state_[kMousePointerId].current_buttons_,
1217 last_mouse_pos_, 1298 current_pointer_state_[kMousePointerId].last_pos_,
1218 GetCurrentEventTimeSec(), 1299 GetCurrentEventTimeSec(),
1219 click_count_, 1300 click_count_,
1220 modifiers_, 1301 current_pointer_state_[kMousePointerId].modifiers_,
1302 blink::WebPointerProperties::PointerType::Mouse,
1303 0,
1221 &event); 1304 &event);
1222 WebPoint client_point(event.x, event.y); 1305 WebPoint client_point(event.x, event.y);
1223 WebPoint screen_point(event.globalX, event.globalY); 1306 WebPoint screen_point(event.globalX, event.globalY);
1224 current_drag_data_ = drag_data; 1307 current_drag_data_ = drag_data;
1225 current_drag_effects_allowed_ = mask; 1308 current_drag_effects_allowed_ = mask;
1226 current_drag_effect_ = view_->dragTargetDragEnter( 1309 current_drag_effect_ = view_->dragTargetDragEnter(
1227 drag_data, 1310 drag_data,
1228 client_point, 1311 client_point,
1229 screen_point, 1312 screen_point,
1230 current_drag_effects_allowed_, 1313 current_drag_effects_allowed_,
1231 modifiersWithButtons(modifiers_, current_buttons_)); 1314 modifiersWithButtons(
1315 current_pointer_state_[kMousePointerId].modifiers_,
1316 current_pointer_state_[kMousePointerId].current_buttons_));
1232 1317
1233 // Finish processing events. 1318 // Finish processing events.
1234 ReplaySavedEvents(); 1319 ReplaySavedEvents();
1235 } 1320 }
1236 1321
1237 void EventSender::MouseDown(int button_number, int modifiers) { 1322 void EventSender::MouseDown(int button_number, int modifiers) {
1323 PointerDown(button_number, modifiers,
1324 blink::WebPointerProperties::PointerType::Mouse, kMousePointerId);
1325 }
1326
1327 void EventSender::MouseUp(int button_number, int modifiers) {
1328 PointerUp(button_number, modifiers,
1329 blink::WebPointerProperties::PointerType::Mouse, kMousePointerId);
1330 }
1331
1332 void EventSender::PointerDown(
1333 int button_number,
1334 int modifiers,
1335 blink::WebPointerProperties::PointerType pointerType,
1336 int pointerId) {
1238 if (force_layout_on_events_) 1337 if (force_layout_on_events_)
1239 view_->updateAllLifecyclePhases(); 1338 view_->updateAllLifecyclePhases();
1240 1339
1241 DCHECK_NE(-1, button_number); 1340 DCHECK_NE(-1, button_number);
1242 1341
1243 WebMouseEvent::Button button_type = 1342 WebMouseEvent::Button button_type =
1244 GetButtonTypeFromButtonNumber(button_number); 1343 GetButtonTypeFromButtonNumber(button_number);
1245 1344
1246 UpdateClickCountForButton(button_type); 1345 WebMouseEvent event;
1346 int click_count = 0;
1347 current_pointer_state_[pointerId].pressed_button_ = button_type;
1348 current_pointer_state_[pointerId].current_buttons_ |=
1349 GetWebMouseEventModifierForButton(button_type);
1350 current_pointer_state_[pointerId].modifiers_ = modifiers;
1247 1351
1248 pressed_button_ = button_type; 1352 if (pointerType == blink::WebPointerProperties::PointerType::Mouse) {
1249 current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_); 1353 UpdateClickCountForButton(button_type);
1250 modifiers_ = modifiers; 1354 click_count = click_count_;
1355 }
1356 InitMouseEvent(WebInputEvent::MouseDown,
1357 current_pointer_state_[pointerId].pressed_button_,
1358 current_pointer_state_[pointerId].current_buttons_,
1359 current_pointer_state_[pointerId].last_pos_,
1360 GetCurrentEventTimeSec(),
1361 click_count,
1362 current_pointer_state_[pointerId].modifiers_,
1363 pointerType,
1364 pointerId,
1365 &event);
1251 1366
1252 WebMouseEvent event;
1253 InitMouseEvent(WebInputEvent::MouseDown,
1254 pressed_button_,
1255 current_buttons_,
1256 last_mouse_pos_,
1257 GetCurrentEventTimeSec(),
1258 click_count_,
1259 modifiers_,
1260 &event);
1261 HandleInputEventOnViewOrPopup(event); 1367 HandleInputEventOnViewOrPopup(event);
1262 } 1368 }
1263 1369
1264 void EventSender::MouseUp(int button_number, int modifiers) { 1370 void EventSender::PointerUp(
1371 int button_number,
1372 int modifiers,
1373 blink::WebPointerProperties::PointerType pointerType,
1374 int pointerId) {
1265 if (force_layout_on_events_) 1375 if (force_layout_on_events_)
1266 view_->updateAllLifecyclePhases(); 1376 view_->updateAllLifecyclePhases();
1267 1377
1268 DCHECK_NE(-1, button_number); 1378 DCHECK_NE(-1, button_number);
1269 1379
1270 WebMouseEvent::Button button_type = 1380 WebMouseEvent::Button button_type =
1271 GetButtonTypeFromButtonNumber(button_number); 1381 GetButtonTypeFromButtonNumber(button_number);
1272 1382
1273 if (is_drag_mode_ && !replaying_saved_events_) { 1383 if (pointerType == blink::WebPointerProperties::PointerType::Mouse &&
1384 is_drag_mode_ && !replaying_saved_events_) {
1274 SavedEvent saved_event; 1385 SavedEvent saved_event;
1275 saved_event.type = SavedEvent::TYPE_MOUSE_UP; 1386 saved_event.type = SavedEvent::TYPE_MOUSE_UP;
1276 saved_event.button_type = button_type; 1387 saved_event.button_type = button_type;
1277 saved_event.modifiers = modifiers; 1388 saved_event.modifiers = modifiers;
1278 mouse_event_queue_.push_back(saved_event); 1389 mouse_event_queue_.push_back(saved_event);
1279 ReplaySavedEvents(); 1390 ReplaySavedEvents();
1280 } else { 1391 } else {
1281 current_buttons_ &= ~GetWebMouseEventModifierForButton(button_type); 1392 current_pointer_state_[pointerId].current_buttons_ &=
1282 pressed_button_ = WebMouseEvent::ButtonNone; 1393 ~GetWebMouseEventModifierForButton(button_type);
1394 current_pointer_state_[pointerId].pressed_button_ =
1395 WebMouseEvent::ButtonNone;
1283 1396
1284 WebMouseEvent event; 1397 WebMouseEvent event;
1285 InitMouseEvent(WebInputEvent::MouseUp, 1398 InitMouseEvent(
1286 button_type, 1399 WebInputEvent::MouseUp, button_type,
1287 current_buttons_, 1400 current_pointer_state_[pointerId].current_buttons_,
1288 last_mouse_pos_, 1401 current_pointer_state_[pointerId].last_pos_, GetCurrentEventTimeSec(),
1289 GetCurrentEventTimeSec(), 1402 pointerType == blink::WebPointerProperties::PointerType::Mouse
1290 click_count_, 1403 ? click_count_
1291 modifiers, 1404 : 0,
1292 &event); 1405 modifiers, pointerType, pointerId, &event);
1293 DoMouseUp(event); 1406 HandleInputEventOnViewOrPopup(event);
1407 if (pointerType == blink::WebPointerProperties::PointerType::Mouse)
1408 DoDragAfterMouseUp(event);
1294 } 1409 }
1295 } 1410 }
1296 1411
1297 void EventSender::SetMouseButtonState(int button_number, int modifiers) { 1412 void EventSender::SetMouseButtonState(int button_number, int modifiers) {
1298 pressed_button_ = GetButtonTypeFromButtonNumber(button_number); 1413 current_pointer_state_[kMousePointerId].pressed_button_ =
1299 current_buttons_ = (modifiers == -1) ? 1414 GetButtonTypeFromButtonNumber(button_number);
1300 GetWebMouseEventModifierForButton(pressed_button_) : 1415 current_pointer_state_[kMousePointerId].current_buttons_ =
1301 modifiers & kButtonsInModifiers; 1416 (modifiers == -1)
1417 ? GetWebMouseEventModifierForButton(
1418 current_pointer_state_[kMousePointerId].pressed_button_)
1419 : modifiers & kButtonsInModifiers;
1302 } 1420 }
1303 1421
1304 void EventSender::KeyDown(const std::string& code_str, 1422 void EventSender::KeyDown(const std::string& code_str,
1305 int modifiers, 1423 int modifiers,
1306 KeyLocationCode location) { 1424 KeyLocationCode location) {
1307 // FIXME: I'm not exactly sure how we should convert the string to a key 1425 // FIXME: I'm not exactly sure how we should convert the string to a key
1308 // event. This seems to work in the cases I tested. 1426 // event. This seems to work in the cases I tested.
1309 // FIXME: Should we also generate a KEY_UP? 1427 // FIXME: Should we also generate a KEY_UP?
1310 1428
1311 bool generate_char = false; 1429 bool generate_char = false;
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1491 // We just simulate the same behavior here. 1609 // We just simulate the same behavior here.
1492 std::string edit_command; 1610 std::string edit_command;
1493 if (GetEditCommand(event_down, &edit_command)) 1611 if (GetEditCommand(event_down, &edit_command))
1494 delegate_->SetEditCommand(edit_command, ""); 1612 delegate_->SetEditCommand(edit_command, "");
1495 1613
1496 HandleInputEventOnViewOrPopup(event_down); 1614 HandleInputEventOnViewOrPopup(event_down);
1497 1615
1498 if (code == ui::VKEY_ESCAPE && !current_drag_data_.isNull()) { 1616 if (code == ui::VKEY_ESCAPE && !current_drag_data_.isNull()) {
1499 WebMouseEvent event; 1617 WebMouseEvent event;
1500 InitMouseEvent(WebInputEvent::MouseDown, 1618 InitMouseEvent(WebInputEvent::MouseDown,
1501 pressed_button_, 1619 current_pointer_state_[kMousePointerId].pressed_button_,
1502 current_buttons_, 1620 current_pointer_state_[kMousePointerId].current_buttons_,
1503 last_mouse_pos_, 1621 current_pointer_state_[kMousePointerId].last_pos_,
1504 GetCurrentEventTimeSec(), 1622 GetCurrentEventTimeSec(),
1505 click_count_, 1623 click_count_,
1506 0, 1624 0,
1625 blink::WebPointerProperties::PointerType::Mouse,
1626 0,
1507 &event); 1627 &event);
1508 FinishDragAndDrop(event, blink::WebDragOperationNone); 1628 FinishDragAndDrop(event, blink::WebDragOperationNone);
1509 } 1629 }
1510 1630
1511 delegate_->ClearEditCommand(); 1631 delegate_->ClearEditCommand();
1512 1632
1513 if (generate_char) { 1633 if (generate_char) {
1514 WebKeyboardEvent event_char = event_up; 1634 WebKeyboardEvent event_char = event_up;
1515 event_char.type = WebInputEvent::Char; 1635 event_char.type = WebInputEvent::Char;
1516 // keyIdentifier is an empty string, unless the Enter key was pressed. 1636 // keyIdentifier is an empty string, unless the Enter key was pressed.
(...skipping 24 matching lines...) Expand all
1541 // be requested after following mouse events. 1661 // be requested after following mouse events.
1542 last_context_menu_data_.reset(); 1662 last_context_menu_data_.reset();
1543 1663
1544 // Generate right mouse down and up. 1664 // Generate right mouse down and up.
1545 WebMouseEvent event; 1665 WebMouseEvent event;
1546 // This is a hack to work around only allowing a single pressed button since 1666 // This is a hack to work around only allowing a single pressed button since
1547 // we want to test the case where both the left and right mouse buttons are 1667 // we want to test the case where both the left and right mouse buttons are
1548 // pressed. 1668 // pressed.
1549 // TODO(mustaq): This hack seems unused here! But do we need this hack at all 1669 // TODO(mustaq): This hack seems unused here! But do we need this hack at all
1550 // after adding current_buttons_. 1670 // after adding current_buttons_.
1551 if (pressed_button_ == WebMouseEvent::ButtonNone) { 1671 if (current_pointer_state_[kMousePointerId].pressed_button_ ==
1552 pressed_button_ = WebMouseEvent::ButtonRight; 1672 WebMouseEvent::ButtonNone) {
1553 current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_); 1673 current_pointer_state_[kMousePointerId].pressed_button_ =
1674 WebMouseEvent::ButtonRight;
1675 current_pointer_state_[kMousePointerId].current_buttons_ |=
1676 GetWebMouseEventModifierForButton(
1677 current_pointer_state_[kMousePointerId].pressed_button_);
1554 } 1678 }
1555 InitMouseEvent(WebInputEvent::MouseDown, 1679 InitMouseEvent(WebInputEvent::MouseDown,
1556 WebMouseEvent::ButtonRight, 1680 WebMouseEvent::ButtonRight,
1557 current_buttons_, 1681 current_pointer_state_[kMousePointerId].current_buttons_,
1558 last_mouse_pos_, 1682 current_pointer_state_[kMousePointerId].last_pos_,
1559 GetCurrentEventTimeSec(), 1683 GetCurrentEventTimeSec(),
1560 click_count_, 1684 click_count_,
1561 0, 1685 0,
1686 blink::WebPointerProperties::PointerType::Mouse,
1687 0,
1562 &event); 1688 &event);
1563 HandleInputEventOnViewOrPopup(event); 1689 HandleInputEventOnViewOrPopup(event);
1564 1690
1565 #if defined(OS_WIN) 1691 #if defined(OS_WIN)
1566 current_buttons_ &= 1692 current_pointer_state_[kMousePointerId].current_buttons_ &=
1567 ~GetWebMouseEventModifierForButton(WebMouseEvent::ButtonRight); 1693 ~GetWebMouseEventModifierForButton(WebMouseEvent::ButtonRight);
1568 pressed_button_ = WebMouseEvent::ButtonNone; 1694 current_pointer_state_[kMousePointerId].pressed_button_ =
1695 WebMouseEvent::ButtonNone;
1569 1696
1570 InitMouseEvent(WebInputEvent::MouseUp, 1697 InitMouseEvent(WebInputEvent::MouseUp,
1571 WebMouseEvent::ButtonRight, 1698 WebMouseEvent::ButtonRight,
1572 current_buttons_, 1699 current_pointer_state_[kMousePointerId].current_buttons_,
1573 last_mouse_pos_, 1700 current_pointer_state_[kMousePointerId].last_pos_,
1574 GetCurrentEventTimeSec(), 1701 GetCurrentEventTimeSec(),
1575 click_count_, 1702 click_count_,
1576 0, 1703 0,
1704 blink::WebPointerProperties::PointerType::Mouse,
1705 0,
1577 &event); 1706 &event);
1578 HandleInputEventOnViewOrPopup(event); 1707 HandleInputEventOnViewOrPopup(event);
1579 #endif 1708 #endif
1580 1709
1581 std::vector<std::string> menu_items = 1710 std::vector<std::string> menu_items =
1582 MakeMenuItemStringsFor(last_context_menu_data_.get(), delegate_); 1711 MakeMenuItemStringsFor(last_context_menu_data_.get(), delegate_);
1583 last_context_menu_data_.reset(); 1712 last_context_menu_data_.reset();
1584 return menu_items; 1713 return menu_items;
1585 } 1714 }
1586 1715
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
1773 1902
1774 void EventSender::TouchCancel() { 1903 void EventSender::TouchCancel() {
1775 SendCurrentTouchEvent(WebInputEvent::TouchCancel, false); 1904 SendCurrentTouchEvent(WebInputEvent::TouchCancel, false);
1776 } 1905 }
1777 1906
1778 void EventSender::TouchEnd() { 1907 void EventSender::TouchEnd() {
1779 SendCurrentTouchEvent(WebInputEvent::TouchEnd, false); 1908 SendCurrentTouchEvent(WebInputEvent::TouchEnd, false);
1780 } 1909 }
1781 1910
1782 void EventSender::LeapForward(int milliseconds) { 1911 void EventSender::LeapForward(int milliseconds) {
1783 if (is_drag_mode_ && pressed_button_ == WebMouseEvent::ButtonLeft && 1912 if (is_drag_mode_ &&
1913 current_pointer_state_[kMousePointerId].pressed_button_ ==
1914 WebMouseEvent::ButtonLeft &&
1784 !replaying_saved_events_) { 1915 !replaying_saved_events_) {
1785 SavedEvent saved_event; 1916 SavedEvent saved_event;
1786 saved_event.type = SavedEvent::TYPE_LEAP_FORWARD; 1917 saved_event.type = SavedEvent::TYPE_LEAP_FORWARD;
1787 saved_event.milliseconds = milliseconds; 1918 saved_event.milliseconds = milliseconds;
1788 mouse_event_queue_.push_back(saved_event); 1919 mouse_event_queue_.push_back(saved_event);
1789 } else { 1920 } else {
1790 DoLeapForward(milliseconds); 1921 DoLeapForward(milliseconds);
1791 } 1922 }
1792 } 1923 }
1793 1924
(...skipping 16 matching lines...) Expand all
1810 item.filenameData = delegate_->GetAbsoluteWebStringFromUTF8Path(files[i]); 1941 item.filenameData = delegate_->GetAbsoluteWebStringFromUTF8Path(files[i]);
1811 current_drag_data_.addItem(item); 1942 current_drag_data_.addItem(item);
1812 absolute_filenames[i] = item.filenameData; 1943 absolute_filenames[i] = item.filenameData;
1813 } 1944 }
1814 current_drag_data_.setFilesystemId( 1945 current_drag_data_.setFilesystemId(
1815 delegate_->RegisterIsolatedFileSystem(absolute_filenames)); 1946 delegate_->RegisterIsolatedFileSystem(absolute_filenames));
1816 current_drag_effects_allowed_ = blink::WebDragOperationCopy; 1947 current_drag_effects_allowed_ = blink::WebDragOperationCopy;
1817 1948
1818 // Provide a drag source. 1949 // Provide a drag source.
1819 view_->dragTargetDragEnter(current_drag_data_, 1950 view_->dragTargetDragEnter(current_drag_data_,
1820 last_mouse_pos_, 1951 current_pointer_state_[kMousePointerId].last_pos_,
1821 last_mouse_pos_, 1952 current_pointer_state_[kMousePointerId].last_pos_,
1822 current_drag_effects_allowed_, 1953 current_drag_effects_allowed_,
1823 0); 1954 0);
1824 // |is_drag_mode_| saves events and then replays them later. We don't 1955 // |is_drag_mode_| saves events and then replays them later. We don't
1825 // need/want that. 1956 // need/want that.
1826 is_drag_mode_ = false; 1957 is_drag_mode_ = false;
1827 1958
1828 // Make the rest of eventSender think a drag is in progress. 1959 // Make the rest of eventSender think a drag is in progress.
1829 pressed_button_ = WebMouseEvent::ButtonLeft; 1960 current_pointer_state_[kMousePointerId].pressed_button_ =
1830 current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_); 1961 WebMouseEvent::ButtonLeft;
1962 current_pointer_state_[kMousePointerId].current_buttons_ |=
1963 GetWebMouseEventModifierForButton(
1964 current_pointer_state_[kMousePointerId].pressed_button_);
1831 } 1965 }
1832 1966
1833 void EventSender::AddTouchPoint(float x, float y, gin::Arguments* args) { 1967 void EventSender::AddTouchPoint(float x, float y, gin::Arguments* args) {
1834 WebTouchPoint touch_point; 1968 WebTouchPoint touch_point;
1835 touch_point.pointerType = WebPointerProperties::PointerType::Touch; 1969 touch_point.pointerType = WebPointerProperties::PointerType::Touch;
1836 touch_point.state = WebTouchPoint::StatePressed; 1970 touch_point.state = WebTouchPoint::StatePressed;
1837 touch_point.position = WebFloatPoint(x, y); 1971 touch_point.position = WebFloatPoint(x, y);
1838 touch_point.screenPosition = touch_point.position; 1972 touch_point.screenPosition = touch_point.position;
1839 1973
1840 int highest_id = -1; 1974 int highest_id = -1;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1920 SendGesturesForMouseWheelEvent(wheel_event); 2054 SendGesturesForMouseWheelEvent(wheel_event);
1921 } 2055 }
1922 } 2056 }
1923 2057
1924 void EventSender::MouseMoveTo(gin::Arguments* args) { 2058 void EventSender::MouseMoveTo(gin::Arguments* args) {
1925 if (force_layout_on_events_) 2059 if (force_layout_on_events_)
1926 view_->updateAllLifecyclePhases(); 2060 view_->updateAllLifecyclePhases();
1927 2061
1928 double x; 2062 double x;
1929 double y; 2063 double y;
2064 blink::WebPointerProperties::PointerType pointerType =
2065 blink::WebPointerProperties::PointerType::Mouse;
2066 int pointerId = 0;
1930 if (!args->GetNext(&x) || !args->GetNext(&y)) { 2067 if (!args->GetNext(&x) || !args->GetNext(&y)) {
1931 args->ThrowError(); 2068 args->ThrowError();
1932 return; 2069 return;
1933 } 2070 }
1934 WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y)); 2071 WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y));
1935 2072
1936 int modifiers = 0; 2073 int modifiers = 0;
1937 if (!args->PeekNext().IsEmpty()) 2074 if (!args->PeekNext().IsEmpty()) {
1938 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); 2075 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext());
2076 args->Skip();
2077 }
1939 2078
1940 if (is_drag_mode_ && pressed_button_ == WebMouseEvent::ButtonLeft && 2079 if (!getMousePenPointerTypeAndId(args, pointerType, pointerId))
1941 !replaying_saved_events_) { 2080 return;
2081
2082 if (pointerType == blink::WebPointerProperties::PointerType::Mouse &&
2083 is_drag_mode_ && !replaying_saved_events_ &&
2084 current_pointer_state_[kMousePointerId].pressed_button_ ==
2085 WebMouseEvent::ButtonLeft) {
1942 SavedEvent saved_event; 2086 SavedEvent saved_event;
1943 saved_event.type = SavedEvent::TYPE_MOUSE_MOVE; 2087 saved_event.type = SavedEvent::TYPE_MOUSE_MOVE;
1944 saved_event.pos = mouse_pos; 2088 saved_event.pos = mouse_pos;
1945 saved_event.modifiers = modifiers; 2089 saved_event.modifiers = modifiers;
1946 mouse_event_queue_.push_back(saved_event); 2090 mouse_event_queue_.push_back(saved_event);
1947 } else { 2091 } else {
2092 current_pointer_state_[pointerId].last_pos_ = mouse_pos;
1948 WebMouseEvent event; 2093 WebMouseEvent event;
1949 InitMouseEvent(WebInputEvent::MouseMove, 2094 InitMouseEvent(
1950 pressed_button_, 2095 WebInputEvent::MouseMove,
1951 current_buttons_, 2096 current_pointer_state_[kMousePointerId].pressed_button_,
1952 mouse_pos, 2097 current_pointer_state_[kMousePointerId].current_buttons_,
1953 GetCurrentEventTimeSec(), 2098 mouse_pos,
1954 click_count_, 2099 GetCurrentEventTimeSec(),
1955 modifiers, 2100 pointerType == blink::WebPointerProperties::PointerType::Mouse
1956 &event); 2101 ? click_count_
1957 DoMouseMove(event); 2102 : 0,
2103 modifiers,
2104 pointerType,
2105 pointerId,
2106 &event);
2107 HandleInputEventOnViewOrPopup(event);
2108 if (pointerType == blink::WebPointerProperties::PointerType::Mouse)
2109 DoDragAfterMouseMove(event);
1958 } 2110 }
1959 } 2111 }
1960 2112
1961 void EventSender::MouseLeave() { 2113 void EventSender::MouseLeave() {
1962 if (force_layout_on_events_) 2114 if (force_layout_on_events_)
1963 view_->updateAllLifecyclePhases(); 2115 view_->updateAllLifecyclePhases();
1964 2116
1965 WebMouseEvent event; 2117 WebMouseEvent event;
1966 InitMouseEvent(WebInputEvent::MouseLeave, 2118 InitMouseEvent(WebInputEvent::MouseLeave,
1967 WebMouseEvent::ButtonNone, 2119 WebMouseEvent::ButtonNone,
1968 0, 2120 0,
1969 last_mouse_pos_, 2121 current_pointer_state_[kMousePointerId].last_pos_,
1970 GetCurrentEventTimeSec(), 2122 GetCurrentEventTimeSec(),
1971 click_count_, 2123 click_count_,
1972 0, 2124 0,
2125 blink::WebPointerProperties::PointerType::Mouse,
2126 0,
1973 &event); 2127 &event);
1974 HandleInputEventOnViewOrPopup(event); 2128 HandleInputEventOnViewOrPopup(event);
1975 } 2129 }
1976 2130
1977 2131
1978 void EventSender::ScheduleAsynchronousClick(int button_number, int modifiers) { 2132 void EventSender::ScheduleAsynchronousClick(int button_number, int modifiers) {
1979 delegate_->PostTask(new WebCallbackTask( 2133 delegate_->PostTask(new WebCallbackTask(
1980 base::Bind(&EventSender::MouseDown, weak_factory_.GetWeakPtr(), 2134 base::Bind(&EventSender::MouseDown, weak_factory_.GetWeakPtr(),
1981 button_number, modifiers))); 2135 button_number, modifiers)));
1982 delegate_->PostTask(new WebCallbackTask( 2136 delegate_->PostTask(new WebCallbackTask(
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
2280 2434
2281 if (force_layout_on_events_) 2435 if (force_layout_on_events_)
2282 view_->updateAllLifecyclePhases(); 2436 view_->updateAllLifecyclePhases();
2283 2437
2284 WebInputEventResult result = HandleInputEventOnViewOrPopup(event); 2438 WebInputEventResult result = HandleInputEventOnViewOrPopup(event);
2285 2439
2286 // Long press might start a drag drop session. Complete it if so. 2440 // Long press might start a drag drop session. Complete it if so.
2287 if (type == WebInputEvent::GestureLongPress && !current_drag_data_.isNull()) { 2441 if (type == WebInputEvent::GestureLongPress && !current_drag_data_.isNull()) {
2288 WebMouseEvent mouse_event; 2442 WebMouseEvent mouse_event;
2289 InitMouseEvent(WebInputEvent::MouseDown, 2443 InitMouseEvent(WebInputEvent::MouseDown,
2290 pressed_button_, 2444 current_pointer_state_[kMousePointerId].pressed_button_,
2291 current_buttons_, 2445 current_pointer_state_[kMousePointerId].current_buttons_,
2292 WebPoint(x, y), 2446 WebPoint(x, y), GetCurrentEventTimeSec(),
2293 GetCurrentEventTimeSec(),
2294 click_count_, 2447 click_count_,
2295 modifiers_, 2448 current_pointer_state_[kMousePointerId].modifiers_,
2449 blink::WebPointerProperties::PointerType::Mouse,
2450 0,
2296 &mouse_event); 2451 &mouse_event);
2297 2452
2298 FinishDragAndDrop(mouse_event, blink::WebDragOperationNone); 2453 FinishDragAndDrop(mouse_event, blink::WebDragOperationNone);
2299 } 2454 }
2300 args->Return(result != WebInputEventResult::NotHandled); 2455 args->Return(result != WebInputEventResult::NotHandled);
2301 } 2456 }
2302 2457
2303 void EventSender::UpdateClickCountForButton( 2458 void EventSender::UpdateClickCountForButton(
2304 WebMouseEvent::Button button_type) { 2459 WebMouseEvent::Button button_type) {
2305 if ((GetCurrentEventTimeSec() - last_click_time_sec_ < 2460 if ((GetCurrentEventTimeSec() - last_click_time_sec_ <
2306 kMultipleClickTimeSec) && 2461 kMultipleClickTimeSec) &&
2307 (!OutsideMultiClickRadius(last_mouse_pos_, last_click_pos_)) && 2462 (!OutsideMultiClickRadius(
2463 current_pointer_state_[kMousePointerId].last_pos_,
2464 last_click_pos_)) &&
2308 (button_type == last_button_type_)) { 2465 (button_type == last_button_type_)) {
2309 ++click_count_; 2466 ++click_count_;
2310 } else { 2467 } else {
2311 click_count_ = 1; 2468 click_count_ = 1;
2312 last_button_type_ = button_type; 2469 last_button_type_ = button_type;
2313 } 2470 }
2314 } 2471 }
2315 2472
2316 void EventSender::InitMouseWheelEvent(gin::Arguments* args, 2473 void EventSender::InitMouseWheelEvent(gin::Arguments* args,
2317 MouseScrollType scroll_type, 2474 MouseScrollType scroll_type,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2351 } 2508 }
2352 } 2509 }
2353 } 2510 }
2354 } 2511 }
2355 if (can_scroll && send_wheel_gestures_) { 2512 if (can_scroll && send_wheel_gestures_) {
2356 can_scroll = false; 2513 can_scroll = false;
2357 *send_gestures = true; 2514 *send_gestures = true;
2358 } 2515 }
2359 2516
2360 InitMouseEvent(WebInputEvent::MouseWheel, 2517 InitMouseEvent(WebInputEvent::MouseWheel,
2361 pressed_button_, 2518 current_pointer_state_[kMousePointerId].pressed_button_,
2362 current_buttons_, 2519 current_pointer_state_[kMousePointerId].current_buttons_,
2363 last_mouse_pos_, 2520 current_pointer_state_[kMousePointerId].last_pos_,
2364 GetCurrentEventTimeSec(), 2521 GetCurrentEventTimeSec(),
2365 click_count_, 2522 click_count_,
2366 modifiers, 2523 modifiers,
2524 blink::WebPointerProperties::PointerType::Mouse,
2525 0,
2367 event); 2526 event);
2368 event->wheelTicksX = static_cast<float>(horizontal); 2527 event->wheelTicksX = static_cast<float>(horizontal);
2369 event->wheelTicksY = static_cast<float>(vertical); 2528 event->wheelTicksY = static_cast<float>(vertical);
2370 event->deltaX = event->wheelTicksX; 2529 event->deltaX = event->wheelTicksX;
2371 event->deltaY = event->wheelTicksY; 2530 event->deltaY = event->wheelTicksY;
2372 event->scrollByPage = paged; 2531 event->scrollByPage = paged;
2373 event->hasPreciseScrollingDeltas = has_precise_scrolling_deltas; 2532 event->hasPreciseScrollingDeltas = has_precise_scrolling_deltas;
2374 event->canScroll = can_scroll; 2533 event->canScroll = can_scroll;
2375 if (scroll_type == MouseScrollType::PIXEL) { 2534 if (scroll_type == MouseScrollType::PIXEL) {
2376 event->wheelTicksX /= kScrollbarPixelsPerTick; 2535 event->wheelTicksX /= kScrollbarPixelsPerTick;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2419 if (!args->PeekNext().IsEmpty()) { 2578 if (!args->PeekNext().IsEmpty()) {
2420 int tiltX, tiltY; 2579 int tiltX, tiltY;
2421 if (!args->GetNext(&tiltX) || !args->GetNext(&tiltY)) { 2580 if (!args->GetNext(&tiltX) || !args->GetNext(&tiltY)) {
2422 args->ThrowError(); 2581 args->ThrowError();
2423 return; 2582 return;
2424 } 2583 }
2425 e->tiltX = tiltX; 2584 e->tiltX = tiltX;
2426 e->tiltY = tiltY; 2585 e->tiltY = tiltY;
2427 } 2586 }
2428 2587
2429 if (!args->PeekNext().IsEmpty()) { 2588 if (!getPointerType(args, false, e->pointerType))
2430 std::string pointer_type_string; 2589 return;
2431 if (!args->GetNext(&pointer_type_string)) {
2432 args->ThrowError();
2433 return;
2434 }
2435 if (pointer_type_string == kPointerTypeStringUnknown) {
2436 e->pointerType = WebMouseEvent::PointerType::Unknown;
2437 } else if (pointer_type_string == kPointerTypeStringMouse) {
2438 e->pointerType = WebMouseEvent::PointerType::Mouse;
2439 } else if (pointer_type_string == kPointerTypeStringPen) {
2440 e->pointerType = WebMouseEvent::PointerType::Pen;
2441 } else if (pointer_type_string == kPointerTypeStringTouch) {
2442 e->pointerType = WebMouseEvent::PointerType::Touch;
2443 } else {
2444 args->ThrowError();
2445 return;
2446 }
2447 }
2448 } 2590 }
2449 2591
2450 void EventSender::FinishDragAndDrop(const WebMouseEvent& e, 2592 void EventSender::FinishDragAndDrop(const WebMouseEvent& e,
2451 blink::WebDragOperation drag_effect) { 2593 blink::WebDragOperation drag_effect) {
2452 WebPoint client_point(e.x, e.y); 2594 WebPoint client_point(e.x, e.y);
2453 WebPoint screen_point(e.globalX, e.globalY); 2595 WebPoint screen_point(e.globalX, e.globalY);
2454 current_drag_effect_ = drag_effect; 2596 current_drag_effect_ = drag_effect;
2455 if (current_drag_effect_) { 2597 if (current_drag_effect_) {
2456 // Specifically pass any keyboard modifiers to the drop method. This allows 2598 // Specifically pass any keyboard modifiers to the drop method. This allows
2457 // tests to control the drop type (i.e. copy or move). 2599 // tests to control the drop type (i.e. copy or move).
2458 view_->dragTargetDrop(client_point, screen_point, e.modifiers); 2600 view_->dragTargetDrop(client_point, screen_point, e.modifiers);
2459 } else { 2601 } else {
2460 view_->dragTargetDragLeave(); 2602 view_->dragTargetDragLeave();
2461 } 2603 }
2462 view_->dragSourceEndedAt(client_point, screen_point, current_drag_effect_); 2604 view_->dragSourceEndedAt(client_point, screen_point, current_drag_effect_);
2463 view_->dragSourceSystemDragEnded(); 2605 view_->dragSourceSystemDragEnded();
2464 2606
2465 current_drag_data_.reset(); 2607 current_drag_data_.reset();
2466 } 2608 }
2467 2609
2468 void EventSender::DoMouseUp(const WebMouseEvent& e) { 2610 void EventSender::DoDragAfterMouseUp(const WebMouseEvent& e) {
2469 HandleInputEventOnViewOrPopup(e);
2470
2471 last_click_time_sec_ = e.timeStampSeconds; 2611 last_click_time_sec_ = e.timeStampSeconds;
2472 last_click_pos_ = last_mouse_pos_; 2612 last_click_pos_ = current_pointer_state_[kMousePointerId].last_pos_;
2473 2613
2474 // If we're in a drag operation, complete it. 2614 // If we're in a drag operation, complete it.
2475 if (current_drag_data_.isNull()) 2615 if (current_drag_data_.isNull())
2476 return; 2616 return;
2477 2617
2478 WebPoint client_point(e.x, e.y); 2618 WebPoint client_point(e.x, e.y);
2479 WebPoint screen_point(e.globalX, e.globalY); 2619 WebPoint screen_point(e.globalX, e.globalY);
2480 blink::WebDragOperation drag_effect = view_->dragTargetDragOver( 2620 blink::WebDragOperation drag_effect = view_->dragTargetDragOver(
2481 client_point, 2621 client_point,
2482 screen_point, 2622 screen_point,
2483 current_drag_effects_allowed_, 2623 current_drag_effects_allowed_,
2484 e.modifiers); 2624 e.modifiers);
2485 2625
2486 // Bail if dragover caused cancellation. 2626 // Bail if dragover caused cancellation.
2487 if (current_drag_data_.isNull()) 2627 if (current_drag_data_.isNull())
2488 return; 2628 return;
2489 2629
2490 FinishDragAndDrop(e, drag_effect); 2630 FinishDragAndDrop(e, drag_effect);
2491 } 2631 }
2492 2632
2493 void EventSender::DoMouseMove(const WebMouseEvent& e) { 2633 void EventSender::DoDragAfterMouseMove(const WebMouseEvent& e) {
2494 last_mouse_pos_ = WebPoint(e.x, e.y); 2634 if (current_pointer_state_[kMousePointerId].pressed_button_ ==
2495 2635 WebMouseEvent::ButtonNone ||
2496 HandleInputEventOnViewOrPopup(e);
2497
2498 if (pressed_button_ == WebMouseEvent::ButtonNone ||
2499 current_drag_data_.isNull()) { 2636 current_drag_data_.isNull()) {
2500 return; 2637 return;
2501 } 2638 }
2502 2639
2503 WebPoint client_point(e.x, e.y); 2640 WebPoint client_point(e.x, e.y);
2504 WebPoint screen_point(e.globalX, e.globalY); 2641 WebPoint screen_point(e.globalX, e.globalY);
2505 current_drag_effect_ = view_->dragTargetDragOver( 2642 current_drag_effect_ = view_->dragTargetDragOver(
2506 client_point, screen_point, current_drag_effects_allowed_, e.modifiers); 2643 client_point, screen_point, current_drag_effects_allowed_, e.modifiers);
2507 } 2644 }
2508 2645
2509 void EventSender::ReplaySavedEvents() { 2646 void EventSender::ReplaySavedEvents() {
2510 replaying_saved_events_ = true; 2647 replaying_saved_events_ = true;
2511 while (!mouse_event_queue_.empty()) { 2648 while (!mouse_event_queue_.empty()) {
2512 SavedEvent e = mouse_event_queue_.front(); 2649 SavedEvent e = mouse_event_queue_.front();
2513 mouse_event_queue_.pop_front(); 2650 mouse_event_queue_.pop_front();
2514 2651
2515 switch (e.type) { 2652 switch (e.type) {
2516 case SavedEvent::TYPE_MOUSE_MOVE: { 2653 case SavedEvent::TYPE_MOUSE_MOVE: {
2517 WebMouseEvent event; 2654 WebMouseEvent event;
2518 InitMouseEvent(WebInputEvent::MouseMove, 2655 InitMouseEvent(
2519 pressed_button_, 2656 WebInputEvent::MouseMove,
2520 current_buttons_, 2657 current_pointer_state_[kMousePointerId].pressed_button_,
2521 e.pos, 2658 current_pointer_state_[kMousePointerId].current_buttons_,
2522 GetCurrentEventTimeSec(), 2659 e.pos,
2523 click_count_, 2660 GetCurrentEventTimeSec(),
2524 e.modifiers, 2661 click_count_,
2525 &event); 2662 e.modifiers,
2526 DoMouseMove(event); 2663 blink::WebPointerProperties::PointerType::Mouse,
2664 0,
2665 &event);
2666 current_pointer_state_[kMousePointerId].last_pos_ =
2667 WebPoint(event.x, event.y);
2668 HandleInputEventOnViewOrPopup(event);
2669 DoDragAfterMouseMove(event);
2527 break; 2670 break;
2528 } 2671 }
2529 case SavedEvent::TYPE_LEAP_FORWARD: 2672 case SavedEvent::TYPE_LEAP_FORWARD:
2530 DoLeapForward(e.milliseconds); 2673 DoLeapForward(e.milliseconds);
2531 break; 2674 break;
2532 case SavedEvent::TYPE_MOUSE_UP: { 2675 case SavedEvent::TYPE_MOUSE_UP: {
2533 current_buttons_ &= ~GetWebMouseEventModifierForButton(e.button_type); 2676 current_pointer_state_[kMousePointerId].current_buttons_ &=
2534 pressed_button_ = WebMouseEvent::ButtonNone; 2677 ~GetWebMouseEventModifierForButton(e.button_type);
2678 current_pointer_state_[kMousePointerId].pressed_button_ =
2679 WebMouseEvent::ButtonNone;
2535 2680
2536 WebMouseEvent event; 2681 WebMouseEvent event;
2537 InitMouseEvent(WebInputEvent::MouseUp, 2682 InitMouseEvent(WebInputEvent::MouseUp,
2538 e.button_type, 2683 e.button_type,
2539 current_buttons_, 2684 current_pointer_state_[kMousePointerId].current_buttons_,
2540 last_mouse_pos_, 2685 current_pointer_state_[kMousePointerId].last_pos_,
2541 GetCurrentEventTimeSec(), 2686 GetCurrentEventTimeSec(),
2542 click_count_, 2687 click_count_,
2543 e.modifiers, 2688 e.modifiers,
2689 blink::WebPointerProperties::PointerType::Mouse,
2690 0,
2544 &event); 2691 &event);
2545 DoMouseUp(event); 2692 HandleInputEventOnViewOrPopup(event);
2693 DoDragAfterMouseUp(event);
2546 break; 2694 break;
2547 } 2695 }
2548 default: 2696 default:
2549 NOTREACHED(); 2697 NOTREACHED();
2550 } 2698 }
2551 } 2699 }
2552 2700
2553 replaying_saved_events_ = false; 2701 replaying_saved_events_ = false;
2554 } 2702 }
2555 2703
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
2615 &end_event); 2763 &end_event);
2616 end_event.data.scrollEnd.deltaUnits = 2764 end_event.data.scrollEnd.deltaUnits =
2617 begin_event.data.scrollBegin.deltaHintUnits; 2765 begin_event.data.scrollBegin.deltaHintUnits;
2618 2766
2619 if (force_layout_on_events_) 2767 if (force_layout_on_events_)
2620 view_->updateAllLifecyclePhases(); 2768 view_->updateAllLifecyclePhases();
2621 HandleInputEventOnViewOrPopup(end_event); 2769 HandleInputEventOnViewOrPopup(end_event);
2622 } 2770 }
2623 2771
2624 } // namespace test_runner 2772 } // namespace test_runner
OLDNEW
« no previous file with comments | « components/test_runner/event_sender.h ('k') | third_party/WebKit/LayoutTests/TestExpectations » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698