| 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 b12f283c3e107fa018cbb7d06d0007c3a128b011..75523f1e7c2d63ff68125cf808e5d3e0abc9a243 100644
|
| --- a/content/browser/renderer_host/input/touch_action_filter.cc
|
| +++ b/content/browser/renderer_host/input/touch_action_filter.cc
|
| @@ -87,8 +87,7 @@ bool TouchActionFilter::FilterGestureEvent(WebGestureEvent* gesture_event) {
|
|
|
| case WebInputEvent::GesturePinchBegin:
|
| DCHECK(!drop_pinch_gesture_events_);
|
| - if (allowed_touch_action_ == TOUCH_ACTION_AUTO ||
|
| - allowed_touch_action_ & TOUCH_ACTION_PINCH_ZOOM) {
|
| + 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).
|
| @@ -124,7 +123,7 @@ bool TouchActionFilter::FilterGestureEvent(WebGestureEvent* gesture_event) {
|
| case WebInputEvent::GestureTapUnconfirmed:
|
| DCHECK_EQ(1, gesture_event->data.tap.tapCount);
|
| allow_current_double_tap_event_ =
|
| - allowed_touch_action_ == TOUCH_ACTION_AUTO;
|
| + (allowed_touch_action_ & TOUCH_ACTION_DOUBLE_TAP_ZOOM) != 0;
|
| if (!allow_current_double_tap_event_) {
|
| gesture_event->type = WebInputEvent::GestureTap;
|
| drop_current_tap_ending_event_ = true;
|
| @@ -133,7 +132,7 @@ bool TouchActionFilter::FilterGestureEvent(WebGestureEvent* gesture_event) {
|
|
|
| case WebInputEvent::GestureTap:
|
| allow_current_double_tap_event_ =
|
| - allowed_touch_action_ == TOUCH_ACTION_AUTO;
|
| + (allowed_touch_action_ & TOUCH_ACTION_DOUBLE_TAP_ZOOM) != 0;
|
| // Fall through.
|
| case WebInputEvent::GestureTapCancel:
|
| if (drop_current_tap_ending_event_) {
|
| @@ -176,7 +175,7 @@ void TouchActionFilter::OnSetTouchAction(TouchAction touch_action) {
|
| // down "at once" will be deterministic.
|
| // 2. Only subtractive - eg. can't trigger scrolling on a element that
|
| // otherwise has scrolling disabling by the addition of a finger.
|
| - allowed_touch_action_ = Intersect(allowed_touch_action_, touch_action);
|
| + allowed_touch_action_ &= touch_action;
|
| }
|
|
|
| void TouchActionFilter::ResetTouchAction() {
|
| @@ -188,9 +187,11 @@ void TouchActionFilter::ResetTouchAction() {
|
| bool TouchActionFilter::ShouldSuppressScroll(
|
| const blink::WebGestureEvent& gesture_event) {
|
| DCHECK_EQ(gesture_event.type, WebInputEvent::GestureScrollBegin);
|
| - if (allowed_touch_action_ == TOUCH_ACTION_AUTO)
|
| + if ((allowed_touch_action_ & TOUCH_ACTION_PAN) == TOUCH_ACTION_PAN)
|
| + // All possible panning is enabled.
|
| return false;
|
| - if (allowed_touch_action_ == TOUCH_ACTION_NONE)
|
| + if (!(allowed_touch_action_ & TOUCH_ACTION_PAN))
|
| + // No panning is enabled.
|
| return true;
|
|
|
| // If there's no hint or it's perfectly diagonal, then allow the scroll.
|
| @@ -224,18 +225,4 @@ bool TouchActionFilter::ShouldSuppressScroll(
|
| }
|
| }
|
|
|
| -TouchAction TouchActionFilter::Intersect(TouchAction ta1, TouchAction ta2) {
|
| - if (ta1 == TOUCH_ACTION_NONE || ta2 == TOUCH_ACTION_NONE)
|
| - return TOUCH_ACTION_NONE;
|
| - if (ta1 == TOUCH_ACTION_AUTO)
|
| - return ta2;
|
| - if (ta2 == TOUCH_ACTION_AUTO)
|
| - return ta1;
|
| -
|
| - // Only the true flags are left - take their intersection.
|
| - if (!(ta1 & ta2))
|
| - return TOUCH_ACTION_NONE;
|
| - return static_cast<TouchAction>(ta1 & ta2);
|
| -}
|
| -
|
| } // namespace content
|
|
|