| Index: ui/views/controls/button/menu_button_unittest.cc | 
| diff --git a/ui/views/controls/button/menu_button_unittest.cc b/ui/views/controls/button/menu_button_unittest.cc | 
| index e34315ec014ed2e1b1dbbe4bf2744db9a047360e..2f03b904bac8a7a42ee57bb39e590f6c1919aa9d 100644 | 
| --- a/ui/views/controls/button/menu_button_unittest.cc | 
| +++ b/ui/views/controls/button/menu_button_unittest.cc | 
| @@ -40,8 +40,9 @@ class TestMenuButton : public MenuButton { | 
| ~TestMenuButton() override {} | 
|  | 
| // Accessors to protected MenuButton methods. | 
| -  void set_ink_drop_delegate(InkDropDelegate* ink_drop_delegate) { | 
| -    MenuButton::set_ink_drop_delegate(ink_drop_delegate); | 
| +  void set_ink_drop_delegate( | 
| +      std::unique_ptr<InkDropDelegate> ink_drop_delegate) { | 
| +    InkDropHostView::set_ink_drop_delegate(std::move(ink_drop_delegate)); | 
| } | 
|  | 
| private: | 
| @@ -432,24 +433,24 @@ TEST_F(MenuButtonTest, DraggableMenuButtonActivatesOnRelease) { | 
|  | 
| TEST_F(MenuButtonTest, InkDropStateForMenuButtonActivationsWithoutListener) { | 
| CreateMenuButtonWithNoListener(); | 
| -  TestInkDropDelegate ink_drop_delegate; | 
| -  ink_drop_delegate.OnAction(InkDropState::ACTION_PENDING); | 
| -  button()->set_ink_drop_delegate(&ink_drop_delegate); | 
| +  TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| +  ink_drop_delegate->OnAction(InkDropState::ACTION_PENDING); | 
| +  button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| button()->Activate(nullptr); | 
|  | 
| -  EXPECT_EQ(InkDropState::HIDDEN, ink_drop_delegate.GetTargetInkDropState()); | 
| +  EXPECT_EQ(InkDropState::HIDDEN, ink_drop_delegate->GetTargetInkDropState()); | 
| } | 
|  | 
| TEST_F(MenuButtonTest, | 
| InkDropStateForMenuButtonActivationsWithListenerThatDoesntAcquireALock) { | 
| TestMenuButtonListener menu_button_listener; | 
| CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 
| -  TestInkDropDelegate ink_drop_delegate; | 
| -  button()->set_ink_drop_delegate(&ink_drop_delegate); | 
| +  TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| +  button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| button()->Activate(nullptr); | 
|  | 
| EXPECT_EQ(InkDropState::ACTION_TRIGGERED, | 
| -            ink_drop_delegate.GetTargetInkDropState()); | 
| +            ink_drop_delegate->GetTargetInkDropState()); | 
| } | 
|  | 
| TEST_F( | 
| @@ -458,14 +459,12 @@ TEST_F( | 
| PressStateMenuButtonListener menu_button_listener(false); | 
| CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 
| menu_button_listener.set_menu_button(button()); | 
| -  TestInkDropDelegate ink_drop_delegate; | 
| -  button()->set_ink_drop_delegate(&ink_drop_delegate); | 
| +  TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| +  button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| button()->Activate(nullptr); | 
|  | 
| -  EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 
| - | 
| -  // Prevent the button from accessing invalid memory during clean up. | 
| -  button()->set_ink_drop_delegate(nullptr); | 
| +  EXPECT_EQ(InkDropState::ACTIVATED, | 
| +            ink_drop_delegate->GetTargetInkDropState()); | 
| } | 
|  | 
| TEST_F(MenuButtonTest, | 
| @@ -473,55 +472,59 @@ TEST_F(MenuButtonTest, | 
| PressStateMenuButtonListener menu_button_listener(true); | 
| CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 
| menu_button_listener.set_menu_button(button()); | 
| -  TestInkDropDelegate ink_drop_delegate; | 
| -  button()->set_ink_drop_delegate(&ink_drop_delegate); | 
| +  TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| +  button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| button()->Activate(nullptr); | 
|  | 
| EXPECT_EQ(InkDropState::DEACTIVATED, | 
| -            ink_drop_delegate.GetTargetInkDropState()); | 
| +            ink_drop_delegate->GetTargetInkDropState()); | 
| } | 
|  | 
| TEST_F(MenuButtonTest, InkDropStateForMenuButtonsWithPressedLocks) { | 
| CreateMenuButtonWithNoListener(); | 
| -  TestInkDropDelegate ink_drop_delegate; | 
| -  button()->set_ink_drop_delegate(&ink_drop_delegate); | 
| +  TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| +  button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
|  | 
| std::unique_ptr<MenuButton::PressedLock> pressed_lock1( | 
| new MenuButton::PressedLock(button())); | 
|  | 
| -  EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 
| +  EXPECT_EQ(InkDropState::ACTIVATED, | 
| +            ink_drop_delegate->GetTargetInkDropState()); | 
|  | 
| std::unique_ptr<MenuButton::PressedLock> pressed_lock2( | 
| new MenuButton::PressedLock(button())); | 
|  | 
| -  EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 
| +  EXPECT_EQ(InkDropState::ACTIVATED, | 
| +            ink_drop_delegate->GetTargetInkDropState()); | 
|  | 
| pressed_lock1.reset(); | 
| -  EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 
| +  EXPECT_EQ(InkDropState::ACTIVATED, | 
| +            ink_drop_delegate->GetTargetInkDropState()); | 
|  | 
| pressed_lock2.reset(); | 
| EXPECT_EQ(InkDropState::DEACTIVATED, | 
| -            ink_drop_delegate.GetTargetInkDropState()); | 
| +            ink_drop_delegate->GetTargetInkDropState()); | 
| } | 
|  | 
| // Verifies only one ink drop animation is triggered when multiple PressedLocks | 
| // are attached to a MenuButton. | 
| TEST_F(MenuButtonTest, OneInkDropAnimationForReentrantPressedLocks) { | 
| CreateMenuButtonWithNoListener(); | 
| -  TestInkDropDelegate ink_drop_delegate; | 
| -  button()->set_ink_drop_delegate(&ink_drop_delegate); | 
| +  TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| +  button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
|  | 
| std::unique_ptr<MenuButton::PressedLock> pressed_lock1( | 
| new MenuButton::PressedLock(button())); | 
|  | 
| -  EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 
| -  ink_drop_delegate.OnAction(InkDropState::ACTION_PENDING); | 
| +  EXPECT_EQ(InkDropState::ACTIVATED, | 
| +            ink_drop_delegate->GetTargetInkDropState()); | 
| +  ink_drop_delegate->OnAction(InkDropState::ACTION_PENDING); | 
|  | 
| std::unique_ptr<MenuButton::PressedLock> pressed_lock2( | 
| new MenuButton::PressedLock(button())); | 
|  | 
| EXPECT_EQ(InkDropState::ACTION_PENDING, | 
| -            ink_drop_delegate.GetTargetInkDropState()); | 
| +            ink_drop_delegate->GetTargetInkDropState()); | 
| } | 
|  | 
| // Verifies the InkDropState is left as ACTIVATED if a PressedLock is active | 
| @@ -530,13 +533,14 @@ TEST_F(MenuButtonTest, | 
| InkDropStateForMenuButtonWithPressedLockBeforeActivation) { | 
| TestMenuButtonListener menu_button_listener; | 
| CreateMenuButtonWithMenuButtonListener(&menu_button_listener); | 
| -  TestInkDropDelegate ink_drop_delegate; | 
| -  button()->set_ink_drop_delegate(&ink_drop_delegate); | 
| +  TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 
| +  button()->set_ink_drop_delegate(base::WrapUnique(ink_drop_delegate)); | 
| MenuButton::PressedLock lock(button()); | 
|  | 
| button()->Activate(nullptr); | 
|  | 
| -  EXPECT_EQ(InkDropState::ACTIVATED, ink_drop_delegate.GetTargetInkDropState()); | 
| +  EXPECT_EQ(InkDropState::ACTIVATED, | 
| +            ink_drop_delegate->GetTargetInkDropState()); | 
| } | 
|  | 
| #if defined(USE_AURA) | 
|  |