| 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 22 matching lines...) Expand all  Loading... | 
| 33 class TestMenuButton : public MenuButton { | 33 class TestMenuButton : public MenuButton { | 
| 34  public: | 34  public: | 
| 35   explicit TestMenuButton(MenuButtonListener* menu_button_listener) | 35   explicit TestMenuButton(MenuButtonListener* menu_button_listener) | 
| 36       : MenuButton(base::string16(ASCIIToUTF16("button")), | 36       : MenuButton(base::string16(ASCIIToUTF16("button")), | 
| 37                    menu_button_listener, | 37                    menu_button_listener, | 
| 38                    false) {} | 38                    false) {} | 
| 39 | 39 | 
| 40   ~TestMenuButton() override {} | 40   ~TestMenuButton() override {} | 
| 41 | 41 | 
| 42   // Accessors to protected MenuButton methods. | 42   // Accessors to protected MenuButton methods. | 
| 43   void set_ink_drop_delegate(InkDropDelegate* ink_drop_delegate) { | 43   void set_ink_drop_delegate( | 
| 44     MenuButton::set_ink_drop_delegate(ink_drop_delegate); | 44       std::unique_ptr<InkDropDelegate> ink_drop_delegate) { | 
|  | 45     InkDropHostView::set_ink_drop_delegate(std::move(ink_drop_delegate)); | 
| 45   } | 46   } | 
| 46 | 47 | 
| 47  private: | 48  private: | 
| 48   DISALLOW_COPY_AND_ASSIGN(TestMenuButton); | 49   DISALLOW_COPY_AND_ASSIGN(TestMenuButton); | 
| 49 }; | 50 }; | 
| 50 | 51 | 
| 51 class MenuButtonTest : public ViewsTestBase { | 52 class MenuButtonTest : public ViewsTestBase { | 
| 52  public: | 53  public: | 
| 53   MenuButtonTest() : widget_(nullptr), button_(nullptr) {} | 54   MenuButtonTest() : widget_(nullptr), button_(nullptr) {} | 
| 54   ~MenuButtonTest() override {} | 55   ~MenuButtonTest() override {} | 
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 425   generator()->PressLeftButton(); | 426   generator()->PressLeftButton(); | 
| 426   EXPECT_EQ(nullptr, menu_button_listener.last_source()); | 427   EXPECT_EQ(nullptr, menu_button_listener.last_source()); | 
| 427 | 428 | 
| 428   generator()->ReleaseLeftButton(); | 429   generator()->ReleaseLeftButton(); | 
| 429   EXPECT_EQ(button(), menu_button_listener.last_source()); | 430   EXPECT_EQ(button(), menu_button_listener.last_source()); | 
| 430   EXPECT_EQ(Button::STATE_HOVERED, menu_button_listener.last_source_state()); | 431   EXPECT_EQ(Button::STATE_HOVERED, menu_button_listener.last_source_state()); | 
| 431 } | 432 } | 
| 432 | 433 | 
| 433 TEST_F(MenuButtonTest, InkDropStateForMenuButtonActivationsWithoutListener) { | 434 TEST_F(MenuButtonTest, InkDropStateForMenuButtonActivationsWithoutListener) { | 
| 434   CreateMenuButtonWithNoListener(); | 435   CreateMenuButtonWithNoListener(); | 
| 435   TestInkDropDelegate ink_drop_delegate; | 436   TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| 436   ink_drop_delegate.OnAction(InkDropState::ACTION_PENDING); | 437   ink_drop_delegate->OnAction(InkDropState::ACTION_PENDING); | 
| 437   button()->set_ink_drop_delegate(&ink_drop_delegate); | 438   button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| 438   button()->Activate(nullptr); | 439   button()->Activate(nullptr); | 
| 439 | 440 | 
| 440   EXPECT_EQ(InkDropState::HIDDEN, ink_drop_delegate.GetTargetInkDropState()); | 441   EXPECT_EQ(InkDropState::HIDDEN, ink_drop_delegate->GetTargetInkDropState()); | 
| 441 } | 442 } | 
| 442 | 443 | 
| 443 TEST_F(MenuButtonTest, | 444 TEST_F(MenuButtonTest, | 
| 444        InkDropStateForMenuButtonActivationsWithListenerThatDoesntAcquireALock) { | 445        InkDropStateForMenuButtonActivationsWithListenerThatDoesntAcquireALock) { | 
| 445   TestMenuButtonListener menu_button_listener; | 446   TestMenuButtonListener menu_button_listener; | 
| 446   CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 447   CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 
| 447   TestInkDropDelegate ink_drop_delegate; | 448   TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| 448   button()->set_ink_drop_delegate(&ink_drop_delegate); | 449   button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| 449   button()->Activate(nullptr); | 450   button()->Activate(nullptr); | 
| 450 | 451 | 
| 451   EXPECT_EQ(InkDropState::ACTION_TRIGGERED, | 452   EXPECT_EQ(InkDropState::ACTION_TRIGGERED, | 
| 452             ink_drop_delegate.GetTargetInkDropState()); | 453             ink_drop_delegate->GetTargetInkDropState()); | 
| 453 } | 454 } | 
| 454 | 455 | 
| 455 TEST_F( | 456 TEST_F( | 
| 456     MenuButtonTest, | 457     MenuButtonTest, | 
| 457     InkDropStateForMenuButtonActivationsWithListenerThatDontReleaseAllLocks) { | 458     InkDropStateForMenuButtonActivationsWithListenerThatDontReleaseAllLocks) { | 
| 458   PressStateMenuButtonListener menu_button_listener(false); | 459   PressStateMenuButtonListener menu_button_listener(false); | 
| 459   CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 460   CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 
| 460   menu_button_listener.set_menu_button(button()); | 461   menu_button_listener.set_menu_button(button()); | 
| 461   TestInkDropDelegate ink_drop_delegate; | 462   TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| 462   button()->set_ink_drop_delegate(&ink_drop_delegate); | 463   button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| 463   button()->Activate(nullptr); | 464   button()->Activate(nullptr); | 
| 464 | 465 | 
| 465   EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 466   EXPECT_EQ(InkDropState::ACTIVATED, | 
| 466 | 467             ink_drop_delegate->GetTargetInkDropState()); | 
| 467   // Prevent the button from accessing invalid memory during clean up. |  | 
| 468   button()->set_ink_drop_delegate(nullptr); |  | 
| 469 } | 468 } | 
| 470 | 469 | 
| 471 TEST_F(MenuButtonTest, | 470 TEST_F(MenuButtonTest, | 
| 472        InkDropStateForMenuButtonActivationsWithListenerThatReleaseAllLocks) { | 471        InkDropStateForMenuButtonActivationsWithListenerThatReleaseAllLocks) { | 
| 473   PressStateMenuButtonListener menu_button_listener(true); | 472   PressStateMenuButtonListener menu_button_listener(true); | 
| 474   CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 473   CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 
| 475   menu_button_listener.set_menu_button(button()); | 474   menu_button_listener.set_menu_button(button()); | 
| 476   TestInkDropDelegate ink_drop_delegate; | 475   TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| 477   button()->set_ink_drop_delegate(&ink_drop_delegate); | 476   button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| 478   button()->Activate(nullptr); | 477   button()->Activate(nullptr); | 
| 479 | 478 | 
| 480   EXPECT_EQ(InkDropState::DEACTIVATED, | 479   EXPECT_EQ(InkDropState::DEACTIVATED, | 
| 481             ink_drop_delegate.GetTargetInkDropState()); | 480             ink_drop_delegate->GetTargetInkDropState()); | 
| 482 } | 481 } | 
| 483 | 482 | 
| 484 TEST_F(MenuButtonTest, InkDropStateForMenuButtonsWithPressedLocks) { | 483 TEST_F(MenuButtonTest, InkDropStateForMenuButtonsWithPressedLocks) { | 
| 485   CreateMenuButtonWithNoListener(); | 484   CreateMenuButtonWithNoListener(); | 
| 486   TestInkDropDelegate ink_drop_delegate; | 485   TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| 487   button()->set_ink_drop_delegate(&ink_drop_delegate); | 486   button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| 488 | 487 | 
| 489   std::unique_ptr<MenuButton::PressedLock> pressed_lock1( | 488   std::unique_ptr<MenuButton::PressedLock> pressed_lock1( | 
| 490       new MenuButton::PressedLock(button())); | 489       new MenuButton::PressedLock(button())); | 
| 491 | 490 | 
| 492   EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 491   EXPECT_EQ(InkDropState::ACTIVATED, | 
|  | 492             ink_drop_delegate->GetTargetInkDropState()); | 
| 493 | 493 | 
| 494   std::unique_ptr<MenuButton::PressedLock> pressed_lock2( | 494   std::unique_ptr<MenuButton::PressedLock> pressed_lock2( | 
| 495       new MenuButton::PressedLock(button())); | 495       new MenuButton::PressedLock(button())); | 
| 496 | 496 | 
| 497   EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 497   EXPECT_EQ(InkDropState::ACTIVATED, | 
|  | 498             ink_drop_delegate->GetTargetInkDropState()); | 
| 498 | 499 | 
| 499   pressed_lock1.reset(); | 500   pressed_lock1.reset(); | 
| 500   EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 501   EXPECT_EQ(InkDropState::ACTIVATED, | 
|  | 502             ink_drop_delegate->GetTargetInkDropState()); | 
| 501 | 503 | 
| 502   pressed_lock2.reset(); | 504   pressed_lock2.reset(); | 
| 503   EXPECT_EQ(InkDropState::DEACTIVATED, | 505   EXPECT_EQ(InkDropState::DEACTIVATED, | 
| 504             ink_drop_delegate.GetTargetInkDropState()); | 506             ink_drop_delegate->GetTargetInkDropState()); | 
| 505 } | 507 } | 
| 506 | 508 | 
| 507 // Verifies only one ink drop animation is triggered when multiple PressedLocks | 509 // Verifies only one ink drop animation is triggered when multiple PressedLocks | 
| 508 // are attached to a MenuButton. | 510 // are attached to a MenuButton. | 
| 509 TEST_F(MenuButtonTest, OneInkDropAnimationForReentrantPressedLocks) { | 511 TEST_F(MenuButtonTest, OneInkDropAnimationForReentrantPressedLocks) { | 
| 510   CreateMenuButtonWithNoListener(); | 512   CreateMenuButtonWithNoListener(); | 
| 511   TestInkDropDelegate ink_drop_delegate; | 513   TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| 512   button()->set_ink_drop_delegate(&ink_drop_delegate); | 514   button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| 513 | 515 | 
| 514   std::unique_ptr<MenuButton::PressedLock> pressed_lock1( | 516   std::unique_ptr<MenuButton::PressedLock> pressed_lock1( | 
| 515       new MenuButton::PressedLock(button())); | 517       new MenuButton::PressedLock(button())); | 
| 516 | 518 | 
| 517   EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 519   EXPECT_EQ(InkDropState::ACTIVATED, | 
| 518   ink_drop_delegate.OnAction(InkDropState::ACTION_PENDING); | 520             ink_drop_delegate->GetTargetInkDropState()); | 
|  | 521   ink_drop_delegate->OnAction(InkDropState::ACTION_PENDING); | 
| 519 | 522 | 
| 520   std::unique_ptr<MenuButton::PressedLock> pressed_lock2( | 523   std::unique_ptr<MenuButton::PressedLock> pressed_lock2( | 
| 521       new MenuButton::PressedLock(button())); | 524       new MenuButton::PressedLock(button())); | 
| 522 | 525 | 
| 523   EXPECT_EQ(InkDropState::ACTION_PENDING, | 526   EXPECT_EQ(InkDropState::ACTION_PENDING, | 
| 524             ink_drop_delegate.GetTargetInkDropState()); | 527             ink_drop_delegate->GetTargetInkDropState()); | 
| 525 } | 528 } | 
| 526 | 529 | 
| 527 // Verifies the InkDropState is left as ACTIVATED if a PressedLock is active | 530 // Verifies the InkDropState is left as ACTIVATED if a PressedLock is active | 
| 528 // before another Activation occurs. | 531 // before another Activation occurs. | 
| 529 TEST_F(MenuButtonTest, | 532 TEST_F(MenuButtonTest, | 
| 530        InkDropStateForMenuButtonWithPressedLockBeforeActivation) { | 533        InkDropStateForMenuButtonWithPressedLockBeforeActivation) { | 
| 531   TestMenuButtonListener menu_button_listener; | 534   TestMenuButtonListener menu_button_listener; | 
| 532   CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 535   CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 
| 533   TestInkDropDelegate ink_drop_delegate; | 536   TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| 534   button()->set_ink_drop_delegate(&ink_drop_delegate); | 537   button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| 535   MenuButton::PressedLock lock(button()); | 538   MenuButton::PressedLock lock(button()); | 
| 536 | 539 | 
| 537   button()->Activate(nullptr); | 540   button()->Activate(nullptr); | 
| 538 | 541 | 
| 539   EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 542   EXPECT_EQ(InkDropState::ACTIVATED, | 
|  | 543             ink_drop_delegate->GetTargetInkDropState()); | 
| 540 } | 544 } | 
| 541 | 545 | 
| 542 #if defined(USE_AURA) | 546 #if defined(USE_AURA) | 
| 543 | 547 | 
| 544 // Tests that the MenuButton does not become pressed if it can be dragged, and a | 548 // Tests that the MenuButton does not become pressed if it can be dragged, and a | 
| 545 // DragDropClient is processing the events. | 549 // DragDropClient is processing the events. | 
| 546 TEST_F(MenuButtonTest, DraggableMenuButtonDoesNotActivateOnDrag) { | 550 TEST_F(MenuButtonTest, DraggableMenuButtonDoesNotActivateOnDrag) { | 
| 547   TestMenuButtonListener menu_button_listener; | 551   TestMenuButtonListener menu_button_listener; | 
| 548   CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 552   CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 
| 549   TestDragController drag_controller; | 553   TestDragController drag_controller; | 
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 608   generator()->MoveTouch(gfx::Point(10, 30)); | 612   generator()->MoveTouch(gfx::Point(10, 30)); | 
| 609   generator()->ReleaseTouch(); | 613   generator()->ReleaseTouch(); | 
| 610   EXPECT_EQ(Button::STATE_NORMAL, button()->state()); | 614   EXPECT_EQ(Button::STATE_NORMAL, button()->state()); | 
| 611   EXPECT_EQ(nullptr, menu_button_listener.last_source()); | 615   EXPECT_EQ(nullptr, menu_button_listener.last_source()); | 
| 612 } | 616 } | 
| 613 | 617 | 
| 614 #endif  // !defined(OS_MACOSX) || defined(USE_AURA) | 618 #endif  // !defined(OS_MACOSX) || defined(USE_AURA) | 
| 615 | 619 | 
| 616 }  // namespace views | 620 }  // namespace views | 
| 617 }  // namespace test | 621 }  // namespace test | 
| OLD | NEW | 
|---|