Index: chrome/browser/ui/views/menu_view_drag_and_drop_test.cc |
diff --git a/chrome/browser/ui/views/menu_view_drag_and_drop_test.cc b/chrome/browser/ui/views/menu_view_drag_and_drop_test.cc |
index 17a6c4146fd5b076f023030727b76592f10f87b3..4e9c4aec1cb03492c9f50e5d43e3f0fc5350079e 100644 |
--- a/chrome/browser/ui/views/menu_view_drag_and_drop_test.cc |
+++ b/chrome/browser/ui/views/menu_view_drag_and_drop_test.cc |
@@ -7,7 +7,9 @@ |
#include "chrome/test/base/interactive_test_utils.h" |
#include "ui/base/dragdrop/drag_drop_types.h" |
#include "ui/base/dragdrop/os_exchange_data.h" |
+#include "ui/views/controls/menu/menu_controller.h" |
#include "ui/views/controls/menu/menu_item_view.h" |
+#include "ui/views/controls/menu/menu_runner.h" |
#include "ui/views/controls/menu/submenu_view.h" |
#include "ui/views/view.h" |
@@ -343,6 +345,9 @@ void MenuViewDragAndDropTestTestInMenuDrag::Step4() { |
Done(); |
} |
+// Test that an in-menu (i.e., entirely implemented in the menu code) closes the |
+// menu automatically once the drag is complete, and does not ask the delegate |
+// to stay open. |
VIEW_TEST(MenuViewDragAndDropTestTestInMenuDrag, MAYBE(TestInMenuDrag)) |
class MenuViewDragAndDropTestNestedDrag : public MenuViewDragAndDropTest { |
@@ -438,5 +443,72 @@ void MenuViewDragAndDropTestNestedDrag::Step4() { |
Done(); |
} |
+// Test that a nested drag (i.e. one via a child view, and not entirely |
+// implemented in menu code) will consult the delegate before closing the view |
+// after the drag. |
VIEW_TEST(MenuViewDragAndDropTestNestedDrag, |
MAYBE(MenuViewDragAndDropNestedDrag)) |
+ |
+class MenuViewDragAndDropForDropStayOpen : public MenuViewDragAndDropTest { |
+ public: |
+ MenuViewDragAndDropForDropStayOpen() {} |
+ virtual ~MenuViewDragAndDropForDropStayOpen() {} |
+ |
+ private: |
+ // MenuViewDragAndDropTest: |
+ virtual int GetMenuRunnerFlags() OVERRIDE; |
+ virtual void DoTestWithMenuOpen() OVERRIDE; |
+}; |
+ |
+int MenuViewDragAndDropForDropStayOpen::GetMenuRunnerFlags() { |
+ return views::MenuRunner::HAS_MNEMONICS | |
+ views::MenuRunner::NESTED_DRAG | |
+ views::MenuRunner::FOR_DROP; |
+} |
+ |
+void MenuViewDragAndDropForDropStayOpen::DoTestWithMenuOpen() { |
+ views::SubmenuView* submenu = menu()->GetSubmenu(); |
+ ASSERT_TRUE(submenu); |
+ ASSERT_TRUE(submenu->IsShowing()); |
+ |
+ views::MenuController* controller = menu()->GetMenuController(); |
+ ASSERT_TRUE(controller); |
+ EXPECT_FALSE(controller->IsCancelAllTimerRunningForTest()); |
+ |
+ Done(); |
+} |
+ |
+// Test that if a menu is opened for a drop which is handled by a child view |
+// that the menu does not immediately try to close. |
+VIEW_TEST(MenuViewDragAndDropForDropStayOpen, MenuViewStaysOpenForNestedDrag) |
+ |
+class MenuViewDragAndDropForDropCancel : public MenuViewDragAndDropTest { |
+ public: |
+ MenuViewDragAndDropForDropCancel() {} |
+ virtual ~MenuViewDragAndDropForDropCancel() {} |
+ |
+ private: |
+ // MenuViewDragAndDropTest: |
+ virtual int GetMenuRunnerFlags() OVERRIDE; |
+ virtual void DoTestWithMenuOpen() OVERRIDE; |
+}; |
+ |
+int MenuViewDragAndDropForDropCancel::GetMenuRunnerFlags() { |
+ return views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::FOR_DROP; |
+} |
+ |
+void MenuViewDragAndDropForDropCancel::DoTestWithMenuOpen() { |
+ views::SubmenuView* submenu = menu()->GetSubmenu(); |
+ ASSERT_TRUE(submenu); |
+ ASSERT_TRUE(submenu->IsShowing()); |
+ |
+ views::MenuController* controller = menu()->GetMenuController(); |
+ ASSERT_TRUE(controller); |
+ EXPECT_TRUE(controller->IsCancelAllTimerRunningForTest()); |
+ |
+ Done(); |
+} |
+ |
+// Test that if a menu is opened for a drop handled entirely by menu code, the |
+// menu will try to close if it does not receive any drag updates. |
+VIEW_TEST(MenuViewDragAndDropForDropCancel, MenuViewCancelsForOwnDrag) |