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

Unified Diff: cc/input/scrollbar_animation_controller_thinning_unittest.cc

Issue 2552813002: Overlay scrollbars shouldn't fade out while mouse is over/near. (Closed)
Patch Set: removed braces Created 4 years 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 | « cc/input/scrollbar_animation_controller_thinning.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/input/scrollbar_animation_controller_thinning_unittest.cc
diff --git a/cc/input/scrollbar_animation_controller_thinning_unittest.cc b/cc/input/scrollbar_animation_controller_thinning_unittest.cc
index 243602ba6adc177efe609a1c827e3358b5b7b54e..9d2fee7152b3197771b3bce825f3b43280ce0d96 100644
--- a/cc/input/scrollbar_animation_controller_thinning_unittest.cc
+++ b/cc/input/scrollbar_animation_controller_thinning_unittest.cc
@@ -200,8 +200,8 @@ TEST_F(ScrollbarAnimationControllerThinningTest, BasicAppearAndFadeOut) {
}
// Scroll content. Move the mouse near the scrollbar and confirm it becomes
-// thick. Ensure it fades out after that.
-TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearAndFadeOut) {
+// thick. Ensure it remains visible as long as the mouse is near the scrollbar.
+TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearAndDontFadeOut) {
base::TimeTicks time;
time += base::TimeDelta::FromSeconds(1);
@@ -212,6 +212,7 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearAndFadeOut) {
// An animation should have been enqueued.
EXPECT_EQ(kDelayBeforeStarting, client_.delay());
EXPECT_FALSE(client_.start_fade().is_null());
+ EXPECT_FALSE(client_.start_fade().IsCancelled());
// Now move the mouse near the scrollbar. This should cancel the currently
// queued fading animation and start animating thickness.
@@ -228,15 +229,16 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearAndFadeOut) {
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
- // Once the thickening animation is complete, it should enqueue the delayed
- // fade animation.
- EXPECT_FALSE(client_.start_fade().is_null());
- EXPECT_FALSE(client_.start_fade().IsCancelled());
+ // Mouse is still near the Scrollbar. Once the thickness animation is
+ // complete, the queued delayed fade animation should be either cancelled or
+ // null.
+ EXPECT_TRUE(client_.start_fade().is_null() ||
+ client_.start_fade().IsCancelled());
}
// Scroll content. Move the mouse over the scrollbar and confirm it becomes
-// thick. Ensure it fades out after that.
-TEST_F(ScrollbarAnimationControllerThinningTest, MoveOverAndFadeOut) {
+// thick. Ensure it remains visible as long as the mouse is over the scrollbar.
+TEST_F(ScrollbarAnimationControllerThinningTest, MoveOverAndDontFadeOut) {
base::TimeTicks time;
time += base::TimeDelta::FromSeconds(1);
@@ -247,6 +249,7 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveOverAndFadeOut) {
// An animation should have been enqueued.
EXPECT_EQ(kDelayBeforeStarting, client_.delay());
EXPECT_FALSE(client_.start_fade().is_null());
+ EXPECT_FALSE(client_.start_fade().IsCancelled());
// Now move the mouse over the scrollbar. This should cancel the currently
// queued fading animation and start animating thickness.
@@ -263,10 +266,11 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveOverAndFadeOut) {
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
- // Once the thickening animation is complete, it should enqueue the delayed
- // fade animation.
- EXPECT_FALSE(client_.start_fade().is_null());
- EXPECT_FALSE(client_.start_fade().IsCancelled());
+ // Mouse is still over the Scrollbar. Once the thickness animation is
+ // complete, the queued delayed fade animation should be either null or
+ // cancelled.
+ EXPECT_TRUE(client_.start_fade().is_null() ||
+ client_.start_fade().IsCancelled());
}
// Make sure a scrollbar captured before the thickening animation doesn't try
@@ -291,9 +295,9 @@ TEST_F(ScrollbarAnimationControllerThinningTest,
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
- // The fade animation should have been cancelled.
- EXPECT_FALSE(client_.start_fade().is_null());
- EXPECT_TRUE(client_.start_fade().IsCancelled());
+ // The fade animation should have been cleared or cancelled.
+ EXPECT_TRUE(client_.start_fade().is_null() ||
+ client_.start_fade().IsCancelled());
}
// Make sure a scrollbar captured after a thickening animation doesn't try to
@@ -309,6 +313,7 @@ TEST_F(ScrollbarAnimationControllerThinningTest, DontFadeWhileCaptured) {
// An animation should have been enqueued.
EXPECT_EQ(kDelayBeforeStarting, client_.delay());
EXPECT_FALSE(client_.start_fade().is_null());
+ EXPECT_FALSE(client_.start_fade().IsCancelled());
// Now move the mouse over the scrollbar and animate it until it's thick.
scrollbar_controller_->DidMouseMoveNear(0);
@@ -318,18 +323,21 @@ TEST_F(ScrollbarAnimationControllerThinningTest, DontFadeWhileCaptured) {
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
- // Since the scrollbar became thick, it should have queued up a fade.
- EXPECT_FALSE(client_.start_fade().is_null());
- EXPECT_FALSE(client_.start_fade().IsCancelled());
+ // Since the mouse is over the scrollbar, it should either clear or cancel the
+ // queued fade.
+ EXPECT_TRUE(client_.start_fade().is_null() ||
+ client_.start_fade().IsCancelled());
- // Make sure capturing the scrollbar stops the fade.
+ // Make sure the queued fade animation is still null or cancelled after
+ // capturing the scrollbar.
scrollbar_controller_->DidMouseDown();
- EXPECT_FALSE(client_.start_fade().is_null());
- EXPECT_TRUE(client_.start_fade().IsCancelled());
+ EXPECT_TRUE(client_.start_fade().is_null() ||
+ client_.start_fade().IsCancelled());
}
-// Make sure releasing a captured scrollbar causes it to fade out.
-TEST_F(ScrollbarAnimationControllerThinningTest, FadeAfterReleased) {
+// Make sure releasing a captured scrollbar when the mouse isn't near it, causes
+// the scrollbar to fade out.
+TEST_F(ScrollbarAnimationControllerThinningTest, FadeAfterReleasedFar) {
base::TimeTicks time;
time += base::TimeDelta::FromSeconds(1);
@@ -340,6 +348,7 @@ TEST_F(ScrollbarAnimationControllerThinningTest, FadeAfterReleased) {
// An animation should have been enqueued.
EXPECT_EQ(kDelayBeforeStarting, client_.delay());
EXPECT_FALSE(client_.start_fade().is_null());
+ EXPECT_FALSE(client_.start_fade().IsCancelled());
// Now move the mouse over the scrollbar and capture it.
scrollbar_controller_->DidMouseMoveNear(0);
@@ -347,18 +356,33 @@ TEST_F(ScrollbarAnimationControllerThinningTest, FadeAfterReleased) {
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
- // Since the scrollbar became thick, it should have queued up a fade.
- EXPECT_FALSE(client_.start_fade().is_null());
- EXPECT_TRUE(client_.start_fade().IsCancelled());
+ // Since the mouse is still near the scrollbar, the queued fade should be
+ // either null or cancelled.
+ EXPECT_TRUE(client_.start_fade().is_null() ||
+ client_.start_fade().IsCancelled());
+ // Now move the mouse away from the scrollbar and release it.
+ scrollbar_controller_->DidMouseMoveNear(
+ kDefaultMouseMoveDistanceToTriggerAnimation + 1);
scrollbar_controller_->DidMouseUp();
+
+ scrollbar_controller_->Animate(time);
+ EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
+ EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
+ time += kThinningDuration;
+ scrollbar_controller_->Animate(time);
+ EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
+ EXPECT_FLOAT_EQ(kIdleThicknessScale,
+ scrollbar_layer_->thumb_thickness_scale_factor());
+
+ // The thickness animation is complete, a fade out must be queued.
EXPECT_FALSE(client_.start_fade().is_null());
EXPECT_FALSE(client_.start_fade().IsCancelled());
}
-// Make sure moving near a scrollbar while it's fading out causes it to reset
-// the opacity and thicken.
-TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearScrollbarWhileFading) {
+// Make sure releasing a captured scrollbar when the mouse is near/over it,
+// doesn't cause the scrollbar to fade out.
+TEST_F(ScrollbarAnimationControllerThinningTest, DontFadeAfterReleasedNear) {
base::TimeTicks time;
time += base::TimeDelta::FromSeconds(1);
@@ -366,36 +390,33 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearScrollbarWhileFading) {
scrollbar_controller_->DidScrollUpdate(false);
scrollbar_controller_->DidScrollEnd();
- // An animation should have been enqueued. Start it.
+ // An animation should have been enqueued.
EXPECT_EQ(kDelayBeforeStarting, client_.delay());
EXPECT_FALSE(client_.start_fade().is_null());
- client_.start_fade().Run();
+ EXPECT_FALSE(client_.start_fade().IsCancelled());
- scrollbar_controller_->Animate(time);
+ // Now move the mouse over the scrollbar and capture it.
+ scrollbar_controller_->DidMouseMoveNear(0);
+ scrollbar_controller_->DidMouseDown();
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
+ EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
- // Proceed half way through the fade out animation.
- time += kFadeDuration / 2;
- scrollbar_controller_->Animate(time);
- EXPECT_FLOAT_EQ(0.5f, scrollbar_layer_->Opacity());
-
- // Now move the mouse near the scrollbar. It should reset opacity to 1
- // instantly and start animating to thick.
- scrollbar_controller_->DidMouseMoveNear(1);
- EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
- EXPECT_FLOAT_EQ(kIdleThicknessScale,
- scrollbar_layer_->thumb_thickness_scale_factor());
+ // Since the mouse is over the scrollbar, the queued fade must be either
+ // null or cancelled.
+ EXPECT_TRUE(client_.start_fade().is_null() ||
+ client_.start_fade().IsCancelled());
- scrollbar_controller_->Animate(time);
- time += kThinningDuration;
- scrollbar_controller_->Animate(time);
+ // Mouse is still near the scrollbar, releasing it shouldn't do anything.
+ scrollbar_controller_->DidMouseUp();
+ EXPECT_TRUE(client_.start_fade().is_null() ||
+ client_.start_fade().IsCancelled());
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
}
-// Make sure capturing a scrollbar while it's fading out causes it to reset the
-// opacity and thicken instantly.
-TEST_F(ScrollbarAnimationControllerThinningTest, CaptureScrollbarWhileFading) {
+// Make sure moving near a scrollbar while it's fading out causes it to reset
+// the opacity and thicken.
+TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearScrollbarWhileFading) {
base::TimeTicks time;
time += base::TimeDelta::FromSeconds(1);
@@ -403,14 +424,6 @@ TEST_F(ScrollbarAnimationControllerThinningTest, CaptureScrollbarWhileFading) {
scrollbar_controller_->DidScrollUpdate(false);
scrollbar_controller_->DidScrollEnd();
- // Move mouse over the scrollbar.
- scrollbar_controller_->DidMouseMoveNear(0);
- scrollbar_controller_->Animate(time);
- time += kThinningDuration;
- scrollbar_controller_->Animate(time);
- EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
- EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
-
// A fade animation should have been enqueued. Start it.
EXPECT_EQ(kDelayBeforeStarting, client_.delay());
EXPECT_FALSE(client_.start_fade().is_null());
@@ -424,13 +437,21 @@ TEST_F(ScrollbarAnimationControllerThinningTest, CaptureScrollbarWhileFading) {
scrollbar_controller_->Animate(time);
EXPECT_FLOAT_EQ(0.5f, scrollbar_layer_->Opacity());
- // Now capture the scrollbar. It should reset opacity to 1 instantly.
- scrollbar_controller_->DidMouseDown();
+ // Now move the mouse near the scrollbar. It should reset opacity to 1
+ // instantly and start animating to thick.
+ scrollbar_controller_->DidMouseMoveNear(1);
+ EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
+ EXPECT_FLOAT_EQ(kIdleThicknessScale,
+ scrollbar_layer_->thumb_thickness_scale_factor());
+
+ scrollbar_controller_->Animate(time);
+ time += kThinningDuration;
+ scrollbar_controller_->Animate(time);
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
}
-// Make sure we can't capture scrollbar that's completely faded out
+// Make sure we can't capture scrollbar that's completely faded out.
TEST_F(ScrollbarAnimationControllerThinningTest, TestCantCaptureWhenFaded) {
base::TimeTicks time;
time += base::TimeDelta::FromSeconds(1);
@@ -439,17 +460,9 @@ TEST_F(ScrollbarAnimationControllerThinningTest, TestCantCaptureWhenFaded) {
scrollbar_controller_->DidScrollUpdate(false);
scrollbar_controller_->DidScrollEnd();
- // Move mouse over the scrollbar.
- scrollbar_controller_->DidMouseMoveNear(0);
- scrollbar_controller_->Animate(time);
- time += kThinningDuration;
- scrollbar_controller_->Animate(time);
- EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
- EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
-
- // A fade animation should have been enqueued. Start it.
EXPECT_EQ(kDelayBeforeStarting, client_.delay());
EXPECT_FALSE(client_.start_fade().is_null());
+ EXPECT_FALSE(client_.start_fade().IsCancelled());
client_.start_fade().Run();
scrollbar_controller_->Animate(time);
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
@@ -458,7 +471,16 @@ TEST_F(ScrollbarAnimationControllerThinningTest, TestCantCaptureWhenFaded) {
time += kFadeDuration;
scrollbar_controller_->Animate(time);
EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity());
- EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
+
+ // Move mouse over the scrollbar. It shouldn't thicken the scrollbar since
+ // it's completely faded out.
+ scrollbar_controller_->DidMouseMoveNear(0);
+ scrollbar_controller_->Animate(time);
+ time += kThinningDuration;
+ scrollbar_controller_->Animate(time);
+ EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity());
+ EXPECT_FLOAT_EQ(kIdleThicknessScale,
+ scrollbar_layer_->thumb_thickness_scale_factor());
client_.start_fade().Reset();
@@ -466,13 +488,15 @@ TEST_F(ScrollbarAnimationControllerThinningTest, TestCantCaptureWhenFaded) {
// completely faded out.
scrollbar_controller_->DidMouseDown();
EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity());
- EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
+ EXPECT_FLOAT_EQ(kIdleThicknessScale,
+ scrollbar_layer_->thumb_thickness_scale_factor());
EXPECT_TRUE(client_.start_fade().is_null());
// Similarly, releasing the scrollbar should have no effect.
scrollbar_controller_->DidMouseUp();
EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity());
- EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
+ EXPECT_FLOAT_EQ(kIdleThicknessScale,
+ scrollbar_layer_->thumb_thickness_scale_factor());
EXPECT_TRUE(client_.start_fade().is_null());
}
@@ -498,20 +522,21 @@ TEST_F(ScrollbarAnimationControllerThinningTest, ScrollWithMouseNear) {
// Now that we've received a scroll, we should be thick without an animation.
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
- // An animation for the fade should have been enqueued.
+ // An animation for the fade should be either null or cancelled, since
+ // mouse is still near the scrollbar.
scrollbar_controller_->DidScrollEnd();
EXPECT_EQ(kDelayBeforeStarting, client_.delay());
- EXPECT_FALSE(client_.start_fade().is_null());
+ EXPECT_TRUE(client_.start_fade().is_null() ||
+ client_.start_fade().IsCancelled());
- client_.start_fade().Run();
scrollbar_controller_->Animate(time);
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
- // Scrollbar should still be thick, even though the scrollbar fades out.
+ // Scrollbar should still be thick and visible.
time += kFadeDuration;
scrollbar_controller_->Animate(time);
- EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity());
+ EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
}
« no previous file with comments | « cc/input/scrollbar_animation_controller_thinning.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698