| 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 |