| 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
 | 
| 
 |