| Index: content/browser/renderer_host/input/touch_action_filter.cc
|
| diff --git a/content/browser/renderer_host/input/touch_action_filter.cc b/content/browser/renderer_host/input/touch_action_filter.cc
|
| index e8f23354bd6a27e205fc3d3cad77030a70268ff8..19c1ce700670e86a4e34d2a664fea14079090121 100644
|
| --- a/content/browser/renderer_host/input/touch_action_filter.cc
|
| +++ b/content/browser/renderer_host/input/touch_action_filter.cc
|
| @@ -44,6 +44,9 @@ bool TouchActionFilter::FilterGestureEvent(WebGestureEvent* gesture_event) {
|
| switch (gesture_event->type) {
|
| case WebInputEvent::GestureScrollBegin:
|
| DCHECK(!drop_scroll_gesture_events_);
|
| + DCHECK(!drop_pinch_gesture_events_);
|
| + drop_pinch_gesture_events_ =
|
| + (allowed_touch_action_ & TOUCH_ACTION_PINCH_ZOOM) == 0;
|
| drop_scroll_gesture_events_ = ShouldSuppressScroll(*gesture_event);
|
| return drop_scroll_gesture_events_;
|
|
|
| @@ -87,17 +90,6 @@ bool TouchActionFilter::FilterGestureEvent(WebGestureEvent* gesture_event) {
|
| return FilterScrollEndingGesture();
|
|
|
| case WebInputEvent::GesturePinchBegin:
|
| - DCHECK(!drop_pinch_gesture_events_);
|
| - if (allowed_touch_action_ & TOUCH_ACTION_PINCH_ZOOM) {
|
| - // Pinch events are always bracketed by scroll events, and the W3C
|
| - // standard touch-action provides no way to disable scrolling without
|
| - // also disabling pinching (validated by the IPC ENUM traits).
|
| - DCHECK(allowed_touch_action_ == TOUCH_ACTION_AUTO ||
|
| - allowed_touch_action_ == TOUCH_ACTION_MANIPULATION);
|
| - DCHECK(!drop_scroll_gesture_events_);
|
| - } else {
|
| - drop_pinch_gesture_events_ = true;
|
| - }
|
| return drop_pinch_gesture_events_;
|
|
|
| case WebInputEvent::GesturePinchUpdate:
|
| @@ -108,7 +100,6 @@ bool TouchActionFilter::FilterGestureEvent(WebGestureEvent* gesture_event) {
|
| drop_pinch_gesture_events_ = false;
|
| return true;
|
| }
|
| - DCHECK(!drop_scroll_gesture_events_);
|
| break;
|
|
|
| // The double tap gesture is a tap ending event. If a double tap gesture is
|
| @@ -156,7 +147,7 @@ bool TouchActionFilter::FilterGestureEvent(WebGestureEvent* gesture_event) {
|
| }
|
|
|
| bool TouchActionFilter::FilterScrollEndingGesture() {
|
| - DCHECK(!drop_pinch_gesture_events_);
|
| + drop_pinch_gesture_events_ = false;
|
| if (drop_scroll_gesture_events_) {
|
| drop_scroll_gesture_events_ = false;
|
| return true;
|
| @@ -188,9 +179,18 @@ void TouchActionFilter::ResetTouchAction() {
|
| bool TouchActionFilter::ShouldSuppressScroll(
|
| const blink::WebGestureEvent& gesture_event) {
|
| DCHECK_EQ(gesture_event.type, WebInputEvent::GestureScrollBegin);
|
| + // if there are two or more pointers then ensure that we allow panning
|
| + // if pinch-zoom is allowed. Determine if this should really occur in the
|
| + // GestureScrollBegin or not; see crbug.com/649034.
|
| + if (!drop_pinch_gesture_events_ &&
|
| + gesture_event.data.scrollBegin.pointerCount >= 2) {
|
| + return false;
|
| + }
|
| +
|
| if ((allowed_touch_action_ & TOUCH_ACTION_PAN) == TOUCH_ACTION_PAN)
|
| // All possible panning is enabled.
|
| return false;
|
| +
|
| if (!(allowed_touch_action_ & TOUCH_ACTION_PAN))
|
| // No panning is enabled.
|
| return true;
|
|
|