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

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

Issue 2876203003: Make shelf item can be dragged when context menu is opened.
Patch Set: Fixed tests. Created 3 years, 6 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_controller.cc ('k') | ui/views/controls/menu/menu_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 7608aeae8890ab08e0e4a36feb1f12b0065f7e4f..7b777a92298a1b331b0627080801ae1714dd6b23 100644
--- a/ui/views/controls/menu/menu_controller_unittest.cc
+++ b/ui/views/controls/menu/menu_controller_unittest.cc
@@ -153,6 +153,19 @@ class TestEventHandler : public ui::EventHandler {
DISALLOW_COPY_AND_ASSIGN(TestEventHandler);
};
+class TestWidget : public Widget {
msw 2017/06/29 19:02:10 nit: |GestureTestWidget| and comment "A test widge
minch1 2017/06/30 19:53:08 Done.
+ public:
+ TestWidget() : gesture_count_(0) {}
+
+ void OnGestureEvent(ui::GestureEvent* event) override { gesture_count_++; }
+
+ int gesture_count() const { return gesture_count_; }
+
+ private:
+ int gesture_count_;
+ DISALLOW_COPY_AND_ASSIGN(TestWidget);
+};
+
#if defined(USE_AURA)
// A DragDropClient which does not trigger a nested run loop. Instead a
// callback is triggered during StartDragAndDrop in order to allow testing.
@@ -458,7 +471,7 @@ class MenuControllerTest : public ViewsTestBase {
menu_item()->GetSubmenu()->GetMenuItemAt(0)->CreateSubmenu(), location);
}
- Widget* owner() { return owner_.get(); }
+ TestWidget* owner() { return owner_.get(); }
ui::test::EventGenerator* event_generator() { return event_generator_.get(); }
TestMenuItemViewShown* menu_item() { return menu_item_.get(); }
TestMenuDelegate* menu_delegate() { return menu_delegate_.get(); }
@@ -515,9 +528,11 @@ class MenuControllerTest : public ViewsTestBase {
menu_controller_ = nullptr;
}
+ int CountOwnerOnGestureEvent() { return owner_->gesture_count(); }
+
private:
void Init() {
- owner_.reset(new Widget);
+ owner_.reset(new TestWidget);
msw 2017/06/29 19:02:10 nit: owner = base::MakeUnique<TestWidget>(); (opti
minch1 2017/06/30 19:53:08 Done.
Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
owner_->Init(params);
@@ -552,7 +567,7 @@ class MenuControllerTest : public ViewsTestBase {
// Not owned.
DestructingTestViewsDelegate* test_views_delegate_;
- std::unique_ptr<Widget> owner_;
+ std::unique_ptr<TestWidget> owner_;
std::unique_ptr<ui::test::EventGenerator> event_generator_;
std::unique_ptr<TestMenuItemViewShown> menu_item_;
std::unique_ptr<TestMenuControllerDelegate> menu_controller_delegate_;
@@ -1106,6 +1121,37 @@ TEST_F(MenuControllerTest, DoubleAsynchronousNested) {
EXPECT_EQ(1, nested_delegate->on_menu_closed_called());
}
+#if !defined(OS_MACOSX)
+TEST_F(MenuControllerTest, PreserveGestureForOwner) {
+ MenuController* controller = menu_controller();
+ MenuItemView* item = menu_item();
+ controller->Run(owner(), nullptr, item, gfx::Rect(),
+ MENU_ANCHOR_FIXED_BOTTOMCENTER, false, false);
+ SubmenuView* sub_menu = item->GetSubmenu();
+ sub_menu->ShowAt(owner(), gfx::Rect(0, 0, 100, 100), true);
+
+ // Gesture triggered outside the menu.
msw 2017/06/29 19:02:10 nit: "The menu's owner should receive gestures tri
minch1 2017/06/30 19:53:08 Done.
+ gfx::Point location(sub_menu->bounds().bottom_left().x(),
+ sub_menu->bounds().bottom_left().y() + 10);
+ ui::GestureEvent event(location.x(), location.y(), 0, ui::EventTimeForNow(),
+ ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_BEGIN));
+ controller->set_send_gesture_events_to_owner(true);
msw 2017/06/29 19:02:10 optional nit: test that gesture events are not sen
minch1 2017/06/30 19:53:08 Done.
+ controller->OnGestureEvent(sub_menu, &event);
+ EXPECT_EQ(CountOwnerOnGestureEvent(), 1);
+
+ ui::GestureEvent event2(location.x(), location.y(), 0, ui::EventTimeForNow(),
+ ui::GestureEventDetails(ui::ET_GESTURE_END));
+
+ controller->OnGestureEvent(sub_menu, &event2);
+ EXPECT_EQ(CountOwnerOnGestureEvent(), 2);
+
+ // ET_GESTURE_END disabled preserve_current_gesture_for_owner. Then
msw 2017/06/29 19:02:10 nit: ET_GESTURE_END resets the |send_gesture_event
minch1 2017/06/30 19:53:08 Done.
+ // OnGestureEvent of the owner will not be called.
+ controller->OnGestureEvent(sub_menu, &event2);
+ EXPECT_EQ(CountOwnerOnGestureEvent(), 2);
+}
+#endif // !defined(OS_MACOSX)
+
// Tests that a nested menu does not crash when trying to repost events that
// occur outside of the bounds of the menu. Instead a proper shutdown should
// occur.
« no previous file with comments | « ui/views/controls/menu/menu_controller.cc ('k') | ui/views/controls/menu/menu_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698