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 |