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

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

Issue 1953753002: Turn RootWindowController Menus Async (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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/aura/client/default_capture_client.cc ('k') | ui/views/widget/native_widget_aura.cc » ('j') | 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 2f6db02d60ab8f244788c72aad7042cf3d665846..6d76f7e92e2e718e7045cec79f8d6581bfb3712a 100644
--- a/ui/views/controls/menu/menu_runner_unittest.cc
+++ b/ui/views/controls/menu/menu_runner_unittest.cc
@@ -18,7 +18,9 @@
#include "ui/views/controls/menu/menu_types.h"
#include "ui/views/controls/menu/submenu_view.h"
#include "ui/views/test/menu_test_utils.h"
+#include "ui/views/test/test_views.h"
#include "ui/views/test/views_test_base.h"
+#include "ui/views/widget/native_widget_private.h"
#include "ui/views/widget/widget.h"
namespace views {
@@ -186,6 +188,72 @@ TEST_F(MenuRunnerTest, NestingDuringDrag) {
EXPECT_EQ(MenuRunner::NORMAL_EXIT, delegate->on_menu_closed_run_result());
}
+namespace {
+
+// An EventHandler that launches a menu in response to a mouse press.
+class MenuLauncherEventHandler : public ui::EventHandler {
+ public:
+ MenuLauncherEventHandler(MenuRunner* runner, Widget* owner)
+ : runner_(runner), owner_(owner) {}
+ ~MenuLauncherEventHandler() override {}
+
+ private:
+ // ui::EventHandler:
+ void OnMouseEvent(ui::MouseEvent* event) override {
+ if (event->type() == ui::ET_MOUSE_PRESSED) {
+ runner_->RunMenuAt(owner_, nullptr, gfx::Rect(), MENU_ANCHOR_TOPLEFT,
+ ui::MENU_SOURCE_NONE);
+ event->SetHandled();
+ }
+ }
+
+ MenuRunner* runner_;
+ Widget* owner_;
+
+ DISALLOW_COPY_AND_ASSIGN(MenuLauncherEventHandler);
+};
+
+} // namespace
+
+// Tests that when a mouse press launches a menu, that the target widget does
+// not take explicit capture, nor closes the menu.
+TEST_F(MenuRunnerTest, WidgetDoesntTakeCapture) {
+ Widget* widget = new Widget;
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
+ widget->Init(params);
+ widget->Show();
+ widget->SetSize(gfx::Size(300, 300));
+
+ EventCountView* event_count_view = new EventCountView();
+ event_count_view->SetBounds(0, 0, 300, 300);
+ widget->GetRootView()->AddChildView(event_count_view);
+
+ InitMenuRunner(MenuRunner::ASYNC);
+ MenuRunner* runner = menu_runner();
+
+ MenuLauncherEventHandler consumer(runner, owner());
+ event_count_view->AddPostTargetHandler(&consumer);
+ EXPECT_EQ(nullptr, internal::NativeWidgetPrivate::GetGlobalCapture(
+ widget->GetNativeView()));
+ std::unique_ptr<ui::test::EventGenerator> generator(
+ new ui::test::EventGenerator(
+ IsMus() ? widget->GetNativeWindow() : GetContext(),
+ widget->GetNativeWindow()));
+ // Implicit capture should not be held by |widget|.
+ generator->PressLeftButton();
+ EXPECT_EQ(1, event_count_view->GetEventCount(ui::ET_MOUSE_PRESSED));
+ EXPECT_NE(
+ widget->GetNativeView(),
+ internal::NativeWidgetPrivate::GetGlobalCapture(widget->GetNativeView()));
+
+ // The menu should still be open.
+ TestMenuDelegate* delegate = menu_delegate();
+ EXPECT_TRUE(runner->IsRunning());
+ EXPECT_EQ(0, delegate->on_menu_closed_called());
+
+ widget->CloseNow();
+}
+
typedef MenuRunnerTest MenuRunnerImplTest;
// Tests that when nested menu runners are destroyed out of order, that
« no previous file with comments | « ui/aura/client/default_capture_client.cc ('k') | ui/views/widget/native_widget_aura.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698