| 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 e32680d98933efd75569133c0f226ae0b0d1b5f5..243602ba6adc177efe609a1c827e3358b5b7b54e 100644
|
| --- a/cc/input/scrollbar_animation_controller_thinning_unittest.cc
|
| +++ b/cc/input/scrollbar_animation_controller_thinning_unittest.cc
|
| @@ -10,8 +10,14 @@
|
| #include "cc/test/geometry_test_utils.h"
|
| #include "cc/test/test_task_graph_runner.h"
|
| #include "cc/trees/layer_tree_impl.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +using testing::AtLeast;
|
| +using testing::Mock;
|
| +using testing::NiceMock;
|
| +using testing::_;
|
| +
|
| namespace cc {
|
| namespace {
|
|
|
| @@ -20,28 +26,39 @@ namespace {
|
| const float kIdleThicknessScale = 0.4f;
|
| const float kDefaultMouseMoveDistanceToTriggerAnimation = 25.f;
|
|
|
| -class ScrollbarAnimationControllerThinningTest
|
| - : public testing::Test,
|
| - public ScrollbarAnimationControllerClient {
|
| +class MockScrollbarAnimationControllerClient
|
| + : public ScrollbarAnimationControllerClient {
|
| public:
|
| - ScrollbarAnimationControllerThinningTest()
|
| - : host_impl_(&task_runner_provider_,
|
| - &task_graph_runner_) {}
|
| + explicit MockScrollbarAnimationControllerClient(LayerTreeHostImpl* host_impl)
|
| + : host_impl_(host_impl) {}
|
| + virtual ~MockScrollbarAnimationControllerClient() {}
|
|
|
| void PostDelayedScrollbarAnimationTask(const base::Closure& start_fade,
|
| base::TimeDelta delay) override {
|
| start_fade_ = start_fade;
|
| delay_ = delay;
|
| }
|
| - void SetNeedsRedrawForScrollbarAnimation() override {
|
| - did_request_redraw_ = true;
|
| - }
|
| - void SetNeedsAnimateForScrollbarAnimation() override {
|
| - did_request_animate_ = true;
|
| - }
|
| + void SetNeedsRedrawForScrollbarAnimation() override {}
|
| + void SetNeedsAnimateForScrollbarAnimation() override {}
|
| ScrollbarSet ScrollbarsFor(int scroll_layer_id) const override {
|
| - return host_impl_.ScrollbarsFor(scroll_layer_id);
|
| + return host_impl_->ScrollbarsFor(scroll_layer_id);
|
| }
|
| + MOCK_METHOD0(DidChangeScrollbarVisibility, void());
|
| +
|
| + base::Closure& start_fade() { return start_fade_; }
|
| + base::TimeDelta& delay() { return delay_; }
|
| +
|
| + private:
|
| + base::Closure start_fade_;
|
| + base::TimeDelta delay_;
|
| + LayerTreeHostImpl* host_impl_;
|
| +};
|
| +
|
| +class ScrollbarAnimationControllerThinningTest : public testing::Test {
|
| + public:
|
| + ScrollbarAnimationControllerThinningTest()
|
| + : host_impl_(&task_runner_provider_, &task_graph_runner_),
|
| + client_(&host_impl_) {}
|
|
|
| protected:
|
| const base::TimeDelta kDelayBeforeStarting = base::TimeDelta::FromSeconds(2);
|
| @@ -82,7 +99,7 @@ class ScrollbarAnimationControllerThinningTest
|
| host_impl_.active_tree()->BuildLayerListAndPropertyTreesForTesting();
|
|
|
| scrollbar_controller_ = ScrollbarAnimationControllerThinning::Create(
|
| - scroll_layer_ptr->id(), this, kDelayBeforeStarting,
|
| + scroll_layer_ptr->id(), &client_, kDelayBeforeStarting,
|
| kResizeDelayBeforeStarting, kFadeDuration, kThinningDuration);
|
| }
|
|
|
| @@ -92,11 +109,7 @@ class ScrollbarAnimationControllerThinningTest
|
| std::unique_ptr<ScrollbarAnimationControllerThinning> scrollbar_controller_;
|
| LayerImpl* clip_layer_;
|
| SolidColorScrollbarLayerImpl* scrollbar_layer_;
|
| -
|
| - base::Closure start_fade_;
|
| - base::TimeDelta delay_;
|
| - bool did_request_redraw_;
|
| - bool did_request_animate_;
|
| + NiceMock<MockScrollbarAnimationControllerClient> client_;
|
| };
|
|
|
| // Check initialization of scrollbar. Should start off invisible and thin.
|
| @@ -174,9 +187,9 @@ TEST_F(ScrollbarAnimationControllerThinningTest, BasicAppearAndFadeOut) {
|
| EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
|
|
|
| // An animation should have been enqueued.
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - start_fade_.Run();
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + client_.start_fade().Run();
|
|
|
| // Scrollbar should fade out over kFadeDuration.
|
| scrollbar_controller_->Animate(time);
|
| @@ -197,8 +210,8 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearAndFadeOut) {
|
| scrollbar_controller_->DidScrollEnd();
|
|
|
| // An animation should have been enqueued.
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
|
|
| // Now move the mouse near the scrollbar. This should cancel the currently
|
| // queued fading animation and start animating thickness.
|
| @@ -206,7 +219,7 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearAndFadeOut) {
|
| EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
|
| EXPECT_FLOAT_EQ(kIdleThicknessScale,
|
| scrollbar_layer_->thumb_thickness_scale_factor());
|
| - EXPECT_TRUE(start_fade_.IsCancelled());
|
| + EXPECT_TRUE(client_.start_fade().IsCancelled());
|
|
|
| // Scrollbar should become thick.
|
| scrollbar_controller_->Animate(time);
|
| @@ -217,8 +230,8 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearAndFadeOut) {
|
|
|
| // Once the thickening animation is complete, it should enqueue the delayed
|
| // fade animation.
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - EXPECT_FALSE(start_fade_.IsCancelled());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + EXPECT_FALSE(client_.start_fade().IsCancelled());
|
| }
|
|
|
| // Scroll content. Move the mouse over the scrollbar and confirm it becomes
|
| @@ -232,8 +245,8 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveOverAndFadeOut) {
|
| scrollbar_controller_->DidScrollEnd();
|
|
|
| // An animation should have been enqueued.
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
|
|
| // Now move the mouse over the scrollbar. This should cancel the currently
|
| // queued fading animation and start animating thickness.
|
| @@ -241,7 +254,7 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveOverAndFadeOut) {
|
| EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
|
| EXPECT_FLOAT_EQ(kIdleThicknessScale,
|
| scrollbar_layer_->thumb_thickness_scale_factor());
|
| - EXPECT_TRUE(start_fade_.IsCancelled());
|
| + EXPECT_TRUE(client_.start_fade().IsCancelled());
|
|
|
| // Scrollbar should become thick.
|
| scrollbar_controller_->Animate(time);
|
| @@ -252,8 +265,8 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveOverAndFadeOut) {
|
|
|
| // Once the thickening animation is complete, it should enqueue the delayed
|
| // fade animation.
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - EXPECT_FALSE(start_fade_.IsCancelled());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + EXPECT_FALSE(client_.start_fade().IsCancelled());
|
| }
|
|
|
| // Make sure a scrollbar captured before the thickening animation doesn't try
|
| @@ -268,8 +281,8 @@ TEST_F(ScrollbarAnimationControllerThinningTest,
|
| scrollbar_controller_->DidScrollEnd();
|
|
|
| // An animation should have been enqueued.
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
|
|
| // Now move the mouse over the scrollbar and capture it. It should become
|
| // thick without need for an animation.
|
| @@ -279,8 +292,8 @@ TEST_F(ScrollbarAnimationControllerThinningTest,
|
| EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
|
|
|
| // The fade animation should have been cancelled.
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - EXPECT_TRUE(start_fade_.IsCancelled());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + EXPECT_TRUE(client_.start_fade().IsCancelled());
|
| }
|
|
|
| // Make sure a scrollbar captured after a thickening animation doesn't try to
|
| @@ -294,8 +307,8 @@ TEST_F(ScrollbarAnimationControllerThinningTest, DontFadeWhileCaptured) {
|
| scrollbar_controller_->DidScrollEnd();
|
|
|
| // An animation should have been enqueued.
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
|
|
| // Now move the mouse over the scrollbar and animate it until it's thick.
|
| scrollbar_controller_->DidMouseMoveNear(0);
|
| @@ -306,13 +319,13 @@ TEST_F(ScrollbarAnimationControllerThinningTest, DontFadeWhileCaptured) {
|
| 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(start_fade_.is_null());
|
| - EXPECT_FALSE(start_fade_.IsCancelled());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + EXPECT_FALSE(client_.start_fade().IsCancelled());
|
|
|
| // Make sure capturing the scrollbar stops the fade.
|
| scrollbar_controller_->DidMouseDown();
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - EXPECT_TRUE(start_fade_.IsCancelled());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + EXPECT_TRUE(client_.start_fade().IsCancelled());
|
| }
|
|
|
| // Make sure releasing a captured scrollbar causes it to fade out.
|
| @@ -325,8 +338,8 @@ TEST_F(ScrollbarAnimationControllerThinningTest, FadeAfterReleased) {
|
| scrollbar_controller_->DidScrollEnd();
|
|
|
| // An animation should have been enqueued.
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
|
|
| // Now move the mouse over the scrollbar and capture it.
|
| scrollbar_controller_->DidMouseMoveNear(0);
|
| @@ -335,12 +348,12 @@ TEST_F(ScrollbarAnimationControllerThinningTest, FadeAfterReleased) {
|
| 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(start_fade_.is_null());
|
| - EXPECT_TRUE(start_fade_.IsCancelled());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + EXPECT_TRUE(client_.start_fade().IsCancelled());
|
|
|
| scrollbar_controller_->DidMouseUp();
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - EXPECT_FALSE(start_fade_.IsCancelled());
|
| + 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
|
| @@ -354,9 +367,9 @@ TEST_F(ScrollbarAnimationControllerThinningTest, MoveNearScrollbarWhileFading) {
|
| scrollbar_controller_->DidScrollEnd();
|
|
|
| // An animation should have been enqueued. Start it.
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - start_fade_.Run();
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + client_.start_fade().Run();
|
|
|
| scrollbar_controller_->Animate(time);
|
| EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
|
| @@ -399,9 +412,9 @@ TEST_F(ScrollbarAnimationControllerThinningTest, CaptureScrollbarWhileFading) {
|
| EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
|
|
|
| // A fade animation should have been enqueued. Start it.
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - start_fade_.Run();
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + client_.start_fade().Run();
|
|
|
| scrollbar_controller_->Animate(time);
|
| EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
|
| @@ -435,9 +448,9 @@ TEST_F(ScrollbarAnimationControllerThinningTest, TestCantCaptureWhenFaded) {
|
| EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
|
|
|
| // A fade animation should have been enqueued. Start it.
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - start_fade_.Run();
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + client_.start_fade().Run();
|
| scrollbar_controller_->Animate(time);
|
| EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
|
|
|
| @@ -447,20 +460,20 @@ TEST_F(ScrollbarAnimationControllerThinningTest, TestCantCaptureWhenFaded) {
|
| EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity());
|
| EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
|
|
|
| - start_fade_.Reset();
|
| + client_.start_fade().Reset();
|
|
|
| // Now try to capture the scrollbar. It shouldn't do anything since it's
|
| // 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_TRUE(start_fade_.is_null());
|
| + 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_TRUE(start_fade_.is_null());
|
| + EXPECT_TRUE(client_.start_fade().is_null());
|
| }
|
|
|
| // Initiate a scroll when the pointer is already near the scrollbar. It should
|
| @@ -487,10 +500,10 @@ TEST_F(ScrollbarAnimationControllerThinningTest, ScrollWithMouseNear) {
|
|
|
| // An animation for the fade should have been enqueued.
|
| scrollbar_controller_->DidScrollEnd();
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
|
|
| - start_fade_.Run();
|
| + 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());
|
| @@ -855,37 +868,37 @@ TEST_F(ScrollbarAnimationControllerThinningTest, ThicknessAnimated) {
|
| // Tests that main thread scroll updates immediatley queue a fade animation
|
| // without requiring a ScrollEnd.
|
| TEST_F(ScrollbarAnimationControllerThinningTest, MainThreadScrollQueuesFade) {
|
| - ASSERT_TRUE(start_fade_.is_null());
|
| + ASSERT_TRUE(client_.start_fade().is_null());
|
|
|
| // A ScrollUpdate without a ScrollBegin indicates a main thread scroll update
|
| // so we should schedule a fade animation without waiting for a ScrollEnd
|
| // (which will never come).
|
| scrollbar_controller_->DidScrollUpdate(false);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
|
|
| - start_fade_.Reset();
|
| + client_.start_fade().Reset();
|
|
|
| // If we got a ScrollBegin, we shouldn't schedule the fade animation until we
|
| // get a corresponding ScrollEnd.
|
| scrollbar_controller_->DidScrollBegin();
|
| scrollbar_controller_->DidScrollUpdate(false);
|
| - EXPECT_TRUE(start_fade_.is_null());
|
| + EXPECT_TRUE(client_.start_fade().is_null());
|
| scrollbar_controller_->DidScrollEnd();
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| }
|
|
|
| // Make sure that if the scroll update is as a result of a resize, we use the
|
| // resize delay time instead of the default one.
|
| TEST_F(ScrollbarAnimationControllerThinningTest, ResizeFadeDuration) {
|
| - ASSERT_TRUE(delay_.is_zero());
|
| + ASSERT_TRUE(client_.delay().is_zero());
|
|
|
| scrollbar_controller_->DidScrollUpdate(true);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - EXPECT_EQ(kResizeDelayBeforeStarting, delay_);
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + EXPECT_EQ(kResizeDelayBeforeStarting, client_.delay());
|
|
|
| - delay_ = base::TimeDelta();
|
| + client_.delay() = base::TimeDelta();
|
|
|
| // We should use the gesture delay rather than the resize delay if we're in a
|
| // gesture scroll, even if the resize param is set.
|
| @@ -893,8 +906,8 @@ TEST_F(ScrollbarAnimationControllerThinningTest, ResizeFadeDuration) {
|
| scrollbar_controller_->DidScrollUpdate(true);
|
| scrollbar_controller_->DidScrollEnd();
|
|
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| }
|
|
|
| // Tests that the fade effect is animated.
|
| @@ -908,9 +921,9 @@ TEST_F(ScrollbarAnimationControllerThinningTest, FadeAnimated) {
|
| EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->Opacity());
|
|
|
| // An animation should have been enqueued.
|
| - EXPECT_EQ(kDelayBeforeStarting, delay_);
|
| - EXPECT_FALSE(start_fade_.is_null());
|
| - start_fade_.Run();
|
| + EXPECT_EQ(kDelayBeforeStarting, client_.delay());
|
| + EXPECT_FALSE(client_.start_fade().is_null());
|
| + client_.start_fade().Run();
|
|
|
| base::TimeTicks time;
|
| time += base::TimeDelta::FromSeconds(1);
|
| @@ -928,5 +941,53 @@ TEST_F(ScrollbarAnimationControllerThinningTest, FadeAnimated) {
|
| EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity());
|
| }
|
|
|
| +// Tests that the controller tells the client when the scrollbars hide/show.
|
| +TEST_F(ScrollbarAnimationControllerThinningTest, NotifyChangedVisibility) {
|
| + base::TimeTicks time;
|
| + time += base::TimeDelta::FromSeconds(1);
|
| +
|
| + EXPECT_CALL(client_, DidChangeScrollbarVisibility()).Times(1);
|
| + // Scroll to make the scrollbars visible.
|
| + scrollbar_controller_->DidScrollBegin();
|
| + scrollbar_controller_->DidScrollUpdate(false);
|
| + EXPECT_FALSE(scrollbar_controller_->ScrollbarsHidden());
|
| + Mock::VerifyAndClearExpectations(&client_);
|
| +
|
| + scrollbar_controller_->DidScrollEnd();
|
| +
|
| + // Play out the fade animation. We shouldn't notify that the scrollbars are
|
| + // hidden until the animation is completly over. We can (but don't have to)
|
| + // notify during the animation that the scrollbars are still visible.
|
| + EXPECT_CALL(client_, DidChangeScrollbarVisibility()).Times(0);
|
| + ASSERT_FALSE(client_.start_fade().is_null());
|
| + client_.start_fade().Run();
|
| + scrollbar_controller_->Animate(time);
|
| + time += kFadeDuration / 4;
|
| + EXPECT_FALSE(scrollbar_controller_->ScrollbarsHidden());
|
| + scrollbar_controller_->Animate(time);
|
| + time += kFadeDuration / 4;
|
| + EXPECT_FALSE(scrollbar_controller_->ScrollbarsHidden());
|
| + scrollbar_controller_->Animate(time);
|
| + time += kFadeDuration / 4;
|
| + EXPECT_FALSE(scrollbar_controller_->ScrollbarsHidden());
|
| + scrollbar_controller_->Animate(time);
|
| + EXPECT_FLOAT_EQ(0.25f, scrollbar_layer_->Opacity());
|
| + Mock::VerifyAndClearExpectations(&client_);
|
| +
|
| + EXPECT_CALL(client_, DidChangeScrollbarVisibility()).Times(1);
|
| + time += kFadeDuration / 4;
|
| + scrollbar_controller_->Animate(time);
|
| + EXPECT_TRUE(scrollbar_controller_->ScrollbarsHidden());
|
| + EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->Opacity());
|
| + Mock::VerifyAndClearExpectations(&client_);
|
| +
|
| + // Calling DidScrollUpdate without a begin (i.e. update from commit) should
|
| + // also notify.
|
| + EXPECT_CALL(client_, DidChangeScrollbarVisibility()).Times(1);
|
| + scrollbar_controller_->DidScrollUpdate(false);
|
| + EXPECT_FALSE(scrollbar_controller_->ScrollbarsHidden());
|
| + Mock::VerifyAndClearExpectations(&client_);
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|