Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index ff314be36cba567af9beb0eb5d1a0de4e4ca688f..9509f5168fb48ddb19a0dc93e53f2b72254107ac 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -2147,6 +2147,12 @@ bool RenderWidget::DoesRecordFullLayer() const { |
} |
#endif |
+#if defined(OS_MACOSX) && !defined(OS_IOS) |
+bool RenderWidget::IsElasticOverscrollEnabled() const { |
+ return compositor_deps_->IsElasticOverscrollEnabled(); |
+} |
+#endif |
+ |
bool RenderWidget::CanComposeInline() { |
return true; |
} |
@@ -2215,6 +2221,12 @@ void RenderWidget::didOverscroll( |
const blink::WebFloatSize& accumulatedRootOverScroll, |
const blink::WebFloatPoint& position, |
const blink::WebFloatSize& velocity) { |
+ if (compositor_deps_->IsElasticOverscrollEnabled()) { |
+ unused_delta_on_wheel_overscroll_ = |
+ 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 +2301,13 @@ void RenderWidget::ObserveWheelEventAndResult( |
if (!compositor_deps_->IsElasticOverscrollEnabled()) |
jdduke (slow)
2015/06/25 23:55:45
With https://codereview.chromium.org/1209043002/,
|
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 = |
+ !unused_delta_on_wheel_overscroll_.IsZero(); |
+ scroll_result.unused_scroll_delta = unused_delta_on_wheel_overscroll_; |
+ unused_delta_on_wheel_overscroll_.set_x(0); |
+ unused_delta_on_wheel_overscroll_.set_y(0); |
RenderThreadImpl* render_thread = RenderThreadImpl::current(); |
InputHandlerManager* input_handler_manager = |