Index: ui/views/controls/button/custom_button_unittest.cc |
diff --git a/ui/views/controls/button/custom_button_unittest.cc b/ui/views/controls/button/custom_button_unittest.cc |
index a911e292dcedcc07c19fcbbb2dd9e5933ebbe998..01a233c7db9ae3f57d0c292bc32808e63d57bc09 100644 |
--- a/ui/views/controls/button/custom_button_unittest.cc |
+++ b/ui/views/controls/button/custom_button_unittest.cc |
@@ -57,8 +57,9 @@ class TestContextMenuController : public ContextMenuController { |
class TestCustomButton : public CustomButton, public ButtonListener { |
public: |
- explicit TestCustomButton() |
+ explicit TestCustomButton(bool has_ink_drop_action_on_click) |
: CustomButton(this) { |
+ set_has_ink_drop_action_on_click(has_ink_drop_action_on_click); |
} |
~TestCustomButton() override {} |
@@ -108,7 +109,7 @@ class CustomButtonTest : public ViewsTestBase { |
widget_->Init(params); |
widget_->Show(); |
- button_ = new TestCustomButton(); |
+ button_ = new TestCustomButton(false); |
widget_->SetContentsView(button_); |
} |
@@ -117,9 +118,10 @@ class CustomButtonTest : public ViewsTestBase { |
ViewsTestBase::TearDown(); |
} |
- void CreateButtonWithInkDrop(std::unique_ptr<InkDrop> ink_drop) { |
+ void CreateButtonWithInkDrop(std::unique_ptr<InkDrop> ink_drop, |
+ bool has_ink_drop_action_on_click) { |
delete button_; |
- button_ = new TestCustomButton(); |
+ button_ = new TestCustomButton(has_ink_drop_action_on_click); |
InkDropHostViewTestApi(button_).SetInkDrop(std::move(ink_drop)); |
widget_->SetContentsView(button_); |
} |
@@ -350,7 +352,7 @@ TEST_F(CustomButtonTest, AsCustomButton) { |
// may enter a different ink drop state. |
TEST_F(CustomButtonTest, ButtonClickTogglesInkDrop) { |
TestInkDrop* ink_drop = new TestInkDrop(); |
- CreateButtonWithInkDrop(base::WrapUnique(ink_drop)); |
+ CreateButtonWithInkDrop(base::WrapUnique(ink_drop), false); |
ui::test::EventGenerator generator(widget()->GetNativeWindow()); |
generator.set_current_location(gfx::Point(50, 50)); |
@@ -365,7 +367,7 @@ TEST_F(CustomButtonTest, ButtonClickTogglesInkDrop) { |
// Releasing capture should also reset PRESSED button state to NORMAL. |
TEST_F(CustomButtonTest, CaptureLossHidesInkDrop) { |
TestInkDrop* ink_drop = new TestInkDrop(); |
- CreateButtonWithInkDrop(base::WrapUnique(ink_drop)); |
+ CreateButtonWithInkDrop(base::WrapUnique(ink_drop), false); |
ui::test::EventGenerator generator(widget()->GetNativeWindow()); |
generator.set_current_location(gfx::Point(50, 50)); |
@@ -386,7 +388,7 @@ TEST_F(CustomButtonTest, CaptureLossHidesInkDrop) { |
TEST_F(CustomButtonTest, HideInkDropWhenShowingContextMenu) { |
TestInkDrop* ink_drop = new TestInkDrop(); |
- CreateButtonWithInkDrop(base::WrapUnique(ink_drop)); |
+ CreateButtonWithInkDrop(base::WrapUnique(ink_drop), false); |
TestContextMenuController context_menu_controller; |
button()->set_context_menu_controller(&context_menu_controller); |
button()->set_hide_ink_drop_when_showing_context_menu(true); |
@@ -402,7 +404,7 @@ TEST_F(CustomButtonTest, HideInkDropWhenShowingContextMenu) { |
TEST_F(CustomButtonTest, DontHideInkDropWhenShowingContextMenu) { |
TestInkDrop* ink_drop = new TestInkDrop(); |
- CreateButtonWithInkDrop(base::WrapUnique(ink_drop)); |
+ CreateButtonWithInkDrop(base::WrapUnique(ink_drop), false); |
TestContextMenuController context_menu_controller; |
button()->set_context_menu_controller(&context_menu_controller); |
button()->set_hide_ink_drop_when_showing_context_menu(false); |
@@ -420,7 +422,7 @@ TEST_F(CustomButtonTest, HideInkDropOnBlur) { |
gfx::Point center(10, 10); |
TestInkDrop* ink_drop = new TestInkDrop(); |
- CreateButtonWithInkDrop(base::WrapUnique(ink_drop)); |
+ CreateButtonWithInkDrop(base::WrapUnique(ink_drop), false); |
button()->OnFocus(); |
@@ -440,7 +442,7 @@ TEST_F(CustomButtonTest, HideInkDropOnBlur) { |
TEST_F(CustomButtonTest, InkDropAfterTryingToShowContextMenu) { |
TestInkDrop* ink_drop = new TestInkDrop(); |
- CreateButtonWithInkDrop(base::WrapUnique(ink_drop)); |
+ CreateButtonWithInkDrop(base::WrapUnique(ink_drop), false); |
button()->set_context_menu_controller(nullptr); |
ink_drop->SetHovered(true); |
@@ -452,12 +454,15 @@ TEST_F(CustomButtonTest, InkDropAfterTryingToShowContextMenu) { |
EXPECT_EQ(InkDropState::ACTION_PENDING, ink_drop->GetTargetInkDropState()); |
} |
-TEST_F(CustomButtonTest, InkDropShowHideOnMouseDragged) { |
+// Tests that when button is set to notify on release, dragging mouse out and |
+// back transitions ink drop states correctly. |
+TEST_F(CustomButtonTest, InkDropShowHideOnMouseDraggedNotifyOnRelease) { |
gfx::Point center(10, 10); |
gfx::Point oob(-1, -1); |
TestInkDrop* ink_drop = new TestInkDrop(); |
- CreateButtonWithInkDrop(base::WrapUnique(ink_drop)); |
+ CreateButtonWithInkDrop(base::WrapUnique(ink_drop), false); |
+ button()->set_notify_action(CustomButton::NOTIFY_ON_RELEASE); |
button()->OnMousePressed(ui::MouseEvent( |
ui::ET_MOUSE_PRESSED, center, center, ui::EventTimeForNow(), |
@@ -490,12 +495,54 @@ TEST_F(CustomButtonTest, InkDropShowHideOnMouseDragged) { |
EXPECT_FALSE(button()->pressed()); |
} |
+// Tests that when button is set to notify on press, dragging mouse out and back |
+// does not change the ink drop state. |
+TEST_F(CustomButtonTest, InkDropShowHideOnMouseDraggedNotifyOnPress) { |
+ gfx::Point center(10, 10); |
+ gfx::Point oob(-1, -1); |
+ |
+ TestInkDrop* ink_drop = new TestInkDrop(); |
+ CreateButtonWithInkDrop(base::WrapUnique(ink_drop), true); |
+ button()->set_notify_action(CustomButton::NOTIFY_ON_PRESS); |
+ |
+ button()->OnMousePressed(ui::MouseEvent( |
+ ui::ET_MOUSE_PRESSED, center, center, ui::EventTimeForNow(), |
+ ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON)); |
+ |
+ EXPECT_EQ(InkDropState::ACTION_TRIGGERED, ink_drop->GetTargetInkDropState()); |
+ EXPECT_TRUE(button()->pressed()); |
+ |
+ button()->OnMouseDragged( |
+ ui::MouseEvent(ui::ET_MOUSE_PRESSED, oob, oob, ui::EventTimeForNow(), |
+ ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON)); |
+ |
+ EXPECT_EQ(InkDropState::ACTION_TRIGGERED, ink_drop->GetTargetInkDropState()); |
+ |
+ button()->OnMouseDragged(ui::MouseEvent( |
+ ui::ET_MOUSE_PRESSED, center, center, ui::EventTimeForNow(), |
+ ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON)); |
+ |
+ EXPECT_EQ(InkDropState::ACTION_TRIGGERED, ink_drop->GetTargetInkDropState()); |
+ |
+ button()->OnMouseDragged( |
+ ui::MouseEvent(ui::ET_MOUSE_PRESSED, oob, oob, ui::EventTimeForNow(), |
+ ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON)); |
+ |
+ EXPECT_EQ(InkDropState::ACTION_TRIGGERED, ink_drop->GetTargetInkDropState()); |
+ |
+ button()->OnMouseReleased( |
+ ui::MouseEvent(ui::ET_MOUSE_PRESSED, oob, oob, ui::EventTimeForNow(), |
+ ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON)); |
+ |
+ EXPECT_EQ(InkDropState::ACTION_TRIGGERED, ink_drop->GetTargetInkDropState()); |
+} |
+ |
TEST_F(CustomButtonTest, InkDropStaysHiddenWhileDragging) { |
gfx::Point center(10, 10); |
gfx::Point oob(-1, -1); |
TestInkDrop* ink_drop = new TestInkDrop(); |
- CreateButtonWithInkDrop(base::WrapUnique(ink_drop)); |
+ CreateButtonWithInkDrop(base::WrapUnique(ink_drop), false); |
button()->OnMousePressed(ui::MouseEvent( |
ui::ET_MOUSE_PRESSED, center, center, ui::EventTimeForNow(), |