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

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

Issue 2193033003: Cancel browser process scroll bubbling when new gestures start (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed indent Created 4 years, 4 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 | « no previous file | content/browser/site_per_process_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/render_widget_host_input_event_router.cc
diff --git a/content/browser/renderer_host/render_widget_host_input_event_router.cc b/content/browser/renderer_host/render_widget_host_input_event_router.cc
index 9786dad6d20708b7de81d7cef93b633ac84dfe5b..fcefe1b55cd5bea34a92796008fcb4a58c0eeb02 100644
--- a/content/browser/renderer_host/render_widget_host_input_event_router.cc
+++ b/content/browser/renderer_host/render_widget_host_input_event_router.cc
@@ -210,9 +210,16 @@ void RenderWidgetHostInputEventRouter::RouteTouchEvent(
touch_target_.delta = transformed_point - original_point;
touchscreen_gesture_target_queue_.push_back(touch_target_);
- if (!touch_target_.target)
+ if (!touch_target_.target) {
return;
+ } else if (touch_target_.target ==
+ bubbling_gesture_scroll_target_.target) {
+ SendGestureScrollEnd(bubbling_gesture_scroll_target_.target,
+ blink::WebGestureEvent());
+ CancelScrollBubbling(bubbling_gesture_scroll_target_.target);
+ }
}
+
++active_touches_;
if (touch_target_.target) {
TransformEventTouchPositions(event, touch_target_.delta);
@@ -290,7 +297,8 @@ void RenderWidgetHostInputEventRouter::BubbleScrollEvent(
// not proceed. This could cause confusion between independent
// scrolls.
if (target_view == touchscreen_gesture_target_.target ||
- target_view == touchpad_gesture_target_.target)
+ target_view == touchpad_gesture_target_.target ||
+ target_view == touch_target_.target)
return;
// This accounts for bubbling through nested OOPIFs. A gesture scroll has
@@ -404,6 +412,15 @@ void RenderWidgetHostInputEventRouter::RouteTouchscreenGestureEvent(
touchscreen_gesture_target_ = touchscreen_gesture_target_queue_.front();
touchscreen_gesture_target_queue_.pop_front();
+
+ // Abort any scroll bubbling in progress to avoid double entry.
+ if (touchscreen_gesture_target_.target &&
+ touchscreen_gesture_target_.target ==
+ bubbling_gesture_scroll_target_.target) {
+ SendGestureScrollEnd(bubbling_gesture_scroll_target_.target,
+ blink::WebGestureEvent());
+ CancelScrollBubbling(bubbling_gesture_scroll_target_.target);
+ }
}
if (!touchscreen_gesture_target_.target)
@@ -433,6 +450,15 @@ void RenderWidgetHostInputEventRouter::RouteTouchpadGestureEvent(
// might be to always transform each point to the
// |touchpad_gesture_target_.target| for the duration of the sequence.
touchpad_gesture_target_.delta = transformed_point - original_point;
+
+ // Abort any scroll bubbling in progress to avoid double entry.
+ if (touchpad_gesture_target_.target &&
+ touchpad_gesture_target_.target ==
+ bubbling_gesture_scroll_target_.target) {
+ SendGestureScrollEnd(bubbling_gesture_scroll_target_.target,
+ blink::WebGestureEvent());
+ CancelScrollBubbling(bubbling_gesture_scroll_target_.target);
+ }
}
if (!touchpad_gesture_target_.target)
« no previous file with comments | « no previous file | content/browser/site_per_process_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698