| Index: cc/trees/layer_tree_impl.cc
|
| diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
|
| index 27c7cb429e6c00a2681847ba4d1c60bda05ce399..29fd1a7f44546f79f022d2228ea735282b19d673 100644
|
| --- a/cc/trees/layer_tree_impl.cc
|
| +++ b/cc/trees/layer_tree_impl.cc
|
| @@ -2078,4 +2078,37 @@ void LayerTreeImpl::ResetAllChangeTracking() {
|
| property_trees_.ResetAllChangeTracking();
|
| }
|
|
|
| +void LayerTreeImpl::SetReflectedMainFrameState(
|
| + std::unique_ptr<ReflectedMainFrameState> reflected_main_frame_state) {
|
| + DCHECK(!IsActiveTree());
|
| + reflected_main_frame_state_ = std::move(reflected_main_frame_state);
|
| +}
|
| +
|
| +void LayerTreeImpl::ApplyReflectedMainFrameState() {
|
| + DCHECK(!IsActiveTree());
|
| +
|
| + if (reflected_main_frame_state_) {
|
| + for (const auto& scroll_update : reflected_main_frame_state_->scrolls) {
|
| + // The reflected scroll updates should have been sent only for layers
|
| + // in the main frame, and the updates are applied after the main frame is
|
| + // committed to the pending tree, so the layer must be present in the
|
| + // pending tree.
|
| + DCHECK(LayerById(scroll_update.layer_id));
|
| +
|
| + property_trees()->scroll_tree.AddUnappliedScrollOffsetDeltaToPendingTree(
|
| + scroll_update.layer_id,
|
| + gfx::ScrollOffset(scroll_update.scroll_delta));
|
| + DidUpdateScrollOffset(scroll_update.layer_id);
|
| + }
|
| +
|
| + float page_scale_delta = reflected_main_frame_state_->page_scale_delta;
|
| + if (page_scale_delta != 1.0f) {
|
| + page_scale_factor_->AddUnappliedDeltaToPendingBase(page_scale_delta);
|
| + DidUpdatePageScale();
|
| + }
|
| +
|
| + reflected_main_frame_state_ = nullptr;
|
| + }
|
| +}
|
| +
|
| } // namespace cc
|
|
|