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

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

Issue 2155243007: Turn Bookmark Menus Async (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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
Index: ui/views/controls/menu/menu_controller_unittest.cc
diff --git a/ui/views/controls/menu/menu_controller_unittest.cc b/ui/views/controls/menu/menu_controller_unittest.cc
index 42a2a252e08bc57b4f9a9fce1a150ac47d20241b..3d240ac60e9c7a887c150bd5b08175187177ecc5 100644
--- a/ui/views/controls/menu/menu_controller_unittest.cc
+++ b/ui/views/controls/menu/menu_controller_unittest.cc
@@ -21,6 +21,7 @@
#include "ui/gfx/geometry/rect.h"
#include "ui/views/controls/menu/menu_controller_delegate.h"
#include "ui/views/controls/menu/menu_delegate.h"
+#include "ui/views/controls/menu/menu_host.h"
#include "ui/views/controls/menu/menu_item_view.h"
#include "ui/views/controls/menu/menu_message_loop.h"
#include "ui/views/controls/menu/menu_scroll_view_container.h"
@@ -378,6 +379,12 @@ class MenuControllerTest : public ViewsTestBase {
bool IsShowing() { return menu_controller_->showing_; }
+ MenuHost* GetMenuHost(SubmenuView* submenu) { return submenu->host_; }
+
+ void MenuHostOnDragWillStart(MenuHost* host) { host->OnDragWillStart(); }
+
+ void MenuHostOnDragComplete(MenuHost* host) { host->OnDragComplete(); }
+
void SelectByChar(base::char16 character) {
menu_controller_->SelectByChar(character);
}
@@ -451,6 +458,8 @@ class MenuControllerTest : public ViewsTestBase {
menu_item()->GetSubmenu()->ShowAt(owner(), menu_item()->bounds(), false);
}
+ void DestroyMenuItem() { menu_item_.reset(); }
+
CustomButton* GetHotButton() {
return menu_controller_->hot_button_;
}
@@ -464,7 +473,6 @@ class MenuControllerTest : public ViewsTestBase {
menu_controller_->ExitMenuRun();
}
- private:
void DestroyMenuController() {
if (!menu_controller_)
return;
@@ -478,6 +486,7 @@ class MenuControllerTest : public ViewsTestBase {
menu_controller_ = nullptr;
}
+ private:
void Init() {
owner_.reset(new Widget);
Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
@@ -943,6 +952,22 @@ TEST_F(MenuControllerTest, AsynchronousCancelAll) {
EXPECT_EQ(MenuController::EXIT_ALL, controller->exit_type());
}
+// Tests that a when a MenuController has been destroyed, that a menu attempting
+// to cancel does not crash.
+TEST_F(MenuControllerTest, AsynchronousCancelAfterDeletion) {
+ MenuController* controller = menu_controller();
+ controller->SetAsyncRun(true);
+
+ int mouse_event_flags = 0;
+ MenuItemView* run_result =
+ controller->Run(owner(), nullptr, menu_item(), gfx::Rect(),
+ MENU_ANCHOR_TOPLEFT, false, false, &mouse_event_flags);
+ EXPECT_EQ(run_result, nullptr);
+
+ DestroyMenuController();
+ menu_item()->Cancel();
+}
+
// Tests that an asynchrnous menu nested within a synchronous menu restores the
// previous MenuControllerDelegate and synchronous settings.
TEST_F(MenuControllerTest, AsynchronousNestedDelegate) {
@@ -1019,6 +1044,21 @@ TEST_F(MenuControllerTest, AsynchronousDragComplete) {
EXPECT_EQ(MenuController::EXIT_ALL, controller->exit_type());
}
+// Tests that if a menu is destroyed while drag operations are occuring, that
+// the MenuHost does not crash as the drag completes.
+TEST_F(MenuControllerTest, AsynchronousDragHostDeleted) {
+ MenuController* controller = menu_controller();
+ controller->SetAsyncRun(true);
+
+ SubmenuView* submenu = menu_item()->GetSubmenu();
+ submenu->ShowAt(owner(), menu_item()->bounds(), false);
+ MenuHost* host = GetMenuHost(submenu);
+ MenuHostOnDragWillStart(host);
+ submenu->Close();
+ DestroyMenuItem();
+ MenuHostOnDragComplete(host);
+}
+
// Tets that an asynchronous menu nested within an asynchronous menu closes both
// menus, and notifies both delegates.
TEST_F(MenuControllerTest, DoubleAsynchronousNested) {

Powered by Google App Engine
This is Rietveld 408576698