| Index: cc/layers/layer_impl.cc
|
| diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc
|
| index 4865fe2bd2c4376e93b9248ac1f6e0bdb37a0780..95d1da7a61fb5c6a03a220a7355e591d0ea213e4 100644
|
| --- a/cc/layers/layer_impl.cc
|
| +++ b/cc/layers/layer_impl.cc
|
| @@ -265,11 +265,24 @@ gfx::Vector2dF LayerImpl::ScrollBy(gfx::Vector2dF scroll) {
|
| new_delta.SetToMax(min_delta);
|
| new_delta.SetToMin(max_delta);
|
| gfx::Vector2dF unscrolled = ScrollDelta() + scroll - new_delta;
|
| -
|
| SetScrollDelta(new_delta);
|
| return unscrolled;
|
| }
|
|
|
| +void LayerImpl::ApplySentScrollDeltas() {
|
| + // Pending tree never has sent scroll deltas
|
| + DCHECK(layer_tree_impl()->IsActiveTree());
|
| +
|
| + // Apply sent scroll deltas to scroll position / scroll delta as if the
|
| + // main thread had applied them and then committed those values.
|
| + gfx::Vector2dF previous_scroll_delta = ScrollDelta();
|
| + gfx::Vector2d previous_sent_scroll_delta = sent_scroll_delta_;
|
| +
|
| + SetSentScrollDelta(gfx::Vector2d());
|
| + SetScrollOffset(scroll_offset_ + previous_sent_scroll_delta);
|
| + SetScrollDelta(previous_scroll_delta - previous_sent_scroll_delta);
|
| +}
|
| +
|
| InputHandler::ScrollStatus LayerImpl::TryScroll(
|
| gfx::PointF screen_space_point,
|
| InputHandler::ScrollInputType type) const {
|
| @@ -893,8 +906,13 @@ void LayerImpl::SetScrollDelta(gfx::Vector2dF scroll_delta) {
|
| } else {
|
| scroll_delta_ = scroll_delta;
|
| }
|
| - NoteLayerPropertyChangedForSubtree();
|
|
|
| + DCHECK_GE(TotalScrollOffset().x(), 0);
|
| + DCHECK_GE(TotalScrollOffset().y(), 0);
|
| + DCHECK_LE(TotalScrollOffset().x(), max_scroll_offset_.x());
|
| + DCHECK_LE(TotalScrollOffset().y(), max_scroll_offset_.y());
|
| +
|
| + NoteLayerPropertyChangedForSubtree();
|
| UpdateScrollbarPositions();
|
| }
|
|
|
|
|