| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "cc/input/scrollbar_animation_controller_thinning.h" | 5 #include "cc/input/scrollbar_animation_controller_thinning.h" |
| 6 | 6 |
| 7 #include "cc/layers/solid_color_scrollbar_layer_impl.h" | 7 #include "cc/layers/solid_color_scrollbar_layer_impl.h" |
| 8 #include "cc/test/fake_impl_task_runner_provider.h" | 8 #include "cc/test/fake_impl_task_runner_provider.h" |
| 9 #include "cc/test/fake_layer_tree_host_impl.h" | 9 #include "cc/test/fake_layer_tree_host_impl.h" |
| 10 #include "cc/test/geometry_test_utils.h" | 10 #include "cc/test/geometry_test_utils.h" |
| 11 #include "cc/test/test_task_graph_runner.h" | 11 #include "cc/test/test_task_graph_runner.h" |
| 12 #include "cc/trees/layer_tree_impl.h" | 12 #include "cc/trees/layer_tree_impl.h" |
| 13 #include "testing/gmock/include/gmock/gmock.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 15 |
| 16 using testing::AtLeast; |
| 17 using testing::Mock; |
| 18 using testing::NiceMock; |
| 19 using testing::_; |
| 20 |
| 15 namespace cc { | 21 namespace cc { |
| 16 namespace { | 22 namespace { |
| 17 | 23 |
| 18 // These constants are hard-coded and should match the values in | 24 // These constants are hard-coded and should match the values in |
| 19 // scrollbar_animation_controller_thinning.cc. | 25 // scrollbar_animation_controller_thinning.cc. |
| 20 const float kIdleThicknessScale = 0.4f; | 26 const float kIdleThicknessScale = 0.4f; |
| 21 const float kDefaultMouseMoveDistanceToTriggerAnimation = 25.f; | 27 const float kDefaultMouseMoveDistanceToTriggerAnimation = 25.f; |
| 22 | 28 |
| 23 class ScrollbarAnimationControllerThinningTest | 29 class MockScrollbarAnimationControllerClient |
| 24 : public testing::Test, | 30 : public ScrollbarAnimationControllerClient { |
| 25 public ScrollbarAnimationControllerClient { | |
| 26 public: | 31 public: |
| 27 ScrollbarAnimationControllerThinningTest() | 32 explicit MockScrollbarAnimationControllerClient(LayerTreeHostImpl* host_impl) |
| 28 : host_impl_(&task_runner_provider_, | 33 : host_impl_(host_impl) {} |
| 29 &task_graph_runner_) {} | 34 virtual ~MockScrollbarAnimationControllerClient() {} |
| 30 | 35 |
| 31 void PostDelayedScrollbarAnimationTask(const base::Closure& start_fade, | 36 void PostDelayedScrollbarAnimationTask(const base::Closure& start_fade, |
| 32 base::TimeDelta delay) override { | 37 base::TimeDelta delay) override { |
| 33 start_fade_ = start_fade; | 38 start_fade_ = start_fade; |
| 34 delay_ = delay; | 39 delay_ = delay; |
| 35 } | 40 } |
| 36 void SetNeedsRedrawForScrollbarAnimation() override { | 41 void SetNeedsRedrawForScrollbarAnimation() override {} |
| 37 did_request_redraw_ = true; | 42 void SetNeedsAnimateForScrollbarAnimation() override {} |
| 43 ScrollbarSet ScrollbarsFor(int scroll_layer_id) const override { |
| 44 return host_impl_->ScrollbarsFor(scroll_layer_id); |
| 38 } | 45 } |
| 39 void SetNeedsAnimateForScrollbarAnimation() override { | 46 MOCK_METHOD0(DidChangeScrollbarVisibility, void()); |
| 40 did_request_animate_ = true; | 47 |
| 41 } | 48 base::Closure& start_fade() { return start_fade_; } |
| 42 ScrollbarSet ScrollbarsFor(int scroll_layer_id) const override { | 49 base::TimeDelta& delay() { return delay_; } |
| 43 return host_impl_.ScrollbarsFor(scroll_layer_id); | 50 |
| 44 } | 51 private: |
| 52 base::Closure start_fade_; |
| 53 base::TimeDelta delay_; |
| 54 LayerTreeHostImpl* host_impl_; |
| 55 }; |
| 56 |
| 57 class ScrollbarAnimationControllerThinningTest : public testing::Test { |
| 58 public: |
| 59 ScrollbarAnimationControllerThinningTest() |
| 60 : host_impl_(&task_runner_provider_, &task_graph_runner_), |
| 61 client_(&host_impl_) {} |
| 45 | 62 |
| 46 protected: | 63 protected: |
| 47 const base::TimeDelta kDelayBeforeStarting = base::TimeDelta::FromSeconds(2); | 64 const base::TimeDelta kDelayBeforeStarting = base::TimeDelta::FromSeconds(2); |
| 48 const base::TimeDelta kResizeDelayBeforeStarting = | 65 const base::TimeDelta kResizeDelayBeforeStarting = |
| 49 base::TimeDelta::FromSeconds(5); | 66 base::TimeDelta::FromSeconds(5); |
| 50 const base::TimeDelta kFadeDuration = base::TimeDelta::FromSeconds(3); | 67 const base::TimeDelta kFadeDuration = base::TimeDelta::FromSeconds(3); |
| 51 const base::TimeDelta kThinningDuration = base::TimeDelta::FromSeconds(2); | 68 const base::TimeDelta kThinningDuration = base::TimeDelta::FromSeconds(2); |
| 52 | 69 |
| 53 void SetUp() override { | 70 void SetUp() override { |
| 54 std::unique_ptr<LayerImpl> scroll_layer = | 71 std::unique_ptr<LayerImpl> scroll_layer = |
| (...skipping 20 matching lines...) Expand all Loading... |
| 75 clip_layer_->test_properties()->AddChild(std::move(scroll_layer)); | 92 clip_layer_->test_properties()->AddChild(std::move(scroll_layer)); |
| 76 host_impl_.active_tree()->SetRootLayerForTesting(std::move(clip)); | 93 host_impl_.active_tree()->SetRootLayerForTesting(std::move(clip)); |
| 77 | 94 |
| 78 scrollbar_layer_->SetScrollLayerId(scroll_layer_ptr->id()); | 95 scrollbar_layer_->SetScrollLayerId(scroll_layer_ptr->id()); |
| 79 scrollbar_layer_->test_properties()->opacity_can_animate = true; | 96 scrollbar_layer_->test_properties()->opacity_can_animate = true; |
| 80 clip_layer_->SetBounds(gfx::Size(100, 100)); | 97 clip_layer_->SetBounds(gfx::Size(100, 100)); |
| 81 scroll_layer_ptr->SetBounds(gfx::Size(200, 200)); | 98 scroll_layer_ptr->SetBounds(gfx::Size(200, 200)); |
| 82 host_impl_.active_tree()->BuildLayerListAndPropertyTreesForTesting(); | 99 host_impl_.active_tree()->BuildLayerListAndPropertyTreesForTesting(); |
| 83 | 100 |
| 84 scrollbar_controller_ = ScrollbarAnimationControllerThinning::Create( | 101 scrollbar_controller_ = ScrollbarAnimationControllerThinning::Create( |
| 85 scroll_layer_ptr->id(), this, kDelayBeforeStarting, | 102 scroll_layer_ptr->id(), &client_, kDelayBeforeStarting, |
| 86 kResizeDelayBeforeStarting, kFadeDuration, kThinningDuration); | 103 kResizeDelayBeforeStarting, kFadeDuration, kThinningDuration); |
| 87 } | 104 } |
| 88 | 105 |
| 89 FakeImplTaskRunnerProvider task_runner_provider_; | 106 FakeImplTaskRunnerProvider task_runner_provider_; |
| 90 TestTaskGraphRunner task_graph_runner_; | 107 TestTaskGraphRunner task_graph_runner_; |
| 91 FakeLayerTreeHostImpl host_impl_; | 108 FakeLayerTreeHostImpl host_impl_; |
| 92 std::unique_ptr<ScrollbarAnimationControllerThinning> scrollbar_controller_; | 109 std::unique_ptr<ScrollbarAnimationControllerThinning> scrollbar_controller_; |
| 93 LayerImpl* clip_layer_; | 110 LayerImpl* clip_layer_; |
| 94 SolidColorScrollbarLayerImpl* scrollbar_layer_; | 111 SolidColorScrollbarLayerImpl* scrollbar_layer_; |
| 95 | 112 NiceMock<MockScrollbarAnimationControllerClient> client_; |
| 96 base::Closure start_fade_; | |
| 97 base::TimeDelta delay_; | |
| 98 bool did_request_redraw_; | |
| 99 bool did_request_animate_; | |
| 100 }; | 113 }; |
| 101 | 114 |
| 102 // Check initialization of scrollbar. Should start off invisible and thin. | 115 // Check initialization of scrollbar. Should start off invisible and thin. |
| 103 TEST_F(ScrollbarAnimationControllerThinningTest, Idle) { | 116 TEST_F(ScrollbarAnimationControllerThinningTest, Idle) { |
| 104 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); | 117 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); |
| 105 EXPECT_FLOAT_EQ(0.4f, scrollbar_layer_->thumb_thickness_scale_factor()); | 118 EXPECT_FLOAT_EQ(0.4f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 106 } | 119 } |
| 107 | 120 |
| 108 // Check that scrollbar appears again when the layer becomes scrollable. | 121 // Check that scrollbar appears again when the layer becomes scrollable. |
| 109 TEST_F(ScrollbarAnimationControllerThinningTest, AppearOnResize) { | 122 TEST_F(ScrollbarAnimationControllerThinningTest, AppearOnResize) { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 scrollbar_controller_->DidScrollBegin(); | 180 scrollbar_controller_->DidScrollBegin(); |
| 168 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); | 181 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); |
| 169 | 182 |
| 170 scrollbar_controller_->DidScrollUpdate(false); | 183 scrollbar_controller_->DidScrollUpdate(false); |
| 171 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 184 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 172 | 185 |
| 173 scrollbar_controller_->DidScrollEnd(); | 186 scrollbar_controller_->DidScrollEnd(); |
| 174 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 187 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 175 | 188 |
| 176 // An animation should have been enqueued. | 189 // An animation should have been enqueued. |
| 177 EXPECT_EQ(kDelayBeforeStarting, delay_); | 190 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 178 EXPECT_FALSE(start_fade_.is_null()); | 191 EXPECT_FALSE(client_.start_fade().is_null()); |
| 179 start_fade_.Run(); | 192 client_.start_fade().Run(); |
| 180 | 193 |
| 181 // Scrollbar should fade out over kFadeDuration. | 194 // Scrollbar should fade out over kFadeDuration. |
| 182 scrollbar_controller_->Animate(time); | 195 scrollbar_controller_->Animate(time); |
| 183 time += kFadeDuration; | 196 time += kFadeDuration; |
| 184 scrollbar_controller_->Animate(time); | 197 scrollbar_controller_->Animate(time); |
| 185 | 198 |
| 186 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); | 199 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); |
| 187 } | 200 } |
| 188 | 201 |
| 189 // Scroll content. Move the mouse near the scrollbar and confirm it becomes | 202 // Scroll content. Move the mouse near the scrollbar and confirm it becomes |
| 190 // thick. Ensure it fades out after that. | 203 // thick. Ensure it fades out after that. |
| 191 TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearAndFadeOut) { | 204 TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearAndFadeOut) { |
| 192 base::TimeTicks time; | 205 base::TimeTicks time; |
| 193 time += base::TimeDelta::FromSeconds(1); | 206 time += base::TimeDelta::FromSeconds(1); |
| 194 | 207 |
| 195 scrollbar_controller_->DidScrollBegin(); | 208 scrollbar_controller_->DidScrollBegin(); |
| 196 scrollbar_controller_->DidScrollUpdate(false); | 209 scrollbar_controller_->DidScrollUpdate(false); |
| 197 scrollbar_controller_->DidScrollEnd(); | 210 scrollbar_controller_->DidScrollEnd(); |
| 198 | 211 |
| 199 // An animation should have been enqueued. | 212 // An animation should have been enqueued. |
| 200 EXPECT_EQ(kDelayBeforeStarting, delay_); | 213 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 201 EXPECT_FALSE(start_fade_.is_null()); | 214 EXPECT_FALSE(client_.start_fade().is_null()); |
| 202 | 215 |
| 203 // Now move the mouse near the scrollbar. This should cancel the currently | 216 // Now move the mouse near the scrollbar. This should cancel the currently |
| 204 // queued fading animation and start animating thickness. | 217 // queued fading animation and start animating thickness. |
| 205 scrollbar_controller_->DidMouseMoveNear(1); | 218 scrollbar_controller_->DidMouseMoveNear(1); |
| 206 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 219 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 207 EXPECT_FLOAT_EQ(kIdleThicknessScale, | 220 EXPECT_FLOAT_EQ(kIdleThicknessScale, |
| 208 scrollbar_layer_->thumb_thickness_scale_factor()); | 221 scrollbar_layer_->thumb_thickness_scale_factor()); |
| 209 EXPECT_TRUE(start_fade_.IsCancelled()); | 222 EXPECT_TRUE(client_.start_fade().IsCancelled()); |
| 210 | 223 |
| 211 // Scrollbar should become thick. | 224 // Scrollbar should become thick. |
| 212 scrollbar_controller_->Animate(time); | 225 scrollbar_controller_->Animate(time); |
| 213 time += kThinningDuration; | 226 time += kThinningDuration; |
| 214 scrollbar_controller_->Animate(time); | 227 scrollbar_controller_->Animate(time); |
| 215 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 228 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 216 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 229 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 217 | 230 |
| 218 // Once the thickening animation is complete, it should enqueue the delayed | 231 // Once the thickening animation is complete, it should enqueue the delayed |
| 219 // fade animation. | 232 // fade animation. |
| 220 EXPECT_FALSE(start_fade_.is_null()); | 233 EXPECT_FALSE(client_.start_fade().is_null()); |
| 221 EXPECT_FALSE(start_fade_.IsCancelled()); | 234 EXPECT_FALSE(client_.start_fade().IsCancelled()); |
| 222 } | 235 } |
| 223 | 236 |
| 224 // Scroll content. Move the mouse over the scrollbar and confirm it becomes | 237 // Scroll content. Move the mouse over the scrollbar and confirm it becomes |
| 225 // thick. Ensure it fades out after that. | 238 // thick. Ensure it fades out after that. |
| 226 TEST_F(ScrollbarAnimationControllerThinningTest, MoveOverAndFadeOut) { | 239 TEST_F(ScrollbarAnimationControllerThinningTest, MoveOverAndFadeOut) { |
| 227 base::TimeTicks time; | 240 base::TimeTicks time; |
| 228 time += base::TimeDelta::FromSeconds(1); | 241 time += base::TimeDelta::FromSeconds(1); |
| 229 | 242 |
| 230 scrollbar_controller_->DidScrollBegin(); | 243 scrollbar_controller_->DidScrollBegin(); |
| 231 scrollbar_controller_->DidScrollUpdate(false); | 244 scrollbar_controller_->DidScrollUpdate(false); |
| 232 scrollbar_controller_->DidScrollEnd(); | 245 scrollbar_controller_->DidScrollEnd(); |
| 233 | 246 |
| 234 // An animation should have been enqueued. | 247 // An animation should have been enqueued. |
| 235 EXPECT_EQ(kDelayBeforeStarting, delay_); | 248 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 236 EXPECT_FALSE(start_fade_.is_null()); | 249 EXPECT_FALSE(client_.start_fade().is_null()); |
| 237 | 250 |
| 238 // Now move the mouse over the scrollbar. This should cancel the currently | 251 // Now move the mouse over the scrollbar. This should cancel the currently |
| 239 // queued fading animation and start animating thickness. | 252 // queued fading animation and start animating thickness. |
| 240 scrollbar_controller_->DidMouseMoveNear(0); | 253 scrollbar_controller_->DidMouseMoveNear(0); |
| 241 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 254 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 242 EXPECT_FLOAT_EQ(kIdleThicknessScale, | 255 EXPECT_FLOAT_EQ(kIdleThicknessScale, |
| 243 scrollbar_layer_->thumb_thickness_scale_factor()); | 256 scrollbar_layer_->thumb_thickness_scale_factor()); |
| 244 EXPECT_TRUE(start_fade_.IsCancelled()); | 257 EXPECT_TRUE(client_.start_fade().IsCancelled()); |
| 245 | 258 |
| 246 // Scrollbar should become thick. | 259 // Scrollbar should become thick. |
| 247 scrollbar_controller_->Animate(time); | 260 scrollbar_controller_->Animate(time); |
| 248 time += kThinningDuration; | 261 time += kThinningDuration; |
| 249 scrollbar_controller_->Animate(time); | 262 scrollbar_controller_->Animate(time); |
| 250 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 263 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 251 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 264 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 252 | 265 |
| 253 // Once the thickening animation is complete, it should enqueue the delayed | 266 // Once the thickening animation is complete, it should enqueue the delayed |
| 254 // fade animation. | 267 // fade animation. |
| 255 EXPECT_FALSE(start_fade_.is_null()); | 268 EXPECT_FALSE(client_.start_fade().is_null()); |
| 256 EXPECT_FALSE(start_fade_.IsCancelled()); | 269 EXPECT_FALSE(client_.start_fade().IsCancelled()); |
| 257 } | 270 } |
| 258 | 271 |
| 259 // Make sure a scrollbar captured before the thickening animation doesn't try | 272 // Make sure a scrollbar captured before the thickening animation doesn't try |
| 260 // to fade out. | 273 // to fade out. |
| 261 TEST_F(ScrollbarAnimationControllerThinningTest, | 274 TEST_F(ScrollbarAnimationControllerThinningTest, |
| 262 DontFadeWhileCapturedBeforeThick) { | 275 DontFadeWhileCapturedBeforeThick) { |
| 263 base::TimeTicks time; | 276 base::TimeTicks time; |
| 264 time += base::TimeDelta::FromSeconds(1); | 277 time += base::TimeDelta::FromSeconds(1); |
| 265 | 278 |
| 266 scrollbar_controller_->DidScrollBegin(); | 279 scrollbar_controller_->DidScrollBegin(); |
| 267 scrollbar_controller_->DidScrollUpdate(false); | 280 scrollbar_controller_->DidScrollUpdate(false); |
| 268 scrollbar_controller_->DidScrollEnd(); | 281 scrollbar_controller_->DidScrollEnd(); |
| 269 | 282 |
| 270 // An animation should have been enqueued. | 283 // An animation should have been enqueued. |
| 271 EXPECT_EQ(kDelayBeforeStarting, delay_); | 284 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 272 EXPECT_FALSE(start_fade_.is_null()); | 285 EXPECT_FALSE(client_.start_fade().is_null()); |
| 273 | 286 |
| 274 // Now move the mouse over the scrollbar and capture it. It should become | 287 // Now move the mouse over the scrollbar and capture it. It should become |
| 275 // thick without need for an animation. | 288 // thick without need for an animation. |
| 276 scrollbar_controller_->DidMouseMoveNear(0); | 289 scrollbar_controller_->DidMouseMoveNear(0); |
| 277 scrollbar_controller_->DidMouseDown(); | 290 scrollbar_controller_->DidMouseDown(); |
| 278 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 291 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 279 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 292 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 280 | 293 |
| 281 // The fade animation should have been cancelled. | 294 // The fade animation should have been cancelled. |
| 282 EXPECT_FALSE(start_fade_.is_null()); | 295 EXPECT_FALSE(client_.start_fade().is_null()); |
| 283 EXPECT_TRUE(start_fade_.IsCancelled()); | 296 EXPECT_TRUE(client_.start_fade().IsCancelled()); |
| 284 } | 297 } |
| 285 | 298 |
| 286 // Make sure a scrollbar captured after a thickening animation doesn't try to | 299 // Make sure a scrollbar captured after a thickening animation doesn't try to |
| 287 // fade out. | 300 // fade out. |
| 288 TEST_F(ScrollbarAnimationControllerThinningTest, DontFadeWhileCaptured) { | 301 TEST_F(ScrollbarAnimationControllerThinningTest, DontFadeWhileCaptured) { |
| 289 base::TimeTicks time; | 302 base::TimeTicks time; |
| 290 time += base::TimeDelta::FromSeconds(1); | 303 time += base::TimeDelta::FromSeconds(1); |
| 291 | 304 |
| 292 scrollbar_controller_->DidScrollBegin(); | 305 scrollbar_controller_->DidScrollBegin(); |
| 293 scrollbar_controller_->DidScrollUpdate(false); | 306 scrollbar_controller_->DidScrollUpdate(false); |
| 294 scrollbar_controller_->DidScrollEnd(); | 307 scrollbar_controller_->DidScrollEnd(); |
| 295 | 308 |
| 296 // An animation should have been enqueued. | 309 // An animation should have been enqueued. |
| 297 EXPECT_EQ(kDelayBeforeStarting, delay_); | 310 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 298 EXPECT_FALSE(start_fade_.is_null()); | 311 EXPECT_FALSE(client_.start_fade().is_null()); |
| 299 | 312 |
| 300 // Now move the mouse over the scrollbar and animate it until it's thick. | 313 // Now move the mouse over the scrollbar and animate it until it's thick. |
| 301 scrollbar_controller_->DidMouseMoveNear(0); | 314 scrollbar_controller_->DidMouseMoveNear(0); |
| 302 scrollbar_controller_->Animate(time); | 315 scrollbar_controller_->Animate(time); |
| 303 time += kThinningDuration; | 316 time += kThinningDuration; |
| 304 scrollbar_controller_->Animate(time); | 317 scrollbar_controller_->Animate(time); |
| 305 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 318 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 306 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 319 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 307 | 320 |
| 308 // Since the scrollbar became thick, it should have queued up a fade. | 321 // Since the scrollbar became thick, it should have queued up a fade. |
| 309 EXPECT_FALSE(start_fade_.is_null()); | 322 EXPECT_FALSE(client_.start_fade().is_null()); |
| 310 EXPECT_FALSE(start_fade_.IsCancelled()); | 323 EXPECT_FALSE(client_.start_fade().IsCancelled()); |
| 311 | 324 |
| 312 // Make sure capturing the scrollbar stops the fade. | 325 // Make sure capturing the scrollbar stops the fade. |
| 313 scrollbar_controller_->DidMouseDown(); | 326 scrollbar_controller_->DidMouseDown(); |
| 314 EXPECT_FALSE(start_fade_.is_null()); | 327 EXPECT_FALSE(client_.start_fade().is_null()); |
| 315 EXPECT_TRUE(start_fade_.IsCancelled()); | 328 EXPECT_TRUE(client_.start_fade().IsCancelled()); |
| 316 } | 329 } |
| 317 | 330 |
| 318 // Make sure releasing a captured scrollbar causes it to fade out. | 331 // Make sure releasing a captured scrollbar causes it to fade out. |
| 319 TEST_F(ScrollbarAnimationControllerThinningTest, FadeAfterReleased) { | 332 TEST_F(ScrollbarAnimationControllerThinningTest, FadeAfterReleased) { |
| 320 base::TimeTicks time; | 333 base::TimeTicks time; |
| 321 time += base::TimeDelta::FromSeconds(1); | 334 time += base::TimeDelta::FromSeconds(1); |
| 322 | 335 |
| 323 scrollbar_controller_->DidScrollBegin(); | 336 scrollbar_controller_->DidScrollBegin(); |
| 324 scrollbar_controller_->DidScrollUpdate(false); | 337 scrollbar_controller_->DidScrollUpdate(false); |
| 325 scrollbar_controller_->DidScrollEnd(); | 338 scrollbar_controller_->DidScrollEnd(); |
| 326 | 339 |
| 327 // An animation should have been enqueued. | 340 // An animation should have been enqueued. |
| 328 EXPECT_EQ(kDelayBeforeStarting, delay_); | 341 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 329 EXPECT_FALSE(start_fade_.is_null()); | 342 EXPECT_FALSE(client_.start_fade().is_null()); |
| 330 | 343 |
| 331 // Now move the mouse over the scrollbar and capture it. | 344 // Now move the mouse over the scrollbar and capture it. |
| 332 scrollbar_controller_->DidMouseMoveNear(0); | 345 scrollbar_controller_->DidMouseMoveNear(0); |
| 333 scrollbar_controller_->DidMouseDown(); | 346 scrollbar_controller_->DidMouseDown(); |
| 334 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 347 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 335 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 348 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 336 | 349 |
| 337 // Since the scrollbar became thick, it should have queued up a fade. | 350 // Since the scrollbar became thick, it should have queued up a fade. |
| 338 EXPECT_FALSE(start_fade_.is_null()); | 351 EXPECT_FALSE(client_.start_fade().is_null()); |
| 339 EXPECT_TRUE(start_fade_.IsCancelled()); | 352 EXPECT_TRUE(client_.start_fade().IsCancelled()); |
| 340 | 353 |
| 341 scrollbar_controller_->DidMouseUp(); | 354 scrollbar_controller_->DidMouseUp(); |
| 342 EXPECT_FALSE(start_fade_.is_null()); | 355 EXPECT_FALSE(client_.start_fade().is_null()); |
| 343 EXPECT_FALSE(start_fade_.IsCancelled()); | 356 EXPECT_FALSE(client_.start_fade().IsCancelled()); |
| 344 } | 357 } |
| 345 | 358 |
| 346 // Make sure moving near a scrollbar while it's fading out causes it to reset | 359 // Make sure moving near a scrollbar while it's fading out causes it to reset |
| 347 // the opacity and thicken. | 360 // the opacity and thicken. |
| 348 TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearScrollbarWhileFading) { | 361 TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearScrollbarWhileFading) { |
| 349 base::TimeTicks time; | 362 base::TimeTicks time; |
| 350 time += base::TimeDelta::FromSeconds(1); | 363 time += base::TimeDelta::FromSeconds(1); |
| 351 | 364 |
| 352 scrollbar_controller_->DidScrollBegin(); | 365 scrollbar_controller_->DidScrollBegin(); |
| 353 scrollbar_controller_->DidScrollUpdate(false); | 366 scrollbar_controller_->DidScrollUpdate(false); |
| 354 scrollbar_controller_->DidScrollEnd(); | 367 scrollbar_controller_->DidScrollEnd(); |
| 355 | 368 |
| 356 // An animation should have been enqueued. Start it. | 369 // An animation should have been enqueued. Start it. |
| 357 EXPECT_EQ(kDelayBeforeStarting, delay_); | 370 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 358 EXPECT_FALSE(start_fade_.is_null()); | 371 EXPECT_FALSE(client_.start_fade().is_null()); |
| 359 start_fade_.Run(); | 372 client_.start_fade().Run(); |
| 360 | 373 |
| 361 scrollbar_controller_->Animate(time); | 374 scrollbar_controller_->Animate(time); |
| 362 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 375 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 363 | 376 |
| 364 // Proceed half way through the fade out animation. | 377 // Proceed half way through the fade out animation. |
| 365 time += kFadeDuration / 2; | 378 time += kFadeDuration / 2; |
| 366 scrollbar_controller_->Animate(time); | 379 scrollbar_controller_->Animate(time); |
| 367 EXPECT_FLOAT_EQ(0.5f, scrollbar_layer_->Opacity()); | 380 EXPECT_FLOAT_EQ(0.5f, scrollbar_layer_->Opacity()); |
| 368 | 381 |
| 369 // Now move the mouse near the scrollbar. It should reset opacity to 1 | 382 // Now move the mouse near the scrollbar. It should reset opacity to 1 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 392 | 405 |
| 393 // Move mouse over the scrollbar. | 406 // Move mouse over the scrollbar. |
| 394 scrollbar_controller_->DidMouseMoveNear(0); | 407 scrollbar_controller_->DidMouseMoveNear(0); |
| 395 scrollbar_controller_->Animate(time); | 408 scrollbar_controller_->Animate(time); |
| 396 time += kThinningDuration; | 409 time += kThinningDuration; |
| 397 scrollbar_controller_->Animate(time); | 410 scrollbar_controller_->Animate(time); |
| 398 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 411 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 399 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 412 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 400 | 413 |
| 401 // A fade animation should have been enqueued. Start it. | 414 // A fade animation should have been enqueued. Start it. |
| 402 EXPECT_EQ(kDelayBeforeStarting, delay_); | 415 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 403 EXPECT_FALSE(start_fade_.is_null()); | 416 EXPECT_FALSE(client_.start_fade().is_null()); |
| 404 start_fade_.Run(); | 417 client_.start_fade().Run(); |
| 405 | 418 |
| 406 scrollbar_controller_->Animate(time); | 419 scrollbar_controller_->Animate(time); |
| 407 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 420 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 408 | 421 |
| 409 // Proceed half way through the fade out animation. | 422 // Proceed half way through the fade out animation. |
| 410 time += kFadeDuration / 2; | 423 time += kFadeDuration / 2; |
| 411 scrollbar_controller_->Animate(time); | 424 scrollbar_controller_->Animate(time); |
| 412 EXPECT_FLOAT_EQ(0.5f, scrollbar_layer_->Opacity()); | 425 EXPECT_FLOAT_EQ(0.5f, scrollbar_layer_->Opacity()); |
| 413 | 426 |
| 414 // Now capture the scrollbar. It should reset opacity to 1 instantly. | 427 // Now capture the scrollbar. It should reset opacity to 1 instantly. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 428 | 441 |
| 429 // Move mouse over the scrollbar. | 442 // Move mouse over the scrollbar. |
| 430 scrollbar_controller_->DidMouseMoveNear(0); | 443 scrollbar_controller_->DidMouseMoveNear(0); |
| 431 scrollbar_controller_->Animate(time); | 444 scrollbar_controller_->Animate(time); |
| 432 time += kThinningDuration; | 445 time += kThinningDuration; |
| 433 scrollbar_controller_->Animate(time); | 446 scrollbar_controller_->Animate(time); |
| 434 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 447 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 435 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 448 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 436 | 449 |
| 437 // A fade animation should have been enqueued. Start it. | 450 // A fade animation should have been enqueued. Start it. |
| 438 EXPECT_EQ(kDelayBeforeStarting, delay_); | 451 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 439 EXPECT_FALSE(start_fade_.is_null()); | 452 EXPECT_FALSE(client_.start_fade().is_null()); |
| 440 start_fade_.Run(); | 453 client_.start_fade().Run(); |
| 441 scrollbar_controller_->Animate(time); | 454 scrollbar_controller_->Animate(time); |
| 442 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 455 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 443 | 456 |
| 444 // Fade the scrollbar out completely. | 457 // Fade the scrollbar out completely. |
| 445 time += kFadeDuration; | 458 time += kFadeDuration; |
| 446 scrollbar_controller_->Animate(time); | 459 scrollbar_controller_->Animate(time); |
| 447 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); | 460 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); |
| 448 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 461 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 449 | 462 |
| 450 start_fade_.Reset(); | 463 client_.start_fade().Reset(); |
| 451 | 464 |
| 452 // Now try to capture the scrollbar. It shouldn't do anything since it's | 465 // Now try to capture the scrollbar. It shouldn't do anything since it's |
| 453 // completely faded out. | 466 // completely faded out. |
| 454 scrollbar_controller_->DidMouseDown(); | 467 scrollbar_controller_->DidMouseDown(); |
| 455 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); | 468 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); |
| 456 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 469 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 457 EXPECT_TRUE(start_fade_.is_null()); | 470 EXPECT_TRUE(client_.start_fade().is_null()); |
| 458 | 471 |
| 459 // Similarly, releasing the scrollbar should have no effect. | 472 // Similarly, releasing the scrollbar should have no effect. |
| 460 scrollbar_controller_->DidMouseUp(); | 473 scrollbar_controller_->DidMouseUp(); |
| 461 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); | 474 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); |
| 462 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 475 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 463 EXPECT_TRUE(start_fade_.is_null()); | 476 EXPECT_TRUE(client_.start_fade().is_null()); |
| 464 } | 477 } |
| 465 | 478 |
| 466 // Initiate a scroll when the pointer is already near the scrollbar. It should | 479 // Initiate a scroll when the pointer is already near the scrollbar. It should |
| 467 // appear thick and remain thick. | 480 // appear thick and remain thick. |
| 468 TEST_F(ScrollbarAnimationControllerThinningTest, ScrollWithMouseNear) { | 481 TEST_F(ScrollbarAnimationControllerThinningTest, ScrollWithMouseNear) { |
| 469 base::TimeTicks time; | 482 base::TimeTicks time; |
| 470 time += base::TimeDelta::FromSeconds(1); | 483 time += base::TimeDelta::FromSeconds(1); |
| 471 | 484 |
| 472 scrollbar_controller_->DidMouseMoveNear(1); | 485 scrollbar_controller_->DidMouseMoveNear(1); |
| 473 scrollbar_controller_->Animate(time); | 486 scrollbar_controller_->Animate(time); |
| 474 time += kThinningDuration; | 487 time += kThinningDuration; |
| 475 | 488 |
| 476 // Since the scrollbar isn't visible yet (because we haven't scrolled), we | 489 // Since the scrollbar isn't visible yet (because we haven't scrolled), we |
| 477 // shouldn't have applied the thickening. | 490 // shouldn't have applied the thickening. |
| 478 scrollbar_controller_->Animate(time); | 491 scrollbar_controller_->Animate(time); |
| 479 EXPECT_FLOAT_EQ(kIdleThicknessScale, | 492 EXPECT_FLOAT_EQ(kIdleThicknessScale, |
| 480 scrollbar_layer_->thumb_thickness_scale_factor()); | 493 scrollbar_layer_->thumb_thickness_scale_factor()); |
| 481 | 494 |
| 482 scrollbar_controller_->DidScrollBegin(); | 495 scrollbar_controller_->DidScrollBegin(); |
| 483 scrollbar_controller_->DidScrollUpdate(false); | 496 scrollbar_controller_->DidScrollUpdate(false); |
| 484 | 497 |
| 485 // Now that we've received a scroll, we should be thick without an animation. | 498 // Now that we've received a scroll, we should be thick without an animation. |
| 486 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 499 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 487 | 500 |
| 488 // An animation for the fade should have been enqueued. | 501 // An animation for the fade should have been enqueued. |
| 489 scrollbar_controller_->DidScrollEnd(); | 502 scrollbar_controller_->DidScrollEnd(); |
| 490 EXPECT_EQ(kDelayBeforeStarting, delay_); | 503 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 491 EXPECT_FALSE(start_fade_.is_null()); | 504 EXPECT_FALSE(client_.start_fade().is_null()); |
| 492 | 505 |
| 493 start_fade_.Run(); | 506 client_.start_fade().Run(); |
| 494 scrollbar_controller_->Animate(time); | 507 scrollbar_controller_->Animate(time); |
| 495 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 508 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 496 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 509 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 497 | 510 |
| 498 // Scrollbar should still be thick, even though the scrollbar fades out. | 511 // Scrollbar should still be thick, even though the scrollbar fades out. |
| 499 time += kFadeDuration; | 512 time += kFadeDuration; |
| 500 scrollbar_controller_->Animate(time); | 513 scrollbar_controller_->Animate(time); |
| 501 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); | 514 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); |
| 502 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); | 515 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); |
| 503 } | 516 } |
| (...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 848 | 861 |
| 849 time += kThinningDuration / 2; | 862 time += kThinningDuration / 2; |
| 850 scrollbar_controller_->Animate(time); | 863 scrollbar_controller_->Animate(time); |
| 851 EXPECT_FLOAT_EQ(kIdleThicknessScale, | 864 EXPECT_FLOAT_EQ(kIdleThicknessScale, |
| 852 scrollbar_layer_->thumb_thickness_scale_factor()); | 865 scrollbar_layer_->thumb_thickness_scale_factor()); |
| 853 } | 866 } |
| 854 | 867 |
| 855 // Tests that main thread scroll updates immediatley queue a fade animation | 868 // Tests that main thread scroll updates immediatley queue a fade animation |
| 856 // without requiring a ScrollEnd. | 869 // without requiring a ScrollEnd. |
| 857 TEST_F(ScrollbarAnimationControllerThinningTest, MainThreadScrollQueuesFade) { | 870 TEST_F(ScrollbarAnimationControllerThinningTest, MainThreadScrollQueuesFade) { |
| 858 ASSERT_TRUE(start_fade_.is_null()); | 871 ASSERT_TRUE(client_.start_fade().is_null()); |
| 859 | 872 |
| 860 // A ScrollUpdate without a ScrollBegin indicates a main thread scroll update | 873 // A ScrollUpdate without a ScrollBegin indicates a main thread scroll update |
| 861 // so we should schedule a fade animation without waiting for a ScrollEnd | 874 // so we should schedule a fade animation without waiting for a ScrollEnd |
| 862 // (which will never come). | 875 // (which will never come). |
| 863 scrollbar_controller_->DidScrollUpdate(false); | 876 scrollbar_controller_->DidScrollUpdate(false); |
| 864 EXPECT_FALSE(start_fade_.is_null()); | 877 EXPECT_FALSE(client_.start_fade().is_null()); |
| 865 EXPECT_EQ(kDelayBeforeStarting, delay_); | 878 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 866 | 879 |
| 867 start_fade_.Reset(); | 880 client_.start_fade().Reset(); |
| 868 | 881 |
| 869 // If we got a ScrollBegin, we shouldn't schedule the fade animation until we | 882 // If we got a ScrollBegin, we shouldn't schedule the fade animation until we |
| 870 // get a corresponding ScrollEnd. | 883 // get a corresponding ScrollEnd. |
| 871 scrollbar_controller_->DidScrollBegin(); | 884 scrollbar_controller_->DidScrollBegin(); |
| 872 scrollbar_controller_->DidScrollUpdate(false); | 885 scrollbar_controller_->DidScrollUpdate(false); |
| 873 EXPECT_TRUE(start_fade_.is_null()); | 886 EXPECT_TRUE(client_.start_fade().is_null()); |
| 874 scrollbar_controller_->DidScrollEnd(); | 887 scrollbar_controller_->DidScrollEnd(); |
| 875 EXPECT_FALSE(start_fade_.is_null()); | 888 EXPECT_FALSE(client_.start_fade().is_null()); |
| 876 EXPECT_EQ(kDelayBeforeStarting, delay_); | 889 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 877 } | 890 } |
| 878 | 891 |
| 879 // Make sure that if the scroll update is as a result of a resize, we use the | 892 // Make sure that if the scroll update is as a result of a resize, we use the |
| 880 // resize delay time instead of the default one. | 893 // resize delay time instead of the default one. |
| 881 TEST_F(ScrollbarAnimationControllerThinningTest, ResizeFadeDuration) { | 894 TEST_F(ScrollbarAnimationControllerThinningTest, ResizeFadeDuration) { |
| 882 ASSERT_TRUE(delay_.is_zero()); | 895 ASSERT_TRUE(client_.delay().is_zero()); |
| 883 | 896 |
| 884 scrollbar_controller_->DidScrollUpdate(true); | 897 scrollbar_controller_->DidScrollUpdate(true); |
| 885 EXPECT_FALSE(start_fade_.is_null()); | 898 EXPECT_FALSE(client_.start_fade().is_null()); |
| 886 EXPECT_EQ(kResizeDelayBeforeStarting, delay_); | 899 EXPECT_EQ(kResizeDelayBeforeStarting, client_.delay()); |
| 887 | 900 |
| 888 delay_ = base::TimeDelta(); | 901 client_.delay() = base::TimeDelta(); |
| 889 | 902 |
| 890 // We should use the gesture delay rather than the resize delay if we're in a | 903 // We should use the gesture delay rather than the resize delay if we're in a |
| 891 // gesture scroll, even if the resize param is set. | 904 // gesture scroll, even if the resize param is set. |
| 892 scrollbar_controller_->DidScrollBegin(); | 905 scrollbar_controller_->DidScrollBegin(); |
| 893 scrollbar_controller_->DidScrollUpdate(true); | 906 scrollbar_controller_->DidScrollUpdate(true); |
| 894 scrollbar_controller_->DidScrollEnd(); | 907 scrollbar_controller_->DidScrollEnd(); |
| 895 | 908 |
| 896 EXPECT_FALSE(start_fade_.is_null()); | 909 EXPECT_FALSE(client_.start_fade().is_null()); |
| 897 EXPECT_EQ(kDelayBeforeStarting, delay_); | 910 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 898 } | 911 } |
| 899 | 912 |
| 900 // Tests that the fade effect is animated. | 913 // Tests that the fade effect is animated. |
| 901 TEST_F(ScrollbarAnimationControllerThinningTest, FadeAnimated) { | 914 TEST_F(ScrollbarAnimationControllerThinningTest, FadeAnimated) { |
| 902 // Scroll to make the scrollbars visible. | 915 // Scroll to make the scrollbars visible. |
| 903 scrollbar_controller_->DidScrollBegin(); | 916 scrollbar_controller_->DidScrollBegin(); |
| 904 scrollbar_controller_->DidScrollUpdate(false); | 917 scrollbar_controller_->DidScrollUpdate(false); |
| 905 scrollbar_controller_->DidScrollEnd(); | 918 scrollbar_controller_->DidScrollEnd(); |
| 906 | 919 |
| 907 // Appearance is instant. | 920 // Appearance is instant. |
| 908 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 921 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 909 | 922 |
| 910 // An animation should have been enqueued. | 923 // An animation should have been enqueued. |
| 911 EXPECT_EQ(kDelayBeforeStarting, delay_); | 924 EXPECT_EQ(kDelayBeforeStarting, client_.delay()); |
| 912 EXPECT_FALSE(start_fade_.is_null()); | 925 EXPECT_FALSE(client_.start_fade().is_null()); |
| 913 start_fade_.Run(); | 926 client_.start_fade().Run(); |
| 914 | 927 |
| 915 base::TimeTicks time; | 928 base::TimeTicks time; |
| 916 time += base::TimeDelta::FromSeconds(1); | 929 time += base::TimeDelta::FromSeconds(1); |
| 917 | 930 |
| 918 // Test that at half the fade duration time, the opacity is at half. | 931 // Test that at half the fade duration time, the opacity is at half. |
| 919 scrollbar_controller_->Animate(time); | 932 scrollbar_controller_->Animate(time); |
| 920 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); | 933 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity()); |
| 921 | 934 |
| 922 time += kFadeDuration / 2; | 935 time += kFadeDuration / 2; |
| 923 scrollbar_controller_->Animate(time); | 936 scrollbar_controller_->Animate(time); |
| 924 EXPECT_FLOAT_EQ(0.5f, scrollbar_layer_->Opacity()); | 937 EXPECT_FLOAT_EQ(0.5f, scrollbar_layer_->Opacity()); |
| 925 | 938 |
| 926 time += kFadeDuration / 2; | 939 time += kFadeDuration / 2; |
| 927 scrollbar_controller_->Animate(time); | 940 scrollbar_controller_->Animate(time); |
| 928 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); | 941 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); |
| 929 } | 942 } |
| 930 | 943 |
| 944 // Tests that the controller tells the client when the scrollbars hide/show. |
| 945 TEST_F(ScrollbarAnimationControllerThinningTest, NotifyChangedVisibility) { |
| 946 base::TimeTicks time; |
| 947 time += base::TimeDelta::FromSeconds(1); |
| 948 |
| 949 EXPECT_CALL(client_, DidChangeScrollbarVisibility()).Times(1); |
| 950 // Scroll to make the scrollbars visible. |
| 951 scrollbar_controller_->DidScrollBegin(); |
| 952 scrollbar_controller_->DidScrollUpdate(false); |
| 953 EXPECT_FALSE(scrollbar_controller_->ScrollbarsHidden()); |
| 954 Mock::VerifyAndClearExpectations(&client_); |
| 955 |
| 956 scrollbar_controller_->DidScrollEnd(); |
| 957 |
| 958 // Play out the fade animation. We shouldn't notify that the scrollbars are |
| 959 // hidden until the animation is completly over. We can (but don't have to) |
| 960 // notify during the animation that the scrollbars are still visible. |
| 961 EXPECT_CALL(client_, DidChangeScrollbarVisibility()).Times(0); |
| 962 ASSERT_FALSE(client_.start_fade().is_null()); |
| 963 client_.start_fade().Run(); |
| 964 scrollbar_controller_->Animate(time); |
| 965 time += kFadeDuration / 4; |
| 966 EXPECT_FALSE(scrollbar_controller_->ScrollbarsHidden()); |
| 967 scrollbar_controller_->Animate(time); |
| 968 time += kFadeDuration / 4; |
| 969 EXPECT_FALSE(scrollbar_controller_->ScrollbarsHidden()); |
| 970 scrollbar_controller_->Animate(time); |
| 971 time += kFadeDuration / 4; |
| 972 EXPECT_FALSE(scrollbar_controller_->ScrollbarsHidden()); |
| 973 scrollbar_controller_->Animate(time); |
| 974 EXPECT_FLOAT_EQ(0.25f, scrollbar_layer_->Opacity()); |
| 975 Mock::VerifyAndClearExpectations(&client_); |
| 976 |
| 977 EXPECT_CALL(client_, DidChangeScrollbarVisibility()).Times(1); |
| 978 time += kFadeDuration / 4; |
| 979 scrollbar_controller_->Animate(time); |
| 980 EXPECT_TRUE(scrollbar_controller_->ScrollbarsHidden()); |
| 981 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity()); |
| 982 Mock::VerifyAndClearExpectations(&client_); |
| 983 |
| 984 // Calling DidScrollUpdate without a begin (i.e. update from commit) should |
| 985 // also notify. |
| 986 EXPECT_CALL(client_, DidChangeScrollbarVisibility()).Times(1); |
| 987 scrollbar_controller_->DidScrollUpdate(false); |
| 988 EXPECT_FALSE(scrollbar_controller_->ScrollbarsHidden()); |
| 989 Mock::VerifyAndClearExpectations(&client_); |
| 990 } |
| 991 |
| 931 } // namespace | 992 } // namespace |
| 932 } // namespace cc | 993 } // namespace cc |
| OLD | NEW |