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

Unified Diff: ui/views/controls/menu/menu_runner_unittest.cc

Issue 1834823002: Fix MenuRunnerImpl Crash for context menu during drag-and-drop (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 | « ui/views/controls/menu/menu_runner_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/menu/menu_runner_unittest.cc
diff --git a/ui/views/controls/menu/menu_runner_unittest.cc b/ui/views/controls/menu/menu_runner_unittest.cc
index dab7de98ee841359d72c9d9eb42b9d4fe59702ce..49ba8832a1e11a5b860cf8146ce357128a98c69a 100644
--- a/ui/views/controls/menu/menu_runner_unittest.cc
+++ b/ui/views/controls/menu/menu_runner_unittest.cc
@@ -209,5 +209,31 @@ TEST_F(MenuRunnerTest, NonLatinMnemonic) {
EXPECT_EQ(MenuRunner::NORMAL_EXIT, delegate->on_menu_closed_run_result());
}
+// Tests that attempting to nest a menu within a drag-and-drop menu does not
+// cause a crash. Instead the drag and drop action should be canceled, and the
+// new menu should be openned.
+TEST_F(MenuRunnerTest, NestingDuringDrag) {
+ InitMenuRunner(MenuRunner::FOR_DROP);
+ MenuRunner* runner = menu_runner();
+ MenuRunner::RunResult result = runner->RunMenuAt(
+ owner(), nullptr, gfx::Rect(), MENU_ANCHOR_TOPLEFT, ui::MENU_SOURCE_NONE);
+ EXPECT_EQ(MenuRunner::NORMAL_EXIT, result);
+ EXPECT_TRUE(runner->IsRunning());
+
+ scoped_ptr<TestMenuDelegate> nested_delegate(new TestMenuDelegate);
+ MenuItemView* nested_menu = new MenuItemView(nested_delegate.get());
+ scoped_ptr<MenuRunner> nested_runner(
+ new MenuRunner(nested_menu, MenuRunner::IS_NESTED | MenuRunner::ASYNC));
+ result = nested_runner->RunMenuAt(owner(), nullptr, gfx::Rect(),
+ MENU_ANCHOR_TOPLEFT, ui::MENU_SOURCE_NONE);
+ EXPECT_EQ(MenuRunner::NORMAL_EXIT, result);
+ EXPECT_TRUE(nested_runner->IsRunning());
+ EXPECT_FALSE(runner->IsRunning());
+ TestMenuDelegate* delegate = menu_delegate();
+ EXPECT_EQ(1, delegate->on_menu_closed_called());
+ EXPECT_NE(nullptr, delegate->on_menu_closed_menu());
+ EXPECT_EQ(MenuRunner::NORMAL_EXIT, delegate->on_menu_closed_run_result());
+}
+
} // namespace test
} // namespace views
« no previous file with comments | « ui/views/controls/menu/menu_runner_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698