OLD | NEW |
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 Loading... |
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; | 64 const int kRawMousePointerId = -1; |
65 const char* kPointerTypeStringUnknown = ""; | 65 const char* kPointerTypeStringUnknown = ""; |
66 const char* kPointerTypeStringMouse = "mouse"; | 66 const char* kPointerTypeStringMouse = "mouse"; |
67 const char* kPointerTypeStringPen = "pen"; | 67 const char* kPointerTypeStringPen = "pen"; |
68 const char* kPointerTypeStringTouch = "touch"; | 68 const char* kPointerTypeStringTouch = "touch"; |
69 | 69 |
70 // Assigns |pointerType| from the provided |args|. Returns false if there was | 70 // Assigns |pointerType| from the provided |args|. Returns false if there was |
71 // any error. | 71 // any error. |
72 bool getPointerType(gin::Arguments* args, | 72 bool getPointerType(gin::Arguments* args, |
73 bool isOnlyMouseAndPenAllowed, | 73 bool isOnlyMouseAndPenAllowed, |
74 blink::WebPointerProperties::PointerType& pointerType) { | 74 WebPointerProperties::PointerType& pointerType) { |
75 if (args->PeekNext().IsEmpty()) | 75 if (args->PeekNext().IsEmpty()) |
76 return true; | 76 return true; |
77 std::string pointer_type_string; | 77 std::string pointer_type_string; |
78 if (!args->GetNext(&pointer_type_string)) { | 78 if (!args->GetNext(&pointer_type_string)) { |
79 args->ThrowError(); | 79 args->ThrowError(); |
80 return false; | 80 return false; |
81 } | 81 } |
82 if (isOnlyMouseAndPenAllowed && | 82 if (isOnlyMouseAndPenAllowed && |
83 (pointer_type_string == kPointerTypeStringUnknown || | 83 (pointer_type_string == kPointerTypeStringUnknown || |
84 pointer_type_string == kPointerTypeStringTouch)) { | 84 pointer_type_string == kPointerTypeStringTouch)) { |
85 args->ThrowError(); | 85 args->ThrowError(); |
86 return false; | 86 return false; |
87 } | 87 } |
88 if (pointer_type_string == kPointerTypeStringUnknown) { | 88 if (pointer_type_string == kPointerTypeStringUnknown) { |
89 pointerType = WebMouseEvent::PointerType::Unknown; | 89 pointerType = WebMouseEvent::PointerType::Unknown; |
90 } else if (pointer_type_string == kPointerTypeStringMouse) { | 90 } else if (pointer_type_string == kPointerTypeStringMouse) { |
91 pointerType = WebMouseEvent::PointerType::Mouse; | 91 pointerType = WebMouseEvent::PointerType::Mouse; |
92 } else if (pointer_type_string == kPointerTypeStringPen) { | 92 } else if (pointer_type_string == kPointerTypeStringPen) { |
93 pointerType = WebMouseEvent::PointerType::Pen; | 93 pointerType = WebMouseEvent::PointerType::Pen; |
94 } else if (pointer_type_string == kPointerTypeStringTouch) { | 94 } else if (pointer_type_string == kPointerTypeStringTouch) { |
95 pointerType = WebMouseEvent::PointerType::Touch; | 95 pointerType = WebMouseEvent::PointerType::Touch; |
96 } else { | 96 } else { |
97 args->ThrowError(); | 97 args->ThrowError(); |
98 return false; | 98 return false; |
99 } | 99 } |
100 return true; | 100 return true; |
101 } | 101 } |
102 | 102 |
103 // Assigns |pointerType| and |pointerId| from the provided |args|. Returns | 103 // Parses |pointerType|, |rawPointerId|, |pressure|, |tiltX| and |tiltY| from |
104 // false if there was any error. | 104 // the provided |args|. Returns false if there was any error, assuming the last |
105 bool getMousePenPointerTypeAndId( | 105 // 3 of the five parsed parameters are optional. |
| 106 bool getMousePenPointerProperties( |
106 gin::Arguments* args, | 107 gin::Arguments* args, |
107 blink::WebPointerProperties::PointerType& pointerType, | 108 WebPointerProperties::PointerType& pointerType, |
108 int& pointerId) { | 109 int& rawPointerId, |
109 pointerType = blink::WebPointerProperties::PointerType::Mouse; | 110 float& pressure, |
110 pointerId = kMousePointerId; | 111 int& tiltX, |
| 112 int& tiltY) { |
| 113 pointerType = WebPointerProperties::PointerType::Mouse; |
| 114 rawPointerId = kRawMousePointerId; |
| 115 pressure = std::numeric_limits<float>::quiet_NaN(); |
| 116 tiltX = 0; |
| 117 tiltY = 0; |
| 118 |
111 // Only allow pen or mouse through this API. | 119 // Only allow pen or mouse through this API. |
112 if (!getPointerType(args, false, pointerType)) | 120 if (!getPointerType(args, false, pointerType)) |
113 return false; | 121 return false; |
114 if (!args->PeekNext().IsEmpty()) { | 122 if (!args->PeekNext().IsEmpty()) { |
115 if (!args->GetNext(&pointerId)) { | 123 if (!args->GetNext(&rawPointerId)) { |
116 args->ThrowError(); | 124 args->ThrowError(); |
117 return false; | 125 return false; |
118 } | 126 } |
119 if (pointerType != blink::WebPointerProperties::PointerType::Mouse && | 127 |
120 pointerId == kMousePointerId) { | 128 // Parse optional params |
121 args->ThrowError(); | 129 if (!args->PeekNext().IsEmpty()) { |
122 return false; | 130 if (!args->GetNext(&pressure)) { |
| 131 args->ThrowError(); |
| 132 return false; |
| 133 } |
| 134 if (!args->PeekNext().IsEmpty()) { |
| 135 if (!args->GetNext(&tiltX)) { |
| 136 args->ThrowError(); |
| 137 return false; |
| 138 } |
| 139 if (!args->PeekNext().IsEmpty()) { |
| 140 if (!args->GetNext(&tiltY)) { |
| 141 args->ThrowError(); |
| 142 return false; |
| 143 } |
| 144 } |
| 145 } |
123 } | 146 } |
124 } else if (pointerType == blink::WebPointerProperties::PointerType::Pen) { | |
125 pointerId = 1; // A default value for the id of the pen. | |
126 } | 147 } |
| 148 |
127 return true; | 149 return true; |
128 } | 150 } |
129 | 151 |
130 WebMouseEvent::Button GetButtonTypeFromButtonNumber(int button_code) { | 152 WebMouseEvent::Button GetButtonTypeFromButtonNumber(int button_code) { |
131 switch (button_code) { | 153 switch (button_code) { |
132 case -1: | 154 case -1: |
133 return WebMouseEvent::ButtonNone; | 155 return WebMouseEvent::ButtonNone; |
134 case 0: | 156 case 0: |
135 return WebMouseEvent::ButtonLeft; | 157 return WebMouseEvent::ButtonLeft; |
136 case 1: | 158 case 1: |
(...skipping 21 matching lines...) Expand all Loading... |
158 } | 180 } |
159 | 181 |
160 const int kButtonsInModifiers = WebMouseEvent::LeftButtonDown | 182 const int kButtonsInModifiers = WebMouseEvent::LeftButtonDown |
161 | WebMouseEvent::MiddleButtonDown | WebMouseEvent::RightButtonDown; | 183 | WebMouseEvent::MiddleButtonDown | WebMouseEvent::RightButtonDown; |
162 | 184 |
163 int modifiersWithButtons(int modifiers, int buttons) { | 185 int modifiersWithButtons(int modifiers, int buttons) { |
164 return (modifiers & ~kButtonsInModifiers) | 186 return (modifiers & ~kButtonsInModifiers) |
165 | (buttons & kButtonsInModifiers); | 187 | (buttons & kButtonsInModifiers); |
166 } | 188 } |
167 | 189 |
168 void InitMouseEvent(WebInputEvent::Type t, | 190 void InitMouseEventGeneric(WebInputEvent::Type t, |
169 WebMouseEvent::Button b, | 191 WebMouseEvent::Button b, |
170 int current_buttons, | 192 int current_buttons, |
171 const WebPoint& pos, | 193 const WebPoint& pos, |
172 double time_stamp, | 194 double time_stamp, |
173 int click_count, | 195 int click_count, |
174 int modifiers, | 196 int modifiers, |
175 blink::WebPointerProperties::PointerType pointerType, | 197 WebPointerProperties::PointerType pointerType, |
176 int pointerId, | 198 int pointerId, |
177 WebMouseEvent* e) { | 199 float pressure, |
| 200 int tiltX, |
| 201 int tiltY, |
| 202 WebMouseEvent* e) { |
178 e->type = t; | 203 e->type = t; |
179 e->button = b; | 204 e->button = b; |
180 e->modifiers = modifiersWithButtons(modifiers, current_buttons); | 205 e->modifiers = modifiersWithButtons(modifiers, current_buttons); |
181 e->x = pos.x; | 206 e->x = pos.x; |
182 e->y = pos.y; | 207 e->y = pos.y; |
183 e->globalX = pos.x; | 208 e->globalX = pos.x; |
184 e->globalY = pos.y; | 209 e->globalY = pos.y; |
185 e->pointerType = pointerType; | 210 e->pointerType = pointerType; |
186 e->id = pointerId; | 211 e->id = pointerId; |
| 212 e->force = pressure; |
| 213 e->tiltX = tiltX; |
| 214 e->tiltY = tiltY; |
187 e->timeStampSeconds = time_stamp; | 215 e->timeStampSeconds = time_stamp; |
188 e->clickCount = click_count; | 216 e->clickCount = click_count; |
189 } | 217 } |
190 | 218 |
| 219 void InitMouseEvent(WebInputEvent::Type t, |
| 220 WebMouseEvent::Button b, |
| 221 int current_buttons, |
| 222 const WebPoint& pos, |
| 223 double time_stamp, |
| 224 int click_count, |
| 225 int modifiers, |
| 226 WebMouseEvent* e) { |
| 227 InitMouseEventGeneric(t, b, current_buttons, pos, time_stamp, click_count, |
| 228 modifiers, WebPointerProperties::PointerType::Mouse, 0, |
| 229 0.0, 0, 0, e); |
| 230 } |
| 231 |
191 void InitGestureEventFromMouseWheel(WebInputEvent::Type type, | 232 void InitGestureEventFromMouseWheel(WebInputEvent::Type type, |
192 double time_stamp, | 233 double time_stamp, |
193 const WebMouseWheelEvent& wheel_event, | 234 const WebMouseWheelEvent& wheel_event, |
194 WebGestureEvent* gesture_event) { | 235 WebGestureEvent* gesture_event) { |
195 gesture_event->type = type; | 236 gesture_event->type = type; |
196 gesture_event->sourceDevice = blink::WebGestureDeviceTouchpad; | 237 gesture_event->sourceDevice = blink::WebGestureDeviceTouchpad; |
197 gesture_event->x = wheel_event.x; | 238 gesture_event->x = wheel_event.x; |
198 gesture_event->y = wheel_event.y; | 239 gesture_event->y = wheel_event.y; |
199 gesture_event->globalX = wheel_event.globalX; | 240 gesture_event->globalX = wheel_event.globalX; |
200 gesture_event->globalY = wheel_event.globalY; | 241 gesture_event->globalY = wheel_event.globalY; |
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
982 sender_->ScheduleAsynchronousKeyDown(code_str, modifiers, | 1023 sender_->ScheduleAsynchronousKeyDown(code_str, modifiers, |
983 static_cast<KeyLocationCode>(location)); | 1024 static_cast<KeyLocationCode>(location)); |
984 } | 1025 } |
985 | 1026 |
986 void EventSenderBindings::MouseDown(gin::Arguments* args) { | 1027 void EventSenderBindings::MouseDown(gin::Arguments* args) { |
987 if (!sender_) | 1028 if (!sender_) |
988 return; | 1029 return; |
989 | 1030 |
990 int button_number = 0; | 1031 int button_number = 0; |
991 int modifiers = 0; | 1032 int modifiers = 0; |
992 blink::WebPointerProperties::PointerType pointerType = | |
993 blink::WebPointerProperties::PointerType::Mouse; | |
994 int pointerId = 0; | |
995 if (!args->PeekNext().IsEmpty()) { | 1033 if (!args->PeekNext().IsEmpty()) { |
996 if (!args->GetNext(&button_number)) { | 1034 if (!args->GetNext(&button_number)) { |
997 args->ThrowError(); | 1035 args->ThrowError(); |
998 return; | 1036 return; |
999 } | 1037 } |
1000 if (!args->PeekNext().IsEmpty()) { | 1038 if (!args->PeekNext().IsEmpty()) { |
1001 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); | 1039 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); |
1002 args->Skip(); | 1040 args->Skip(); |
1003 } | 1041 } |
1004 } | 1042 } |
1005 | 1043 |
1006 if (!getMousePenPointerTypeAndId(args, pointerType, pointerId)) | 1044 WebPointerProperties::PointerType pointerType = |
| 1045 WebPointerProperties::PointerType::Mouse; |
| 1046 int pointerId = 0; |
| 1047 float pressure = 0; |
| 1048 int tiltX = 0; |
| 1049 int tiltY = 0; |
| 1050 if (!getMousePenPointerProperties(args, pointerType, pointerId, pressure, |
| 1051 tiltX, tiltY)) |
1007 return; | 1052 return; |
1008 | 1053 |
1009 sender_->PointerDown(button_number, modifiers, pointerType, pointerId); | 1054 sender_->PointerDown(button_number, modifiers, pointerType, pointerId, |
| 1055 pressure, tiltX, tiltY); |
1010 } | 1056 } |
1011 | 1057 |
1012 void EventSenderBindings::MouseUp(gin::Arguments* args) { | 1058 void EventSenderBindings::MouseUp(gin::Arguments* args) { |
1013 if (!sender_) | 1059 if (!sender_) |
1014 return; | 1060 return; |
1015 | 1061 |
1016 int button_number = 0; | 1062 int button_number = 0; |
1017 int modifiers = 0; | 1063 int modifiers = 0; |
1018 blink::WebPointerProperties::PointerType pointerType = | |
1019 blink::WebPointerProperties::PointerType::Mouse; | |
1020 int pointerId = 0; | |
1021 if (!args->PeekNext().IsEmpty()) { | 1064 if (!args->PeekNext().IsEmpty()) { |
1022 if (!args->GetNext(&button_number)) { | 1065 if (!args->GetNext(&button_number)) { |
1023 args->ThrowError(); | 1066 args->ThrowError(); |
1024 return; | 1067 return; |
1025 } | 1068 } |
1026 if (!args->PeekNext().IsEmpty()) { | 1069 if (!args->PeekNext().IsEmpty()) { |
1027 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); | 1070 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); |
1028 args->Skip(); | 1071 args->Skip(); |
1029 } | 1072 } |
1030 } | 1073 } |
1031 | 1074 |
1032 if (!getMousePenPointerTypeAndId(args, pointerType, pointerId)) | 1075 WebPointerProperties::PointerType pointerType = |
| 1076 WebPointerProperties::PointerType::Mouse; |
| 1077 int pointerId = 0; |
| 1078 float pressure = 0; |
| 1079 int tiltX = 0; |
| 1080 int tiltY = 0; |
| 1081 if (!getMousePenPointerProperties(args, pointerType, pointerId, pressure, |
| 1082 tiltX, tiltY)) |
1033 return; | 1083 return; |
1034 | 1084 |
1035 sender_->PointerUp(button_number, modifiers, pointerType, pointerId); | 1085 sender_->PointerUp(button_number, modifiers, pointerType, pointerId, pressure, |
| 1086 tiltX, tiltY); |
1036 } | 1087 } |
1037 | 1088 |
1038 void EventSenderBindings::SetMouseButtonState(gin::Arguments* args) { | 1089 void EventSenderBindings::SetMouseButtonState(gin::Arguments* args) { |
1039 if (!sender_) | 1090 if (!sender_) |
1040 return; | 1091 return; |
1041 | 1092 |
1042 int button_number; | 1093 int button_number; |
1043 if (!args->GetNext(&button_number)) { | 1094 if (!args->GetNext(&button_number)) { |
1044 args->ThrowError(); | 1095 args->ThrowError(); |
1045 return; | 1096 return; |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1203 } | 1254 } |
1204 | 1255 |
1205 EventSender::~EventSender() {} | 1256 EventSender::~EventSender() {} |
1206 | 1257 |
1207 void EventSender::Reset() { | 1258 void EventSender::Reset() { |
1208 DCHECK(current_drag_data_.isNull()); | 1259 DCHECK(current_drag_data_.isNull()); |
1209 current_drag_data_.reset(); | 1260 current_drag_data_.reset(); |
1210 current_drag_effect_ = blink::WebDragOperationNone; | 1261 current_drag_effect_ = blink::WebDragOperationNone; |
1211 current_drag_effects_allowed_ = blink::WebDragOperationNone; | 1262 current_drag_effects_allowed_ = blink::WebDragOperationNone; |
1212 if (view() && | 1263 if (view() && |
1213 current_pointer_state_[kMousePointerId].pressed_button_ != | 1264 current_pointer_state_[kRawMousePointerId].pressed_button_ != |
1214 WebMouseEvent::ButtonNone) | 1265 WebMouseEvent::ButtonNone) |
1215 view()->mouseCaptureLost(); | 1266 view()->mouseCaptureLost(); |
1216 current_pointer_state_.clear(); | 1267 current_pointer_state_.clear(); |
1217 is_drag_mode_ = true; | 1268 is_drag_mode_ = true; |
1218 force_layout_on_events_ = true; | 1269 force_layout_on_events_ = true; |
1219 | 1270 |
1220 #if defined(OS_WIN) | 1271 #if defined(OS_WIN) |
1221 wm_key_down_ = WM_KEYDOWN; | 1272 wm_key_down_ = WM_KEYDOWN; |
1222 wm_key_up_ = WM_KEYUP; | 1273 wm_key_up_ = WM_KEYUP; |
1223 wm_char_ = WM_CHAR; | 1274 wm_char_ = WM_CHAR; |
(...skipping 26 matching lines...) Expand all Loading... |
1250 } | 1301 } |
1251 | 1302 |
1252 void EventSender::SetContextMenuData(const WebContextMenuData& data) { | 1303 void EventSender::SetContextMenuData(const WebContextMenuData& data) { |
1253 last_context_menu_data_.reset(new WebContextMenuData(data)); | 1304 last_context_menu_data_.reset(new WebContextMenuData(data)); |
1254 } | 1305 } |
1255 | 1306 |
1256 void EventSender::DoDragDrop(const WebDragData& drag_data, | 1307 void EventSender::DoDragDrop(const WebDragData& drag_data, |
1257 WebDragOperationsMask mask) { | 1308 WebDragOperationsMask mask) { |
1258 WebMouseEvent event; | 1309 WebMouseEvent event; |
1259 InitMouseEvent(WebInputEvent::MouseDown, | 1310 InitMouseEvent(WebInputEvent::MouseDown, |
1260 current_pointer_state_[kMousePointerId].pressed_button_, | 1311 current_pointer_state_[kRawMousePointerId].pressed_button_, |
1261 current_pointer_state_[kMousePointerId].current_buttons_, | 1312 current_pointer_state_[kRawMousePointerId].current_buttons_, |
1262 current_pointer_state_[kMousePointerId].last_pos_, | 1313 current_pointer_state_[kRawMousePointerId].last_pos_, |
1263 GetCurrentEventTimeSec(), | 1314 GetCurrentEventTimeSec(), click_count_, |
1264 click_count_, | 1315 current_pointer_state_[kRawMousePointerId].modifiers_, &event); |
1265 current_pointer_state_[kMousePointerId].modifiers_, | |
1266 blink::WebPointerProperties::PointerType::Mouse, | |
1267 0, | |
1268 &event); | |
1269 WebPoint client_point(event.x, event.y); | 1316 WebPoint client_point(event.x, event.y); |
1270 WebPoint screen_point(event.globalX, event.globalY); | 1317 WebPoint screen_point(event.globalX, event.globalY); |
1271 current_drag_data_ = drag_data; | 1318 current_drag_data_ = drag_data; |
1272 current_drag_effects_allowed_ = mask; | 1319 current_drag_effects_allowed_ = mask; |
1273 current_drag_effect_ = view()->dragTargetDragEnter( | 1320 current_drag_effect_ = view()->dragTargetDragEnter( |
1274 drag_data, client_point, screen_point, current_drag_effects_allowed_, | 1321 drag_data, client_point, screen_point, current_drag_effects_allowed_, |
1275 modifiersWithButtons( | 1322 modifiersWithButtons( |
1276 current_pointer_state_[kMousePointerId].modifiers_, | 1323 current_pointer_state_[kRawMousePointerId].modifiers_, |
1277 current_pointer_state_[kMousePointerId].current_buttons_)); | 1324 current_pointer_state_[kRawMousePointerId].current_buttons_)); |
1278 | 1325 |
1279 // Finish processing events. | 1326 // Finish processing events. |
1280 ReplaySavedEvents(); | 1327 ReplaySavedEvents(); |
1281 } | 1328 } |
1282 | 1329 |
1283 void EventSender::MouseDown(int button_number, int modifiers) { | 1330 void EventSender::MouseDown(int button_number, int modifiers) { |
1284 PointerDown(button_number, modifiers, | 1331 PointerDown(button_number, modifiers, |
1285 blink::WebPointerProperties::PointerType::Mouse, kMousePointerId); | 1332 WebPointerProperties::PointerType::Mouse, kRawMousePointerId, 0.0, |
| 1333 0, 0); |
1286 } | 1334 } |
1287 | 1335 |
1288 void EventSender::MouseUp(int button_number, int modifiers) { | 1336 void EventSender::MouseUp(int button_number, int modifiers) { |
1289 PointerUp(button_number, modifiers, | 1337 PointerUp(button_number, modifiers, WebPointerProperties::PointerType::Mouse, |
1290 blink::WebPointerProperties::PointerType::Mouse, kMousePointerId); | 1338 kRawMousePointerId, 0.0, 0, 0); |
1291 } | 1339 } |
1292 | 1340 |
1293 void EventSender::PointerDown( | 1341 void EventSender::PointerDown(int button_number, |
1294 int button_number, | 1342 int modifiers, |
1295 int modifiers, | 1343 WebPointerProperties::PointerType pointerType, |
1296 blink::WebPointerProperties::PointerType pointerType, | 1344 int pointerId, |
1297 int pointerId) { | 1345 float pressure, |
| 1346 int tiltX, |
| 1347 int tiltY) { |
1298 if (force_layout_on_events_) | 1348 if (force_layout_on_events_) |
1299 view()->updateAllLifecyclePhases(); | 1349 view()->updateAllLifecyclePhases(); |
1300 | 1350 |
1301 DCHECK_NE(-1, button_number); | 1351 DCHECK_NE(-1, button_number); |
1302 | 1352 |
1303 WebMouseEvent::Button button_type = | 1353 WebMouseEvent::Button button_type = |
1304 GetButtonTypeFromButtonNumber(button_number); | 1354 GetButtonTypeFromButtonNumber(button_number); |
1305 | 1355 |
1306 WebMouseEvent event; | 1356 WebMouseEvent event; |
1307 int click_count = 0; | 1357 int click_count = 0; |
1308 current_pointer_state_[pointerId].pressed_button_ = button_type; | 1358 current_pointer_state_[pointerId].pressed_button_ = button_type; |
1309 current_pointer_state_[pointerId].current_buttons_ |= | 1359 current_pointer_state_[pointerId].current_buttons_ |= |
1310 GetWebMouseEventModifierForButton(button_type); | 1360 GetWebMouseEventModifierForButton(button_type); |
1311 current_pointer_state_[pointerId].modifiers_ = modifiers; | 1361 current_pointer_state_[pointerId].modifiers_ = modifiers; |
1312 | 1362 |
1313 if (pointerType == blink::WebPointerProperties::PointerType::Mouse) { | 1363 if (pointerType == WebPointerProperties::PointerType::Mouse) { |
1314 UpdateClickCountForButton(button_type); | 1364 UpdateClickCountForButton(button_type); |
1315 click_count = click_count_; | 1365 click_count = click_count_; |
1316 } | 1366 } |
1317 InitMouseEvent(WebInputEvent::MouseDown, | 1367 InitMouseEventGeneric(WebInputEvent::MouseDown, |
1318 current_pointer_state_[pointerId].pressed_button_, | 1368 current_pointer_state_[pointerId].pressed_button_, |
1319 current_pointer_state_[pointerId].current_buttons_, | 1369 current_pointer_state_[pointerId].current_buttons_, |
1320 current_pointer_state_[pointerId].last_pos_, | 1370 current_pointer_state_[pointerId].last_pos_, |
1321 GetCurrentEventTimeSec(), | 1371 GetCurrentEventTimeSec(), click_count, |
1322 click_count, | 1372 current_pointer_state_[pointerId].modifiers_, |
1323 current_pointer_state_[pointerId].modifiers_, | 1373 pointerType, pointerId, pressure, tiltX, tiltY, &event); |
1324 pointerType, | |
1325 pointerId, | |
1326 &event); | |
1327 | 1374 |
1328 HandleInputEventOnViewOrPopup(event); | 1375 HandleInputEventOnViewOrPopup(event); |
1329 } | 1376 } |
1330 | 1377 |
1331 void EventSender::PointerUp( | 1378 void EventSender::PointerUp(int button_number, |
1332 int button_number, | 1379 int modifiers, |
1333 int modifiers, | 1380 WebPointerProperties::PointerType pointerType, |
1334 blink::WebPointerProperties::PointerType pointerType, | 1381 int pointerId, |
1335 int pointerId) { | 1382 float pressure, |
| 1383 int tiltX, |
| 1384 int tiltY) { |
1336 if (force_layout_on_events_) | 1385 if (force_layout_on_events_) |
1337 view()->updateAllLifecyclePhases(); | 1386 view()->updateAllLifecyclePhases(); |
1338 | 1387 |
1339 DCHECK_NE(-1, button_number); | 1388 DCHECK_NE(-1, button_number); |
1340 | 1389 |
1341 WebMouseEvent::Button button_type = | 1390 WebMouseEvent::Button button_type = |
1342 GetButtonTypeFromButtonNumber(button_number); | 1391 GetButtonTypeFromButtonNumber(button_number); |
1343 | 1392 |
1344 if (pointerType == blink::WebPointerProperties::PointerType::Mouse && | 1393 if (pointerType == WebPointerProperties::PointerType::Mouse && |
1345 is_drag_mode_ && !replaying_saved_events_) { | 1394 is_drag_mode_ && !replaying_saved_events_) { |
1346 SavedEvent saved_event; | 1395 SavedEvent saved_event; |
1347 saved_event.type = SavedEvent::TYPE_MOUSE_UP; | 1396 saved_event.type = SavedEvent::TYPE_MOUSE_UP; |
1348 saved_event.button_type = button_type; | 1397 saved_event.button_type = button_type; |
1349 saved_event.modifiers = modifiers; | 1398 saved_event.modifiers = modifiers; |
1350 mouse_event_queue_.push_back(saved_event); | 1399 mouse_event_queue_.push_back(saved_event); |
1351 ReplaySavedEvents(); | 1400 ReplaySavedEvents(); |
1352 } else { | 1401 } else { |
1353 current_pointer_state_[pointerId].current_buttons_ &= | 1402 current_pointer_state_[pointerId].current_buttons_ &= |
1354 ~GetWebMouseEventModifierForButton(button_type); | 1403 ~GetWebMouseEventModifierForButton(button_type); |
1355 current_pointer_state_[pointerId].pressed_button_ = | 1404 current_pointer_state_[pointerId].pressed_button_ = |
1356 WebMouseEvent::ButtonNone; | 1405 WebMouseEvent::ButtonNone; |
1357 | 1406 |
1358 WebMouseEvent event; | 1407 WebMouseEvent event; |
1359 InitMouseEvent( | 1408 int click_count = pointerType == WebPointerProperties::PointerType::Mouse |
1360 WebInputEvent::MouseUp, button_type, | 1409 ? click_count_ |
1361 current_pointer_state_[pointerId].current_buttons_, | 1410 : 0; |
1362 current_pointer_state_[pointerId].last_pos_, GetCurrentEventTimeSec(), | 1411 InitMouseEventGeneric(WebInputEvent::MouseUp, button_type, |
1363 pointerType == blink::WebPointerProperties::PointerType::Mouse | 1412 current_pointer_state_[pointerId].current_buttons_, |
1364 ? click_count_ | 1413 current_pointer_state_[pointerId].last_pos_, |
1365 : 0, | 1414 GetCurrentEventTimeSec(), click_count, modifiers, |
1366 modifiers, pointerType, pointerId, &event); | 1415 pointerType, pointerId, pressure, tiltX, tiltY, |
| 1416 &event); |
1367 HandleInputEventOnViewOrPopup(event); | 1417 HandleInputEventOnViewOrPopup(event); |
1368 if (pointerType == blink::WebPointerProperties::PointerType::Mouse) | 1418 if (pointerType == WebPointerProperties::PointerType::Mouse) |
1369 DoDragAfterMouseUp(event); | 1419 DoDragAfterMouseUp(event); |
1370 } | 1420 } |
1371 } | 1421 } |
1372 | 1422 |
1373 void EventSender::SetMouseButtonState(int button_number, int modifiers) { | 1423 void EventSender::SetMouseButtonState(int button_number, int modifiers) { |
1374 current_pointer_state_[kMousePointerId].pressed_button_ = | 1424 current_pointer_state_[kRawMousePointerId].pressed_button_ = |
1375 GetButtonTypeFromButtonNumber(button_number); | 1425 GetButtonTypeFromButtonNumber(button_number); |
1376 current_pointer_state_[kMousePointerId].current_buttons_ = | 1426 current_pointer_state_[kRawMousePointerId].current_buttons_ = |
1377 (modifiers == -1) | 1427 (modifiers == -1) |
1378 ? GetWebMouseEventModifierForButton( | 1428 ? GetWebMouseEventModifierForButton( |
1379 current_pointer_state_[kMousePointerId].pressed_button_) | 1429 current_pointer_state_[kRawMousePointerId].pressed_button_) |
1380 : modifiers & kButtonsInModifiers; | 1430 : modifiers & kButtonsInModifiers; |
1381 } | 1431 } |
1382 | 1432 |
1383 void EventSender::KeyDown(const std::string& code_str, | 1433 void EventSender::KeyDown(const std::string& code_str, |
1384 int modifiers, | 1434 int modifiers, |
1385 KeyLocationCode location) { | 1435 KeyLocationCode location) { |
1386 // FIXME: I'm not exactly sure how we should convert the string to a key | 1436 // FIXME: I'm not exactly sure how we should convert the string to a key |
1387 // event. This seems to work in the cases I tested. | 1437 // event. This seems to work in the cases I tested. |
1388 // FIXME: Should we also generate a KEY_UP? | 1438 // FIXME: Should we also generate a KEY_UP? |
1389 | 1439 |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1602 // We just simulate the same behavior here. | 1652 // We just simulate the same behavior here. |
1603 std::string edit_command; | 1653 std::string edit_command; |
1604 if (GetEditCommand(event_down, &edit_command)) | 1654 if (GetEditCommand(event_down, &edit_command)) |
1605 delegate()->SetEditCommand(edit_command, ""); | 1655 delegate()->SetEditCommand(edit_command, ""); |
1606 | 1656 |
1607 HandleInputEventOnViewOrPopup(event_down); | 1657 HandleInputEventOnViewOrPopup(event_down); |
1608 | 1658 |
1609 if (code == ui::VKEY_ESCAPE && !current_drag_data_.isNull()) { | 1659 if (code == ui::VKEY_ESCAPE && !current_drag_data_.isNull()) { |
1610 WebMouseEvent event; | 1660 WebMouseEvent event; |
1611 InitMouseEvent(WebInputEvent::MouseDown, | 1661 InitMouseEvent(WebInputEvent::MouseDown, |
1612 current_pointer_state_[kMousePointerId].pressed_button_, | 1662 current_pointer_state_[kRawMousePointerId].pressed_button_, |
1613 current_pointer_state_[kMousePointerId].current_buttons_, | 1663 current_pointer_state_[kRawMousePointerId].current_buttons_, |
1614 current_pointer_state_[kMousePointerId].last_pos_, | 1664 current_pointer_state_[kRawMousePointerId].last_pos_, |
1615 GetCurrentEventTimeSec(), | 1665 GetCurrentEventTimeSec(), click_count_, 0, &event); |
1616 click_count_, | |
1617 0, | |
1618 blink::WebPointerProperties::PointerType::Mouse, | |
1619 0, | |
1620 &event); | |
1621 FinishDragAndDrop(event, blink::WebDragOperationNone); | 1666 FinishDragAndDrop(event, blink::WebDragOperationNone); |
1622 } | 1667 } |
1623 | 1668 |
1624 delegate()->ClearEditCommand(); | 1669 delegate()->ClearEditCommand(); |
1625 | 1670 |
1626 if (generate_char) { | 1671 if (generate_char) { |
1627 WebKeyboardEvent event_char = event_up; | 1672 WebKeyboardEvent event_char = event_up; |
1628 event_char.type = WebInputEvent::Char; | 1673 event_char.type = WebInputEvent::Char; |
1629 // keyIdentifier is an empty string, unless the Enter key was pressed. | 1674 // keyIdentifier is an empty string, unless the Enter key was pressed. |
1630 // This behavior is not standard (keyIdentifier itself is not even a | 1675 // This behavior is not standard (keyIdentifier itself is not even a |
(...skipping 23 matching lines...) Expand all Loading... |
1654 // be requested after following mouse events. | 1699 // be requested after following mouse events. |
1655 last_context_menu_data_.reset(); | 1700 last_context_menu_data_.reset(); |
1656 | 1701 |
1657 // Generate right mouse down and up. | 1702 // Generate right mouse down and up. |
1658 WebMouseEvent event; | 1703 WebMouseEvent event; |
1659 // This is a hack to work around only allowing a single pressed button since | 1704 // This is a hack to work around only allowing a single pressed button since |
1660 // we want to test the case where both the left and right mouse buttons are | 1705 // we want to test the case where both the left and right mouse buttons are |
1661 // pressed. | 1706 // pressed. |
1662 // TODO(mustaq): This hack seems unused here! But do we need this hack at all | 1707 // TODO(mustaq): This hack seems unused here! But do we need this hack at all |
1663 // after adding current_buttons_. | 1708 // after adding current_buttons_. |
1664 if (current_pointer_state_[kMousePointerId].pressed_button_ == | 1709 if (current_pointer_state_[kRawMousePointerId].pressed_button_ == |
1665 WebMouseEvent::ButtonNone) { | 1710 WebMouseEvent::ButtonNone) { |
1666 current_pointer_state_[kMousePointerId].pressed_button_ = | 1711 current_pointer_state_[kRawMousePointerId].pressed_button_ = |
1667 WebMouseEvent::ButtonRight; | 1712 WebMouseEvent::ButtonRight; |
1668 current_pointer_state_[kMousePointerId].current_buttons_ |= | 1713 current_pointer_state_[kRawMousePointerId].current_buttons_ |= |
1669 GetWebMouseEventModifierForButton( | 1714 GetWebMouseEventModifierForButton( |
1670 current_pointer_state_[kMousePointerId].pressed_button_); | 1715 current_pointer_state_[kRawMousePointerId].pressed_button_); |
1671 } | 1716 } |
1672 InitMouseEvent(WebInputEvent::MouseDown, | 1717 InitMouseEvent(WebInputEvent::MouseDown, WebMouseEvent::ButtonRight, |
1673 WebMouseEvent::ButtonRight, | 1718 current_pointer_state_[kRawMousePointerId].current_buttons_, |
1674 current_pointer_state_[kMousePointerId].current_buttons_, | 1719 current_pointer_state_[kRawMousePointerId].last_pos_, |
1675 current_pointer_state_[kMousePointerId].last_pos_, | 1720 GetCurrentEventTimeSec(), click_count_, 0, &event); |
1676 GetCurrentEventTimeSec(), | |
1677 click_count_, | |
1678 0, | |
1679 blink::WebPointerProperties::PointerType::Mouse, | |
1680 0, | |
1681 &event); | |
1682 HandleInputEventOnViewOrPopup(event); | 1721 HandleInputEventOnViewOrPopup(event); |
1683 | 1722 |
1684 #if defined(OS_WIN) | 1723 #if defined(OS_WIN) |
1685 current_pointer_state_[kMousePointerId].current_buttons_ &= | 1724 current_pointer_state_[kRawMousePointerId].current_buttons_ &= |
1686 ~GetWebMouseEventModifierForButton(WebMouseEvent::ButtonRight); | 1725 ~GetWebMouseEventModifierForButton(WebMouseEvent::ButtonRight); |
1687 current_pointer_state_[kMousePointerId].pressed_button_ = | 1726 current_pointer_state_[kRawMousePointerId].pressed_button_ = |
1688 WebMouseEvent::ButtonNone; | 1727 WebMouseEvent::ButtonNone; |
1689 | 1728 |
1690 InitMouseEvent(WebInputEvent::MouseUp, | 1729 InitMouseEvent(WebInputEvent::MouseUp, WebMouseEvent::ButtonRight, |
1691 WebMouseEvent::ButtonRight, | 1730 current_pointer_state_[kRawMousePointerId].current_buttons_, |
1692 current_pointer_state_[kMousePointerId].current_buttons_, | 1731 current_pointer_state_[kRawMousePointerId].last_pos_, |
1693 current_pointer_state_[kMousePointerId].last_pos_, | 1732 GetCurrentEventTimeSec(), click_count_, 0, &event); |
1694 GetCurrentEventTimeSec(), | |
1695 click_count_, | |
1696 0, | |
1697 blink::WebPointerProperties::PointerType::Mouse, | |
1698 0, | |
1699 &event); | |
1700 HandleInputEventOnViewOrPopup(event); | 1733 HandleInputEventOnViewOrPopup(event); |
1701 #endif | 1734 #endif |
1702 | 1735 |
1703 std::vector<std::string> menu_items = | 1736 std::vector<std::string> menu_items = |
1704 MakeMenuItemStringsFor(last_context_menu_data_.get(), delegate()); | 1737 MakeMenuItemStringsFor(last_context_menu_data_.get(), delegate()); |
1705 last_context_menu_data_.reset(); | 1738 last_context_menu_data_.reset(); |
1706 return menu_items; | 1739 return menu_items; |
1707 } | 1740 } |
1708 | 1741 |
1709 void EventSender::TextZoomIn() { | 1742 void EventSender::TextZoomIn() { |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1916 } | 1949 } |
1917 | 1950 |
1918 void EventSender::NotifyStartOfTouchScroll() { | 1951 void EventSender::NotifyStartOfTouchScroll() { |
1919 WebTouchEvent event; | 1952 WebTouchEvent event; |
1920 event.type = WebInputEvent::TouchScrollStarted; | 1953 event.type = WebInputEvent::TouchScrollStarted; |
1921 HandleInputEventOnViewOrPopup(event); | 1954 HandleInputEventOnViewOrPopup(event); |
1922 } | 1955 } |
1923 | 1956 |
1924 void EventSender::LeapForward(int milliseconds) { | 1957 void EventSender::LeapForward(int milliseconds) { |
1925 if (is_drag_mode_ && | 1958 if (is_drag_mode_ && |
1926 current_pointer_state_[kMousePointerId].pressed_button_ == | 1959 current_pointer_state_[kRawMousePointerId].pressed_button_ == |
1927 WebMouseEvent::ButtonLeft && | 1960 WebMouseEvent::ButtonLeft && |
1928 !replaying_saved_events_) { | 1961 !replaying_saved_events_) { |
1929 SavedEvent saved_event; | 1962 SavedEvent saved_event; |
1930 saved_event.type = SavedEvent::TYPE_LEAP_FORWARD; | 1963 saved_event.type = SavedEvent::TYPE_LEAP_FORWARD; |
1931 saved_event.milliseconds = milliseconds; | 1964 saved_event.milliseconds = milliseconds; |
1932 mouse_event_queue_.push_back(saved_event); | 1965 mouse_event_queue_.push_back(saved_event); |
1933 } else { | 1966 } else { |
1934 DoLeapForward(milliseconds); | 1967 DoLeapForward(milliseconds); |
1935 } | 1968 } |
1936 } | 1969 } |
(...skipping 16 matching lines...) Expand all Loading... |
1953 item.storageType = WebDragData::Item::StorageTypeFilename; | 1986 item.storageType = WebDragData::Item::StorageTypeFilename; |
1954 item.filenameData = delegate()->GetAbsoluteWebStringFromUTF8Path(files[i]); | 1987 item.filenameData = delegate()->GetAbsoluteWebStringFromUTF8Path(files[i]); |
1955 current_drag_data_.addItem(item); | 1988 current_drag_data_.addItem(item); |
1956 absolute_filenames[i] = item.filenameData; | 1989 absolute_filenames[i] = item.filenameData; |
1957 } | 1990 } |
1958 current_drag_data_.setFilesystemId( | 1991 current_drag_data_.setFilesystemId( |
1959 delegate()->RegisterIsolatedFileSystem(absolute_filenames)); | 1992 delegate()->RegisterIsolatedFileSystem(absolute_filenames)); |
1960 current_drag_effects_allowed_ = blink::WebDragOperationCopy; | 1993 current_drag_effects_allowed_ = blink::WebDragOperationCopy; |
1961 | 1994 |
1962 // Provide a drag source. | 1995 // Provide a drag source. |
1963 view()->dragTargetDragEnter(current_drag_data_, | 1996 view()->dragTargetDragEnter( |
1964 current_pointer_state_[kMousePointerId].last_pos_, | 1997 current_drag_data_, current_pointer_state_[kRawMousePointerId].last_pos_, |
1965 current_pointer_state_[kMousePointerId].last_pos_, | 1998 current_pointer_state_[kRawMousePointerId].last_pos_, |
1966 current_drag_effects_allowed_, 0); | 1999 current_drag_effects_allowed_, 0); |
1967 // |is_drag_mode_| saves events and then replays them later. We don't | 2000 // |is_drag_mode_| saves events and then replays them later. We don't |
1968 // need/want that. | 2001 // need/want that. |
1969 is_drag_mode_ = false; | 2002 is_drag_mode_ = false; |
1970 | 2003 |
1971 // Make the rest of eventSender think a drag is in progress. | 2004 // Make the rest of eventSender think a drag is in progress. |
1972 current_pointer_state_[kMousePointerId].pressed_button_ = | 2005 current_pointer_state_[kRawMousePointerId].pressed_button_ = |
1973 WebMouseEvent::ButtonLeft; | 2006 WebMouseEvent::ButtonLeft; |
1974 current_pointer_state_[kMousePointerId].current_buttons_ |= | 2007 current_pointer_state_[kRawMousePointerId].current_buttons_ |= |
1975 GetWebMouseEventModifierForButton( | 2008 GetWebMouseEventModifierForButton( |
1976 current_pointer_state_[kMousePointerId].pressed_button_); | 2009 current_pointer_state_[kRawMousePointerId].pressed_button_); |
1977 } | 2010 } |
1978 | 2011 |
1979 void EventSender::AddTouchPoint(float x, float y, gin::Arguments* args) { | 2012 void EventSender::AddTouchPoint(float x, float y, gin::Arguments* args) { |
1980 WebTouchPoint touch_point; | 2013 WebTouchPoint touch_point; |
1981 touch_point.pointerType = WebPointerProperties::PointerType::Touch; | 2014 touch_point.pointerType = WebPointerProperties::PointerType::Touch; |
1982 touch_point.state = WebTouchPoint::StatePressed; | 2015 touch_point.state = WebTouchPoint::StatePressed; |
1983 touch_point.position = WebFloatPoint(x, y); | 2016 touch_point.position = WebFloatPoint(x, y); |
1984 touch_point.screenPosition = touch_point.position; | 2017 touch_point.screenPosition = touch_point.position; |
1985 | 2018 |
1986 int highest_id = -1; | 2019 int highest_id = -1; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2066 SendGesturesForMouseWheelEvent(wheel_event); | 2099 SendGesturesForMouseWheelEvent(wheel_event); |
2067 } | 2100 } |
2068 } | 2101 } |
2069 | 2102 |
2070 void EventSender::MouseMoveTo(gin::Arguments* args) { | 2103 void EventSender::MouseMoveTo(gin::Arguments* args) { |
2071 if (force_layout_on_events_) | 2104 if (force_layout_on_events_) |
2072 view()->updateAllLifecyclePhases(); | 2105 view()->updateAllLifecyclePhases(); |
2073 | 2106 |
2074 double x; | 2107 double x; |
2075 double y; | 2108 double y; |
2076 blink::WebPointerProperties::PointerType pointerType = | |
2077 blink::WebPointerProperties::PointerType::Mouse; | |
2078 int pointerId = 0; | |
2079 if (!args->GetNext(&x) || !args->GetNext(&y)) { | 2109 if (!args->GetNext(&x) || !args->GetNext(&y)) { |
2080 args->ThrowError(); | 2110 args->ThrowError(); |
2081 return; | 2111 return; |
2082 } | 2112 } |
2083 WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y)); | 2113 WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y)); |
2084 | 2114 |
2085 int modifiers = 0; | 2115 int modifiers = 0; |
2086 if (!args->PeekNext().IsEmpty()) { | 2116 if (!args->PeekNext().IsEmpty()) { |
2087 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); | 2117 modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); |
2088 args->Skip(); | 2118 args->Skip(); |
2089 } | 2119 } |
2090 | 2120 |
2091 if (!getMousePenPointerTypeAndId(args, pointerType, pointerId)) | 2121 WebPointerProperties::PointerType pointerType = |
| 2122 WebPointerProperties::PointerType::Mouse; |
| 2123 int pointerId = 0; |
| 2124 float pressure = 0; |
| 2125 int tiltX = 0; |
| 2126 int tiltY = 0; |
| 2127 if (!getMousePenPointerProperties(args, pointerType, pointerId, pressure, |
| 2128 tiltX, tiltY)) |
2092 return; | 2129 return; |
2093 | 2130 |
2094 if (pointerType == blink::WebPointerProperties::PointerType::Mouse && | 2131 if (pointerType == WebPointerProperties::PointerType::Mouse && |
2095 is_drag_mode_ && !replaying_saved_events_ && | 2132 is_drag_mode_ && !replaying_saved_events_ && |
2096 current_pointer_state_[kMousePointerId].pressed_button_ == | 2133 current_pointer_state_[kRawMousePointerId].pressed_button_ == |
2097 WebMouseEvent::ButtonLeft) { | 2134 WebMouseEvent::ButtonLeft) { |
2098 SavedEvent saved_event; | 2135 SavedEvent saved_event; |
2099 saved_event.type = SavedEvent::TYPE_MOUSE_MOVE; | 2136 saved_event.type = SavedEvent::TYPE_MOUSE_MOVE; |
2100 saved_event.pos = mouse_pos; | 2137 saved_event.pos = mouse_pos; |
2101 saved_event.modifiers = modifiers; | 2138 saved_event.modifiers = modifiers; |
2102 mouse_event_queue_.push_back(saved_event); | 2139 mouse_event_queue_.push_back(saved_event); |
2103 } else { | 2140 } else { |
2104 current_pointer_state_[pointerId].last_pos_ = mouse_pos; | 2141 current_pointer_state_[pointerId].last_pos_ = mouse_pos; |
2105 WebMouseEvent event; | 2142 WebMouseEvent event; |
2106 InitMouseEvent( | 2143 int click_count = pointerType == WebPointerProperties::PointerType::Mouse |
| 2144 ? click_count_ |
| 2145 : 0; |
| 2146 InitMouseEventGeneric( |
2107 WebInputEvent::MouseMove, | 2147 WebInputEvent::MouseMove, |
2108 current_pointer_state_[kMousePointerId].pressed_button_, | 2148 current_pointer_state_[kRawMousePointerId].pressed_button_, |
2109 current_pointer_state_[kMousePointerId].current_buttons_, | 2149 current_pointer_state_[kRawMousePointerId].current_buttons_, mouse_pos, |
2110 mouse_pos, | 2150 GetCurrentEventTimeSec(), click_count, modifiers, pointerType, |
2111 GetCurrentEventTimeSec(), | 2151 pointerId, pressure, tiltX, tiltY, &event); |
2112 pointerType == blink::WebPointerProperties::PointerType::Mouse | |
2113 ? click_count_ | |
2114 : 0, | |
2115 modifiers, | |
2116 pointerType, | |
2117 pointerId, | |
2118 &event); | |
2119 HandleInputEventOnViewOrPopup(event); | 2152 HandleInputEventOnViewOrPopup(event); |
2120 if (pointerType == blink::WebPointerProperties::PointerType::Mouse) | 2153 if (pointerType == WebPointerProperties::PointerType::Mouse) |
2121 DoDragAfterMouseMove(event); | 2154 DoDragAfterMouseMove(event); |
2122 } | 2155 } |
2123 } | 2156 } |
2124 | 2157 |
2125 void EventSender::MouseLeave() { | 2158 void EventSender::MouseLeave() { |
2126 if (force_layout_on_events_) | 2159 if (force_layout_on_events_) |
2127 view()->updateAllLifecyclePhases(); | 2160 view()->updateAllLifecyclePhases(); |
2128 | 2161 |
2129 WebMouseEvent event; | 2162 WebMouseEvent event; |
2130 InitMouseEvent(WebInputEvent::MouseLeave, | 2163 InitMouseEvent(WebInputEvent::MouseLeave, WebMouseEvent::ButtonNone, 0, |
2131 WebMouseEvent::ButtonNone, | 2164 current_pointer_state_[kRawMousePointerId].last_pos_, |
2132 0, | 2165 GetCurrentEventTimeSec(), click_count_, 0, &event); |
2133 current_pointer_state_[kMousePointerId].last_pos_, | |
2134 GetCurrentEventTimeSec(), | |
2135 click_count_, | |
2136 0, | |
2137 blink::WebPointerProperties::PointerType::Mouse, | |
2138 0, | |
2139 &event); | |
2140 HandleInputEventOnViewOrPopup(event); | 2166 HandleInputEventOnViewOrPopup(event); |
2141 } | 2167 } |
2142 | 2168 |
2143 | 2169 |
2144 void EventSender::ScheduleAsynchronousClick(int button_number, int modifiers) { | 2170 void EventSender::ScheduleAsynchronousClick(int button_number, int modifiers) { |
2145 delegate()->PostTask(new WebCallbackTask( | 2171 delegate()->PostTask(new WebCallbackTask( |
2146 base::Bind(&EventSender::MouseDown, weak_factory_.GetWeakPtr(), | 2172 base::Bind(&EventSender::MouseDown, weak_factory_.GetWeakPtr(), |
2147 button_number, modifiers))); | 2173 button_number, modifiers))); |
2148 delegate()->PostTask(new WebCallbackTask( | 2174 delegate()->PostTask(new WebCallbackTask( |
2149 base::Bind(&EventSender::MouseUp, weak_factory_.GetWeakPtr(), | 2175 base::Bind(&EventSender::MouseUp, weak_factory_.GetWeakPtr(), |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2448 | 2474 |
2449 if (force_layout_on_events_) | 2475 if (force_layout_on_events_) |
2450 view()->updateAllLifecyclePhases(); | 2476 view()->updateAllLifecyclePhases(); |
2451 | 2477 |
2452 WebInputEventResult result = HandleInputEventOnViewOrPopup(event); | 2478 WebInputEventResult result = HandleInputEventOnViewOrPopup(event); |
2453 | 2479 |
2454 // Long press might start a drag drop session. Complete it if so. | 2480 // Long press might start a drag drop session. Complete it if so. |
2455 if (type == WebInputEvent::GestureLongPress && !current_drag_data_.isNull()) { | 2481 if (type == WebInputEvent::GestureLongPress && !current_drag_data_.isNull()) { |
2456 WebMouseEvent mouse_event; | 2482 WebMouseEvent mouse_event; |
2457 InitMouseEvent(WebInputEvent::MouseDown, | 2483 InitMouseEvent(WebInputEvent::MouseDown, |
2458 current_pointer_state_[kMousePointerId].pressed_button_, | 2484 current_pointer_state_[kRawMousePointerId].pressed_button_, |
2459 current_pointer_state_[kMousePointerId].current_buttons_, | 2485 current_pointer_state_[kRawMousePointerId].current_buttons_, |
2460 WebPoint(x, y), GetCurrentEventTimeSec(), | 2486 WebPoint(x, y), GetCurrentEventTimeSec(), click_count_, |
2461 click_count_, | 2487 current_pointer_state_[kRawMousePointerId].modifiers_, |
2462 current_pointer_state_[kMousePointerId].modifiers_, | |
2463 blink::WebPointerProperties::PointerType::Mouse, | |
2464 0, | |
2465 &mouse_event); | 2488 &mouse_event); |
2466 | 2489 |
2467 FinishDragAndDrop(mouse_event, blink::WebDragOperationNone); | 2490 FinishDragAndDrop(mouse_event, blink::WebDragOperationNone); |
2468 } | 2491 } |
2469 args->Return(result != WebInputEventResult::NotHandled); | 2492 args->Return(result != WebInputEventResult::NotHandled); |
2470 } | 2493 } |
2471 | 2494 |
2472 void EventSender::UpdateClickCountForButton( | 2495 void EventSender::UpdateClickCountForButton( |
2473 WebMouseEvent::Button button_type) { | 2496 WebMouseEvent::Button button_type) { |
2474 if ((GetCurrentEventTimeSec() - last_click_time_sec_ < | 2497 if ((GetCurrentEventTimeSec() - last_click_time_sec_ < |
2475 kMultipleClickTimeSec) && | 2498 kMultipleClickTimeSec) && |
2476 (!OutsideMultiClickRadius( | 2499 (!OutsideMultiClickRadius( |
2477 current_pointer_state_[kMousePointerId].last_pos_, | 2500 current_pointer_state_[kRawMousePointerId].last_pos_, |
2478 last_click_pos_)) && | 2501 last_click_pos_)) && |
2479 (button_type == last_button_type_)) { | 2502 (button_type == last_button_type_)) { |
2480 ++click_count_; | 2503 ++click_count_; |
2481 } else { | 2504 } else { |
2482 click_count_ = 1; | 2505 click_count_ = 1; |
2483 last_button_type_ = button_type; | 2506 last_button_type_ = button_type; |
2484 } | 2507 } |
2485 } | 2508 } |
2486 | 2509 |
2487 void EventSender::InitMouseWheelEvent(gin::Arguments* args, | 2510 void EventSender::InitMouseWheelEvent(gin::Arguments* args, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2522 } | 2545 } |
2523 } | 2546 } |
2524 } | 2547 } |
2525 } | 2548 } |
2526 if (can_scroll && send_wheel_gestures_) { | 2549 if (can_scroll && send_wheel_gestures_) { |
2527 can_scroll = false; | 2550 can_scroll = false; |
2528 *send_gestures = true; | 2551 *send_gestures = true; |
2529 } | 2552 } |
2530 | 2553 |
2531 InitMouseEvent(WebInputEvent::MouseWheel, | 2554 InitMouseEvent(WebInputEvent::MouseWheel, |
2532 current_pointer_state_[kMousePointerId].pressed_button_, | 2555 current_pointer_state_[kRawMousePointerId].pressed_button_, |
2533 current_pointer_state_[kMousePointerId].current_buttons_, | 2556 current_pointer_state_[kRawMousePointerId].current_buttons_, |
2534 current_pointer_state_[kMousePointerId].last_pos_, | 2557 current_pointer_state_[kRawMousePointerId].last_pos_, |
2535 GetCurrentEventTimeSec(), | 2558 GetCurrentEventTimeSec(), click_count_, modifiers, event); |
2536 click_count_, | |
2537 modifiers, | |
2538 blink::WebPointerProperties::PointerType::Mouse, | |
2539 0, | |
2540 event); | |
2541 event->wheelTicksX = static_cast<float>(horizontal); | 2559 event->wheelTicksX = static_cast<float>(horizontal); |
2542 event->wheelTicksY = static_cast<float>(vertical); | 2560 event->wheelTicksY = static_cast<float>(vertical); |
2543 event->deltaX = event->wheelTicksX; | 2561 event->deltaX = event->wheelTicksX; |
2544 event->deltaY = event->wheelTicksY; | 2562 event->deltaY = event->wheelTicksY; |
2545 event->scrollByPage = paged; | 2563 event->scrollByPage = paged; |
2546 event->hasPreciseScrollingDeltas = has_precise_scrolling_deltas; | 2564 event->hasPreciseScrollingDeltas = has_precise_scrolling_deltas; |
2547 event->canScroll = can_scroll; | 2565 event->canScroll = can_scroll; |
2548 if (scroll_type == MouseScrollType::PIXEL) { | 2566 if (scroll_type == MouseScrollType::PIXEL) { |
2549 event->wheelTicksX /= kScrollbarPixelsPerTick; | 2567 event->wheelTicksX /= kScrollbarPixelsPerTick; |
2550 event->wheelTicksY /= kScrollbarPixelsPerTick; | 2568 event->wheelTicksY /= kScrollbarPixelsPerTick; |
2551 } else { | 2569 } else { |
2552 event->deltaX *= kScrollbarPixelsPerTick; | 2570 event->deltaX *= kScrollbarPixelsPerTick; |
2553 event->deltaY *= kScrollbarPixelsPerTick; | 2571 event->deltaY *= kScrollbarPixelsPerTick; |
2554 } | 2572 } |
2555 } | 2573 } |
2556 | 2574 |
2557 // Radius fields radius_x and radius_y should eventually be moved to | 2575 // Radius fields radius_x and radius_y should eventually be moved to |
2558 // WebPointerProperties. | 2576 // WebPointerProperties. |
2559 // TODO(e_hakkinen): Drop radius_{x,y}_pointer parameters once that happens. | 2577 // TODO(e_hakkinen): Drop radius_{x,y}_pointer parameters once that happens. |
2560 void EventSender::InitPointerProperties(gin::Arguments* args, | 2578 void EventSender::InitPointerProperties(gin::Arguments* args, |
2561 blink::WebPointerProperties* e, | 2579 WebPointerProperties* e, |
2562 float* radius_x_pointer, | 2580 float* radius_x_pointer, |
2563 float* radius_y_pointer) { | 2581 float* radius_y_pointer) { |
2564 if (!args->PeekNext().IsEmpty()) { | 2582 if (!args->PeekNext().IsEmpty()) { |
2565 double radius_x; | 2583 double radius_x; |
2566 if (!args->GetNext(&radius_x)) { | 2584 if (!args->GetNext(&radius_x)) { |
2567 args->ThrowError(); | 2585 args->ThrowError(); |
2568 return; | 2586 return; |
2569 } | 2587 } |
2570 | 2588 |
2571 double radius_y = radius_x; | 2589 double radius_y = radius_x; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2616 view()->dragTargetDragLeave(); | 2634 view()->dragTargetDragLeave(); |
2617 } | 2635 } |
2618 view()->dragSourceEndedAt(client_point, screen_point, current_drag_effect_); | 2636 view()->dragSourceEndedAt(client_point, screen_point, current_drag_effect_); |
2619 view()->dragSourceSystemDragEnded(); | 2637 view()->dragSourceSystemDragEnded(); |
2620 | 2638 |
2621 current_drag_data_.reset(); | 2639 current_drag_data_.reset(); |
2622 } | 2640 } |
2623 | 2641 |
2624 void EventSender::DoDragAfterMouseUp(const WebMouseEvent& e) { | 2642 void EventSender::DoDragAfterMouseUp(const WebMouseEvent& e) { |
2625 last_click_time_sec_ = e.timeStampSeconds; | 2643 last_click_time_sec_ = e.timeStampSeconds; |
2626 last_click_pos_ = current_pointer_state_[kMousePointerId].last_pos_; | 2644 last_click_pos_ = current_pointer_state_[kRawMousePointerId].last_pos_; |
2627 | 2645 |
2628 // If we're in a drag operation, complete it. | 2646 // If we're in a drag operation, complete it. |
2629 if (current_drag_data_.isNull()) | 2647 if (current_drag_data_.isNull()) |
2630 return; | 2648 return; |
2631 | 2649 |
2632 WebPoint client_point(e.x, e.y); | 2650 WebPoint client_point(e.x, e.y); |
2633 WebPoint screen_point(e.globalX, e.globalY); | 2651 WebPoint screen_point(e.globalX, e.globalY); |
2634 blink::WebDragOperation drag_effect = view()->dragTargetDragOver( | 2652 blink::WebDragOperation drag_effect = view()->dragTargetDragOver( |
2635 client_point, screen_point, current_drag_effects_allowed_, e.modifiers); | 2653 client_point, screen_point, current_drag_effects_allowed_, e.modifiers); |
2636 | 2654 |
2637 // Bail if dragover caused cancellation. | 2655 // Bail if dragover caused cancellation. |
2638 if (current_drag_data_.isNull()) | 2656 if (current_drag_data_.isNull()) |
2639 return; | 2657 return; |
2640 | 2658 |
2641 FinishDragAndDrop(e, drag_effect); | 2659 FinishDragAndDrop(e, drag_effect); |
2642 } | 2660 } |
2643 | 2661 |
2644 void EventSender::DoDragAfterMouseMove(const WebMouseEvent& e) { | 2662 void EventSender::DoDragAfterMouseMove(const WebMouseEvent& e) { |
2645 if (current_pointer_state_[kMousePointerId].pressed_button_ == | 2663 if (current_pointer_state_[kRawMousePointerId].pressed_button_ == |
2646 WebMouseEvent::ButtonNone || | 2664 WebMouseEvent::ButtonNone || |
2647 current_drag_data_.isNull()) { | 2665 current_drag_data_.isNull()) { |
2648 return; | 2666 return; |
2649 } | 2667 } |
2650 | 2668 |
2651 WebPoint client_point(e.x, e.y); | 2669 WebPoint client_point(e.x, e.y); |
2652 WebPoint screen_point(e.globalX, e.globalY); | 2670 WebPoint screen_point(e.globalX, e.globalY); |
2653 current_drag_effect_ = view()->dragTargetDragOver( | 2671 current_drag_effect_ = view()->dragTargetDragOver( |
2654 client_point, screen_point, current_drag_effects_allowed_, e.modifiers); | 2672 client_point, screen_point, current_drag_effects_allowed_, e.modifiers); |
2655 } | 2673 } |
2656 | 2674 |
2657 void EventSender::ReplaySavedEvents() { | 2675 void EventSender::ReplaySavedEvents() { |
2658 replaying_saved_events_ = true; | 2676 replaying_saved_events_ = true; |
2659 while (!mouse_event_queue_.empty()) { | 2677 while (!mouse_event_queue_.empty()) { |
2660 SavedEvent e = mouse_event_queue_.front(); | 2678 SavedEvent e = mouse_event_queue_.front(); |
2661 mouse_event_queue_.pop_front(); | 2679 mouse_event_queue_.pop_front(); |
2662 | 2680 |
2663 switch (e.type) { | 2681 switch (e.type) { |
2664 case SavedEvent::TYPE_MOUSE_MOVE: { | 2682 case SavedEvent::TYPE_MOUSE_MOVE: { |
2665 WebMouseEvent event; | 2683 WebMouseEvent event; |
2666 InitMouseEvent( | 2684 InitMouseEvent( |
2667 WebInputEvent::MouseMove, | 2685 WebInputEvent::MouseMove, |
2668 current_pointer_state_[kMousePointerId].pressed_button_, | 2686 current_pointer_state_[kRawMousePointerId].pressed_button_, |
2669 current_pointer_state_[kMousePointerId].current_buttons_, | 2687 current_pointer_state_[kRawMousePointerId].current_buttons_, e.pos, |
2670 e.pos, | 2688 GetCurrentEventTimeSec(), click_count_, e.modifiers, &event); |
2671 GetCurrentEventTimeSec(), | 2689 current_pointer_state_[kRawMousePointerId].last_pos_ = |
2672 click_count_, | |
2673 e.modifiers, | |
2674 blink::WebPointerProperties::PointerType::Mouse, | |
2675 0, | |
2676 &event); | |
2677 current_pointer_state_[kMousePointerId].last_pos_ = | |
2678 WebPoint(event.x, event.y); | 2690 WebPoint(event.x, event.y); |
2679 HandleInputEventOnViewOrPopup(event); | 2691 HandleInputEventOnViewOrPopup(event); |
2680 DoDragAfterMouseMove(event); | 2692 DoDragAfterMouseMove(event); |
2681 break; | 2693 break; |
2682 } | 2694 } |
2683 case SavedEvent::TYPE_LEAP_FORWARD: | 2695 case SavedEvent::TYPE_LEAP_FORWARD: |
2684 DoLeapForward(e.milliseconds); | 2696 DoLeapForward(e.milliseconds); |
2685 break; | 2697 break; |
2686 case SavedEvent::TYPE_MOUSE_UP: { | 2698 case SavedEvent::TYPE_MOUSE_UP: { |
2687 current_pointer_state_[kMousePointerId].current_buttons_ &= | 2699 current_pointer_state_[kRawMousePointerId].current_buttons_ &= |
2688 ~GetWebMouseEventModifierForButton(e.button_type); | 2700 ~GetWebMouseEventModifierForButton(e.button_type); |
2689 current_pointer_state_[kMousePointerId].pressed_button_ = | 2701 current_pointer_state_[kRawMousePointerId].pressed_button_ = |
2690 WebMouseEvent::ButtonNone; | 2702 WebMouseEvent::ButtonNone; |
2691 | 2703 |
2692 WebMouseEvent event; | 2704 WebMouseEvent event; |
2693 InitMouseEvent(WebInputEvent::MouseUp, | 2705 InitMouseEvent( |
2694 e.button_type, | 2706 WebInputEvent::MouseUp, e.button_type, |
2695 current_pointer_state_[kMousePointerId].current_buttons_, | 2707 current_pointer_state_[kRawMousePointerId].current_buttons_, |
2696 current_pointer_state_[kMousePointerId].last_pos_, | 2708 current_pointer_state_[kRawMousePointerId].last_pos_, |
2697 GetCurrentEventTimeSec(), | 2709 GetCurrentEventTimeSec(), click_count_, e.modifiers, &event); |
2698 click_count_, | |
2699 e.modifiers, | |
2700 blink::WebPointerProperties::PointerType::Mouse, | |
2701 0, | |
2702 &event); | |
2703 HandleInputEventOnViewOrPopup(event); | 2710 HandleInputEventOnViewOrPopup(event); |
2704 DoDragAfterMouseUp(event); | 2711 DoDragAfterMouseUp(event); |
2705 break; | 2712 break; |
2706 } | 2713 } |
2707 default: | 2714 default: |
2708 NOTREACHED(); | 2715 NOTREACHED(); |
2709 } | 2716 } |
2710 } | 2717 } |
2711 | 2718 |
2712 replaying_saved_events_ = false; | 2719 replaying_saved_events_ = false; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2790 | 2797 |
2791 const blink::WebView* EventSender::view() const { | 2798 const blink::WebView* EventSender::view() const { |
2792 return web_test_proxy_base_->web_view(); | 2799 return web_test_proxy_base_->web_view(); |
2793 } | 2800 } |
2794 | 2801 |
2795 blink::WebView* EventSender::view() { | 2802 blink::WebView* EventSender::view() { |
2796 return web_test_proxy_base_->web_view(); | 2803 return web_test_proxy_base_->web_view(); |
2797 } | 2804 } |
2798 | 2805 |
2799 } // namespace test_runner | 2806 } // namespace test_runner |
OLD | NEW |