| Index: cc/trees/layer_tree_host_impl_unittest.cc
|
| diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
|
| index aab3af45236f9e055ae53ad4f8cdf838c4c1c920..af8b817f649a5b0a9cd081f6197420fd9332886f 100644
|
| --- a/cc/trees/layer_tree_host_impl_unittest.cc
|
| +++ b/cc/trees/layer_tree_host_impl_unittest.cc
|
| @@ -4155,7 +4155,7 @@
|
| ->ScrollBegin(BeginState(gfx::Point()).get(),
|
| InputHandler::TOUCHSCREEN)
|
| .thread);
|
| - EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), outer_scroll);
|
| + EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), inner_scroll);
|
|
|
| host_impl_->ScrollBy(
|
| UpdateState(gfx::Point(), gfx::Vector2dF(0.f, -50.f)).get());
|
| @@ -4611,7 +4611,7 @@
|
| .thread);
|
| host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
|
|
|
| - EXPECT_EQ(host_impl_->OuterViewportScrollLayer(),
|
| + EXPECT_EQ(host_impl_->InnerViewportScrollLayer(),
|
| host_impl_->CurrentlyScrollingLayer());
|
| host_impl_->ScrollEnd(EndState().get());
|
|
|
| @@ -4628,7 +4628,7 @@
|
| host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
|
|
|
| EXPECT_EQ(0, host_impl_->top_controls_manager()->ContentTopOffset());
|
| - EXPECT_EQ(host_impl_->OuterViewportScrollLayer(),
|
| + EXPECT_EQ(host_impl_->InnerViewportScrollLayer(),
|
| host_impl_->CurrentlyScrollingLayer());
|
|
|
| host_impl_->ScrollEnd(EndState().get());
|
| @@ -5437,26 +5437,17 @@
|
| gfx::Size surface_size(10, 10);
|
| std::unique_ptr<LayerImpl> root_ptr =
|
| LayerImpl::Create(host_impl_->active_tree(), 1);
|
| - std::unique_ptr<LayerImpl> inner_clip =
|
| + std::unique_ptr<LayerImpl> root_clip =
|
| LayerImpl::Create(host_impl_->active_tree(), 2);
|
| - std::unique_ptr<LayerImpl> inner_scroll =
|
| - CreateScrollableLayer(3, surface_size, inner_clip.get());
|
| - std::unique_ptr<LayerImpl> outer_clip =
|
| - LayerImpl::Create(host_impl_->active_tree(), 7);
|
| - std::unique_ptr<LayerImpl> outer_scroll =
|
| - CreateScrollableLayer(8, surface_size, outer_clip.get());
|
| - inner_clip->test_properties()->force_render_surface = true;
|
| - inner_scroll->test_properties()->is_container_for_fixed_position_layers =
|
| - true;
|
| - outer_scroll->test_properties()->is_container_for_fixed_position_layers =
|
| - true;
|
| - outer_clip->test_properties()->AddChild(std::move(outer_scroll));
|
| - inner_scroll->test_properties()->AddChild(std::move(outer_clip));
|
| - inner_clip->test_properties()->AddChild(std::move(inner_scroll));
|
| - root_ptr->test_properties()->AddChild(std::move(inner_clip));
|
| + std::unique_ptr<LayerImpl> root_scroll =
|
| + CreateScrollableLayer(3, surface_size, root_clip.get());
|
| + root_clip->test_properties()->force_render_surface = true;
|
| + root_scroll->test_properties()->is_container_for_fixed_position_layers = true;
|
| + root_clip->test_properties()->AddChild(std::move(root_scroll));
|
| + root_ptr->test_properties()->AddChild(std::move(root_clip));
|
| host_impl_->active_tree()->SetRootLayerForTesting(std::move(root_ptr));
|
| host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 3,
|
| - 8);
|
| + Layer::INVALID_ID);
|
| host_impl_->active_tree()->BuildPropertyTreesForTesting();
|
| host_impl_->active_tree()->DidBecomeActive();
|
|
|
| @@ -5469,27 +5460,19 @@
|
| host_impl_->active_tree()->DetachLayers();
|
| std::unique_ptr<LayerImpl> root_ptr2 =
|
| LayerImpl::Create(host_impl_->active_tree(), 4);
|
| - std::unique_ptr<LayerImpl> inner_clip2 =
|
| + std::unique_ptr<LayerImpl> root_clip2 =
|
| LayerImpl::Create(host_impl_->active_tree(), 5);
|
| - std::unique_ptr<LayerImpl> inner_scroll2 =
|
| - CreateScrollableLayer(6, surface_size, inner_clip2.get());
|
| - std::unique_ptr<LayerImpl> outer_clip2 =
|
| - LayerImpl::Create(host_impl_->active_tree(), 9);
|
| - std::unique_ptr<LayerImpl> outer_scroll2 =
|
| - CreateScrollableLayer(10, surface_size, outer_clip2.get());
|
| - inner_scroll2->test_properties()->is_container_for_fixed_position_layers =
|
| + std::unique_ptr<LayerImpl> root_scroll2 =
|
| + CreateScrollableLayer(6, surface_size, root_clip2.get());
|
| + root_scroll2->test_properties()->is_container_for_fixed_position_layers =
|
| true;
|
| - outer_scroll2->test_properties()->is_container_for_fixed_position_layers =
|
| - true;
|
| - outer_clip2->test_properties()->AddChild(std::move(outer_scroll2));
|
| - inner_scroll2->test_properties()->AddChild(std::move(outer_clip2));
|
| - inner_clip2->test_properties()->AddChild(std::move(inner_scroll2));
|
| - inner_clip2->test_properties()->force_render_surface = true;
|
| - root_ptr2->test_properties()->AddChild(std::move(inner_clip2));
|
| + root_clip2->test_properties()->AddChild(std::move(root_scroll2));
|
| + root_clip2->test_properties()->force_render_surface = true;
|
| + root_ptr2->test_properties()->AddChild(std::move(root_clip2));
|
| host_impl_->active_tree()->SetRootLayerForTesting(std::move(root_ptr2));
|
| host_impl_->active_tree()->BuildPropertyTreesForTesting();
|
| host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 4, 6,
|
| - 10);
|
| + Layer::INVALID_ID);
|
| host_impl_->active_tree()->DidBecomeActive();
|
|
|
| // Scrolling should still work even though we did not draw yet.
|
| @@ -6335,15 +6318,10 @@
|
| const gfx::Size viewport_size(50, 50);
|
| CreateBasicVirtualViewportLayers(viewport_size, content_size);
|
|
|
| - host_impl_->active_tree()
|
| - ->InnerViewportScrollLayer()
|
| - ->set_main_thread_scrolling_reasons(
|
| - MainThreadScrollingReason::kThreadedScrollingDisabled);
|
| - host_impl_->active_tree()
|
| - ->OuterViewportScrollLayer()
|
| - ->set_main_thread_scrolling_reasons(
|
| - MainThreadScrollingReason::kThreadedScrollingDisabled);
|
| -
|
| + LayerImpl* scroll_layer =
|
| + host_impl_->active_tree()->InnerViewportScrollLayer();
|
| + scroll_layer->set_main_thread_scrolling_reasons(
|
| + MainThreadScrollingReason::kThreadedScrollingDisabled);
|
| host_impl_->active_tree()->BuildPropertyTreesForTesting();
|
|
|
| DrawFrame();
|
| @@ -6496,180 +6474,6 @@
|
| outer_scroll_layer->CurrentScrollOffset());
|
| EXPECT_VECTOR_EQ(gfx::Vector2dF(50.f, 50.f),
|
| scroll_layer->CurrentScrollOffset());
|
| - }
|
| -}
|
| -// Test that scrolls chain correctly when a child scroller on the page (e.g. a
|
| -// scrolling div) is set as the outer viewport but scrolls start from a layer
|
| -// that's not a descendant of the outer viewport. This happens in the
|
| -// rootScroller proposal.
|
| -TEST_F(LayerTreeHostImplTest, RootScrollerScrollNonDescendant) {
|
| - const gfx::Size content_size(300, 300);
|
| - const gfx::Size viewport_size(300, 300);
|
| -
|
| - LayerTreeImpl* layer_tree_impl = host_impl_->active_tree();
|
| -
|
| - LayerImpl* content_layer =
|
| - CreateBasicVirtualViewportLayers(viewport_size, content_size);
|
| - LayerImpl* inner_scroll_layer = host_impl_->InnerViewportScrollLayer();
|
| -
|
| - LayerImpl* outer_scroll_layer = nullptr;
|
| - LayerImpl* sibling_scroll_layer = nullptr;
|
| -
|
| - // Initialization: Add a scrolling layer, simulating an ordinary DIV, to be
|
| - // set as the outer viewport. Add a sibling scrolling layer that isn't a child
|
| - // of the outer viewport scroll layer.
|
| - {
|
| - std::unique_ptr<LayerImpl> clip = LayerImpl::Create(layer_tree_impl, 10);
|
| - clip->SetBounds(content_size);
|
| - clip->SetPosition(gfx::PointF(100, 100));
|
| -
|
| - std::unique_ptr<LayerImpl> scroll = LayerImpl::Create(layer_tree_impl, 11);
|
| - scroll->SetBounds(gfx::Size(1200, 1200));
|
| - scroll->SetScrollClipLayer(clip->id());
|
| - scroll->SetDrawsContent(true);
|
| -
|
| - outer_scroll_layer = scroll.get();
|
| -
|
| - clip->test_properties()->AddChild(std::move(scroll));
|
| - content_layer->test_properties()->AddChild(std::move(clip));
|
| -
|
| - // Create the non-descendant.
|
| - std::unique_ptr<LayerImpl> clip2 = LayerImpl::Create(layer_tree_impl, 14);
|
| - clip2->SetBounds(gfx::Size(600, 600));
|
| - clip2->SetPosition(gfx::PointF());
|
| -
|
| - std::unique_ptr<LayerImpl> scroll2 = LayerImpl::Create(layer_tree_impl, 15);
|
| - scroll2->SetBounds(gfx::Size(1200, 1200));
|
| - scroll2->SetScrollClipLayer(clip2->id());
|
| - scroll2->SetDrawsContent(true);
|
| -
|
| - sibling_scroll_layer = scroll2.get();
|
| -
|
| - clip2->test_properties()->AddChild(std::move(scroll2));
|
| - content_layer->test_properties()->AddChild(std::move(clip2));
|
| -
|
| - layer_tree_impl->SetViewportLayersFromIds(
|
| - Layer::INVALID_ID, layer_tree_impl->PageScaleLayer()->id(),
|
| - inner_scroll_layer->id(), outer_scroll_layer->id());
|
| - layer_tree_impl->BuildPropertyTreesForTesting();
|
| -
|
| - ASSERT_EQ(outer_scroll_layer, layer_tree_impl->OuterViewportScrollLayer());
|
| - }
|
| -
|
| - // Scrolls should target the non-descendant scroller. Chaining should not
|
| - // propagate to the outer viewport scroll layer.
|
| - {
|
| - // This should fully scroll the layer.
|
| - host_impl_->ScrollBegin(BeginState(gfx::Point(0, 0)).get(),
|
| - InputHandler::TOUCHSCREEN);
|
| - host_impl_->ScrollBy(
|
| - UpdateState(gfx::Point(0, 0), gfx::Vector2dF(1000.f, 1000.f)).get());
|
| - host_impl_->ScrollEnd(EndState().get());
|
| -
|
| - EXPECT_VECTOR_EQ(gfx::Vector2dF(600.f, 600.f),
|
| - sibling_scroll_layer->CurrentScrollOffset());
|
| - EXPECT_VECTOR_EQ(gfx::Vector2dF(),
|
| - outer_scroll_layer->CurrentScrollOffset());
|
| -
|
| - // Scrolling now should chain up but, since the outer viewport is a sibling
|
| - // rather than an ancestor, we shouldn't chain to it.
|
| - host_impl_->ScrollBegin(BeginState(gfx::Point(0, 0)).get(),
|
| - InputHandler::TOUCHSCREEN);
|
| - host_impl_->ScrollBy(
|
| - UpdateState(gfx::Point(0, 0), gfx::Vector2dF(1000.f, 1000.f)).get());
|
| - host_impl_->ScrollEnd(EndState().get());
|
| -
|
| - EXPECT_VECTOR_EQ(gfx::Vector2dF(600.f, 600.f),
|
| - sibling_scroll_layer->CurrentScrollOffset());
|
| - EXPECT_VECTOR_EQ(gfx::Vector2dF(),
|
| - outer_scroll_layer->CurrentScrollOffset());
|
| - }
|
| -
|
| - float min_page_scale = 1.f, max_page_scale = 4.f;
|
| - float page_scale_factor = 1.f;
|
| - host_impl_->active_tree()->PushPageScaleFromMainThread(
|
| - page_scale_factor, min_page_scale, max_page_scale);
|
| -
|
| - gfx::Vector2dF viewport_size_vec(viewport_size.width(),
|
| - viewport_size.height());
|
| -
|
| - // Reset the scroll offset.
|
| - sibling_scroll_layer->SetCurrentScrollOffset(gfx::ScrollOffset());
|
| -
|
| - // Now pinch-zoom in. Anchoring should cause scrolling only on the inner
|
| - // viewport layer.
|
| - {
|
| - // Pinch in to the middle of the screen. The inner viewport should scroll
|
| - // to keep the gesture anchored but not the outer or the sibling scroller.
|
| - page_scale_factor = 2.f;
|
| - gfx::Point anchor(viewport_size.width() / 2, viewport_size.height() / 2);
|
| - host_impl_->ScrollBegin(BeginState(anchor).get(),
|
| - InputHandler::TOUCHSCREEN);
|
| - host_impl_->PinchGestureBegin();
|
| - host_impl_->PinchGestureUpdate(page_scale_factor, anchor);
|
| - host_impl_->PinchGestureEnd();
|
| -
|
| - EXPECT_VECTOR_EQ(gfx::Vector2dF(anchor.x() / 2, anchor.y() / 2),
|
| - inner_scroll_layer->CurrentScrollOffset());
|
| -
|
| - host_impl_->ScrollBy(UpdateState(anchor, viewport_size_vec).get());
|
| -
|
| - EXPECT_VECTOR_EQ(ScaleVector2d(viewport_size_vec, 1.f / page_scale_factor),
|
| - inner_scroll_layer->CurrentScrollOffset());
|
| - // TODO(bokan): This doesn't yet work but we'll probably want to fix this
|
| - // at some point.
|
| - // EXPECT_VECTOR_EQ(
|
| - // gfx::Vector2dF(),
|
| - // outer_scroll_layer->CurrentScrollOffset());
|
| - EXPECT_VECTOR_EQ(gfx::Vector2dF(),
|
| - sibling_scroll_layer->CurrentScrollOffset());
|
| -
|
| - host_impl_->ScrollEnd(EndState().get());
|
| - }
|
| -
|
| - // Reset the scroll offsets
|
| - sibling_scroll_layer->SetCurrentScrollOffset(gfx::ScrollOffset());
|
| - inner_scroll_layer->SetCurrentScrollOffset(gfx::ScrollOffset());
|
| - outer_scroll_layer->SetCurrentScrollOffset(gfx::ScrollOffset());
|
| -
|
| - // Scrolls over the sibling while pinched in should scroll the sibling first,
|
| - // but then chain up to the inner viewport so that the user can still pan
|
| - // around. The outer viewport should be unaffected.
|
| - {
|
| - // This should fully scroll the sibling but, because we latch to the
|
| - // scroller, it shouldn't chain up to the inner viewport yet.
|
| - host_impl_->ScrollBegin(BeginState(gfx::Point(0, 0)).get(),
|
| - InputHandler::TOUCHSCREEN);
|
| - host_impl_->ScrollBy(
|
| - UpdateState(gfx::Point(0, 0), gfx::Vector2dF(2000.f, 2000.f)).get());
|
| - host_impl_->ScrollEnd(EndState().get());
|
| -
|
| - EXPECT_VECTOR_EQ(gfx::Vector2dF(600.f, 600.f),
|
| - sibling_scroll_layer->CurrentScrollOffset());
|
| - EXPECT_VECTOR_EQ(gfx::Vector2dF(),
|
| - inner_scroll_layer->CurrentScrollOffset());
|
| -
|
| - // Scrolling now should chain up to the inner viewport.
|
| - host_impl_->ScrollBegin(BeginState(gfx::Point(0, 0)).get(),
|
| - InputHandler::TOUCHSCREEN);
|
| - host_impl_->ScrollBy(
|
| - UpdateState(gfx::Point(0, 0), gfx::Vector2dF(2000.f, 2000.f)).get());
|
| - host_impl_->ScrollEnd(EndState().get());
|
| -
|
| - EXPECT_VECTOR_EQ(ScaleVector2d(viewport_size_vec, 1 / page_scale_factor),
|
| - inner_scroll_layer->CurrentScrollOffset());
|
| - EXPECT_VECTOR_EQ(gfx::Vector2dF(),
|
| - outer_scroll_layer->CurrentScrollOffset());
|
| -
|
| - // No more scrolling should be possible.
|
| - host_impl_->ScrollBegin(BeginState(gfx::Point(0, 0)).get(),
|
| - InputHandler::TOUCHSCREEN);
|
| - host_impl_->ScrollBy(
|
| - UpdateState(gfx::Point(0, 0), gfx::Vector2dF(2000.f, 2000.f)).get());
|
| - host_impl_->ScrollEnd(EndState().get());
|
| -
|
| - EXPECT_VECTOR_EQ(gfx::Vector2dF(),
|
| - outer_scroll_layer->CurrentScrollOffset());
|
| }
|
| }
|
|
|
| @@ -8573,13 +8377,13 @@
|
| // any layer that is a drawn RSLL member, then we can ignore the hit.
|
| //
|
| // Why SCROLL_STARTED? In this case, it's because we've bubbled out and
|
| - // started scrolling the viewport.
|
| + // started scrolling the inner viewport.
|
| EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
|
| host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
|
| InputHandler::WHEEL)
|
| .thread);
|
|
|
| - EXPECT_EQ(117, host_impl_->CurrentlyScrollingLayer()->id());
|
| + EXPECT_EQ(2, host_impl_->CurrentlyScrollingLayer()->id());
|
| }
|
|
|
| TEST_F(LayerTreeHostImplTest, ScrollInvisibleScrollerWithVisibleDescendent) {
|
| @@ -9559,16 +9363,16 @@
|
| ->ScrollBegin(BeginState(gfx::Point()).get(),
|
| InputHandler::TOUCHSCREEN)
|
| .thread);
|
| - EXPECT_EQ(outer_scroll, host_impl_->CurrentlyScrollingLayer());
|
| + EXPECT_EQ(inner_scroll, host_impl_->CurrentlyScrollingLayer());
|
| EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
|
| host_impl_->FlingScrollBegin().thread);
|
| - EXPECT_EQ(outer_scroll, host_impl_->CurrentlyScrollingLayer());
|
| + EXPECT_EQ(inner_scroll, host_impl_->CurrentlyScrollingLayer());
|
|
|
| gfx::Vector2d scroll_delta(inner_viewport.width() / 2.f,
|
| inner_viewport.height() / 2.f);
|
| host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
|
| inner_expected += gfx::Vector2dF(scroll_delta.x(), scroll_delta.y());
|
| - EXPECT_EQ(outer_scroll, host_impl_->CurrentlyScrollingLayer());
|
| + EXPECT_EQ(inner_scroll, host_impl_->CurrentlyScrollingLayer());
|
|
|
| host_impl_->ScrollEnd(EndState().get());
|
| host_impl_->ClearCurrentlyScrollingLayerForTesting();
|
| @@ -9583,18 +9387,18 @@
|
| ->ScrollBegin(BeginState(gfx::Point()).get(),
|
| InputHandler::TOUCHSCREEN)
|
| .thread);
|
| - EXPECT_EQ(outer_scroll, host_impl_->CurrentlyScrollingLayer());
|
| + EXPECT_EQ(inner_scroll, host_impl_->CurrentlyScrollingLayer());
|
| EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
|
| host_impl_->FlingScrollBegin().thread);
|
| - EXPECT_EQ(outer_scroll, host_impl_->CurrentlyScrollingLayer());
|
| + EXPECT_EQ(inner_scroll, host_impl_->CurrentlyScrollingLayer());
|
|
|
| host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
|
| inner_expected += gfx::Vector2dF(scroll_delta.x(), scroll_delta.y());
|
| - EXPECT_EQ(outer_scroll, host_impl_->CurrentlyScrollingLayer());
|
| + EXPECT_EQ(inner_scroll, host_impl_->CurrentlyScrollingLayer());
|
|
|
| host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
|
| outer_expected += gfx::Vector2dF(scroll_delta.x(), scroll_delta.y());
|
| - EXPECT_EQ(outer_scroll, host_impl_->CurrentlyScrollingLayer());
|
| + EXPECT_EQ(inner_scroll, host_impl_->CurrentlyScrollingLayer());
|
|
|
| host_impl_->ScrollEnd(EndState().get());
|
| host_impl_->ClearCurrentlyScrollingLayerForTesting();
|
| @@ -11362,7 +11166,7 @@
|
| LayerTreeImpl* pending_tree = host_impl_->pending_tree();
|
| pending_tree->PushPageScaleFromMainThread(1.f, 1.f, 1.f);
|
| LayerImpl* last_scrolled_layer = pending_tree->LayerById(
|
| - host_impl_->active_tree()->InnerViewportScrollLayer()->id());
|
| + host_impl_->active_tree()->LastScrolledLayerId());
|
|
|
| // When building property trees from impl side, the builder uses the scroll
|
| // offset of layer_impl to initialize the scroll offset in scroll tree:
|
|
|