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

Unified Diff: content/browser/renderer_host/overscroll_controller.cc

Issue 23801003: input: Make the OverscrollController less intrusive, and some code cleanup. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 3 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
Index: content/browser/renderer_host/overscroll_controller.cc
diff --git a/content/browser/renderer_host/overscroll_controller.cc b/content/browser/renderer_host/overscroll_controller.cc
index 51ff7dfc3d4c26952e2021c99779a684ebaed0ac..f07efab61f4fe1504186974481be50128de69345 100644
--- a/content/browser/renderer_host/overscroll_controller.cc
+++ b/content/browser/renderer_host/overscroll_controller.cc
@@ -64,23 +64,25 @@ bool OverscrollController::WillDispatchEvent(
// touch-scrolls maintain state in the renderer side (in the compositor, for
// example), and the event that completes this action needs to be sent to
// the renderer so that those states can be updated/reset appropriately.
- // Send the event through the host when appropriate.
- if (ShouldForwardToHost(event)) {
+ if (WebKit::WebInputEvent::isGestureEventType(event.type)) {
+ // A gesture-event isn't sent to the GestureEventFilter when overscroll is
+ // in progress. So dispatch the event through the RenderWidgetHost so that
+ // it can reach the GestureEventFilter.
const WebKit::WebGestureEvent& gevent =
static_cast<const WebKit::WebGestureEvent&>(event);
return render_widget_host_->ShouldForwardGestureEvent(
GestureEventWithLatencyInfo(gevent, latency_info));
}
- return false;
+ return true;
}
if (overscroll_mode_ != OVERSCROLL_NONE && DispatchEventResetsState(event)) {
SetOverscrollMode(OVERSCROLL_NONE);
- // The overscroll gesture status is being reset. If the event is a
- // gesture event (from either touchscreen or trackpad), then make sure the
- // host gets the event first (if it didn't already process it).
- if (ShouldForwardToHost(event)) {
+ if (WebKit::WebInputEvent::isGestureEventType(event.type)) {
+ // A gesture-event isn't sent to the GestureEventFilter when overscroll is
+ // in progress. So dispatch the event through the RenderWidgetHost so that
+ // it can reach the GestureEventFilter.
const WebKit::WebGestureEvent& gevent =
static_cast<const WebKit::WebGestureEvent&>(event);
return render_widget_host_->ShouldForwardGestureEvent(
@@ -92,16 +94,9 @@ bool OverscrollController::WillDispatchEvent(
}
if (overscroll_mode_ != OVERSCROLL_NONE) {
- // Consume the event and update overscroll state when in the middle of the
- // overscroll gesture.
- ProcessEventForOverscroll(event);
-
- if (event.type == WebKit::WebInputEvent::TouchEnd ||
- event.type == WebKit::WebInputEvent::TouchCancel ||
- event.type == WebKit::WebInputEvent::TouchMove) {
- return true;
- }
- return false;
+ // Consume the event only if it updates the overscroll state.
+ if (ProcessEventForOverscroll(event))
+ return false;
}
return true;
@@ -226,18 +221,20 @@ bool OverscrollController::DispatchEventResetsState(
}
}
-void OverscrollController::ProcessEventForOverscroll(
+bool OverscrollController::ProcessEventForOverscroll(
const WebKit::WebInputEvent& event) {
+ bool event_processed = false;
switch (event.type) {
case WebKit::WebInputEvent::MouseWheel: {
const WebKit::WebMouseWheelEvent& wheel =
static_cast<const WebKit::WebMouseWheelEvent&>(event);
if (!wheel.hasPreciseScrollingDeltas)
- return;
+ break;
ProcessOverscroll(wheel.deltaX * wheel.accelerationRatioX,
wheel.deltaY * wheel.accelerationRatioY,
wheel.type);
+ event_processed = true;
break;
}
case WebKit::WebInputEvent::GestureScrollUpdate: {
@@ -246,6 +243,7 @@ void OverscrollController::ProcessEventForOverscroll(
ProcessOverscroll(gesture.data.scrollUpdate.deltaX,
gesture.data.scrollUpdate.deltaY,
gesture.type);
+ event_processed = true;
break;
}
case WebKit::WebInputEvent::GestureFlingStart: {
@@ -258,12 +256,14 @@ void OverscrollController::ProcessEventForOverscroll(
if ((overscroll_mode_ == OVERSCROLL_WEST && velocity_x < 0) ||
(overscroll_mode_ == OVERSCROLL_EAST && velocity_x > 0)) {
CompleteAction();
+ event_processed = true;
break;
}
} else if (fabs(velocity_y) > kFlingVelocityThreshold) {
if ((overscroll_mode_ == OVERSCROLL_NORTH && velocity_y < 0) ||
(overscroll_mode_ == OVERSCROLL_SOUTH && velocity_y > 0)) {
CompleteAction();
+ event_processed = true;
break;
}
}
@@ -278,6 +278,7 @@ void OverscrollController::ProcessEventForOverscroll(
WebKit::WebInputEvent::isTouchEventType(event.type))
<< "Received unexpected event: " << event.type;
}
+ return event_processed;
}
void OverscrollController::ProcessOverscroll(float delta_x,
@@ -367,14 +368,4 @@ void OverscrollController::SetOverscrollMode(OverscrollMode mode) {
delegate_->OnOverscrollModeChange(old_mode, overscroll_mode_);
}
-bool OverscrollController::ShouldForwardToHost(
- const WebKit::WebInputEvent& event) const {
- if (!WebKit::WebInputEvent::isGestureEventType(event.type))
- return false;
-
- // If the RenderWidgetHost already processed this event, then the event must
- // not be sent again.
- return !render_widget_host_->HasQueuedGestureEvents();
-}
-
} // namespace content
« no previous file with comments | « content/browser/renderer_host/overscroll_controller.h ('k') | content/browser/renderer_host/render_widget_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698