Index: ui/views/widget/root_view_unittest.cc |
diff --git a/ui/views/widget/root_view_unittest.cc b/ui/views/widget/root_view_unittest.cc |
index a66f2b76cf41f81b94b3cc20efa73eac9ecd14e1..d13e6c99c5cb7ad3bdcb9f91098993df03c9cf05 100644 |
--- a/ui/views/widget/root_view_unittest.cc |
+++ b/ui/views/widget/root_view_unittest.cc |
@@ -179,7 +179,7 @@ TEST_F(RootViewTest, ContextMenuFromLongPress) { |
Widget::InitParams init_params = |
CreateParams(Widget::InitParams::TYPE_POPUP); |
init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
- init_params.bounds = gfx::Rect(100,100); |
+ init_params.bounds = gfx::Rect(100, 100); |
widget.Init(init_params); |
internal::RootView* root_view = |
static_cast<internal::RootView*>(widget.GetRootView()); |
@@ -192,11 +192,11 @@ TEST_F(RootViewTest, ContextMenuFromLongPress) { |
widget.SetContentsView(parent_view); |
View* gesture_handling_child_view = new GestureHandlingView; |
- gesture_handling_child_view->SetBoundsRect(gfx::Rect(10,10)); |
+ gesture_handling_child_view->SetBoundsRect(gfx::Rect(10, 10)); |
parent_view->AddChildView(gesture_handling_child_view); |
View* other_child_view = new View; |
- other_child_view->SetBoundsRect(gfx::Rect(20, 0, 10,10)); |
+ other_child_view->SetBoundsRect(gfx::Rect(20, 0, 10, 10)); |
parent_view->AddChildView(other_child_view); |
// |parent_view| should not show a context menu as a result of a long press on |
@@ -219,6 +219,7 @@ TEST_F(RootViewTest, ContextMenuFromLongPress) { |
EXPECT_FALSE(details.target_destroyed); |
EXPECT_FALSE(details.dispatcher_destroyed); |
EXPECT_EQ(0, controller.show_context_menu_calls()); |
+ controller.Reset(); |
// |parent_view| should show a context menu as a result of a long press on |
// |other_child_view|. |
@@ -240,6 +241,122 @@ TEST_F(RootViewTest, ContextMenuFromLongPress) { |
EXPECT_FALSE(details.target_destroyed); |
EXPECT_FALSE(details.dispatcher_destroyed); |
EXPECT_EQ(1, controller.show_context_menu_calls()); |
+ controller.Reset(); |
+ |
+ // |parent_view| should show a context menu as a result of a long press on |
+ // itself. |
+ ui::GestureEvent long_press3( |
+ 50, |
+ 50, |
+ 0, |
+ base::TimeDelta(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_LONG_PRESS, 0, 0)); |
+ details = root_view->OnEventFromSource(&long_press3); |
+ |
+ ui::GestureEvent end3(25, |
+ 5, |
+ 0, |
+ base::TimeDelta(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_END, 0, 0)); |
+ details = root_view->OnEventFromSource(&end3); |
+ |
+ EXPECT_FALSE(details.target_destroyed); |
+ EXPECT_FALSE(details.dispatcher_destroyed); |
+ EXPECT_EQ(1, controller.show_context_menu_calls()); |
+} |
+ |
+// Tests that context menus are not shown for disabled views on a long press. |
+TEST_F(RootViewTest, ContextMenuFromLongPressOnDisabledView) { |
+ Widget widget; |
+ Widget::InitParams init_params = |
+ CreateParams(Widget::InitParams::TYPE_POPUP); |
+ init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
+ init_params.bounds = gfx::Rect(100, 100); |
+ widget.Init(init_params); |
+ internal::RootView* root_view = |
+ static_cast<internal::RootView*>(widget.GetRootView()); |
+ |
+ // Create a view capable of showing the context menu with two children one of |
+ // which handles all gesture events (e.g. a button). Also mark this view |
+ // as disabled. |
+ TestContextMenuController controller; |
+ View* parent_view = new View; |
+ parent_view->set_context_menu_controller(&controller); |
+ parent_view->SetEnabled(false); |
+ widget.SetContentsView(parent_view); |
+ |
+ View* gesture_handling_child_view = new GestureHandlingView; |
+ gesture_handling_child_view->SetBoundsRect(gfx::Rect(10, 10)); |
+ parent_view->AddChildView(gesture_handling_child_view); |
+ |
+ View* other_child_view = new View; |
+ other_child_view->SetBoundsRect(gfx::Rect(20, 0, 10, 10)); |
+ parent_view->AddChildView(other_child_view); |
+ |
+ // |parent_view| should not show a context menu as a result of a long press on |
+ // |gesture_handling_child_view|. |
+ ui::GestureEvent long_press1( |
+ 5, |
+ 5, |
+ 0, |
+ base::TimeDelta(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_LONG_PRESS, 0, 0)); |
+ ui::EventDispatchDetails details = root_view->OnEventFromSource(&long_press1); |
+ |
+ ui::GestureEvent end1(5, |
+ 5, |
+ 0, |
+ base::TimeDelta(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_END, 0, 0)); |
+ details = root_view->OnEventFromSource(&end1); |
+ |
+ EXPECT_FALSE(details.target_destroyed); |
+ EXPECT_FALSE(details.dispatcher_destroyed); |
+ EXPECT_EQ(0, controller.show_context_menu_calls()); |
+ controller.Reset(); |
+ |
+ // |parent_view| should not show a context menu as a result of a long press on |
+ // |other_child_view|. |
+ ui::GestureEvent long_press2( |
+ 25, |
+ 5, |
+ 0, |
+ base::TimeDelta(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_LONG_PRESS, 0, 0)); |
+ details = root_view->OnEventFromSource(&long_press2); |
+ |
+ ui::GestureEvent end2(25, |
+ 5, |
+ 0, |
+ base::TimeDelta(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_END, 0, 0)); |
+ details = root_view->OnEventFromSource(&end2); |
+ |
+ EXPECT_FALSE(details.target_destroyed); |
+ EXPECT_FALSE(details.dispatcher_destroyed); |
+ EXPECT_EQ(0, controller.show_context_menu_calls()); |
+ controller.Reset(); |
+ |
+ // |parent_view| should not show a context menu as a result of a long press on |
+ // itself. |
+ ui::GestureEvent long_press3( |
+ 50, |
+ 50, |
+ 0, |
+ base::TimeDelta(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_LONG_PRESS, 0, 0)); |
+ details = root_view->OnEventFromSource(&long_press3); |
+ |
+ ui::GestureEvent end3(25, |
+ 5, |
+ 0, |
+ base::TimeDelta(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_END, 0, 0)); |
+ details = root_view->OnEventFromSource(&end3); |
+ |
+ EXPECT_FALSE(details.target_destroyed); |
+ EXPECT_FALSE(details.dispatcher_destroyed); |
+ EXPECT_EQ(0, controller.show_context_menu_calls()); |
} |
} // namespace test |