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_, |