OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/views/controls/button/menu_button.h" | 5 #include "ui/views/controls/button/menu_button.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 | 81 |
82 void AttachInkDrop() { | 82 void AttachInkDrop() { |
83 ink_drop_ = new test::TestInkDrop(); | 83 ink_drop_ = new test::TestInkDrop(); |
84 test::InkDropHostViewTestApi(button_).SetInkDrop( | 84 test::InkDropHostViewTestApi(button_).SetInkDrop( |
85 base::WrapUnique(ink_drop_)); | 85 base::WrapUnique(ink_drop_)); |
86 } | 86 } |
87 | 87 |
88 private: | 88 private: |
89 void CreateMenuButton(MenuButtonListener* menu_button_listener) { | 89 void CreateMenuButton(MenuButtonListener* menu_button_listener) { |
90 CreateWidget(); | 90 CreateWidget(); |
91 generator_.reset(new ui::test::EventGenerator(GetContext(), | 91 generator_.reset(new ui::test::EventGenerator(widget_->GetNativeWindow())); |
92 widget_->GetNativeWindow())); | |
93 // Set initial mouse location in a consistent way so that the menu button we | 92 // Set initial mouse location in a consistent way so that the menu button we |
94 // are about to create initializes its hover state in a consistent manner. | 93 // are about to create initializes its hover state in a consistent manner. |
95 generator_->set_current_location(gfx::Point(10, 10)); | 94 generator_->set_current_location(gfx::Point(10, 10)); |
96 | 95 |
97 button_ = new TestMenuButton(menu_button_listener); | 96 button_ = new TestMenuButton(menu_button_listener); |
98 button_->SetBoundsRect(gfx::Rect(0, 0, 200, 20)); | 97 button_->SetBoundsRect(gfx::Rect(0, 0, 200, 20)); |
99 widget_->SetContentsView(button_); | 98 widget_->SetContentsView(button_); |
100 | 99 |
101 widget_->Show(); | 100 widget_->Show(); |
102 } | 101 } |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 generator()->ClickLeftButton(); | 346 generator()->ClickLeftButton(); |
348 | 347 |
349 // Check that MenuButton has notified the listener, while it was in pressed | 348 // Check that MenuButton has notified the listener, while it was in pressed |
350 // state. | 349 // state. |
351 EXPECT_EQ(button(), menu_button_listener.last_source()); | 350 EXPECT_EQ(button(), menu_button_listener.last_source()); |
352 EXPECT_EQ(Button::STATE_HOVERED, menu_button_listener.last_source_state()); | 351 EXPECT_EQ(Button::STATE_HOVERED, menu_button_listener.last_source_state()); |
353 } | 352 } |
354 | 353 |
355 // Test that the MenuButton stays pressed while there are any PressedLocks. | 354 // Test that the MenuButton stays pressed while there are any PressedLocks. |
356 TEST_F(MenuButtonTest, ButtonStateForMenuButtonsWithPressedLocks) { | 355 TEST_F(MenuButtonTest, ButtonStateForMenuButtonsWithPressedLocks) { |
| 356 // Hovered-state is not updated under mus when EventGenerator send a |
| 357 // mouse-move event. https://crbug.com/615033 |
| 358 if (IsMus()) |
| 359 return; |
357 CreateMenuButtonWithNoListener(); | 360 CreateMenuButtonWithNoListener(); |
358 | 361 |
359 // Move the mouse over the button; the button should be in a hovered state. | 362 // Move the mouse over the button; the button should be in a hovered state. |
360 generator()->MoveMouseTo(gfx::Point(10, 10)); | 363 generator()->MoveMouseTo(gfx::Point(10, 10)); |
361 EXPECT_EQ(Button::STATE_HOVERED, button()->state()); | 364 EXPECT_EQ(Button::STATE_HOVERED, button()->state()); |
362 | 365 |
363 // Introduce a PressedLock, which should make the button pressed. | 366 // Introduce a PressedLock, which should make the button pressed. |
364 std::unique_ptr<MenuButton::PressedLock> pressed_lock1( | 367 std::unique_ptr<MenuButton::PressedLock> pressed_lock1( |
365 new MenuButton::PressedLock(button())); | 368 new MenuButton::PressedLock(button())); |
366 EXPECT_EQ(Button::STATE_PRESSED, button()->state()); | 369 EXPECT_EQ(Button::STATE_PRESSED, button()->state()); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 button()->Activate(nullptr); | 538 button()->Activate(nullptr); |
536 | 539 |
537 EXPECT_EQ(InkDropState::ACTIVATED, ink_drop()->GetTargetInkDropState()); | 540 EXPECT_EQ(InkDropState::ACTIVATED, ink_drop()->GetTargetInkDropState()); |
538 } | 541 } |
539 | 542 |
540 #if defined(USE_AURA) | 543 #if defined(USE_AURA) |
541 | 544 |
542 // Tests that the MenuButton does not become pressed if it can be dragged, and a | 545 // Tests that the MenuButton does not become pressed if it can be dragged, and a |
543 // DragDropClient is processing the events. | 546 // DragDropClient is processing the events. |
544 TEST_F(MenuButtonTest, DraggableMenuButtonDoesNotActivateOnDrag) { | 547 TEST_F(MenuButtonTest, DraggableMenuButtonDoesNotActivateOnDrag) { |
| 548 // The test uses drag-n-drop, which isn't yet supported on mus. |
| 549 // https://crbug.com/614037. |
| 550 if (IsMus()) |
| 551 return; |
545 TestMenuButtonListener menu_button_listener; | 552 TestMenuButtonListener menu_button_listener; |
546 CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 553 CreateMenuButtonWithMenuButtonListener(&menu_button_listener); |
547 TestDragController drag_controller; | 554 TestDragController drag_controller; |
548 button()->set_drag_controller(&drag_controller); | 555 button()->set_drag_controller(&drag_controller); |
549 | 556 |
550 TestDragDropClient drag_client; | 557 TestDragDropClient drag_client; |
551 SetDragDropClient(GetContext(), &drag_client); | 558 SetDragDropClient(GetContext(), &drag_client); |
552 button()->PrependPreTargetHandler(&drag_client); | 559 button()->PrependPreTargetHandler(&drag_client); |
553 | 560 |
554 generator()->DragMouseBy(10, 0); | 561 generator()->DragMouseBy(10, 0); |
555 EXPECT_EQ(nullptr, menu_button_listener.last_source()); | 562 EXPECT_EQ(nullptr, menu_button_listener.last_source()); |
556 EXPECT_EQ(Button::STATE_NORMAL, menu_button_listener.last_source_state()); | 563 EXPECT_EQ(Button::STATE_NORMAL, menu_button_listener.last_source_state()); |
557 } | 564 } |
558 | 565 |
559 #endif // USE_AURA | 566 #endif // USE_AURA |
560 | 567 |
561 // No touch on desktop Mac. Tracked in http://crbug.com/445520. | 568 // No touch on desktop Mac. Tracked in http://crbug.com/445520. |
562 #if !defined(OS_MACOSX) || defined(USE_AURA) | 569 #if !defined(OS_MACOSX) || defined(USE_AURA) |
563 | 570 |
564 // Tests if the listener is notified correctly when a gesture tap happens on a | 571 // Tests if the listener is notified correctly when a gesture tap happens on a |
565 // MenuButton that has a MenuButtonListener. | 572 // MenuButton that has a MenuButtonListener. |
566 TEST_F(MenuButtonTest, ActivateDropDownOnGestureTap) { | 573 TEST_F(MenuButtonTest, ActivateDropDownOnGestureTap) { |
| 574 // Hovered-state is not updated under mus when EventGenerator send a |
| 575 // mouse-move event. https://crbug.com/615033 |
| 576 if (IsMus()) |
| 577 return; |
567 TestMenuButtonListener menu_button_listener; | 578 TestMenuButtonListener menu_button_listener; |
568 CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 579 CreateMenuButtonWithMenuButtonListener(&menu_button_listener); |
569 | 580 |
570 // Move the mouse outside the menu button so that it doesn't impact the | 581 // Move the mouse outside the menu button so that it doesn't impact the |
571 // button state. | 582 // button state. |
572 generator()->MoveMouseTo(400, 400); | 583 generator()->MoveMouseTo(400, 400); |
573 EXPECT_FALSE(button()->IsMouseHovered()); | 584 EXPECT_FALSE(button()->IsMouseHovered()); |
574 | 585 |
575 generator()->GestureTapAt(gfx::Point(10, 10)); | 586 generator()->GestureTapAt(gfx::Point(10, 10)); |
576 | 587 |
(...skipping 28 matching lines...) Expand all Loading... |
605 | 616 |
606 generator()->MoveTouch(gfx::Point(10, 30)); | 617 generator()->MoveTouch(gfx::Point(10, 30)); |
607 generator()->ReleaseTouch(); | 618 generator()->ReleaseTouch(); |
608 EXPECT_EQ(Button::STATE_NORMAL, button()->state()); | 619 EXPECT_EQ(Button::STATE_NORMAL, button()->state()); |
609 EXPECT_EQ(nullptr, menu_button_listener.last_source()); | 620 EXPECT_EQ(nullptr, menu_button_listener.last_source()); |
610 } | 621 } |
611 | 622 |
612 #endif // !defined(OS_MACOSX) || defined(USE_AURA) | 623 #endif // !defined(OS_MACOSX) || defined(USE_AURA) |
613 | 624 |
614 } // namespace views | 625 } // namespace views |
OLD | NEW |