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

Unified Diff: components/test_runner/event_sender.cc

Issue 1260693003: Add eventSender support for web pointer properties in touch points. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added TODO comments Created 5 years, 5 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
« no previous file with comments | « components/test_runner/event_sender.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/test_runner/event_sender.cc
diff --git a/components/test_runner/event_sender.cc b/components/test_runner/event_sender.cc
index 0b1c78b59f23da4647f8eed50811f635b17b5920..521d780d6fcf28dea83b8a932623f0ba69d9635c 100644
--- a/components/test_runner/event_sender.cc
+++ b/components/test_runner/event_sender.cc
@@ -349,6 +349,11 @@ bool IsSystemKeyEvent(const WebKeyboardEvent& event) {
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> {
@@ -378,7 +383,10 @@ class EventSenderBindings : public gin::Wrappable<EventSenderBindings> {
void SetPageZoomFactor(double factor);
void ClearTouchPoints();
void ReleaseTouchPoint(unsigned index);
- void UpdateTouchPoint(unsigned index, double x, double y);
+ void UpdateTouchPoint(unsigned index,
+ double x,
+ double y,
+ gin::Arguments* args);
void CancelTouchPoint(unsigned index);
void SetTouchModifier(const std::string& key_name, bool set_mask);
void SetTouchCancelable(bool cancelable);
@@ -397,7 +405,7 @@ class EventSenderBindings : public gin::Wrappable<EventSenderBindings> {
void TouchEnd();
void LeapForward(int milliseconds);
void BeginDragWithFiles(const std::vector<std::string>& files);
- void AddTouchPoint(gin::Arguments* args);
+ void AddTouchPoint(double x, double y, gin::Arguments* args);
void MouseDragBegin();
void MouseDragEnd();
void GestureScrollBegin(gin::Arguments* args);
@@ -652,10 +660,13 @@ void EventSenderBindings::ReleaseTouchPoint(unsigned index) {
sender_->ReleaseTouchPoint(index);
}
-void EventSenderBindings::UpdateTouchPoint(unsigned index, double x, double y) {
+void EventSenderBindings::UpdateTouchPoint(unsigned index,
+ double x,
+ double y,
+ gin::Arguments* args) {
if (sender_) {
sender_->UpdateTouchPoint(index, static_cast<float>(x),
- static_cast<float>(y));
+ static_cast<float>(y), args);
}
}
@@ -735,9 +746,11 @@ void EventSenderBindings::BeginDragWithFiles(
sender_->BeginDragWithFiles(files);
}
-void EventSenderBindings::AddTouchPoint(gin::Arguments* args) {
+void EventSenderBindings::AddTouchPoint(double x,
+ double y,
+ gin::Arguments* args) {
if (sender_)
- sender_->AddTouchPoint(args);
+ sender_->AddTouchPoint(static_cast<float>(x), static_cast<float>(y), args);
}
void EventSenderBindings::MouseDragBegin() {
@@ -1557,7 +1570,10 @@ void EventSender::ReleaseTouchPoint(unsigned index) {
touch_point->state = WebTouchPoint::StateReleased;
}
-void EventSender::UpdateTouchPoint(unsigned index, float x, float y) {
+void EventSender::UpdateTouchPoint(unsigned index,
+ float x,
+ float y,
+ gin::Arguments* args) {
if (index >= touch_points_.size()) {
ThrowTouchPointError();
return;
@@ -1567,6 +1583,9 @@ void EventSender::UpdateTouchPoint(unsigned index, float x, float y) {
touch_point->state = WebTouchPoint::StateMoved;
touch_point->position = WebFloatPoint(x, y);
touch_point->screenPosition = touch_point->position;
+
+ InitPointerProperties(args, touch_point, &touch_point->radiusX,
+ &touch_point->radiusY);
}
void EventSender::CancelTouchPoint(unsigned index) {
@@ -1728,45 +1747,24 @@ void EventSender::BeginDragWithFiles(const std::vector<std::string>& files) {
pressed_button_ = WebMouseEvent::ButtonLeft;
}
-void EventSender::AddTouchPoint(gin::Arguments* args) {
- double x;
- double y;
- if (!args->GetNext(&x) || !args->GetNext(&y)) {
- args->ThrowError();
- return;
- }
-
+void EventSender::AddTouchPoint(float x, float y, gin::Arguments* args) {
WebTouchPoint touch_point;
touch_point.state = WebTouchPoint::StatePressed;
- touch_point.position = WebFloatPoint(static_cast<float>(x),
- static_cast<float>(y));
+ touch_point.position = WebFloatPoint(x, y);
touch_point.screenPosition = touch_point.position;
- if (!args->PeekNext().IsEmpty()) {
- double radius_x;
- if (!args->GetNext(&radius_x)) {
- args->ThrowError();
- return;
- }
-
- double radius_y = radius_x;
- if (!args->PeekNext().IsEmpty()) {
- if (!args->GetNext(&radius_y)) {
- args->ThrowError();
- return;
- }
- }
-
- touch_point.radiusX = static_cast<float>(radius_x);
- touch_point.radiusY = static_cast<float>(radius_y);
- }
-
+ // TODO(e_hakkinen): Make this algorithm more robust so that it handles
+ // touch points which are not sorted by their ids, too.
int lowest_id = 0;
for (size_t i = 0; i < touch_points_.size(); i++) {
if (touch_points_[i].id == lowest_id)
lowest_id++;
}
touch_point.id = lowest_id;
+
+ InitPointerProperties(args, &touch_point, &touch_point.radiusX,
+ &touch_point.radiusY);
+
touch_points_.push_back(touch_point);
}
@@ -2381,6 +2379,72 @@ void EventSender::InitMouseWheelEvent(gin::Arguments* args,
}
}
+// Radius fields radius_x and radius_y should eventually be moved to
+// WebPointerProperties.
+// TODO(e_hakkinen): Drop radius_{x,y}_pointer parameters once that happens.
+void EventSender::InitPointerProperties(gin::Arguments* args,
+ blink::WebPointerProperties* e,
+ float* radius_x_pointer,
+ float* radius_y_pointer) {
+ if (!args->PeekNext().IsEmpty()) {
+ double radius_x;
+ if (!args->GetNext(&radius_x)) {
+ args->ThrowError();
+ return;
+ }
+
+ double radius_y = radius_x;
+ if (!args->PeekNext().IsEmpty()) {
+ if (!args->GetNext(&radius_y)) {
+ args->ThrowError();
+ return;
+ }
+ }
+
+ *radius_x_pointer = static_cast<float>(radius_x);
+ *radius_y_pointer = static_cast<float>(radius_y);
+ }
+
+ if (!args->PeekNext().IsEmpty()) {
+ double force;
+ if (!args->GetNext(&force)) {
+ args->ThrowError();
+ return;
+ }
+ e->force = static_cast<float>(force);
+ }
+
+ if (!args->PeekNext().IsEmpty()) {
+ int tiltX, tiltY;
+ if (!args->GetNext(&tiltX) || !args->GetNext(&tiltY)) {
+ args->ThrowError();
+ return;
+ }
+ e->tiltX = tiltX;
+ 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::PointerTypeUnknown;
+ } else if (pointer_type_string == kPointerTypeStringMouse) {
+ e->pointerType = WebMouseEvent::PointerTypeMouse;
+ } else if (pointer_type_string == kPointerTypeStringPen) {
+ e->pointerType = WebMouseEvent::PointerTypePen;
+ } else if (pointer_type_string == kPointerTypeStringTouch) {
+ e->pointerType = WebMouseEvent::PointerTypeTouch;
+ } else {
+ args->ThrowError();
+ return;
+ }
+ }
+}
+
void EventSender::FinishDragAndDrop(const WebMouseEvent& e,
blink::WebDragOperation drag_effect) {
WebPoint client_point(e.x, e.y);
« no previous file with comments | « components/test_runner/event_sender.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698