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

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: Collapse gesture sending into a single function 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..393572482957e5cc3f4162a6fbb5fb366717c278 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"
@@ -115,6 +116,19 @@ void InitMouseEvent(WebInputEvent::Type t,
e->clickCount = click_count;
}
+void InitGestureEventFromMouseWheel(WebInputEvent::Type type,
+ double time_stamp,
+ const WebMouseWheelEvent& wheel_event,
+ WebGestureEvent* gesture_event) {
+ gesture_event->type = type;
+ gesture_event->sourceDevice = blink::WebGestureDeviceTouchpad;
+ gesture_event->x = wheel_event.x;
+ gesture_event->y = wheel_event.y;
+ gesture_event->globalX = wheel_event.globalX;
+ gesture_event->globalY = wheel_event.globalY;
+ gesture_event->timeStampSeconds = time_stamp;
+}
+
int GetKeyModifier(const std::string& modifier_name) {
const char* characters = modifier_name.c_str();
if (!strcmp(characters, "ctrlKey")
@@ -500,8 +514,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 +530,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 +639,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 +660,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 +854,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 +921,7 @@ void EventSenderBindings::GestureTwoFingerTap(gin::Arguments* args) {
void EventSenderBindings::ContinuousMouseScrollBy(gin::Arguments* args) {
if (sender_)
- sender_->ContinuousMouseScrollBy(args);
+ sender_->MouseScrollBy(args, EventSender::MouseScrollType::PIXEL);
}
void EventSenderBindings::MouseMoveTo(gin::Arguments* args) {
@@ -941,24 +934,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, EventSender::MouseScrollType::TICK);
}
void EventSenderBindings::ScheduleAsynchronousClick(gin::Arguments* args) {
@@ -1202,6 +1180,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 +1900,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 +1952,19 @@ 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,
+ MouseScrollType scroll_type) {
+ WebMouseWheelEvent wheel_event;
+ // TODO(dtapuska): Gestures really should be sent by the MouseWheelEventQueue
+ // class in the browser. But since the event doesn't propogate up into
+ // the browser generate the events here. See crbug.com/596095.
+ bool send_gestures = false;
+ InitMouseWheelEvent(args, scroll_type, &wheel_event, &send_gestures);
+ if (HandleInputEventOnViewOrPopup(wheel_event) ==
+ WebInputEventResult::NotHandled &&
+ send_gestures) {
+ SendGesturesForMouseWheelEvent(wheel_event);
+ }
}
void EventSender::MouseMoveTo(gin::Arguments* args) {
@@ -2063,50 +2021,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));
@@ -2440,8 +2354,9 @@ void EventSender::UpdateClickCountForButton(
}
void EventSender::InitMouseWheelEvent(gin::Arguments* args,
- bool continuous,
- WebMouseWheelEvent* event) {
+ MouseScrollType scroll_type,
+ 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 +2386,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_,
@@ -2492,7 +2412,7 @@ void EventSender::InitMouseWheelEvent(gin::Arguments* args,
event->scrollByPage = paged;
event->hasPreciseScrollingDeltas = has_precise_scrolling_deltas;
event->canScroll = can_scroll;
- if (continuous) {
+ if (scroll_type == MouseScrollType::PIXEL) {
event->wheelTicksX /= kScrollbarPixelsPerTick;
event->wheelTicksY /= kScrollbarPixelsPerTick;
} else {
@@ -2684,4 +2604,61 @@ WebInputEventResult EventSender::HandleInputEventOnViewOrPopup(
return view_->handleInputEvent(event);
}
+void EventSender::SendGesturesForMouseWheelEvent(
+ const WebMouseWheelEvent wheel_event) {
+ WebGestureEvent begin_event;
+ InitGestureEventFromMouseWheel(WebInputEvent::GestureScrollBegin,
+ GetCurrentEventTimeSec(), wheel_event,
+ &begin_event);
+ 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) {
+ begin_event.data.scrollBegin.deltaXHint =
+ begin_event.data.scrollBegin.deltaXHint > 0 ? 1 : -1;
+ }
+ if (begin_event.data.scrollBegin.deltaYHint) {
+ 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;
+ }
+
+ if (force_layout_on_events_)
+ view_->updateAllLifecyclePhases();
+
+ HandleInputEventOnViewOrPopup(begin_event);
+
+ WebGestureEvent update_event;
+ InitGestureEventFromMouseWheel(WebInputEvent::GestureScrollUpdate,
+ GetCurrentEventTimeSec(), wheel_event,
+ &update_event);
+ 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;
+
+ if (force_layout_on_events_)
+ view_->updateAllLifecyclePhases();
+ HandleInputEventOnViewOrPopup(update_event);
+
+ WebGestureEvent end_event;
+ InitGestureEventFromMouseWheel(WebInputEvent::GestureScrollEnd,
+ GetCurrentEventTimeSec(), wheel_event,
+ &end_event);
+ end_event.data.scrollEnd.deltaUnits =
+ begin_event.data.scrollBegin.deltaHintUnits;
+
+ if (force_layout_on_events_)
+ view_->updateAllLifecyclePhases();
+ HandleInputEventOnViewOrPopup(end_event);
+}
+
} // namespace test_runner
« 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