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

Unified Diff: components/test_runner/event_sender.cc

Issue 1806103002: Send wheel gestures from event sender. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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') | components/test_runner/web_test_interfaces.h » ('j') | 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 359aa00257dc96f993a983ed46be26b639e4b887..fe186178a0006d606b7d9b73cdacec117b925a27 100644
--- a/components/test_runner/event_sender.cc
+++ b/components/test_runner/event_sender.cc
@@ -6,6 +6,7 @@
#include <stddef.h>
+#include "base/command_line.h"
#include "base/logging.h"
#include "base/macros.h"
#include "base/strings/string16.h"
@@ -500,8 +501,6 @@ class EventSenderBindings : public gin::Wrappable<EventSenderBindings> {
double LastEventTimestamp();
void BeginDragWithFiles(const std::vector<std::string>& files);
void AddTouchPoint(double x, double y, gin::Arguments* args);
- void MouseDragBegin();
- void MouseDragEnd();
void GestureScrollBegin(gin::Arguments* args);
void GestureScrollEnd(gin::Arguments* args);
void GestureScrollUpdate(gin::Arguments* args);
@@ -518,9 +517,6 @@ class EventSenderBindings : public gin::Wrappable<EventSenderBindings> {
void ContinuousMouseScrollBy(gin::Arguments* args);
void MouseMoveTo(gin::Arguments* args);
void MouseLeave();
- void TrackpadScrollBegin();
- void TrackpadScroll(gin::Arguments* args);
- void TrackpadScrollEnd();
void MouseScrollBy(gin::Arguments* args);
void ScheduleAsynchronousClick(gin::Arguments* args);
void ScheduleAsynchronousKeyDown(gin::Arguments* args);
@@ -630,8 +626,6 @@ EventSenderBindings::GetObjectTemplateBuilder(v8::Isolate* isolate) {
.SetMethod("lastEventTimestamp", &EventSenderBindings::LastEventTimestamp)
.SetMethod("beginDragWithFiles", &EventSenderBindings::BeginDragWithFiles)
.SetMethod("addTouchPoint", &EventSenderBindings::AddTouchPoint)
- .SetMethod("mouseDragBegin", &EventSenderBindings::MouseDragBegin)
- .SetMethod("mouseDragEnd", &EventSenderBindings::MouseDragEnd)
.SetMethod("gestureScrollBegin", &EventSenderBindings::GestureScrollBegin)
.SetMethod("gestureScrollEnd", &EventSenderBindings::GestureScrollEnd)
.SetMethod("gestureScrollUpdate",
@@ -653,10 +647,6 @@ EventSenderBindings::GetObjectTemplateBuilder(v8::Isolate* isolate) {
.SetMethod("mouseDown", &EventSenderBindings::MouseDown)
.SetMethod("mouseMoveTo", &EventSenderBindings::MouseMoveTo)
.SetMethod("mouseLeave", &EventSenderBindings::MouseLeave)
- .SetMethod("trackpadScrollBegin",
- &EventSenderBindings::TrackpadScrollBegin)
- .SetMethod("trackpadScroll", &EventSenderBindings::TrackpadScroll)
- .SetMethod("trackpadScrollEnd", &EventSenderBindings::TrackpadScrollEnd)
.SetMethod("mouseScrollBy", &EventSenderBindings::MouseScrollBy)
.SetMethod("mouseUp", &EventSenderBindings::MouseUp)
.SetMethod("setMouseButtonState",
@@ -851,16 +841,6 @@ void EventSenderBindings::AddTouchPoint(double x,
sender_->AddTouchPoint(static_cast<float>(x), static_cast<float>(y), args);
}
-void EventSenderBindings::MouseDragBegin() {
- if (sender_)
- sender_->MouseDragBegin();
-}
-
-void EventSenderBindings::MouseDragEnd() {
- if (sender_)
- sender_->MouseDragEnd();
-}
-
void EventSenderBindings::GestureScrollBegin(gin::Arguments* args) {
if (sender_)
sender_->GestureScrollBegin(args);
@@ -928,7 +908,7 @@ void EventSenderBindings::GestureTwoFingerTap(gin::Arguments* args) {
void EventSenderBindings::ContinuousMouseScrollBy(gin::Arguments* args) {
if (sender_)
- sender_->ContinuousMouseScrollBy(args);
+ sender_->MouseScrollBy(args, true);
}
void EventSenderBindings::MouseMoveTo(gin::Arguments* args) {
@@ -941,24 +921,9 @@ void EventSenderBindings::MouseLeave() {
sender_->MouseLeave();
}
-void EventSenderBindings::TrackpadScrollBegin() {
- if (sender_)
- sender_->TrackpadScrollBegin();
-}
-
-void EventSenderBindings::TrackpadScroll(gin::Arguments* args) {
- if (sender_)
- sender_->TrackpadScroll(args);
-}
-
-void EventSenderBindings::TrackpadScrollEnd() {
- if (sender_)
- sender_->TrackpadScrollEnd();
-}
-
void EventSenderBindings::MouseScrollBy(gin::Arguments* args) {
if (sender_)
- sender_->MouseScrollBy(args);
+ sender_->MouseScrollBy(args, false);
}
void EventSenderBindings::ScheduleAsynchronousClick(gin::Arguments* args) {
@@ -1202,6 +1167,7 @@ EventSender::EventSender(TestInterfaces* interfaces)
interfaces_(interfaces),
delegate_(NULL),
view_(NULL),
+ send_wheel_gestures_(false),
force_layout_on_events_(false),
is_drag_mode_(true),
touch_modifiers_(0),
@@ -1921,36 +1887,6 @@ void EventSender::AddTouchPoint(float x, float y, gin::Arguments* args) {
touch_points_.push_back(touch_point);
}
-void EventSender::MouseDragBegin() {
- WebMouseWheelEvent event;
- InitMouseEvent(WebInputEvent::MouseWheel,
- WebMouseEvent::ButtonNone,
- 0,
- last_mouse_pos_,
- GetCurrentEventTimeSec(),
- click_count_,
- 0,
- &event);
- event.phase = WebMouseWheelEvent::PhaseBegan;
- event.hasPreciseScrollingDeltas = true;
- HandleInputEventOnViewOrPopup(event);
-}
-
-void EventSender::MouseDragEnd() {
- WebMouseWheelEvent event;
- InitMouseEvent(WebInputEvent::MouseWheel,
- WebMouseEvent::ButtonNone,
- 0,
- last_mouse_pos_,
- GetCurrentEventTimeSec(),
- click_count_,
- 0,
- &event);
- event.phase = WebMouseWheelEvent::PhaseEnded;
- event.hasPreciseScrollingDeltas = true;
- HandleInputEventOnViewOrPopup(event);
-}
-
void EventSender::GestureScrollBegin(gin::Arguments* args) {
GestureEvent(WebInputEvent::GestureScrollBegin, args);
}
@@ -2003,10 +1939,67 @@ void EventSender::GestureTwoFingerTap(gin::Arguments* args) {
GestureEvent(WebInputEvent::GestureTwoFingerTap, args);
}
-void EventSender::ContinuousMouseScrollBy(gin::Arguments* args) {
- WebMouseWheelEvent event;
- InitMouseWheelEvent(args, true, &event);
- HandleInputEventOnViewOrPopup(event);
+void EventSender::MouseScrollBy(gin::Arguments* args, bool continuous) {
Mike West 2016/03/17 16:19:38 Nit: I'd prefer for this to be an enum so that it'
dtapuska 2016/03/17 18:05:51 Done.
+ WebMouseWheelEvent wheel_event;
+ bool send_gestures = false;
+ InitMouseWheelEvent(args, continuous, &wheel_event, &send_gestures);
+ if (HandleInputEventOnViewOrPopup(wheel_event) ==
+ WebInputEventResult::NotHandled &&
+ send_gestures) {
+ WebGestureEvent begin_event;
+ begin_event.type = WebInputEvent::GestureScrollBegin;
+ begin_event.sourceDevice = blink::WebGestureDeviceTouchpad;
+ begin_event.x = wheel_event.x;
+ begin_event.y = wheel_event.y;
+ begin_event.globalX = wheel_event.globalX;
+ begin_event.globalY = wheel_event.globalY;
+ begin_event.timeStampSeconds = GetCurrentEventTimeSec();
+ begin_event.data.scrollBegin.deltaXHint = wheel_event.deltaX;
+ begin_event.data.scrollBegin.deltaYHint = wheel_event.deltaY;
+ if (wheel_event.scrollByPage) {
+ begin_event.data.scrollBegin.deltaHintUnits =
+ blink::WebGestureEvent::Page;
+ if (begin_event.data.scrollBegin.deltaXHint)
Mike West 2016/03/17 16:19:38 Nit: {} around multi-line body.
dtapuska 2016/03/17 18:05:51 Done.
+ begin_event.data.scrollBegin.deltaXHint =
+ begin_event.data.scrollBegin.deltaXHint > 0 ? 1 : -1;
+ if (begin_event.data.scrollBegin.deltaYHint)
Mike West 2016/03/17 16:19:38 Nit: {} around multi-line body.
dtapuska 2016/03/17 18:05:51 Done.
+ begin_event.data.scrollBegin.deltaYHint =
+ begin_event.data.scrollBegin.deltaYHint > 0 ? 1 : -1;
+ } else {
+ begin_event.data.scrollBegin.deltaHintUnits =
+ wheel_event.hasPreciseScrollingDeltas
+ ? blink::WebGestureEvent::PrecisePixels
+ : blink::WebGestureEvent::Pixels;
+ }
+ WebGestureEvent update_event = begin_event;
+ update_event.type = WebInputEvent::GestureScrollUpdate;
+ memset(&update_event.data, 0, sizeof(update_event.data));
Mike West 2016/03/17 16:19:38 Could we move this to a `clear()` method on WebGes
dtapuska 2016/03/17 18:05:51 I've just cloned the fields over manually and avoi
+ update_event.data.scrollUpdate.deltaX =
+ begin_event.data.scrollBegin.deltaXHint;
+ update_event.data.scrollUpdate.deltaY =
+ begin_event.data.scrollBegin.deltaYHint;
+ update_event.data.scrollUpdate.deltaUnits =
+ begin_event.data.scrollBegin.deltaHintUnits;
+
+ WebGestureEvent end_event = begin_event;
+ end_event.type = WebInputEvent::GestureScrollEnd;
+ memset(&end_event.data, 0, sizeof(end_event.data));
+ end_event.data.scrollEnd.deltaUnits =
+ begin_event.data.scrollBegin.deltaHintUnits;
+
+ if (force_layout_on_events_)
+ view_->updateAllLifecyclePhases();
+
+ HandleInputEventOnViewOrPopup(begin_event);
+
+ if (force_layout_on_events_)
+ view_->updateAllLifecyclePhases();
+ HandleInputEventOnViewOrPopup(update_event);
+
+ if (force_layout_on_events_)
+ view_->updateAllLifecyclePhases();
+ HandleInputEventOnViewOrPopup(end_event);
+ }
}
void EventSender::MouseMoveTo(gin::Arguments* args) {
@@ -2063,50 +2056,6 @@ void EventSender::MouseLeave() {
}
-void EventSender::TrackpadScrollBegin() {
- WebMouseWheelEvent event;
- InitMouseEvent(WebInputEvent::MouseWheel,
- WebMouseEvent::ButtonNone,
- 0,
- last_mouse_pos_,
- GetCurrentEventTimeSec(),
- click_count_,
- 0,
- &event);
- event.phase = blink::WebMouseWheelEvent::PhaseBegan;
- event.hasPreciseScrollingDeltas = true;
- HandleInputEventOnViewOrPopup(event);
-}
-
-void EventSender::TrackpadScroll(gin::Arguments* args) {
- WebMouseWheelEvent event;
- InitMouseWheelEvent(args, true, &event);
- event.phase = blink::WebMouseWheelEvent::PhaseChanged;
- event.hasPreciseScrollingDeltas = true;
- HandleInputEventOnViewOrPopup(event);
-}
-
-void EventSender::TrackpadScrollEnd() {
- WebMouseWheelEvent event;
- InitMouseEvent(WebInputEvent::MouseWheel,
- WebMouseEvent::ButtonNone,
- 0,
- last_mouse_pos_,
- GetCurrentEventTimeSec(),
- click_count_,
- 0,
- &event);
- event.phase = WebMouseWheelEvent::PhaseEnded;
- event.hasPreciseScrollingDeltas = true;
- HandleInputEventOnViewOrPopup(event);
-}
-
-void EventSender::MouseScrollBy(gin::Arguments* args) {
- WebMouseWheelEvent event;
- InitMouseWheelEvent(args, false, &event);
- HandleInputEventOnViewOrPopup(event);
-}
-
void EventSender::ScheduleAsynchronousClick(int button_number, int modifiers) {
delegate_->PostTask(new MouseDownTask(this, button_number, modifiers));
delegate_->PostTask(new MouseUpTask(this, button_number, modifiers));
@@ -2441,7 +2390,8 @@ void EventSender::UpdateClickCountForButton(
void EventSender::InitMouseWheelEvent(gin::Arguments* args,
bool continuous,
- WebMouseWheelEvent* event) {
+ WebMouseWheelEvent* event,
+ bool* send_gestures) {
// Force a layout here just to make sure every position has been
// determined before we send events (as well as all the other methods
// that send an event do).
@@ -2471,11 +2421,16 @@ void EventSender::InitMouseWheelEvent(gin::Arguments* args,
v8::Local<v8::Value> value;
args->GetNext(&value);
modifiers = GetKeyModifiersFromV8(args->isolate(), value);
- if (!args->PeekNext().IsEmpty())
+ if (!args->PeekNext().IsEmpty()) {
args->GetNext(&can_scroll);
+ }
}
}
}
+ if (can_scroll && send_wheel_gestures_) {
+ can_scroll = false;
+ *send_gestures = true;
+ }
InitMouseEvent(WebInputEvent::MouseWheel,
pressed_button_,
« no previous file with comments | « components/test_runner/event_sender.h ('k') | components/test_runner/web_test_interfaces.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698