| Index: cc/trees/layer_tree_host.cc
|
| diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
|
| index b2c07da12191112f979efef8c435d386c240aae6..3898156776037a9420ffc8a9909eda0a49f3bcc9 100644
|
| --- a/cc/trees/layer_tree_host.cc
|
| +++ b/cc/trees/layer_tree_host.cc
|
| @@ -1058,9 +1058,6 @@ void LayerTreeHost::PaintLayerContents(
|
| }
|
|
|
| void LayerTreeHost::ApplyScrollAndScale(ScrollAndScaleSet* info) {
|
| - if (!root_layer_.get())
|
| - return;
|
| -
|
| ScopedPtrVector<SwapPromise>::iterator it = info->swap_promises.begin();
|
| for (; it != info->swap_promises.end(); ++it) {
|
| scoped_ptr<SwapPromise> swap_promise(info->swap_promises.take(it));
|
| @@ -1074,19 +1071,21 @@ void LayerTreeHost::ApplyScrollAndScale(ScrollAndScaleSet* info) {
|
| gfx::Vector2d inner_viewport_scroll_delta;
|
| gfx::Vector2d outer_viewport_scroll_delta;
|
|
|
| - for (size_t i = 0; i < info->scrolls.size(); ++i) {
|
| - Layer* layer = LayerTreeHostCommon::FindLayerInSubtree(
|
| - root_layer_.get(), info->scrolls[i].layer_id);
|
| - if (!layer)
|
| - continue;
|
| - if (layer == outer_viewport_scroll_layer_.get()) {
|
| - outer_viewport_scroll_delta += info->scrolls[i].scroll_delta;
|
| - } else if (layer == inner_viewport_scroll_layer_.get()) {
|
| - inner_viewport_scroll_delta += info->scrolls[i].scroll_delta;
|
| - } else {
|
| - layer->SetScrollOffsetFromImplSide(
|
| - gfx::ScrollOffsetWithDelta(layer->scroll_offset(),
|
| - info->scrolls[i].scroll_delta));
|
| + if (root_layer_.get()) {
|
| + for (size_t i = 0; i < info->scrolls.size(); ++i) {
|
| + Layer* layer = LayerTreeHostCommon::FindLayerInSubtree(
|
| + root_layer_.get(), info->scrolls[i].layer_id);
|
| + if (!layer)
|
| + continue;
|
| + if (layer == outer_viewport_scroll_layer_.get()) {
|
| + outer_viewport_scroll_delta += info->scrolls[i].scroll_delta;
|
| + } else if (layer == inner_viewport_scroll_layer_.get()) {
|
| + inner_viewport_scroll_delta += info->scrolls[i].scroll_delta;
|
| + } else {
|
| + layer->SetScrollOffsetFromImplSide(
|
| + gfx::ScrollOffsetWithDelta(layer->scroll_offset(),
|
| + info->scrolls[i].scroll_delta));
|
| + }
|
| }
|
| }
|
|
|
| @@ -1094,18 +1093,16 @@ void LayerTreeHost::ApplyScrollAndScale(ScrollAndScaleSet* info) {
|
| !outer_viewport_scroll_delta.IsZero() ||
|
| info->page_scale_delta != 1.f ||
|
| info->top_controls_delta) {
|
| - // SetScrollOffsetFromImplSide above could have destroyed the tree,
|
| - // so re-get this layer before doing anything to it.
|
| -
|
| - DCHECK(inner_viewport_scroll_layer_.get()); // We should always have this.
|
| -
|
| // Preemptively apply the scroll offset and scale delta here before sending
|
| // it to the client. If the client comes back and sets it to the same
|
| // value, then the layer can early out without needing a full commit.
|
| - inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide(
|
| - gfx::ScrollOffsetWithDelta(
|
| - inner_viewport_scroll_layer_->scroll_offset(),
|
| - inner_viewport_scroll_delta));
|
| + if (inner_viewport_scroll_layer_.get()) {
|
| + inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide(
|
| + gfx::ScrollOffsetWithDelta(
|
| + inner_viewport_scroll_layer_->scroll_offset(),
|
| + inner_viewport_scroll_delta));
|
| + }
|
| +
|
| if (outer_viewport_scroll_layer_.get()) {
|
| outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide(
|
| gfx::ScrollOffsetWithDelta(
|
| @@ -1114,7 +1111,7 @@ void LayerTreeHost::ApplyScrollAndScale(ScrollAndScaleSet* info) {
|
| }
|
|
|
| ApplyPageScaleDeltaFromImplSide(info->page_scale_delta);
|
| - if (!outer_viewport_scroll_layer_.get()) {
|
| + if (!settings_.use_pinch_virtual_viewport) {
|
| client_->ApplyViewportDeltas(
|
| inner_viewport_scroll_delta + outer_viewport_scroll_delta,
|
| info->page_scale_delta,
|
|
|