Chromium Code Reviews| Index: cc/trees/layer_tree_host_common_unittest.cc |
| diff --git a/cc/trees/layer_tree_host_common_unittest.cc b/cc/trees/layer_tree_host_common_unittest.cc |
| index a4b4caafe2f5ad0c98145b1863b7e87ba50a8746..39ac44ffc963777b5dde8ba92d3e25fc92c09102 100644 |
| --- a/cc/trees/layer_tree_host_common_unittest.cc |
| +++ b/cc/trees/layer_tree_host_common_unittest.cc |
| @@ -6915,6 +6915,75 @@ TEST_F(LayerTreeHostCommonTest, ScrollSnappingWithScrollChild) { |
| scroll_child_impl->ScreenSpaceTransform()); |
| } |
| +TEST_F(LayerTreeHostCommonTest, StickyPosition) { |
| + scoped_refptr<Layer> root = Layer::Create(); |
| + scoped_refptr<Layer> container = Layer::Create(); |
| + scoped_refptr<Layer> scroller = Layer::Create(); |
| + scoped_refptr<Layer> sticky_pos = Layer::Create(); |
| + root->AddChild(container); |
| + container->AddChild(scroller); |
| + scroller->AddChild(sticky_pos); |
| + host()->SetRootLayer(root); |
| + scroller->SetScrollClipLayerId(container->id()); |
| + |
| + LayerStickyPositionConstraint sticky_position; |
| + sticky_position.is_sticky = true; |
| + sticky_position.is_anchored_top = true; |
| + sticky_position.top_offset = 10.0f; |
| + sticky_position.absolute_sticky_box_rect = gfx::Rect(10, 20, 10, 10); |
| + sticky_position.absolute_containing_block_rect = gfx::Rect(0, 0, 50, 50); |
|
ajuma
2016/09/08 22:08:53
Please also include tests that use the other stick
flackr
2016/09/20 17:08:47
Done.
|
| + sticky_pos->SetStickyPositionConstraint(sticky_position); |
| + |
| + root->SetBounds(gfx::Size(100, 100)); |
| + container->SetBounds(gfx::Size(100, 100)); |
| + scroller->SetBounds(gfx::Size(1000, 1000)); |
| + sticky_pos->SetBounds(gfx::Size(10, 10)); |
| + sticky_pos->SetPosition(gfx::PointF(10, 20)); |
| + |
| + ExecuteCalculateDrawProperties(root.get()); |
| + host()->host_impl()->CreatePendingTree(); |
| + host()->CommitAndCreatePendingTree(); |
| + host()->host_impl()->ActivateSyncTree(); |
| + LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); |
| + |
| + LayerImpl* root_impl = layer_tree_impl->LayerById(root->id()); |
| + LayerImpl* scroller_impl = layer_tree_impl->LayerById(scroller->id()); |
| + LayerImpl* sticky_pos_impl = layer_tree_impl->LayerById(sticky_pos->id()); |
| + |
| + ExecuteCalculateDrawProperties(root_impl); |
| + EXPECT_VECTOR2DF_EQ( |
| + gfx::Vector2dF(10.f, 20.f), |
| + sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); |
| + |
| + // Scroll less than sticking point, sticky element should move with scroll as |
| + // we haven't gotten to the initial sticky item location yet. |
| + SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(5.f, 5.f)); |
| + ExecuteCalculateDrawProperties(root_impl); |
| + EXPECT_VECTOR2DF_EQ( |
| + gfx::Vector2dF(5.f, 15.f), |
| + sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); |
| + |
| + // Scroll past the sticking point, the Y coordinate should now be clamped. |
| + SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(15.f, 15.f)); |
| + ExecuteCalculateDrawProperties(root_impl); |
| + EXPECT_VECTOR2DF_EQ( |
| + gfx::Vector2dF(-5.f, 10.f), |
| + sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); |
| + SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(15.f, 25.f)); |
| + ExecuteCalculateDrawProperties(root_impl); |
| + EXPECT_VECTOR2DF_EQ( |
| + gfx::Vector2dF(-5.f, 10.f), |
| + sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); |
| + |
| + // Scroll past the end of the sticky container (note: this element does not |
| + // have its own layer as it does not need to be composited). |
| + SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(15.f, 50.f)); |
| + ExecuteCalculateDrawProperties(root_impl); |
| + EXPECT_VECTOR2DF_EQ( |
| + gfx::Vector2dF(-5.f, -10.f), |
| + sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); |
| +} |
| + |
| TEST_F(LayerTreeHostCommonTest, NonFlatContainerForFixedPosLayer) { |
| scoped_refptr<Layer> root = Layer::Create(); |
| scoped_refptr<Layer> container = Layer::Create(); |