Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index ff314be36cba567af9beb0eb5d1a0de4e4ca688f..8921dcb83c10f97c635df6f75a82b667635d6adc 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -2215,6 +2215,12 @@ void RenderWidget::didOverscroll( |
const blink::WebFloatSize& accumulatedRootOverScroll, |
const blink::WebFloatPoint& position, |
const blink::WebFloatSize& velocity) { |
+ if (compositor_deps_->IsElasticOverscrollEnabled()) { |
+ latest_overscroll_delta_ = |
+ gfx::Vector2dF(-unusedDelta.width, -unusedDelta.height); |
+ return; |
+ } |
+ |
DidOverscrollParams params; |
// TODO(jdduke): Consider bundling the overscroll with the input event ack to |
// save an IPC. |
@@ -2289,19 +2295,12 @@ void RenderWidget::ObserveWheelEventAndResult( |
if (!compositor_deps_->IsElasticOverscrollEnabled()) |
return; |
- // Blink does not accurately compute scroll bubbling or overscroll. For now, |
- // assume that an unprocessed event was entirely an overscroll, and that a |
- // processed event was entirely scroll. |
- // TODO(ccameron): Retrieve an accurate scroll result from Blink. |
- // http://crbug.com/442859 |
cc::InputHandlerScrollResult scroll_result; |
- if (event_processed) { |
- scroll_result.did_scroll = true; |
- } else { |
- scroll_result.did_overscroll_root = true; |
- scroll_result.unused_scroll_delta = |
- gfx::Vector2dF(-wheel_event.deltaX, -wheel_event.deltaY); |
- } |
+ scroll_result.did_scroll = event_processed; |
+ scroll_result.did_overscroll_root = !latest_overscroll_delta_.IsZero(); |
+ scroll_result.unused_scroll_delta = latest_overscroll_delta_; |
+ latest_overscroll_delta_.set_x(0); |
+ latest_overscroll_delta_.set_y(0); |
RenderThreadImpl* render_thread = RenderThreadImpl::current(); |
InputHandlerManager* input_handler_manager = |