| Index: cc/layer_tree_impl.cc
|
| diff --git a/cc/layer_tree_impl.cc b/cc/layer_tree_impl.cc
|
| index f7e59b44a563ed2dbadbe4d387bf8e2ea5aad33e..7107b0c4e467752926fecfeeeb34ac581e4e4258 100644
|
| --- a/cc/layer_tree_impl.cc
|
| +++ b/cc/layer_tree_impl.cc
|
| @@ -94,25 +94,31 @@ void LayerTreeImpl::ClearCurrentlyScrollingLayer() {
|
| scrolling_layer_id_from_previous_tree_ = 0;
|
| }
|
|
|
| -void LayerTreeImpl::UpdateMaxScrollOffset() {
|
| - if (!root_scroll_layer_ || !root_scroll_layer_->children().size())
|
| - return;
|
| -
|
| +gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const {
|
| gfx::SizeF view_bounds;
|
| - if (!settings().pageScalePinchZoomEnabled) {
|
| - view_bounds = device_viewport_size();
|
| - if (LayerImpl* clip_layer = root_scroll_layer_->parent()) {
|
| - // Compensate for non-overlay scrollbars.
|
| - if (clip_layer->masksToBounds())
|
| - view_bounds = gfx::ScaleSize(clip_layer->bounds(), device_scale_factor());
|
| - }
|
| - view_bounds.Scale(1 / pinch_zoom_viewport().page_scale_delta());
|
| + // The clip layer should be used for scrolling bounds if available since it
|
| + // adjusts for non-overlay scrollbars. Otherwise, fall back to our knowledge
|
| + // of the physical viewport size.
|
| + LayerImpl* clip_layer = NULL;
|
| + if (root_scroll_layer_)
|
| + clip_layer = root_scroll_layer_->parent();
|
| + if (clip_layer && clip_layer->masksToBounds()) {
|
| + view_bounds = clip_layer->bounds();
|
| } else {
|
| - view_bounds = layout_viewport_size();
|
| + view_bounds = gfx::ScaleSize(device_viewport_size(),
|
| + 1 / device_scale_factor());
|
| }
|
| + view_bounds.Scale(1 / pinch_zoom_viewport().total_page_scale_factor());
|
| +
|
| + return view_bounds;
|
| +}
|
| +
|
| +void LayerTreeImpl::UpdateMaxScrollOffset() {
|
| + if (!root_scroll_layer_ || !root_scroll_layer_->children().size())
|
| + return;
|
|
|
| gfx::Vector2dF max_scroll = gfx::Rect(ScrollableSize()).bottom_right() -
|
| - gfx::RectF(view_bounds).bottom_right();
|
| + gfx::RectF(ScrollableViewportSize()).bottom_right();
|
|
|
| // The viewport may be larger than the contents in some cases, such as
|
| // having a vertical scrollbar but no horizontal overflow.
|
|
|