| OLD | NEW | 
|    1 // Copyright 2014 The Chromium Authors. All rights reserved. |    1 // Copyright 2014 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 "base/android/scoped_java_ref.h" |    5 #include "base/android/scoped_java_ref.h" | 
|    6 #include "cc/layers/layer.h" |    6 #include "cc/layers/layer.h" | 
|    7 #include "testing/gtest/include/gtest/gtest.h" |    7 #include "testing/gtest/include/gtest/gtest.h" | 
|    8 #include "ui/android/overscroll_refresh.h" |    8 #include "ui/android/overscroll_refresh.h" | 
|    9 #include "ui/android/overscroll_refresh_handler.h" |    9 #include "ui/android/overscroll_refresh_handler.h" | 
|   10  |   10  | 
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   79   EXPECT_TRUE(effect.IsAwaitingScrollUpdateAck()); |   79   EXPECT_TRUE(effect.IsAwaitingScrollUpdateAck()); | 
|   80  |   80  | 
|   81   // The initial scroll should not be consumed, as it should first be offered |   81   // The initial scroll should not be consumed, as it should first be offered | 
|   82   // to content. |   82   // to content. | 
|   83   gfx::Vector2dF scroll_up(0, 10); |   83   gfx::Vector2dF scroll_up(0, 10); | 
|   84   EXPECT_FALSE(effect.WillHandleScrollUpdate(scroll_up)); |   84   EXPECT_FALSE(effect.WillHandleScrollUpdate(scroll_up)); | 
|   85   EXPECT_FALSE(effect.IsActive()); |   85   EXPECT_FALSE(effect.IsActive()); | 
|   86   EXPECT_TRUE(effect.IsAwaitingScrollUpdateAck()); |   86   EXPECT_TRUE(effect.IsAwaitingScrollUpdateAck()); | 
|   87  |   87  | 
|   88   // The unconsumed, overscrolling scroll will trigger the effect. |   88   // The unconsumed, overscrolling scroll will trigger the effect. | 
|   89   effect.OnScrollUpdateAck(false); |   89   effect.OnOverscrolled(true); | 
|   90   EXPECT_TRUE(effect.IsActive()); |   90   EXPECT_TRUE(effect.IsActive()); | 
|   91   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); |   91   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); | 
|   92   EXPECT_TRUE(GetAndResetPullStarted()); |   92   EXPECT_TRUE(GetAndResetPullStarted()); | 
|   93  |   93  | 
|   94   // Further scrolls will be consumed. |   94   // Further scrolls will be consumed. | 
|   95   EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); |   95   EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); | 
|   96   EXPECT_EQ(50.f, GetAndResetPullDelta()); |   96   EXPECT_EQ(50.f, GetAndResetPullDelta()); | 
|   97   EXPECT_TRUE(effect.IsActive()); |   97   EXPECT_TRUE(effect.IsActive()); | 
|   98  |   98  | 
|   99   // Even scrolls in the down direction should be consumed. |   99   // Even scrolls in the down direction should be consumed. | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
|  117   // even if the subsequent scroll overscrolls upward. |  117   // even if the subsequent scroll overscrolls upward. | 
|  118   gfx::Vector2dF nonzero_offset(0, 10); |  118   gfx::Vector2dF nonzero_offset(0, 10); | 
|  119   bool overflow_y_hidden = false; |  119   bool overflow_y_hidden = false; | 
|  120   effect.OnFrameUpdated(nonzero_offset, overflow_y_hidden); |  120   effect.OnFrameUpdated(nonzero_offset, overflow_y_hidden); | 
|  121   effect.OnScrollBegin(); |  121   effect.OnScrollBegin(); | 
|  122  |  122  | 
|  123   effect.OnFrameUpdated(gfx::Vector2dF(), overflow_y_hidden); |  123   effect.OnFrameUpdated(gfx::Vector2dF(), overflow_y_hidden); | 
|  124   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); |  124   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); | 
|  125   EXPECT_FALSE(effect.IsActive()); |  125   EXPECT_FALSE(effect.IsActive()); | 
|  126   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); |  126   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); | 
|  127   effect.OnScrollUpdateAck(false); |  127   effect.OnOverscrolled(true); | 
|  128   EXPECT_FALSE(effect.IsActive()); |  128   EXPECT_FALSE(effect.IsActive()); | 
|  129   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); |  129   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); | 
|  130   EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); |  130   EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); | 
|  131   effect.OnScrollEnd(gfx::Vector2dF()); |  131   effect.OnScrollEnd(gfx::Vector2dF()); | 
|  132   EXPECT_FALSE(GetAndResetPullStarted()); |  132   EXPECT_FALSE(GetAndResetPullStarted()); | 
|  133   EXPECT_FALSE(GetAndResetPullReleased()); |  133   EXPECT_FALSE(GetAndResetPullReleased()); | 
|  134 } |  134 } | 
|  135  |  135  | 
|  136 TEST_F(OverscrollRefreshTest, NotTriggeredIfOverflowYHidden) { |  136 TEST_F(OverscrollRefreshTest, NotTriggeredIfOverflowYHidden) { | 
|  137   OverscrollRefresh effect(this); |  137   OverscrollRefresh effect(this); | 
|  138  |  138  | 
|  139   // overflow-y:hidden at the start of scroll will prevent activation. |  139   // overflow-y:hidden at the start of scroll will prevent activation. | 
|  140   gfx::Vector2dF zero_offset; |  140   gfx::Vector2dF zero_offset; | 
|  141   bool overflow_y_hidden = true; |  141   bool overflow_y_hidden = true; | 
|  142   effect.OnFrameUpdated(zero_offset, overflow_y_hidden); |  142   effect.OnFrameUpdated(zero_offset, overflow_y_hidden); | 
|  143   effect.OnScrollBegin(); |  143   effect.OnScrollBegin(); | 
|  144  |  144  | 
|  145   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); |  145   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); | 
|  146   EXPECT_FALSE(effect.IsActive()); |  146   EXPECT_FALSE(effect.IsActive()); | 
|  147   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); |  147   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); | 
|  148   effect.OnScrollUpdateAck(false); |  148   effect.OnOverscrolled(true); | 
|  149   EXPECT_FALSE(effect.IsActive()); |  149   EXPECT_FALSE(effect.IsActive()); | 
|  150   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); |  150   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); | 
|  151   EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); |  151   EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); | 
|  152   effect.OnScrollEnd(gfx::Vector2dF()); |  152   effect.OnScrollEnd(gfx::Vector2dF()); | 
|  153   EXPECT_FALSE(GetAndResetPullStarted()); |  153   EXPECT_FALSE(GetAndResetPullStarted()); | 
|  154   EXPECT_FALSE(GetAndResetPullReleased()); |  154   EXPECT_FALSE(GetAndResetPullReleased()); | 
|  155 } |  155 } | 
|  156  |  156  | 
|  157 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollDownward) { |  157 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollDownward) { | 
|  158   OverscrollRefresh effect(this); |  158   OverscrollRefresh effect(this); | 
|  159   effect.OnScrollBegin(); |  159   effect.OnScrollBegin(); | 
|  160  |  160  | 
|  161   // A downward initial scroll will prevent activation, even if the subsequent |  161   // A downward initial scroll will prevent activation, even if the subsequent | 
|  162   // scroll overscrolls upward. |  162   // scroll overscrolls upward. | 
|  163   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, -10))); |  163   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, -10))); | 
|  164   EXPECT_FALSE(effect.IsActive()); |  164   EXPECT_FALSE(effect.IsActive()); | 
|  165   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); |  165   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); | 
|  166  |  166  | 
|  167   effect.OnScrollUpdateAck(false); |  167   effect.OnOverscrolled(true); | 
|  168   EXPECT_FALSE(effect.IsActive()); |  168   EXPECT_FALSE(effect.IsActive()); | 
|  169   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); |  169   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); | 
|  170   EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); |  170   EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); | 
|  171   effect.OnScrollEnd(gfx::Vector2dF()); |  171   effect.OnScrollEnd(gfx::Vector2dF()); | 
|  172   EXPECT_FALSE(GetAndResetPullReleased()); |  172   EXPECT_FALSE(GetAndResetPullReleased()); | 
|  173 } |  173 } | 
|  174  |  174  | 
|  175 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollOrTouchConsumed) { |  175 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollOrTouchConsumed) { | 
|  176   OverscrollRefresh effect(this); |  176   OverscrollRefresh effect(this); | 
|  177   effect.OnScrollBegin(); |  177   effect.OnScrollBegin(); | 
|  178   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); |  178   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); | 
|  179   ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); |  179   ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); | 
|  180  |  180  | 
|  181   // Consumption of the initial touchmove or scroll should prevent future |  181   // Consumption of the initial touchmove or scroll should prevent future | 
|  182   // activation. |  182   // activation. | 
|  183   effect.OnScrollUpdateAck(true); |  183   effect.OnOverscrolled(false); | 
|  184   EXPECT_FALSE(effect.IsActive()); |  184   EXPECT_FALSE(effect.IsActive()); | 
|  185   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); |  185   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); | 
|  186   EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); |  186   EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); | 
|  187   effect.OnScrollUpdateAck(false); |  187   effect.OnOverscrolled(true); | 
|  188   EXPECT_FALSE(effect.IsActive()); |  188   EXPECT_FALSE(effect.IsActive()); | 
|  189   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); |  189   EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); | 
|  190   EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); |  190   EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); | 
|  191   effect.OnScrollEnd(gfx::Vector2dF()); |  191   effect.OnScrollEnd(gfx::Vector2dF()); | 
|  192   EXPECT_FALSE(GetAndResetPullStarted()); |  192   EXPECT_FALSE(GetAndResetPullStarted()); | 
|  193   EXPECT_FALSE(GetAndResetPullReleased()); |  193   EXPECT_FALSE(GetAndResetPullReleased()); | 
|  194 } |  194 } | 
|  195  |  195  | 
|  196 TEST_F(OverscrollRefreshTest, NotTriggeredIfFlungDownward) { |  196 TEST_F(OverscrollRefreshTest, NotTriggeredIfFlungDownward) { | 
|  197   OverscrollRefresh effect(this); |  197   OverscrollRefresh effect(this); | 
|  198   effect.OnScrollBegin(); |  198   effect.OnScrollBegin(); | 
|  199   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); |  199   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); | 
|  200   ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); |  200   ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); | 
|  201   effect.OnScrollUpdateAck(false); |  201   effect.OnOverscrolled(true); | 
|  202   ASSERT_TRUE(effect.IsActive()); |  202   ASSERT_TRUE(effect.IsActive()); | 
|  203   EXPECT_TRUE(GetAndResetPullStarted()); |  203   EXPECT_TRUE(GetAndResetPullStarted()); | 
|  204  |  204  | 
|  205   // Terminating the pull with a down-directed fling should prevent triggering. |  205   // Terminating the pull with a down-directed fling should prevent triggering. | 
|  206   effect.OnScrollEnd(gfx::Vector2dF(0, -1000)); |  206   effect.OnScrollEnd(gfx::Vector2dF(0, -1000)); | 
|  207   EXPECT_TRUE(GetAndResetPullReleased()); |  207   EXPECT_TRUE(GetAndResetPullReleased()); | 
|  208   EXPECT_FALSE(GetAndResetRefreshAllowed()); |  208   EXPECT_FALSE(GetAndResetRefreshAllowed()); | 
|  209 } |  209 } | 
|  210  |  210  | 
|  211 TEST_F(OverscrollRefreshTest, NotTriggeredIfReleasedWithoutActivation) { |  211 TEST_F(OverscrollRefreshTest, NotTriggeredIfReleasedWithoutActivation) { | 
|  212   OverscrollRefresh effect(this); |  212   OverscrollRefresh effect(this); | 
|  213   effect.OnScrollBegin(); |  213   effect.OnScrollBegin(); | 
|  214   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); |  214   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); | 
|  215   ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); |  215   ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); | 
|  216   effect.OnScrollUpdateAck(false); |  216   effect.OnOverscrolled(true); | 
|  217   ASSERT_TRUE(effect.IsActive()); |  217   ASSERT_TRUE(effect.IsActive()); | 
|  218   EXPECT_TRUE(GetAndResetPullStarted()); |  218   EXPECT_TRUE(GetAndResetPullStarted()); | 
|  219  |  219  | 
|  220   // An early release should prevent the refresh action from firing. |  220   // An early release should prevent the refresh action from firing. | 
|  221   effect.ReleaseWithoutActivation(); |  221   effect.ReleaseWithoutActivation(); | 
|  222   effect.OnScrollEnd(gfx::Vector2dF()); |  222   effect.OnScrollEnd(gfx::Vector2dF()); | 
|  223   EXPECT_TRUE(GetAndResetPullReleased()); |  223   EXPECT_TRUE(GetAndResetPullReleased()); | 
|  224   EXPECT_FALSE(GetAndResetRefreshAllowed()); |  224   EXPECT_FALSE(GetAndResetRefreshAllowed()); | 
|  225 } |  225 } | 
|  226  |  226  | 
|  227 TEST_F(OverscrollRefreshTest, NotTriggeredIfReset) { |  227 TEST_F(OverscrollRefreshTest, NotTriggeredIfReset) { | 
|  228   OverscrollRefresh effect(this); |  228   OverscrollRefresh effect(this); | 
|  229   effect.OnScrollBegin(); |  229   effect.OnScrollBegin(); | 
|  230   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); |  230   ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); | 
|  231   ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); |  231   ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); | 
|  232   effect.OnScrollUpdateAck(false); |  232   effect.OnOverscrolled(true); | 
|  233   ASSERT_TRUE(effect.IsActive()); |  233   ASSERT_TRUE(effect.IsActive()); | 
|  234   EXPECT_TRUE(GetAndResetPullStarted()); |  234   EXPECT_TRUE(GetAndResetPullStarted()); | 
|  235  |  235  | 
|  236   // An early reset should prevent the refresh action from firing. |  236   // An early reset should prevent the refresh action from firing. | 
|  237   effect.Reset(); |  237   effect.Reset(); | 
|  238   EXPECT_TRUE(GetAndResetPullReset()); |  238   EXPECT_TRUE(GetAndResetPullReset()); | 
|  239   effect.OnScrollEnd(gfx::Vector2dF()); |  239   effect.OnScrollEnd(gfx::Vector2dF()); | 
|  240   EXPECT_FALSE(GetAndResetPullReleased()); |  240   EXPECT_FALSE(GetAndResetPullReleased()); | 
|  241 } |  241 } | 
|  242  |  242  | 
|  243 }  // namespace ui |  243 }  // namespace ui | 
| OLD | NEW |