| Index: cc/trees/layer_tree_impl.cc
|
| diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
|
| index 33e17df36dbcd6eccc72e0f565d7195437c20185..260ce711a3537727afd7a4b7c2d85ec534bf39ea 100644
|
| --- a/cc/trees/layer_tree_impl.cc
|
| +++ b/cc/trees/layer_tree_impl.cc
|
| @@ -139,16 +139,24 @@ void LayerTreeImpl::RecreateTileResources() {
|
| }
|
|
|
| bool LayerTreeImpl::IsViewportLayerId(int id) const {
|
| - if (id == inner_viewport_scroll_layer_id_ ||
|
| - id == outer_viewport_scroll_layer_id_)
|
| - return true;
|
| +#if DCHECK_IS_ON()
|
| + // Ensure the LayerImpl viewport layer types correspond to the LayerTreeImpl's
|
| + // viewport layers.
|
| + if (id == inner_viewport_scroll_layer_id_)
|
| + DCHECK(LayerById(id)->viewport_layer_type() == INNER_VIEWPORT_SCROLL);
|
| + if (id == outer_viewport_scroll_layer_id_)
|
| + DCHECK(LayerById(id)->viewport_layer_type() == OUTER_VIEWPORT_SCROLL);
|
| if (InnerViewportContainerLayer() &&
|
| id == InnerViewportContainerLayer()->id())
|
| - return true;
|
| + DCHECK(InnerViewportContainerLayer()->viewport_layer_type() ==
|
| + INNER_VIEWPORT_CONTAINER);
|
| if (OuterViewportContainerLayer() &&
|
| id == OuterViewportContainerLayer()->id())
|
| - return true;
|
| -
|
| + DCHECK(OuterViewportContainerLayer()->viewport_layer_type() ==
|
| + OUTER_VIEWPORT_CONTAINER);
|
| +#endif
|
| + if (auto* layer = LayerById(id))
|
| + return layer->viewport_layer_type() != NOT_VIEWPORT_LAYER;
|
| return false;
|
| }
|
|
|
| @@ -410,6 +418,12 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) {
|
| target_tree->set_bottom_controls_height(bottom_controls_height_);
|
| target_tree->PushBrowserControls(nullptr);
|
|
|
| + // The page scale factor update can affect scrolling which requires that
|
| + // these ids are set, so this must be before PushPageScaleFactorAndLimits.
|
| + target_tree->SetViewportLayersFromIds(
|
| + overscroll_elasticity_layer_id_, page_scale_layer_id_,
|
| + inner_viewport_scroll_layer_id_, outer_viewport_scroll_layer_id_);
|
| +
|
| // Active tree already shares the page_scale_factor object with pending
|
| // tree so only the limits need to be provided.
|
| target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(),
|
| @@ -426,10 +440,6 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) {
|
| target_tree->pending_page_scale_animation_ =
|
| std::move(pending_page_scale_animation_);
|
|
|
| - target_tree->SetViewportLayersFromIds(
|
| - overscroll_elasticity_layer_id_, page_scale_layer_id_,
|
| - inner_viewport_scroll_layer_id_, outer_viewport_scroll_layer_id_);
|
| -
|
| target_tree->RegisterSelection(selection_);
|
|
|
| // This should match the property synchronization in
|
| @@ -974,13 +984,26 @@ void LayerTreeImpl::SetViewportLayersFromIds(
|
| page_scale_layer_id_ = page_scale_layer_id;
|
| inner_viewport_scroll_layer_id_ = inner_viewport_scroll_layer_id;
|
| outer_viewport_scroll_layer_id_ = outer_viewport_scroll_layer_id;
|
| +
|
| + UpdateViewportLayerTypes();
|
| }
|
|
|
| void LayerTreeImpl::ClearViewportLayers() {
|
| - overscroll_elasticity_layer_id_ = Layer::INVALID_ID;
|
| - page_scale_layer_id_ = Layer::INVALID_ID;
|
| - inner_viewport_scroll_layer_id_ = Layer::INVALID_ID;
|
| - outer_viewport_scroll_layer_id_ = Layer::INVALID_ID;
|
| + SetViewportLayersFromIds(Layer::INVALID_ID, Layer::INVALID_ID,
|
| + Layer::INVALID_ID, Layer::INVALID_ID);
|
| +}
|
| +
|
| +void LayerTreeImpl::UpdateViewportLayerTypes() {
|
| + if (auto* inner_scroll = LayerById(inner_viewport_scroll_layer_id_)) {
|
| + inner_scroll->SetViewportLayerType(INNER_VIEWPORT_SCROLL);
|
| + if (auto* inner_container = inner_scroll->scroll_clip_layer())
|
| + inner_container->SetViewportLayerType(INNER_VIEWPORT_CONTAINER);
|
| + }
|
| + if (auto* outer_scroll = LayerById(outer_viewport_scroll_layer_id_)) {
|
| + outer_scroll->SetViewportLayerType(OUTER_VIEWPORT_SCROLL);
|
| + if (auto* outer_container = outer_scroll->scroll_clip_layer())
|
| + outer_container->SetViewportLayerType(OUTER_VIEWPORT_CONTAINER);
|
| + }
|
| }
|
|
|
| // For unit tests, we use the layer's id as its element id.
|
|
|