Index: components/test_runner/event_sender.cc |
diff --git a/components/test_runner/event_sender.cc b/components/test_runner/event_sender.cc |
index 393572482957e5cc3f4162a6fbb5fb366717c278..47ab83beaafe8f2b6d02e63e0897b13996eaba69 100644 |
--- a/components/test_runner/event_sender.cc |
+++ b/components/test_runner/event_sender.cc |
@@ -58,6 +58,69 @@ namespace test_runner { |
namespace { |
+const int kMousePointerId = -1; |
+const char* kPointerTypeStringUnknown = ""; |
+const char* kPointerTypeStringMouse = "mouse"; |
+const char* kPointerTypeStringPen = "pen"; |
+const char* kPointerTypeStringTouch = "touch"; |
+ |
+bool getPointerType(gin::Arguments* args, |
+ blink::WebPointerProperties::PointerType &t, |
dtapuska
2016/04/07 02:35:41
Should be PointerType& t. Both styles are allowed
Navid Zolghadr
2016/04/08 17:38:44
Done. I got rid of the default value and in that s
|
+ bool isOnlyMouseAndPenAllowed = false) { |
+ if (!args->PeekNext().IsEmpty()) { |
+ std::string pointer_type_string; |
+ if (!args->GetNext(&pointer_type_string)) { |
+ args->ThrowError(); |
+ return false; |
+ } |
+ if (pointer_type_string == kPointerTypeStringUnknown) { |
+ if (isOnlyMouseAndPenAllowed) { |
+ args->ThrowError(); |
+ return false; |
+ } |
+ t = WebMouseEvent::PointerType::Unknown; |
+ } else if (pointer_type_string == kPointerTypeStringMouse) { |
+ t = WebMouseEvent::PointerType::Mouse; |
+ } else if (pointer_type_string == kPointerTypeStringPen) { |
+ t = WebMouseEvent::PointerType::Pen; |
+ } else if (pointer_type_string == kPointerTypeStringTouch) { |
+ if (isOnlyMouseAndPenAllowed) { |
+ args->ThrowError(); |
+ return false; |
+ } |
+ t = WebMouseEvent::PointerType::Touch; |
+ } else { |
+ args->ThrowError(); |
+ return false; |
+ } |
+ } |
+ return true; |
mustaq
2016/04/07 19:30:02
Nit: Please avoid three levels of nested |if|s, by
Navid Zolghadr
2016/04/08 17:38:44
Done.
|
+} |
+ |
+bool getMousePenPointerTypeAndId(gin::Arguments* args, |
+ blink::WebPointerProperties::PointerType &t, |
dtapuska
2016/04/07 02:35:41
ditto; comments as above.
Navid Zolghadr
2016/04/08 17:38:44
Done.
|
+ int &id) { |
+ t = blink::WebPointerProperties::PointerType::Mouse; |
+ id = kMousePointerId; |
+ // Only allow pen or mouse through this API. |
+ if (!getPointerType(args, t, true)) |
+ return false; |
+ if (!args->PeekNext().IsEmpty()) { |
+ if (!args->GetNext(&id)) { |
+ args->ThrowError(); |
+ return false; |
+ } |
+ if (t != blink::WebPointerProperties::PointerType::Mouse |
+ && id == kMousePointerId) { |
+ args->ThrowError(); |
+ return false; |
+ } |
+ } else if (t == blink::WebPointerProperties::PointerType::Pen) { |
+ id = 1; // A default value for the id of the pen |
+ } |
+ return true; |
+} |
+ |
WebMouseEvent::Button GetButtonTypeFromButtonNumber(int button_code) { |
switch (button_code) { |
case -1: |
@@ -103,6 +166,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; |
@@ -111,7 +176,9 @@ 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; |
+ if (pointerType != blink::WebPointerProperties::PointerType::Mouse) |
mustaq
2016/04/07 19:30:02
I think it's better to allow any ids here. This wo
Navid Zolghadr
2016/04/08 17:38:44
Sure. Then here for mouse by default we are sendin
|
+ e->id = pointerId; |
e->timeStampSeconds = time_stamp; |
e->clickCount = click_count; |
} |
@@ -455,11 +522,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> { |
@@ -978,12 +1040,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_->MouseDown(button_number, modifiers, pointerType, pointerId); |
} |
void EventSenderBindings::MouseUp(gin::Arguments* args) { |
@@ -992,12 +1066,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_->MouseUp(button_number, modifiers, pointerType, pointerId); |
} |
void EventSenderBindings::SetMouseButtonState(gin::Arguments* args) { |
@@ -1150,12 +1236,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; |
@@ -1201,11 +1281,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; |
@@ -1220,7 +1299,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; |
@@ -1258,12 +1336,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); |
@@ -1274,13 +1354,15 @@ 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) { |
+void EventSender::MouseDown(int button_number, int modifiers, |
+ blink::WebPointerProperties::PointerType pointerType, int pointerId) { |
if (force_layout_on_events_) |
view_->updateAllLifecyclePhases(); |
@@ -1289,25 +1371,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, |
dtapuska
2016/04/07 02:35:41
Do we need to be concerned we are passing -1 poten
Navid Zolghadr
2016/04/07 03:08:04
There is a check in InitMouseEvent which ignores t
mustaq
2016/04/07 19:30:02
I am fine with allowing unexpected values here, to
Navid Zolghadr
2016/04/08 17:38:44
I removed the check in InitMouseEvent to set any i
|
&event); |
+ |
HandleInputEventOnViewOrPopup(event); |
} |
-void EventSender::MouseUp(int button_number, int modifiers) { |
+void EventSender::MouseUp(int button_number, int modifiers, |
+ blink::WebPointerProperties::PointerType pointerType, int pointerId) { |
if (force_layout_on_events_) |
view_->updateAllLifecyclePhases(); |
@@ -1316,34 +1406,60 @@ void EventSender::MouseUp(int button_number, int modifiers) { |
WebMouseEvent::Button button_type = |
GetButtonTypeFromButtonNumber(button_number); |
- if (is_drag_mode_ && !replaying_saved_events_) { |
- SavedEvent saved_event; |
- saved_event.type = SavedEvent::TYPE_MOUSE_UP; |
- saved_event.button_type = button_type; |
- saved_event.modifiers = modifiers; |
- mouse_event_queue_.push_back(saved_event); |
- ReplaySavedEvents(); |
+ if (pointerType == blink::WebPointerProperties::PointerType::Mouse) { |
+ if (is_drag_mode_ && !replaying_saved_events_) { |
+ SavedEvent saved_event; |
+ saved_event.type = SavedEvent::TYPE_MOUSE_UP; |
+ saved_event.button_type = button_type; |
+ saved_event.modifiers = modifiers; |
+ mouse_event_queue_.push_back(saved_event); |
+ ReplaySavedEvents(); |
+ } else { |
+ current_pointer_state_[kMousePointerId].current_buttons_ &= |
+ ~GetWebMouseEventModifierForButton(button_type); |
+ current_pointer_state_[kMousePointerId].pressed_button_ = |
+ WebMouseEvent::ButtonNone; |
+ |
+ WebMouseEvent event; |
+ InitMouseEvent(WebInputEvent::MouseUp, |
+ button_type, |
+ current_pointer_state_[kMousePointerId].current_buttons_, |
+ current_pointer_state_[kMousePointerId].last_pos_, |
+ GetCurrentEventTimeSec(), |
+ click_count_, |
+ modifiers, |
+ pointerType, |
+ 0, |
dtapuska
2016/04/07 02:35:41
Whereas we pass 0 in here for mouseup?
This code
Navid Zolghadr
2016/04/07 03:08:04
I was thinking of doing this similar to what I did
dtapuska
2016/04/07 03:15:24
Personally; I'd probably look at pulling the Handl
mustaq
2016/04/07 19:30:02
I agree, the two DoMouse* methods are doing local
Navid Zolghadr
2016/04/08 17:38:44
Done.
|
+ &event); |
+ DoMouseUp(event); |
+ } |
} else { |
- current_buttons_ &= ~GetWebMouseEventModifierForButton(button_type); |
- pressed_button_ = WebMouseEvent::ButtonNone; |
- |
- WebMouseEvent event; |
- InitMouseEvent(WebInputEvent::MouseUp, |
- button_type, |
- current_buttons_, |
- last_mouse_pos_, |
- GetCurrentEventTimeSec(), |
- click_count_, |
- modifiers, |
- &event); |
- DoMouseUp(event); |
+ 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_pointer_state_[pointerId].current_buttons_, |
+ current_pointer_state_[pointerId].last_pos_, |
+ GetCurrentEventTimeSec(), |
+ 0, |
+ modifiers, |
+ pointerType, |
+ pointerId, |
+ &event); |
+ HandleInputEventOnViewOrPopup(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; |
} |
@@ -1544,12 +1660,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); |
} |
@@ -1594,32 +1712,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 |
@@ -1826,7 +1953,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; |
@@ -1863,8 +1991,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 |
@@ -1872,8 +2000,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) { |
@@ -1973,6 +2104,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; |
@@ -1980,27 +2114,52 @@ 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_) { |
- 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); |
+ if (!getMousePenPointerTypeAndId(args, pointerType, pointerId)) |
+ return; |
+ |
+ if (pointerType == blink::WebPointerProperties::PointerType::Mouse) { |
+ if (is_drag_mode_ && current_pointer_state_[kMousePointerId].pressed_button_ |
+ == WebMouseEvent::ButtonLeft |
+ && !replaying_saved_events_) { |
+ 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 { |
+ WebMouseEvent event; |
+ InitMouseEvent(WebInputEvent::MouseMove, |
+ current_pointer_state_[kMousePointerId].pressed_button_, |
+ current_pointer_state_[kMousePointerId].current_buttons_, |
+ mouse_pos, |
+ GetCurrentEventTimeSec(), |
+ click_count_, |
+ modifiers, |
+ pointerType, |
+ 0, |
mustaq
2016/04/07 19:30:02
Same as before, don't worry about pointerId, and u
Navid Zolghadr
2016/04/08 17:38:44
Done.
|
+ &event); |
+ DoMouseMove(event); |
+ } |
} else { |
- WebMouseEvent event; |
- InitMouseEvent(WebInputEvent::MouseMove, |
- pressed_button_, |
- current_buttons_, |
- mouse_pos, |
- GetCurrentEventTimeSec(), |
- click_count_, |
- modifiers, |
- &event); |
- DoMouseMove(event); |
+ current_pointer_state_[pointerId].last_pos_ = mouse_pos; |
+ |
+ WebMouseEvent event; |
+ InitMouseEvent(WebInputEvent::MouseMove, |
+ current_pointer_state_[pointerId].pressed_button_, |
+ current_pointer_state_[pointerId].current_buttons_, |
+ mouse_pos, |
+ GetCurrentEventTimeSec(), |
+ 0, |
+ modifiers, |
+ pointerType, |
+ pointerId, |
+ &event); |
+ HandleInputEventOnViewOrPopup(event); |
} |
} |
@@ -2012,10 +2171,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); |
} |
@@ -2327,12 +2488,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); |
@@ -2343,9 +2506,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; |
@@ -2398,12 +2562,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); |
@@ -2466,25 +2632,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, e->pointerType)) |
+ return; |
} |
void EventSender::FinishDragAndDrop(const WebMouseEvent& e, |
@@ -2509,7 +2658,7 @@ void EventSender::DoMouseUp(const WebMouseEvent& e) { |
HandleInputEventOnViewOrPopup(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()) |
@@ -2531,12 +2680,13 @@ void EventSender::DoMouseUp(const WebMouseEvent& e) { |
} |
void EventSender::DoMouseMove(const WebMouseEvent& e) { |
- last_mouse_pos_ = WebPoint(e.x, e.y); |
+ current_pointer_state_[kMousePointerId].last_pos_ = WebPoint(e.x, e.y); |
HandleInputEventOnViewOrPopup(e); |
- if (pressed_button_ == WebMouseEvent::ButtonNone || |
- current_drag_data_.isNull()) { |
+ if (current_pointer_state_[kMousePointerId].pressed_button_ |
+ == WebMouseEvent::ButtonNone |
+ || current_drag_data_.isNull()) { |
return; |
} |
@@ -2556,12 +2706,14 @@ 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); |
break; |
@@ -2570,17 +2722,21 @@ void EventSender::ReplaySavedEvents() { |
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); |
break; |