Chromium Code Reviews| 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_, |