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