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 40cc92a72fe89b9f1486119ec9ecb088c75afbea..fec6da10bf7dec0dad02e2a3af53f4867c219a69 100644 |
| --- a/cc/trees/layer_tree_host_common_unittest.cc |
| +++ b/cc/trees/layer_tree_host_common_unittest.cc |
| @@ -5569,6 +5569,164 @@ TEST_F(LayerTreeHostCommonTest, HitTestingForEmptyLayers) { |
| EXPECT_EQ(4, result_layer->id()); |
| } |
| +TEST_F(LayerTreeHostCommonTest, HitTestForZeroOpacityLayers) { |
| + FakeImplProxy proxy; |
| + FakeLayerTreeHostImpl host_impl(&proxy); |
| + const int kRootId = 1; |
| + const int kTouchHandlerId = 2; |
| + const int kWheelHandlerId = 3; |
| + const int kNoHandlerId = 4; |
| + const int kGrandChildWithEventId = 5; |
| + const int kGrandChildWithoutEventId = 6; |
| + |
| + scoped_ptr<LayerImpl> root = |
| + LayerImpl::Create(host_impl.active_tree(), 1); |
| + gfx::Transform identity_matrix; |
| + gfx::PointF anchor; |
| + gfx::PointF position; |
| + gfx::Size bounds(100, 100); |
| + SetLayerPropertiesForTesting(root.get(), |
| + identity_matrix, |
| + identity_matrix, |
| + anchor, |
| + position, |
| + bounds, |
| + false); |
| + root->SetDrawsContent(true); |
| + |
| + { |
| + // Child 1 - Zero opacity, without any event handler. |
|
danakj
2013/10/08 18:32:32
Can you add a case where there is
- Opacity 0 lay
|
| + gfx::PointF position(10.f, 10.f); |
| + gfx::Size bounds(30, 30); |
|
danakj
2013/10/08 18:32:32
Can you add a case where the touch handler layer o
|
| + scoped_ptr<LayerImpl> child = |
| + LayerImpl::Create(host_impl.active_tree(), kNoHandlerId); |
| + SetLayerPropertiesForTesting(child.get(), |
| + identity_matrix, |
| + identity_matrix, |
| + anchor, |
| + position, |
| + bounds, |
| + false); |
| + child->SetOpacity(0.f); |
|
danakj
2013/10/08 18:32:32
Can you make all of the layers in this test DrawsC
|
| + |
| + // Grandchild - with a wheel handler. |
| + { |
| + scoped_ptr<LayerImpl> grand_child = |
| + LayerImpl::Create(host_impl.active_tree(), kGrandChildWithEventId); |
| + SetLayerPropertiesForTesting(grand_child.get(), |
| + identity_matrix, |
| + identity_matrix, |
| + gfx::PointF(), |
| + gfx::PointF(10, 10), |
| + gfx::Size(10, 10), |
| + false); |
| + grand_child->SetHaveWheelEventHandlers(true); |
| + child->AddChild(grand_child.Pass()); |
| + } |
| + |
| + // Grandchild - without any event handlers. |
| + { |
| + scoped_ptr<LayerImpl> grand_child = |
| + LayerImpl::Create(host_impl.active_tree(), kGrandChildWithoutEventId); |
| + SetLayerPropertiesForTesting(grand_child.get(), |
| + identity_matrix, |
| + identity_matrix, |
| + gfx::PointF(), |
| + gfx::PointF(20, 10), |
| + gfx::Size(10, 10), |
| + false); |
| + child->AddChild(grand_child.Pass()); |
| + } |
| + root->AddChild(child.Pass()); |
| + } |
| + |
| + { |
| + // Child 2 - Zero opacity, with touch event handler. |
|
danakj
2013/10/08 18:32:32
Can you add multiple drawing children of this laye
|
| + gfx::PointF position(70.f, 10.f); |
| + gfx::Size bounds(30, 30); |
| + scoped_ptr<LayerImpl> child = |
| + LayerImpl::Create(host_impl.active_tree(), kTouchHandlerId); |
| + SetLayerPropertiesForTesting(child.get(), |
| + identity_matrix, |
| + identity_matrix, |
| + anchor, |
| + position, |
| + bounds, |
| + false); |
| + child->SetOpacity(0.f); |
| + child->SetTouchEventHandlerRegion(gfx::Rect(10, 10, 10, 10)); |
| + root->AddChild(child.Pass()); |
| + } |
| + |
| + { |
| + // Child 3 - Zero opacity, with wheel event handler. |
|
danakj
2013/10/08 18:32:32
Could you split each of these 3 children cases int
|
| + gfx::PointF position(10.f, 50.f); |
| + gfx::Size bounds(30, 30); |
| + scoped_ptr<LayerImpl> child = |
| + LayerImpl::Create(host_impl.active_tree(), kWheelHandlerId); |
| + SetLayerPropertiesForTesting(child.get(), |
| + identity_matrix, |
| + identity_matrix, |
| + anchor, |
| + position, |
| + bounds, |
| + false); |
| + child->SetOpacity(0.f); |
| + child->SetHaveWheelEventHandlers(true); |
| + root->AddChild(child.Pass()); |
| + } |
| + |
| + LayerImplList render_surface_layer_list; |
| + LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( |
| + root.get(), root->bounds(), &render_surface_layer_list); |
| + inputs.can_adjust_raster_scales = true; |
| + LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
| + |
| + // Verify that the root layer and zero-opacity layers with touch/wheel |
| + // handlers (but not the zero-opacity layer without a touch handler) are in |
| + // the RSSL. |
| + ASSERT_EQ(1u, render_surface_layer_list.size()); |
| + EXPECT_EQ(kRootId, render_surface_layer_list[0]->id()); |
| + ASSERT_EQ(4u, root->render_surface()->layer_list().size()); |
| + |
| + EXPECT_EQ(kRootId, root->render_surface()->layer_list().at(0)->id()); |
| + EXPECT_EQ(kGrandChildWithEventId, |
| + root->render_surface()->layer_list().at(1)->id()); |
| + EXPECT_EQ(kTouchHandlerId, root->render_surface()->layer_list().at(2)->id()); |
| + EXPECT_EQ(kWheelHandlerId, root->render_surface()->layer_list().at(3)->id()); |
| + |
| + // Hit testing for a point inside the zero-opacity no-handler layer should |
| + // return the root layer. |
| + gfx::Point test_point = gfx::Point(15, 15); |
| + LayerImpl* result_layer = LayerTreeHostCommon::FindLayerThatIsHitByPoint( |
| + test_point, render_surface_layer_list); |
| + ASSERT_TRUE(result_layer); |
| + EXPECT_EQ(kRootId, result_layer->id()); |
| + |
| + // Hit testing for a point inside the child of the zero-opacity no-handler |
| + // layer should return the child layer, since that layer has mousewheel |
| + // handler. |
| + test_point = gfx::Point(25, 25); |
| + result_layer = LayerTreeHostCommon::FindLayerThatIsHitByPoint( |
| + test_point, render_surface_layer_list); |
| + ASSERT_TRUE(result_layer); |
| + EXPECT_EQ(kGrandChildWithEventId, result_layer->id()); |
| + |
| + // Hit testing for a point inside the touch handler layer should return it. |
| + test_point = gfx::Point(85, 25); |
| + result_layer = LayerTreeHostCommon::FindLayerThatIsHitByPoint( |
| + test_point, render_surface_layer_list); |
| + ASSERT_TRUE(result_layer); |
| + EXPECT_EQ(kTouchHandlerId, result_layer->id()); |
| + |
| + // Hit testing for a point inside the mousewheel layer should return it. |
| + test_point = gfx::Point(15, 55); |
| + result_layer = LayerTreeHostCommon::FindLayerThatIsHitByPoint( |
| + test_point, render_surface_layer_list); |
| + ASSERT_TRUE(result_layer); |
| + EXPECT_EQ(kWheelHandlerId, result_layer->id()); |
| +} |
| + |
| TEST_F(LayerTreeHostCommonTest, |
| HitCheckingTouchHandlerRegionsForEmptyLayerList) { |
| // Hit checking on an empty render_surface_layer_list should return a null |