| Index: content/browser/android/overscroll_refresh_unittest.cc
|
| diff --git a/content/browser/android/overscroll_refresh_unittest.cc b/content/browser/android/overscroll_refresh_unittest.cc
|
| index 66ad4c7a7547c4d844e7e8daa9b3024d36b9fada..10e887c4f71d17fdab561108699bc990aa5fdc82 100644
|
| --- a/content/browser/android/overscroll_refresh_unittest.cc
|
| +++ b/content/browser/android/overscroll_refresh_unittest.cc
|
| @@ -9,13 +9,6 @@
|
|
|
| namespace content {
|
|
|
| -const float kDragTargetPixels = 100;
|
| -const bool kMirror = false;
|
| -
|
| -gfx::SizeF DefaultViewportSize() {
|
| - return gfx::SizeF(512, 512);
|
| -}
|
| -
|
| class OverscrollRefreshTest : public OverscrollRefreshClient,
|
| public ui::ResourceManager,
|
| public testing::Test {
|
| @@ -49,6 +42,21 @@ class OverscrollRefreshTest : public OverscrollRefreshClient,
|
| }
|
|
|
| protected:
|
| +
|
| + scoped_ptr<OverscrollRefresh> CreateEffect() {
|
| + const float kDragTargetPixels = 100;
|
| + const bool kMirror = false;
|
| + scoped_ptr<OverscrollRefresh> effect(
|
| + new OverscrollRefresh(this, this, kDragTargetPixels, kMirror));
|
| +
|
| + const gfx::SizeF kViewportSize(512, 512);
|
| + const gfx::Vector2dF kScrollOffset;
|
| + const bool kOverflowYHidden = false;
|
| + effect->UpdateDisplay(kViewportSize, kScrollOffset, kOverflowYHidden);
|
| +
|
| + return effect.Pass();
|
| + }
|
| +
|
| void SignalRefreshCompleted() { still_refreshing_ = false; }
|
|
|
| private:
|
| @@ -57,50 +65,48 @@ class OverscrollRefreshTest : public OverscrollRefreshClient,
|
| };
|
|
|
| TEST_F(OverscrollRefreshTest, Basic) {
|
| - OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror);
|
| + scoped_ptr<OverscrollRefresh> effect = CreateEffect();
|
|
|
| - gfx::Vector2dF origin_scroll_offset;
|
| - effect.UpdateDisplay(DefaultViewportSize(), origin_scroll_offset);
|
| - EXPECT_FALSE(effect.IsActive());
|
| - EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
|
| + EXPECT_FALSE(effect->IsActive());
|
| + EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
|
|
|
| - effect.OnScrollBegin();
|
| - EXPECT_FALSE(effect.IsActive());
|
| - EXPECT_TRUE(effect.IsAwaitingScrollUpdateAck());
|
| + effect->OnScrollBegin();
|
| + EXPECT_FALSE(effect->IsActive());
|
| + EXPECT_TRUE(effect->IsAwaitingScrollUpdateAck());
|
|
|
| // The initial scroll should not be consumed, as it should first be offered
|
| // to content.
|
| gfx::Vector2dF scroll_up(0, 10);
|
| - EXPECT_FALSE(effect.WillHandleScrollUpdate(scroll_up));
|
| - EXPECT_FALSE(effect.IsActive());
|
| - EXPECT_TRUE(effect.IsAwaitingScrollUpdateAck());
|
| + EXPECT_FALSE(effect->WillHandleScrollUpdate(scroll_up));
|
| + EXPECT_FALSE(effect->IsActive());
|
| + EXPECT_TRUE(effect->IsAwaitingScrollUpdateAck());
|
|
|
| - // The unconsumed, overscrolling scroll will trigger the effect.
|
| - effect.OnScrollUpdateAck(false);
|
| - EXPECT_TRUE(effect.IsActive());
|
| - EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
|
| + // The unconsumed, overscrolling scroll will trigger the effect->
|
| + effect->OnScrollUpdateAck(false);
|
| + EXPECT_TRUE(effect->IsActive());
|
| + EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
|
|
|
| // Further scrolls will be consumed.
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.IsActive());
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->IsActive());
|
|
|
| // Even scrolls in the down direction should be consumed.
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, -50)));
|
| - EXPECT_TRUE(effect.IsActive());
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, -50)));
|
| + EXPECT_TRUE(effect->IsActive());
|
|
|
| // Feed enough scrolls to the effect to exceeds tht threshold.
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 100)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 100)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 100)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 100)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 100)));
|
| - EXPECT_TRUE(effect.IsActive());
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 100)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 100)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 100)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 100)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 100)));
|
| + EXPECT_TRUE(effect->IsActive());
|
|
|
| // Ending the scroll while beyond the threshold should trigger a refresh.
|
| gfx::Vector2dF zero_velocity;
|
| EXPECT_FALSE(GetAndResetRefreshTriggered());
|
| - effect.OnScrollEnd(zero_velocity);
|
| - EXPECT_TRUE(effect.IsActive());
|
| + effect->OnScrollEnd(zero_velocity);
|
| + EXPECT_TRUE(effect->IsActive());
|
| EXPECT_TRUE(GetAndResetRefreshTriggered());
|
| SignalRefreshCompleted();
|
|
|
| @@ -108,7 +114,7 @@ TEST_F(OverscrollRefreshTest, Basic) {
|
| base::TimeTicks initial_time = base::TimeTicks::Now();
|
| base::TimeTicks current_time = initial_time;
|
| scoped_refptr<cc::Layer> layer = cc::Layer::Create();
|
| - while (effect.Animate(current_time, layer.get()))
|
| + while (effect->Animate(current_time, layer.get()))
|
| current_time += base::TimeDelta::FromMilliseconds(16);
|
|
|
| // The effect should terminate in a timely fashion.
|
| @@ -116,24 +122,23 @@ TEST_F(OverscrollRefreshTest, Basic) {
|
| EXPECT_LE(
|
| current_time.ToInternalValue(),
|
| (initial_time + base::TimeDelta::FromSeconds(10)).ToInternalValue());
|
| - EXPECT_FALSE(effect.IsActive());
|
| + EXPECT_FALSE(effect->IsActive());
|
| }
|
|
|
| TEST_F(OverscrollRefreshTest, AnimationTerminatesEvenIfRefreshNeverTerminates) {
|
| - OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror);
|
| - effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
|
| - effect.OnScrollBegin();
|
| - ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| - ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
|
| - effect.OnScrollUpdateAck(false);
|
| - ASSERT_TRUE(effect.IsActive());
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - effect.OnScrollEnd(gfx::Vector2dF(0, 0));
|
| + scoped_ptr<OverscrollRefresh> effect = CreateEffect();
|
| + effect->OnScrollBegin();
|
| + ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| + ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
|
| + effect->OnScrollUpdateAck(false);
|
| + ASSERT_TRUE(effect->IsActive());
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + effect->OnScrollEnd(gfx::Vector2dF(0, 0));
|
| ASSERT_TRUE(GetAndResetRefreshTriggered());
|
|
|
| // Verify that the animation terminates even if the triggered refresh
|
| @@ -141,163 +146,179 @@ TEST_F(OverscrollRefreshTest, AnimationTerminatesEvenIfRefreshNeverTerminates) {
|
| base::TimeTicks initial_time = base::TimeTicks::Now();
|
| base::TimeTicks current_time = initial_time;
|
| scoped_refptr<cc::Layer> layer = cc::Layer::Create();
|
| - while (effect.Animate(current_time, layer.get()))
|
| + while (effect->Animate(current_time, layer.get()))
|
| current_time += base::TimeDelta::FromMilliseconds(16);
|
|
|
| EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue());
|
| EXPECT_LE(
|
| current_time.ToInternalValue(),
|
| (initial_time + base::TimeDelta::FromSeconds(10)).ToInternalValue());
|
| - EXPECT_FALSE(effect.IsActive());
|
| + EXPECT_FALSE(effect->IsActive());
|
| }
|
|
|
| TEST_F(OverscrollRefreshTest, NotTriggeredIfBelowThreshold) {
|
| - OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror);
|
| - effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
|
| - effect.OnScrollBegin();
|
| - ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| - ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
|
| - effect.OnScrollUpdateAck(false);
|
| - ASSERT_TRUE(effect.IsActive());
|
| + scoped_ptr<OverscrollRefresh> effect = CreateEffect();
|
| + effect->OnScrollBegin();
|
| + ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| + ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
|
| + effect->OnScrollUpdateAck(false);
|
| + ASSERT_TRUE(effect->IsActive());
|
|
|
| // Terminating the pull before it exceeds the threshold will prevent refresh.
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| - effect.OnScrollEnd(gfx::Vector2dF());
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| + effect->OnScrollEnd(gfx::Vector2dF());
|
| EXPECT_FALSE(GetAndResetRefreshTriggered());
|
| }
|
|
|
| TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialYOffsetIsNotZero) {
|
| - OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror);
|
| + scoped_ptr<OverscrollRefresh> effect = CreateEffect();
|
|
|
| // A positive y scroll offset at the start of scroll will prevent activation,
|
| // even if the subsequent scroll overscrolls upward.
|
| + gfx::SizeF viewport_size(512, 512);
|
| gfx::Vector2dF nonzero_offset(0, 10);
|
| - effect.UpdateDisplay(DefaultViewportSize(), nonzero_offset);
|
| - effect.OnScrollBegin();
|
| -
|
| - effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
|
| - ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| - EXPECT_FALSE(effect.IsActive());
|
| - EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
|
| - effect.OnScrollUpdateAck(false);
|
| - EXPECT_FALSE(effect.IsActive());
|
| - EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
|
| - EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| - effect.OnScrollEnd(gfx::Vector2dF());
|
| + bool overflow_y_hidden = false;
|
| + effect->UpdateDisplay(viewport_size, nonzero_offset, overflow_y_hidden);
|
| + effect->OnScrollBegin();
|
| +
|
| + ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| + EXPECT_FALSE(effect->IsActive());
|
| + EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
|
| + effect->OnScrollUpdateAck(false);
|
| + EXPECT_FALSE(effect->IsActive());
|
| + EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
|
| + EXPECT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| + effect->OnScrollEnd(gfx::Vector2dF());
|
| + EXPECT_FALSE(GetAndResetRefreshTriggered());
|
| +}
|
| +
|
| +TEST_F(OverscrollRefreshTest, NotTriggeredIfOverflowYHidden) {
|
| + scoped_ptr<OverscrollRefresh> effect = CreateEffect();
|
| +
|
| + // "overflow-y: hidden" on the root layer will prevent activation,
|
| + // even if the subsequent scroll overscrolls upward.
|
| + gfx::SizeF viewport_size(512, 512);
|
| + gfx::Vector2dF zero_offset;
|
| + bool overflow_y_hidden = true;
|
| + effect->UpdateDisplay(viewport_size, zero_offset, overflow_y_hidden);
|
| + effect->OnScrollBegin();
|
| + ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| + EXPECT_FALSE(effect->IsActive());
|
| + EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
|
| + effect->OnScrollUpdateAck(false);
|
| + EXPECT_FALSE(effect->IsActive());
|
| + EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
|
| + EXPECT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| + effect->OnScrollEnd(gfx::Vector2dF());
|
| EXPECT_FALSE(GetAndResetRefreshTriggered());
|
| }
|
|
|
| TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollDownward) {
|
| - OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror);
|
| - effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
|
| - effect.OnScrollBegin();
|
| + scoped_ptr<OverscrollRefresh> effect = CreateEffect();
|
| + effect->OnScrollBegin();
|
|
|
| // A downward initial scroll will prevent activation, even if the subsequent
|
| // scroll overscrolls upward.
|
| - ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, -10)));
|
| - EXPECT_FALSE(effect.IsActive());
|
| - EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
|
| -
|
| - effect.OnScrollUpdateAck(false);
|
| - EXPECT_FALSE(effect.IsActive());
|
| - EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
|
| - EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| - effect.OnScrollEnd(gfx::Vector2dF());
|
| + ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, -10)));
|
| + EXPECT_FALSE(effect->IsActive());
|
| + EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
|
| +
|
| + effect->OnScrollUpdateAck(false);
|
| + EXPECT_FALSE(effect->IsActive());
|
| + EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
|
| + EXPECT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| + effect->OnScrollEnd(gfx::Vector2dF());
|
| EXPECT_FALSE(GetAndResetRefreshTriggered());
|
| }
|
|
|
| TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollOrTouchConsumed) {
|
| - OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror);
|
| - effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
|
| - effect.OnScrollBegin();
|
| - ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| - ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
|
| + scoped_ptr<OverscrollRefresh> effect = CreateEffect();
|
| + effect->OnScrollBegin();
|
| + ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| + ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
|
|
|
| // Consumption of the initial touchmove or scroll should prevent future
|
| // activation.
|
| - effect.OnScrollUpdateAck(true);
|
| - EXPECT_FALSE(effect.IsActive());
|
| - EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
|
| - EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| - effect.OnScrollUpdateAck(false);
|
| - EXPECT_FALSE(effect.IsActive());
|
| - EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
|
| - EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| - effect.OnScrollEnd(gfx::Vector2dF());
|
| + effect->OnScrollUpdateAck(true);
|
| + EXPECT_FALSE(effect->IsActive());
|
| + EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
|
| + EXPECT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| + effect->OnScrollUpdateAck(false);
|
| + EXPECT_FALSE(effect->IsActive());
|
| + EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
|
| + EXPECT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| + effect->OnScrollEnd(gfx::Vector2dF());
|
| EXPECT_FALSE(GetAndResetRefreshTriggered());
|
| }
|
|
|
| TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollsJanked) {
|
| - OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror);
|
| - effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
|
| - effect.OnScrollBegin();
|
| - ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| - ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
|
| - effect.OnScrollUpdateAck(false);
|
| - ASSERT_TRUE(effect.IsActive());
|
| + scoped_ptr<OverscrollRefresh> effect = CreateEffect();
|
| + effect->OnScrollBegin();
|
| + ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| + ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
|
| + effect->OnScrollUpdateAck(false);
|
| + ASSERT_TRUE(effect->IsActive());
|
|
|
| // It should take more than just one or two large scrolls to trigger,
|
| - // mitigating likelihood of jank triggering the effect.
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| - effect.OnScrollEnd(gfx::Vector2dF());
|
| + // mitigating likelihood of jank triggering the effect->
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
|
| + effect->OnScrollEnd(gfx::Vector2dF());
|
| EXPECT_FALSE(GetAndResetRefreshTriggered());
|
| }
|
|
|
| TEST_F(OverscrollRefreshTest, NotTriggeredIfFlungDownward) {
|
| - OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror);
|
| - effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
|
| - effect.OnScrollBegin();
|
| - ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| - ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
|
| - effect.OnScrollUpdateAck(false);
|
| - ASSERT_TRUE(effect.IsActive());
|
| + scoped_ptr<OverscrollRefresh> effect = CreateEffect();
|
| + effect->OnScrollBegin();
|
| + ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| + ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
|
| + effect->OnScrollUpdateAck(false);
|
| + ASSERT_TRUE(effect->IsActive());
|
|
|
| // Ensure the pull exceeds the necessary threshold.
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
|
|
| // Terminating the pull with a down-directed fling should prevent triggering.
|
| - effect.OnScrollEnd(gfx::Vector2dF(0, -1000));
|
| + effect->OnScrollEnd(gfx::Vector2dF(0, -1000));
|
| EXPECT_FALSE(GetAndResetRefreshTriggered());
|
| }
|
|
|
| TEST_F(OverscrollRefreshTest, NotTriggeredIfReleasedWithoutActivation) {
|
| - OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror);
|
| - effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
|
| - effect.OnScrollBegin();
|
| - ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| - ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
|
| - effect.OnScrollUpdateAck(false);
|
| - ASSERT_TRUE(effect.IsActive());
|
| + scoped_ptr<OverscrollRefresh> effect = CreateEffect();
|
| + effect->OnScrollBegin();
|
| + ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
|
| + ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
|
| + effect->OnScrollUpdateAck(false);
|
| + ASSERT_TRUE(effect->IsActive());
|
|
|
| // Ensure the pull exceeds the necessary threshold.
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| - EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
| + EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
|
|
|
| // An early release should prevent the refresh action from firing.
|
| - effect.ReleaseWithoutActivation();
|
| - effect.OnScrollEnd(gfx::Vector2dF());
|
| + effect->ReleaseWithoutActivation();
|
| + effect->OnScrollEnd(gfx::Vector2dF());
|
| EXPECT_FALSE(GetAndResetRefreshTriggered());
|
|
|
| // The early release should trigger a dismissal animation.
|
| - EXPECT_TRUE(effect.IsActive());
|
| + EXPECT_TRUE(effect->IsActive());
|
| base::TimeTicks initial_time = base::TimeTicks::Now();
|
| base::TimeTicks current_time = initial_time;
|
| scoped_refptr<cc::Layer> layer = cc::Layer::Create();
|
| - while (effect.Animate(current_time, layer.get()))
|
| + while (effect->Animate(current_time, layer.get()))
|
| current_time += base::TimeDelta::FromMilliseconds(16);
|
|
|
| EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue());
|
| - EXPECT_FALSE(effect.IsActive());
|
| + EXPECT_FALSE(effect->IsActive());
|
| EXPECT_FALSE(GetAndResetRefreshTriggered());
|
| }
|
|
|
|
|