Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(404)

Unified Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 266913021: Hit test on the layer tree rather than the RSLL (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Helps if you upload all your files. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 02f383fbc60c2c89248898ecfb5abdfb9551ee7f..ccdaf5a36adc1cd0109e25183a93d873bdfea7bb 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -6140,7 +6140,7 @@ TEST_F(LayerTreeHostImplTest, ScrollUnknownScrollAncestorMismatch) {
occluder_layer->SetDrawsContent(true);
occluder_layer->SetBounds(content_size);
occluder_layer->SetContentBounds(content_size);
- occluder_layer->SetPosition(gfx::PointF());
+ occluder_layer->SetPosition(gfx::PointF(-10.f, -10.f));
occluder_layer->SetAnchorPoint(gfx::PointF());
int child_scroll_clip_layer_id = 7;
@@ -6151,7 +6151,7 @@ TEST_F(LayerTreeHostImplTest, ScrollUnknownScrollAncestorMismatch) {
scoped_ptr<LayerImpl> child_scroll = CreateScrollableLayer(
child_scroll_layer_id, content_size, child_scroll_clip.get());
- child_scroll->SetDrawsContent(false);
+ child_scroll->SetPosition(gfx::PointF(10.f, 10.f));
child_scroll->AddChild(occluder_layer.Pass());
scroll_layer->AddChild(child_scroll.Pass());
@@ -6162,6 +6162,95 @@ TEST_F(LayerTreeHostImplTest, ScrollUnknownScrollAncestorMismatch) {
host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel));
}
+TEST_F(LayerTreeHostImplTest, ScrollInvisibleScroller) {
+ gfx::Size content_size(100, 100);
+ SetupScrollAndContentsLayers(content_size);
+
+ LayerImpl* root = host_impl_->active_tree()->LayerById(1);
+
+ int scroll_layer_id = 2;
+ LayerImpl* scroll_layer =
+ host_impl_->active_tree()->LayerById(scroll_layer_id);
+
+ int child_scroll_layer_id = 7;
+ scoped_ptr<LayerImpl> child_scroll =
+ CreateScrollableLayer(child_scroll_layer_id, content_size, root);
+ child_scroll->SetDrawsContent(false);
+
+ scroll_layer->AddChild(child_scroll.Pass());
+
+ DrawFrame();
+
+ // We should not have scrolled |child_scroll| even though we technically "hit"
+ // it. The reason for this is that if the scrolling the scroll would not move
+ // any layer that is a drawn RSLL member, then we can ignore the hit.
+ //
+ // Why ScrollStarted? In this case, it's because we've bubbled out and started
+ // overscrolling the inner viewport.
+ EXPECT_EQ(InputHandler::ScrollStarted,
+ host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel));
+
+ EXPECT_EQ(2, host_impl_->CurrentlyScrollingLayer()->id());
+}
+
+TEST_F(LayerTreeHostImplTest, ScrollInvisibleScrollerWithVisibleScrollChild) {
+ // This test case is very similar to the one above with one key difference:
+ // the invisible scroller has a scroll child that is indeed draw contents.
+ // If we attempt to initiate a gesture scroll off of the visible scroll child
+ // we should still start the scroll child.
+ gfx::Size content_size(100, 100);
+ SetupScrollAndContentsLayers(content_size);
+
+ LayerImpl* root = host_impl_->active_tree()->LayerById(1);
+
+ int scroll_layer_id = 2;
+ LayerImpl* scroll_layer =
+ host_impl_->active_tree()->LayerById(scroll_layer_id);
+
+ int scroll_child_id = 6;
+ scoped_ptr<LayerImpl> scroll_child =
+ LayerImpl::Create(host_impl_->active_tree(), scroll_child_id);
+ scroll_child->SetDrawsContent(true);
+ scroll_child->SetBounds(content_size);
+ scroll_child->SetContentBounds(content_size);
+ // Move the scroll child so it's not hit by our test point.
+ scroll_child->SetPosition(gfx::PointF(10.f, 10.f));
+ scroll_child->SetAnchorPoint(gfx::PointF());
+
+ int invisible_scroll_layer_id = 7;
+ scoped_ptr<LayerImpl> invisible_scroll =
+ CreateScrollableLayer(invisible_scroll_layer_id, content_size, root);
+ invisible_scroll->SetDrawsContent(false);
+
+ int container_id = 8;
+ scoped_ptr<LayerImpl> container =
+ LayerImpl::Create(host_impl_->active_tree(), container_id);
+
+ scoped_ptr<std::set<LayerImpl*> > scroll_children(new std::set<LayerImpl*>());
+ scroll_children->insert(scroll_child.get());
+ invisible_scroll->SetScrollChildren(scroll_children.release());
+
+ scroll_child->SetScrollParent(invisible_scroll.get());
+
+ container->AddChild(invisible_scroll.Pass());
+ container->AddChild(scroll_child.Pass());
+
+ scroll_layer->AddChild(container.Pass());
+
+ DrawFrame();
+
+ // We should not have scrolled |child_scroll| even though we technically "hit"
+ // it. The reason for this is that if the scrolling the scroll would not move
+ // any layer that is a drawn RSLL member, then we can ignore the hit.
+ //
+ // Why ScrollStarted? In this case, it's because we've bubbled out and started
+ // overscrolling the inner viewport.
+ EXPECT_EQ(InputHandler::ScrollStarted,
+ host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel));
+
+ EXPECT_EQ(7, host_impl_->CurrentlyScrollingLayer()->id());
+}
+
// Make sure LatencyInfo carried by LatencyInfoSwapPromise are passed
// to CompositorFrameMetadata after SwapBuffers();
TEST_F(LayerTreeHostImplTest, LatencyInfoPassedToCompositorFrameMetadata) {
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698