Chromium Code Reviews| Index: components/test_runner/event_sender.cc |
| diff --git a/components/test_runner/event_sender.cc b/components/test_runner/event_sender.cc |
| index 7d6df6ece65a4f24a3a9073364bdf2ae71ca21fe..32bfdbb05f33664b59355fffbaa248a120a40fbe 100644 |
| --- a/components/test_runner/event_sender.cc |
| +++ b/components/test_runner/event_sender.cc |
| @@ -61,6 +61,72 @@ namespace test_runner { |
| namespace { |
| +const int kMousePointerId = -1; |
| +const char* kPointerTypeStringUnknown = ""; |
| +const char* kPointerTypeStringMouse = "mouse"; |
| +const char* kPointerTypeStringPen = "pen"; |
| +const char* kPointerTypeStringTouch = "touch"; |
| + |
| +// Sets the pointerType from the args. Returns false if there was any error from |
|
dtapuska
2016/04/08 17:50:29
Assigns |pointerType| from the provided |args|.
Navid Zolghadr
2016/04/08 18:57:00
Done.
|
| +// reading args. |
| +bool getPointerType(gin::Arguments* args, |
| + bool isOnlyMouseAndPenAllowed, |
| + blink::WebPointerProperties::PointerType& pointerType) { |
| + if (args->PeekNext().IsEmpty()) |
| + return true; |
| + std::string pointer_type_string; |
| + if (!args->GetNext(&pointer_type_string)) { |
| + args->ThrowError(); |
| + return false; |
| + } |
| + if (isOnlyMouseAndPenAllowed |
| + && (pointer_type_string == kPointerTypeStringUnknown |
| + || pointer_type_string == kPointerTypeStringTouch)) { |
| + args->ThrowError(); |
| + return false; |
| + } |
| + if (pointer_type_string == kPointerTypeStringUnknown) { |
| + pointerType = WebMouseEvent::PointerType::Unknown; |
| + } else if (pointer_type_string == kPointerTypeStringMouse) { |
| + pointerType = WebMouseEvent::PointerType::Mouse; |
| + } else if (pointer_type_string == kPointerTypeStringPen) { |
| + pointerType = WebMouseEvent::PointerType::Pen; |
| + } else if (pointer_type_string == kPointerTypeStringTouch) { |
| + pointerType = WebMouseEvent::PointerType::Touch; |
| + } else { |
| + args->ThrowError(); |
| + return false; |
| + } |
| + return true; |
| +} |
| + |
| +// Sets the pointerType and pointerId from the args. It sets the default values |
| +// If args doesn't have them. Returns false if there was any error from reading |
| +// args or incosistency of the values. |
| +bool getMousePenPointerTypeAndId(gin::Arguments* args, |
| + blink::WebPointerProperties::PointerType& pointerType, |
| + int& pointerId) { |
| + pointerType = blink::WebPointerProperties::PointerType::Mouse; |
| + pointerId = kMousePointerId; |
| + // Only allow pen or mouse through this API. |
| + if (!getPointerType(args, false, pointerType)) |
| + return false; |
| + if (!args->PeekNext().IsEmpty()) { |
| + if (!args->GetNext(&pointerId)) { |
| + args->ThrowError(); |
| + return false; |
| + } |
| + if (pointerType != blink::WebPointerProperties::PointerType::Mouse |
|
dtapuska
2016/04/08 17:50:29
https://google.github.io/styleguide/cppguide.html#
Navid Zolghadr
2016/04/08 18:57:00
I guess I was following Blink style guide
https://
|
| + && pointerId == kMousePointerId) { |
| + args->ThrowError(); |
| + return false; |
| + } |
| + } else if (pointerType == blink::WebPointerProperties::PointerType::Pen) { |
| + pointerId = 1; // A default value for the id of the pen |
|
dtapuska
2016/04/08 17:50:29
period.
Navid Zolghadr
2016/04/08 18:56:59
Done.
|
| + } |
| + return true; |
| +} |
| + |
| WebMouseEvent::Button GetButtonTypeFromButtonNumber(int button_code) { |
| switch (button_code) { |
| case -1: |
| @@ -106,6 +172,8 @@ void InitMouseEvent(WebInputEvent::Type t, |
| double time_stamp, |
| int click_count, |
| int modifiers, |
| + blink::WebPointerProperties::PointerType pointerType, |
| + int pointerId, |
| WebMouseEvent* e) { |
| e->type = t; |
| e->button = b; |
| @@ -114,7 +182,8 @@ void InitMouseEvent(WebInputEvent::Type t, |
| e->y = pos.y; |
| e->globalX = pos.x; |
| e->globalY = pos.y; |
| - e->pointerType = blink::WebPointerProperties::PointerType::Mouse; |
| + e->pointerType = pointerType; |
| + e->id = pointerId; |
| e->timeStampSeconds = time_stamp; |
| e->clickCount = click_count; |
| } |
| @@ -409,11 +478,6 @@ bool GetScrollUnits(gin::Arguments* args, WebGestureEvent::ScrollUnits* units) { |
| const char* kSourceDeviceStringTouchpad = "touchpad"; |
| const char* kSourceDeviceStringTouchscreen = "touchscreen"; |
| -const char* kPointerTypeStringUnknown = ""; |
| -const char* kPointerTypeStringMouse = "mouse"; |
| -const char* kPointerTypeStringPen = "pen"; |
| -const char* kPointerTypeStringTouch = "touch"; |
| - |
| } // namespace |
| class EventSenderBindings : public gin::Wrappable<EventSenderBindings> { |
| @@ -932,12 +996,24 @@ void EventSenderBindings::MouseDown(gin::Arguments* args) { |
| int button_number = 0; |
| int modifiers = 0; |
| + blink::WebPointerProperties::PointerType pointerType = |
| + blink::WebPointerProperties::PointerType::Mouse; |
| + int pointerId = 0; |
| if (!args->PeekNext().IsEmpty()) { |
| - args->GetNext(&button_number); |
| - if (!args->PeekNext().IsEmpty()) |
| + if (!args->GetNext(&button_number)) { |
| + args->ThrowError(); |
| + return; |
| + } |
| + if (!args->PeekNext().IsEmpty()) { |
| modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); |
| + args->Skip(); |
| + } |
| } |
| - sender_->MouseDown(button_number, modifiers); |
| + |
| + if (!getMousePenPointerTypeAndId(args, pointerType, pointerId)) |
| + return; |
| + |
| + sender_->PointerDown(button_number, modifiers, pointerType, pointerId); |
| } |
| void EventSenderBindings::MouseUp(gin::Arguments* args) { |
| @@ -946,12 +1022,24 @@ void EventSenderBindings::MouseUp(gin::Arguments* args) { |
| int button_number = 0; |
| int modifiers = 0; |
| + blink::WebPointerProperties::PointerType pointerType = |
| + blink::WebPointerProperties::PointerType::Mouse; |
| + int pointerId = 0; |
| if (!args->PeekNext().IsEmpty()) { |
| - args->GetNext(&button_number); |
| - if (!args->PeekNext().IsEmpty()) |
| + if (!args->GetNext(&button_number)) { |
| + args->ThrowError(); |
| + return; |
| + } |
| + if (!args->PeekNext().IsEmpty()) { |
| modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); |
| + args->Skip(); |
| + } |
| } |
| - sender_->MouseUp(button_number, modifiers); |
| + |
| + if (!getMousePenPointerTypeAndId(args, pointerType, pointerId)) |
| + return; |
| + |
| + sender_->PointerUp(button_number, modifiers, pointerType, pointerId); |
| } |
| void EventSenderBindings::SetMouseButtonState(gin::Arguments* args) { |
| @@ -1104,12 +1192,6 @@ void EventSenderBindings::SetWmSysDeadChar(int sys_dead_char) { |
| // EventSender ----------------------------------------------------------------- |
| -WebMouseEvent::Button EventSender::pressed_button_ = WebMouseEvent::ButtonNone; |
| -int EventSender::current_buttons_ = 0; |
| -int EventSender::modifiers_ = 0; |
| - |
| -WebPoint EventSender::last_mouse_pos_; |
| - |
| WebMouseEvent::Button EventSender::last_button_type_ = |
| WebMouseEvent::ButtonNone; |
| @@ -1155,11 +1237,10 @@ void EventSender::Reset() { |
| current_drag_data_.reset(); |
| current_drag_effect_ = blink::WebDragOperationNone; |
| current_drag_effects_allowed_ = blink::WebDragOperationNone; |
| - if (view_ && pressed_button_ != WebMouseEvent::ButtonNone) |
| + if (view_ && current_pointer_state_[kMousePointerId].pressed_button_ |
| + != WebMouseEvent::ButtonNone) |
| view_->mouseCaptureLost(); |
| - pressed_button_ = WebMouseEvent::ButtonNone; |
| - current_buttons_ = 0; |
| - modifiers_ = 0; |
| + current_pointer_state_.clear(); |
| is_drag_mode_ = true; |
| force_layout_on_events_ = true; |
| @@ -1174,7 +1255,6 @@ void EventSender::Reset() { |
| wm_sys_dead_char_ = WM_SYSDEADCHAR; |
| #endif |
| - last_mouse_pos_ = WebPoint(0, 0); |
| last_click_time_sec_ = 0; |
| last_click_pos_ = WebPoint(0, 0); |
| last_button_type_ = WebMouseEvent::ButtonNone; |
| @@ -1212,12 +1292,14 @@ void EventSender::DoDragDrop(const WebDragData& drag_data, |
| WebDragOperationsMask mask) { |
| WebMouseEvent event; |
| InitMouseEvent(WebInputEvent::MouseDown, |
| - pressed_button_, |
| - current_buttons_, |
| - last_mouse_pos_, |
| + current_pointer_state_[kMousePointerId].pressed_button_, |
| + current_pointer_state_[kMousePointerId].current_buttons_, |
| + current_pointer_state_[kMousePointerId].last_pos_, |
| GetCurrentEventTimeSec(), |
| click_count_, |
| - modifiers_, |
| + current_pointer_state_[kMousePointerId].modifiers_, |
| + blink::WebPointerProperties::PointerType::Mouse, |
| + 0, |
| &event); |
| WebPoint client_point(event.x, event.y); |
| WebPoint screen_point(event.globalX, event.globalY); |
| @@ -1228,13 +1310,25 @@ void EventSender::DoDragDrop(const WebDragData& drag_data, |
| client_point, |
| screen_point, |
| current_drag_effects_allowed_, |
| - modifiersWithButtons(modifiers_, current_buttons_)); |
| + modifiersWithButtons(current_pointer_state_[kMousePointerId].modifiers_, |
| + current_pointer_state_[kMousePointerId].current_buttons_)); |
| // Finish processing events. |
| ReplaySavedEvents(); |
| } |
| void EventSender::MouseDown(int button_number, int modifiers) { |
| + PointerDown(button_number, modifiers, |
| + blink::WebPointerProperties::PointerType::Mouse, kMousePointerId); |
| +} |
| + |
| +void EventSender::MouseUp(int button_number, int modifiers) { |
| + PointerUp(button_number, modifiers, |
| + blink::WebPointerProperties::PointerType::Mouse, kMousePointerId); |
| +} |
| + |
| +void EventSender::PointerDown(int button_number, int modifiers, |
| + blink::WebPointerProperties::PointerType pointerType, int pointerId) { |
| if (force_layout_on_events_) |
| view_->updateAllLifecyclePhases(); |
| @@ -1243,25 +1337,33 @@ void EventSender::MouseDown(int button_number, int modifiers) { |
| WebMouseEvent::Button button_type = |
| GetButtonTypeFromButtonNumber(button_number); |
| - UpdateClickCountForButton(button_type); |
| - |
| - pressed_button_ = button_type; |
| - current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_); |
| - modifiers_ = modifiers; |
| - |
| WebMouseEvent event; |
| + int click_count = 0; |
| + current_pointer_state_[pointerId].pressed_button_ = button_type; |
| + current_pointer_state_[pointerId].current_buttons_ |= |
| + GetWebMouseEventModifierForButton(button_type); |
| + current_pointer_state_[pointerId].modifiers_ = modifiers; |
| + |
| + if (pointerType == blink::WebPointerProperties::PointerType::Mouse) { |
| + UpdateClickCountForButton(button_type); |
| + click_count = click_count_; |
| + } |
| InitMouseEvent(WebInputEvent::MouseDown, |
| - pressed_button_, |
| - current_buttons_, |
| - last_mouse_pos_, |
| + current_pointer_state_[pointerId].pressed_button_, |
| + current_pointer_state_[pointerId].current_buttons_, |
| + current_pointer_state_[pointerId].last_pos_, |
| GetCurrentEventTimeSec(), |
| - click_count_, |
| - modifiers_, |
| + click_count, |
| + current_pointer_state_[pointerId].modifiers_, |
| + pointerType, |
| + pointerId, |
| &event); |
| + |
| HandleInputEventOnViewOrPopup(event); |
| } |
| -void EventSender::MouseUp(int button_number, int modifiers) { |
| +void EventSender::PointerUp(int button_number, int modifiers, |
| + blink::WebPointerProperties::PointerType pointerType, int pointerId) { |
| if (force_layout_on_events_) |
| view_->updateAllLifecyclePhases(); |
| @@ -1270,7 +1372,8 @@ void EventSender::MouseUp(int button_number, int modifiers) { |
| WebMouseEvent::Button button_type = |
| GetButtonTypeFromButtonNumber(button_number); |
| - if (is_drag_mode_ && !replaying_saved_events_) { |
| + if (pointerType == blink::WebPointerProperties::PointerType::Mouse |
| + && is_drag_mode_ && !replaying_saved_events_) { |
|
dtapuska
2016/04/08 17:50:28
https://google.github.io/styleguide/cppguide.html#
Navid Zolghadr
2016/04/08 18:57:00
Done.
|
| SavedEvent saved_event; |
| saved_event.type = SavedEvent::TYPE_MOUSE_UP; |
| saved_event.button_type = button_type; |
| @@ -1278,26 +1381,36 @@ void EventSender::MouseUp(int button_number, int modifiers) { |
| mouse_event_queue_.push_back(saved_event); |
| ReplaySavedEvents(); |
| } else { |
| - current_buttons_ &= ~GetWebMouseEventModifierForButton(button_type); |
| - pressed_button_ = WebMouseEvent::ButtonNone; |
| + current_pointer_state_[pointerId].current_buttons_ &= |
| + ~GetWebMouseEventModifierForButton(button_type); |
| + current_pointer_state_[pointerId].pressed_button_ = |
| + WebMouseEvent::ButtonNone; |
| WebMouseEvent event; |
| InitMouseEvent(WebInputEvent::MouseUp, |
| button_type, |
| - current_buttons_, |
| - last_mouse_pos_, |
| + current_pointer_state_[pointerId].current_buttons_, |
| + current_pointer_state_[pointerId].last_pos_, |
| GetCurrentEventTimeSec(), |
| - click_count_, |
| + pointerType == |
| + blink::WebPointerProperties::PointerType::Mouse |
| + ? click_count_ : 0, |
| modifiers, |
| + pointerType, |
| + pointerId, |
| &event); |
| - DoMouseUp(event); |
| + HandleInputEventOnViewOrPopup(event); |
| + if (pointerType == blink::WebPointerProperties::PointerType::Mouse) |
| + DoDragAfterMouseUp(event); |
| } |
| } |
| void EventSender::SetMouseButtonState(int button_number, int modifiers) { |
| - pressed_button_ = GetButtonTypeFromButtonNumber(button_number); |
| - current_buttons_ = (modifiers == -1) ? |
| - GetWebMouseEventModifierForButton(pressed_button_) : |
| + current_pointer_state_[kMousePointerId].pressed_button_ = |
| + GetButtonTypeFromButtonNumber(button_number); |
| + current_pointer_state_[kMousePointerId].current_buttons_ = (modifiers == -1) ? |
| + GetWebMouseEventModifierForButton( |
| + current_pointer_state_[kMousePointerId].pressed_button_) : |
| modifiers & kButtonsInModifiers; |
| } |
| @@ -1498,12 +1611,14 @@ void EventSender::KeyDown(const std::string& code_str, |
| if (code == ui::VKEY_ESCAPE && !current_drag_data_.isNull()) { |
| WebMouseEvent event; |
| InitMouseEvent(WebInputEvent::MouseDown, |
| - pressed_button_, |
| - current_buttons_, |
| - last_mouse_pos_, |
| + current_pointer_state_[kMousePointerId].pressed_button_, |
| + current_pointer_state_[kMousePointerId].current_buttons_, |
| + current_pointer_state_[kMousePointerId].last_pos_, |
| GetCurrentEventTimeSec(), |
| click_count_, |
| 0, |
| + blink::WebPointerProperties::PointerType::Mouse, |
| + 0, |
| &event); |
| FinishDragAndDrop(event, blink::WebDragOperationNone); |
| } |
| @@ -1548,32 +1663,41 @@ std::vector<std::string> EventSender::ContextClick() { |
| // pressed. |
| // TODO(mustaq): This hack seems unused here! But do we need this hack at all |
| // after adding current_buttons_. |
| - if (pressed_button_ == WebMouseEvent::ButtonNone) { |
| - pressed_button_ = WebMouseEvent::ButtonRight; |
| - current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_); |
| + if (current_pointer_state_[kMousePointerId].pressed_button_ |
| + == WebMouseEvent::ButtonNone) { |
| + current_pointer_state_[kMousePointerId].pressed_button_ = |
| + WebMouseEvent::ButtonRight; |
| + current_pointer_state_[kMousePointerId].current_buttons_ |= |
| + GetWebMouseEventModifierForButton( |
| + current_pointer_state_[kMousePointerId].pressed_button_); |
| } |
| InitMouseEvent(WebInputEvent::MouseDown, |
| WebMouseEvent::ButtonRight, |
| - current_buttons_, |
| - last_mouse_pos_, |
| + current_pointer_state_[kMousePointerId].current_buttons_, |
| + current_pointer_state_[kMousePointerId].last_pos_, |
| GetCurrentEventTimeSec(), |
| click_count_, |
| 0, |
| + blink::WebPointerProperties::PointerType::Mouse, |
| + 0, |
| &event); |
| HandleInputEventOnViewOrPopup(event); |
| #if defined(OS_WIN) |
| - current_buttons_ &= |
| + current_pointer_state_[kMousePointerId].current_buttons_ &= |
| ~GetWebMouseEventModifierForButton(WebMouseEvent::ButtonRight); |
| - pressed_button_ = WebMouseEvent::ButtonNone; |
| + current_pointer_state_[kMousePointerId].pressed_button_ = |
| + WebMouseEvent::ButtonNone; |
| InitMouseEvent(WebInputEvent::MouseUp, |
| WebMouseEvent::ButtonRight, |
| - current_buttons_, |
| - last_mouse_pos_, |
| + current_pointer_state_[kMousePointerId].current_buttons_, |
| + current_pointer_state_[kMousePointerId].last_pos_, |
| GetCurrentEventTimeSec(), |
| click_count_, |
| 0, |
| + blink::WebPointerProperties::PointerType::Mouse, |
| + 0, |
| &event); |
| HandleInputEventOnViewOrPopup(event); |
| #endif |
| @@ -1780,7 +1904,8 @@ void EventSender::TouchEnd() { |
| } |
| void EventSender::LeapForward(int milliseconds) { |
| - if (is_drag_mode_ && pressed_button_ == WebMouseEvent::ButtonLeft && |
| + if (is_drag_mode_ && current_pointer_state_[kMousePointerId].pressed_button_ |
| + == WebMouseEvent::ButtonLeft && |
| !replaying_saved_events_) { |
| SavedEvent saved_event; |
| saved_event.type = SavedEvent::TYPE_LEAP_FORWARD; |
| @@ -1817,8 +1942,8 @@ void EventSender::BeginDragWithFiles(const std::vector<std::string>& files) { |
| // Provide a drag source. |
| view_->dragTargetDragEnter(current_drag_data_, |
| - last_mouse_pos_, |
| - last_mouse_pos_, |
| + current_pointer_state_[kMousePointerId].last_pos_, |
| + current_pointer_state_[kMousePointerId].last_pos_, |
| current_drag_effects_allowed_, |
| 0); |
| // |is_drag_mode_| saves events and then replays them later. We don't |
| @@ -1826,8 +1951,11 @@ void EventSender::BeginDragWithFiles(const std::vector<std::string>& files) { |
| is_drag_mode_ = false; |
| // Make the rest of eventSender think a drag is in progress. |
| - pressed_button_ = WebMouseEvent::ButtonLeft; |
| - current_buttons_ |= GetWebMouseEventModifierForButton(pressed_button_); |
| + current_pointer_state_[kMousePointerId].pressed_button_ = |
| + WebMouseEvent::ButtonLeft; |
| + current_pointer_state_[kMousePointerId].current_buttons_ |= |
| + GetWebMouseEventModifierForButton( |
| + current_pointer_state_[kMousePointerId].pressed_button_); |
| } |
| void EventSender::AddTouchPoint(float x, float y, gin::Arguments* args) { |
| @@ -1927,6 +2055,9 @@ void EventSender::MouseMoveTo(gin::Arguments* args) { |
| double x; |
| double y; |
| + blink::WebPointerProperties::PointerType pointerType = |
| + blink::WebPointerProperties::PointerType::Mouse; |
| + int pointerId = 0; |
| if (!args->GetNext(&x) || !args->GetNext(&y)) { |
| args->ThrowError(); |
| return; |
| @@ -1934,27 +2065,41 @@ void EventSender::MouseMoveTo(gin::Arguments* args) { |
| WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y)); |
| int modifiers = 0; |
| - if (!args->PeekNext().IsEmpty()) |
| + if (!args->PeekNext().IsEmpty()) { |
| modifiers = GetKeyModifiersFromV8(args->isolate(), args->PeekNext()); |
| + args->Skip(); |
| + } |
| - if (is_drag_mode_ && pressed_button_ == WebMouseEvent::ButtonLeft && |
| - !replaying_saved_events_) { |
| + if (!getMousePenPointerTypeAndId(args, pointerType, pointerId)) |
| + return; |
| + |
| + if (pointerType == blink::WebPointerProperties::PointerType::Mouse |
| + && is_drag_mode_ && !replaying_saved_events_ |
| + && current_pointer_state_[kMousePointerId].pressed_button_ |
| + == WebMouseEvent::ButtonLeft) { |
| SavedEvent saved_event; |
| saved_event.type = SavedEvent::TYPE_MOUSE_MOVE; |
| saved_event.pos = mouse_pos; |
| saved_event.modifiers = modifiers; |
| mouse_event_queue_.push_back(saved_event); |
| } else { |
| + current_pointer_state_[pointerId].last_pos_ = mouse_pos; |
| WebMouseEvent event; |
| InitMouseEvent(WebInputEvent::MouseMove, |
| - pressed_button_, |
| - current_buttons_, |
| + current_pointer_state_[kMousePointerId].pressed_button_, |
| + current_pointer_state_[kMousePointerId].current_buttons_, |
| mouse_pos, |
| GetCurrentEventTimeSec(), |
| - click_count_, |
| + pointerType == |
| + blink::WebPointerProperties::PointerType::Mouse |
| + ? click_count_ : 0, |
| modifiers, |
| + pointerType, |
| + pointerId, |
| &event); |
| - DoMouseMove(event); |
| + HandleInputEventOnViewOrPopup(event); |
| + if (pointerType == blink::WebPointerProperties::PointerType::Mouse) |
| + DoDragAfterMouseMove(event); |
| } |
| } |
| @@ -1966,10 +2111,12 @@ void EventSender::MouseLeave() { |
| InitMouseEvent(WebInputEvent::MouseLeave, |
| WebMouseEvent::ButtonNone, |
| 0, |
| - last_mouse_pos_, |
| + current_pointer_state_[kMousePointerId].last_pos_, |
| GetCurrentEventTimeSec(), |
| click_count_, |
| 0, |
| + blink::WebPointerProperties::PointerType::Mouse, |
| + 0, |
| &event); |
| HandleInputEventOnViewOrPopup(event); |
| } |
| @@ -2287,12 +2434,14 @@ void EventSender::GestureEvent(WebInputEvent::Type type, |
| if (type == WebInputEvent::GestureLongPress && !current_drag_data_.isNull()) { |
| WebMouseEvent mouse_event; |
| InitMouseEvent(WebInputEvent::MouseDown, |
| - pressed_button_, |
| - current_buttons_, |
| + current_pointer_state_[kMousePointerId].pressed_button_, |
| + current_pointer_state_[kMousePointerId].current_buttons_, |
| WebPoint(x, y), |
| GetCurrentEventTimeSec(), |
| click_count_, |
| - modifiers_, |
| + current_pointer_state_[kMousePointerId].modifiers_, |
| + blink::WebPointerProperties::PointerType::Mouse, |
| + 0, |
| &mouse_event); |
| FinishDragAndDrop(mouse_event, blink::WebDragOperationNone); |
| @@ -2303,9 +2452,10 @@ void EventSender::GestureEvent(WebInputEvent::Type type, |
| void EventSender::UpdateClickCountForButton( |
| WebMouseEvent::Button button_type) { |
| if ((GetCurrentEventTimeSec() - last_click_time_sec_ < |
| - kMultipleClickTimeSec) && |
| - (!OutsideMultiClickRadius(last_mouse_pos_, last_click_pos_)) && |
| - (button_type == last_button_type_)) { |
| + kMultipleClickTimeSec) && |
| + (!OutsideMultiClickRadius( |
| + current_pointer_state_[kMousePointerId].last_pos_, last_click_pos_)) |
| + && (button_type == last_button_type_)) { |
| ++click_count_; |
| } else { |
| click_count_ = 1; |
| @@ -2358,12 +2508,14 @@ void EventSender::InitMouseWheelEvent(gin::Arguments* args, |
| } |
| InitMouseEvent(WebInputEvent::MouseWheel, |
| - pressed_button_, |
| - current_buttons_, |
| - last_mouse_pos_, |
| + current_pointer_state_[kMousePointerId].pressed_button_, |
| + current_pointer_state_[kMousePointerId].current_buttons_, |
| + current_pointer_state_[kMousePointerId].last_pos_, |
| GetCurrentEventTimeSec(), |
| click_count_, |
| modifiers, |
| + blink::WebPointerProperties::PointerType::Mouse, |
| + 0, |
| event); |
| event->wheelTicksX = static_cast<float>(horizontal); |
| event->wheelTicksY = static_cast<float>(vertical); |
| @@ -2426,25 +2578,8 @@ void EventSender::InitPointerProperties(gin::Arguments* args, |
| e->tiltY = tiltY; |
| } |
| - if (!args->PeekNext().IsEmpty()) { |
| - std::string pointer_type_string; |
| - if (!args->GetNext(&pointer_type_string)) { |
| - args->ThrowError(); |
| - return; |
| - } |
| - if (pointer_type_string == kPointerTypeStringUnknown) { |
| - e->pointerType = WebMouseEvent::PointerType::Unknown; |
| - } else if (pointer_type_string == kPointerTypeStringMouse) { |
| - e->pointerType = WebMouseEvent::PointerType::Mouse; |
| - } else if (pointer_type_string == kPointerTypeStringPen) { |
| - e->pointerType = WebMouseEvent::PointerType::Pen; |
| - } else if (pointer_type_string == kPointerTypeStringTouch) { |
| - e->pointerType = WebMouseEvent::PointerType::Touch; |
| - } else { |
| - args->ThrowError(); |
| - return; |
| - } |
| - } |
| + if (!getPointerType(args, false, e->pointerType)) |
| + return; |
| } |
| void EventSender::FinishDragAndDrop(const WebMouseEvent& e, |
| @@ -2465,11 +2600,9 @@ void EventSender::FinishDragAndDrop(const WebMouseEvent& e, |
| current_drag_data_.reset(); |
| } |
| -void EventSender::DoMouseUp(const WebMouseEvent& e) { |
| - HandleInputEventOnViewOrPopup(e); |
| - |
| +void EventSender::DoDragAfterMouseUp(const WebMouseEvent& e) { |
| last_click_time_sec_ = e.timeStampSeconds; |
| - last_click_pos_ = last_mouse_pos_; |
| + last_click_pos_ = current_pointer_state_[kMousePointerId].last_pos_; |
| // If we're in a drag operation, complete it. |
| if (current_drag_data_.isNull()) |
| @@ -2490,13 +2623,10 @@ void EventSender::DoMouseUp(const WebMouseEvent& e) { |
| FinishDragAndDrop(e, drag_effect); |
| } |
| -void EventSender::DoMouseMove(const WebMouseEvent& e) { |
| - last_mouse_pos_ = WebPoint(e.x, e.y); |
| - |
| - HandleInputEventOnViewOrPopup(e); |
| - |
| - if (pressed_button_ == WebMouseEvent::ButtonNone || |
| - current_drag_data_.isNull()) { |
| +void EventSender::DoDragAfterMouseMove(const WebMouseEvent& e) { |
| + if (current_pointer_state_[kMousePointerId].pressed_button_ |
| + == WebMouseEvent::ButtonNone |
| + || current_drag_data_.isNull()) { |
| return; |
| } |
| @@ -2516,33 +2646,43 @@ void EventSender::ReplaySavedEvents() { |
| case SavedEvent::TYPE_MOUSE_MOVE: { |
| WebMouseEvent event; |
| InitMouseEvent(WebInputEvent::MouseMove, |
| - pressed_button_, |
| - current_buttons_, |
| + current_pointer_state_[kMousePointerId].pressed_button_, |
| + current_pointer_state_[kMousePointerId].current_buttons_, |
| e.pos, |
| GetCurrentEventTimeSec(), |
| click_count_, |
| e.modifiers, |
| + blink::WebPointerProperties::PointerType::Mouse, |
| + 0, |
| &event); |
| - DoMouseMove(event); |
| + current_pointer_state_[kMousePointerId].last_pos_ = |
| + WebPoint(event.x, event.y); |
| + HandleInputEventOnViewOrPopup(event); |
| + DoDragAfterMouseMove(event); |
| break; |
| } |
| case SavedEvent::TYPE_LEAP_FORWARD: |
| DoLeapForward(e.milliseconds); |
| break; |
| case SavedEvent::TYPE_MOUSE_UP: { |
| - current_buttons_ &= ~GetWebMouseEventModifierForButton(e.button_type); |
| - pressed_button_ = WebMouseEvent::ButtonNone; |
| + current_pointer_state_[kMousePointerId].current_buttons_ &= |
| + ~GetWebMouseEventModifierForButton(e.button_type); |
| + current_pointer_state_[kMousePointerId].pressed_button_ = |
| + WebMouseEvent::ButtonNone; |
| WebMouseEvent event; |
| InitMouseEvent(WebInputEvent::MouseUp, |
| e.button_type, |
| - current_buttons_, |
| - last_mouse_pos_, |
| + current_pointer_state_[kMousePointerId].current_buttons_, |
| + current_pointer_state_[kMousePointerId].last_pos_, |
| GetCurrentEventTimeSec(), |
| click_count_, |
| e.modifiers, |
| + blink::WebPointerProperties::PointerType::Mouse, |
| + 0, |
| &event); |
| - DoMouseUp(event); |
| + HandleInputEventOnViewOrPopup(event); |
| + DoDragAfterMouseUp(event); |
| break; |
| } |
| default: |