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

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

Issue 1705323002: Follow on for gesture events generated by wheel events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_wheel_passive_listeners_3
Patch Set: Created 4 years, 10 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 b622dc8533807e3a2d82635c6dde454e25cc4232..6072bfc3fd96557b949651d3bf73903c09a04e65 100644
--- a/content/browser/renderer_host/overscroll_controller.cc
+++ b/content/browser/renderer_host/overscroll_controller.cc
@@ -7,6 +7,7 @@
#include "base/command_line.h"
#include "base/logging.h"
#include "content/browser/renderer_host/overscroll_controller_delegate.h"
+#include "content/common/input/input_event_utils.h"
#include "content/public/browser/overscroll_configuration.h"
#include "content/public/common/content_switches.h"
@@ -19,6 +20,12 @@ bool IsScrollEndEffectEnabled() {
switches::kScrollEndEffect) == "1";
}
+bool IsGestureEventFromTouchscreen(const blink::WebInputEvent& event) {
tdresser 2016/02/18 14:35:21 Maybe DCHECK that this is a gesture event?
dtapuska 2016/02/18 21:03:44 Done.
+ const blink::WebGestureEvent& gesture =
+ static_cast<const blink::WebGestureEvent&>(event);
+ return gesture.sourceDevice == blink::WebGestureDeviceTouchscreen;
+}
+
} // namespace
namespace content {
@@ -28,8 +35,8 @@ OverscrollController::OverscrollController()
scroll_state_(STATE_UNKNOWN),
overscroll_delta_x_(0.f),
overscroll_delta_y_(0.f),
- delegate_(NULL) {
-}
+ delegate_(NULL),
+ use_gesutre_wheel_scrolling_(UseGestureBasedWheelScrolling()) {}
tdresser 2016/02/18 14:35:21 use_gesutre -> use_gesture
dtapuska 2016/02/18 21:03:44 Done.
OverscrollController::~OverscrollController() {
}
@@ -40,17 +47,24 @@ bool OverscrollController::WillHandleEvent(const blink::WebInputEvent& event) {
overscroll_delta_x_ || overscroll_delta_y_) {
switch (event.type) {
case blink::WebInputEvent::GestureScrollEnd:
+ // Gesture scroll end is sent based on a timeout avoid
tdresser 2016/02/18 14:35:21 timeout avoid -> timeout to avoid
dtapuska 2016/02/18 21:03:44 Done.
+ // resetting on events from the touchpad.
+ reset_scroll_state = IsGestureEventFromTouchscreen(event);
+ break;
+
case blink::WebInputEvent::GestureFlingStart:
reset_scroll_state = true;
break;
case blink::WebInputEvent::MouseWheel: {
- const blink::WebMouseWheelEvent& wheel =
- static_cast<const blink::WebMouseWheelEvent&>(event);
- if (!wheel.hasPreciseScrollingDeltas ||
- wheel.phase == blink::WebMouseWheelEvent::PhaseEnded ||
- wheel.phase == blink::WebMouseWheelEvent::PhaseCancelled) {
- reset_scroll_state = true;
+ if (!use_gesutre_wheel_scrolling_) {
tdresser 2016/02/18 14:35:21 This might be clearer if you invert the condition.
dtapuska 2016/02/18 21:03:44 Done.
+ const blink::WebMouseWheelEvent& wheel =
+ static_cast<const blink::WebMouseWheelEvent&>(event);
+ if (!wheel.hasPreciseScrollingDeltas ||
+ wheel.phase == blink::WebMouseWheelEvent::PhaseEnded ||
+ wheel.phase == blink::WebMouseWheelEvent::PhaseCancelled) {
+ reset_scroll_state = true;
+ }
}
break;
}
@@ -95,6 +109,10 @@ bool OverscrollController::WillHandleEvent(const blink::WebInputEvent& event) {
void OverscrollController::ReceivedEventACK(const blink::WebInputEvent& event,
bool processed) {
+ if (use_gesutre_wheel_scrolling_ &&
+ event.type == blink::WebInputEvent::MouseWheel)
+ return;
+
if (processed) {
// If a scroll event is consumed by the page, i.e. some content on the page
// has been scrolled, then there is not going to be an overscroll gesture,
@@ -142,6 +160,12 @@ bool OverscrollController::DispatchEventCompletesAction (
event.type != blink::WebInputEvent::GestureFlingStart)
return false;
+ // Gesture scroll end is sent based on a timeout avoid
+ // resetting on events from the touchpad.
tdresser 2016/02/18 14:35:21 resetting what?
dtapuska 2016/02/18 14:41:17 Resetting the overscroll to OVERSCROLL_NONE state.
+ if (event.type == blink::WebInputEvent::GestureScrollEnd &&
+ !IsGestureEventFromTouchscreen(event))
+ return false;
+
if (!delegate_)
return false;
@@ -192,13 +216,23 @@ bool OverscrollController::DispatchEventResetsState(
const blink::WebInputEvent& event) const {
switch (event.type) {
case blink::WebInputEvent::MouseWheel: {
- // Only wheel events with precise deltas (i.e. from trackpad) contribute
- // to the overscroll gesture.
- const blink::WebMouseWheelEvent& wheel =
- static_cast<const blink::WebMouseWheelEvent&>(event);
- return !wheel.hasPreciseScrollingDeltas;
+ if (use_gesutre_wheel_scrolling_) {
+ return false;
+ } else {
tdresser 2016/02/18 14:35:20 Don't need the "else", as there's a return above.
dtapuska 2016/02/18 21:03:44 Done.
+ // Only wheel events with precise deltas (i.e. from trackpad) contribute
+ // to the overscroll gesture.
+ const blink::WebMouseWheelEvent& wheel =
+ static_cast<const blink::WebMouseWheelEvent&>(event);
+ return !wheel.hasPreciseScrollingDeltas;
+ }
}
+ // Gesture scroll begin/ends come based on a timeout avoid
+ // resetting on events from the touchpad.
+ case blink::WebInputEvent::GestureScrollBegin:
+ case blink::WebInputEvent::GestureScrollEnd:
+ return IsGestureEventFromTouchscreen(event);
+
case blink::WebInputEvent::GestureScrollUpdate:
case blink::WebInputEvent::GestureFlingCancel:
return false;
@@ -217,20 +251,19 @@ bool OverscrollController::ProcessEventForOverscroll(
case blink::WebInputEvent::MouseWheel: {
const blink::WebMouseWheelEvent& wheel =
static_cast<const blink::WebMouseWheelEvent&>(event);
- if (!wheel.hasPreciseScrollingDeltas)
+ if (use_gesutre_wheel_scrolling_ || !wheel.hasPreciseScrollingDeltas)
break;
event_processed =
ProcessOverscroll(wheel.deltaX * wheel.accelerationRatioX,
- wheel.deltaY * wheel.accelerationRatioY,
- wheel.type);
+ wheel.deltaY * wheel.accelerationRatioY, true);
break;
}
case blink::WebInputEvent::GestureScrollUpdate: {
const blink::WebGestureEvent& gesture =
static_cast<const blink::WebGestureEvent&>(event);
- event_processed = ProcessOverscroll(gesture.data.scrollUpdate.deltaX,
- gesture.data.scrollUpdate.deltaY,
- gesture.type);
+ event_processed = ProcessOverscroll(
+ gesture.data.scrollUpdate.deltaX, gesture.data.scrollUpdate.deltaY,
+ gesture.sourceDevice == blink::WebGestureDeviceTouchpad);
break;
}
case blink::WebInputEvent::GestureFlingStart: {
@@ -270,15 +303,14 @@ bool OverscrollController::ProcessEventForOverscroll(
bool OverscrollController::ProcessOverscroll(float delta_x,
float delta_y,
- blink::WebInputEvent::Type type) {
+ bool is_touchpad) {
if (scroll_state_ != STATE_CONTENT_SCROLLING)
overscroll_delta_x_ += delta_x;
overscroll_delta_y_ += delta_y;
float horiz_threshold = GetOverscrollConfig(
- WebInputEvent::isGestureEventType(type) ?
- OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START_TOUCHSCREEN :
- OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START_TOUCHPAD);
+ is_touchpad ? OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START_TOUCHPAD
+ : OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START_TOUCHSCREEN);
float vert_threshold = GetOverscrollConfig(
OVERSCROLL_CONFIG_VERT_THRESHOLD_START);
if (fabs(overscroll_delta_x_) <= horiz_threshold &&

Powered by Google App Engine
This is Rietveld 408576698