Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1059)

Unified Diff: components/test_runner/event_sender.cc

Issue 1855513002: Consider isPrimary and pointerType when preventing compat mouse (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Win compile error Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698