Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(729)

Side by Side Diff: content/browser/android/overscroll_refresh_unittest.cc

Issue 748433002: [Android] Isolate OverscrollRefresh from device density (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/browser/android/overscroll_refresh.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "cc/layers/layer.h" 5 #include "cc/layers/layer.h"
6 #include "content/browser/android/overscroll_refresh.h" 6 #include "content/browser/android/overscroll_refresh.h"
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "ui/base/android/system_ui_resource_manager.h" 8 #include "ui/base/android/system_ui_resource_manager.h"
9 9
10 namespace content { 10 namespace content {
11 11
12 const float kDragTargetPixels = 100;
13
12 gfx::SizeF DefaultViewportSize() { 14 gfx::SizeF DefaultViewportSize() {
13 return gfx::SizeF(512, 512); 15 return gfx::SizeF(512, 512);
14 } 16 }
15 17
16 class OverscrollRefreshTest : public OverscrollRefreshClient, 18 class OverscrollRefreshTest : public OverscrollRefreshClient,
17 public ui::SystemUIResourceManager, 19 public ui::SystemUIResourceManager,
18 public testing::Test { 20 public testing::Test {
19 public: 21 public:
20 OverscrollRefreshTest() : refresh_triggered_(false) {} 22 OverscrollRefreshTest() : refresh_triggered_(false) {}
21 23
(...skipping 20 matching lines...) Expand all
42 cc::UIResourceId GetUIResourceId(ui::SystemUIResourceType) override { 44 cc::UIResourceId GetUIResourceId(ui::SystemUIResourceType) override {
43 return 0; 45 return 0;
44 } 46 }
45 47
46 private: 48 private:
47 bool refresh_triggered_; 49 bool refresh_triggered_;
48 bool still_refreshing_; 50 bool still_refreshing_;
49 }; 51 };
50 52
51 TEST_F(OverscrollRefreshTest, Basic) { 53 TEST_F(OverscrollRefreshTest, Basic) {
52 OverscrollRefresh effect(this, this); 54 OverscrollRefresh effect(this, this, kDragTargetPixels);
53 55
54 gfx::Vector2dF origin_scroll_offset; 56 gfx::Vector2dF origin_scroll_offset;
55 effect.UpdateDisplay(DefaultViewportSize(), origin_scroll_offset); 57 effect.UpdateDisplay(DefaultViewportSize(), origin_scroll_offset);
56 EXPECT_FALSE(effect.IsActive()); 58 EXPECT_FALSE(effect.IsActive());
57 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 59 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
58 60
59 effect.OnScrollBegin(); 61 effect.OnScrollBegin();
60 EXPECT_FALSE(effect.IsActive()); 62 EXPECT_FALSE(effect.IsActive());
61 EXPECT_TRUE(effect.IsAwaitingScrollUpdateAck()); 63 EXPECT_TRUE(effect.IsAwaitingScrollUpdateAck());
62 64
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 107
106 // The effect should terminate in a timely fashion. 108 // The effect should terminate in a timely fashion.
107 EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue()); 109 EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue());
108 EXPECT_LE( 110 EXPECT_LE(
109 current_time.ToInternalValue(), 111 current_time.ToInternalValue(),
110 (initial_time + base::TimeDelta::FromSeconds(10)).ToInternalValue()); 112 (initial_time + base::TimeDelta::FromSeconds(10)).ToInternalValue());
111 EXPECT_FALSE(effect.IsActive()); 113 EXPECT_FALSE(effect.IsActive());
112 } 114 }
113 115
114 TEST_F(OverscrollRefreshTest, AnimationTerminatesEvenIfRefreshNeverTerminates) { 116 TEST_F(OverscrollRefreshTest, AnimationTerminatesEvenIfRefreshNeverTerminates) {
115 OverscrollRefresh effect(this, this); 117 OverscrollRefresh effect(this, this, kDragTargetPixels);
116 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 118 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
117 effect.OnScrollBegin(); 119 effect.OnScrollBegin();
118 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 120 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
119 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); 121 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
120 effect.OnScrollUpdateAck(false); 122 effect.OnScrollUpdateAck(false);
121 ASSERT_TRUE(effect.IsActive()); 123 ASSERT_TRUE(effect.IsActive());
122 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); 124 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
123 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); 125 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
124 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); 126 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
125 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); 127 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
(...skipping 11 matching lines...) Expand all
137 current_time += base::TimeDelta::FromMilliseconds(16); 139 current_time += base::TimeDelta::FromMilliseconds(16);
138 140
139 EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue()); 141 EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue());
140 EXPECT_LE( 142 EXPECT_LE(
141 current_time.ToInternalValue(), 143 current_time.ToInternalValue(),
142 (initial_time + base::TimeDelta::FromSeconds(10)).ToInternalValue()); 144 (initial_time + base::TimeDelta::FromSeconds(10)).ToInternalValue());
143 EXPECT_FALSE(effect.IsActive()); 145 EXPECT_FALSE(effect.IsActive());
144 } 146 }
145 147
146 TEST_F(OverscrollRefreshTest, NotTriggeredIfBelowThreshold) { 148 TEST_F(OverscrollRefreshTest, NotTriggeredIfBelowThreshold) {
147 OverscrollRefresh effect(this, this); 149 OverscrollRefresh effect(this, this, kDragTargetPixels);
148 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 150 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
149 effect.OnScrollBegin(); 151 effect.OnScrollBegin();
150 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 152 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
151 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); 153 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
152 effect.OnScrollUpdateAck(false); 154 effect.OnScrollUpdateAck(false);
153 ASSERT_TRUE(effect.IsActive()); 155 ASSERT_TRUE(effect.IsActive());
154 156
155 // Terminating the pull before it exceeds the threshold will prevent refresh. 157 // Terminating the pull before it exceeds the threshold will prevent refresh.
156 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 158 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
157 effect.OnScrollEnd(gfx::Vector2dF()); 159 effect.OnScrollEnd(gfx::Vector2dF());
158 EXPECT_FALSE(GetAndResetRefreshTriggered()); 160 EXPECT_FALSE(GetAndResetRefreshTriggered());
159 } 161 }
160 162
161 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialYOffsetIsNotZero) { 163 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialYOffsetIsNotZero) {
162 OverscrollRefresh effect(this, this); 164 OverscrollRefresh effect(this, this, kDragTargetPixels);
163 165
164 // A positive y scroll offset at the start of scroll will prevent activation, 166 // A positive y scroll offset at the start of scroll will prevent activation,
165 // even if the subsequent scroll overscrolls upward. 167 // even if the subsequent scroll overscrolls upward.
166 gfx::Vector2dF nonzero_offset(0, 10); 168 gfx::Vector2dF nonzero_offset(0, 10);
167 effect.UpdateDisplay(DefaultViewportSize(), nonzero_offset); 169 effect.UpdateDisplay(DefaultViewportSize(), nonzero_offset);
168 effect.OnScrollBegin(); 170 effect.OnScrollBegin();
169 171
170 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 172 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
171 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 173 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
172 EXPECT_FALSE(effect.IsActive()); 174 EXPECT_FALSE(effect.IsActive());
173 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 175 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
174 effect.OnScrollUpdateAck(false); 176 effect.OnScrollUpdateAck(false);
175 EXPECT_FALSE(effect.IsActive()); 177 EXPECT_FALSE(effect.IsActive());
176 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 178 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
177 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 179 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
178 effect.OnScrollEnd(gfx::Vector2dF()); 180 effect.OnScrollEnd(gfx::Vector2dF());
179 EXPECT_FALSE(GetAndResetRefreshTriggered()); 181 EXPECT_FALSE(GetAndResetRefreshTriggered());
180 } 182 }
181 183
182 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollDownward) { 184 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollDownward) {
183 OverscrollRefresh effect(this, this); 185 OverscrollRefresh effect(this, this, kDragTargetPixels);
184 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 186 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
185 effect.OnScrollBegin(); 187 effect.OnScrollBegin();
186 188
187 // A downward initial scroll will prevent activation, even if the subsequent 189 // A downward initial scroll will prevent activation, even if the subsequent
188 // scroll overscrolls upward. 190 // scroll overscrolls upward.
189 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, -10))); 191 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, -10)));
190 EXPECT_FALSE(effect.IsActive()); 192 EXPECT_FALSE(effect.IsActive());
191 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 193 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
192 194
193 effect.OnScrollUpdateAck(false); 195 effect.OnScrollUpdateAck(false);
194 EXPECT_FALSE(effect.IsActive()); 196 EXPECT_FALSE(effect.IsActive());
195 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 197 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
196 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 198 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
197 effect.OnScrollEnd(gfx::Vector2dF()); 199 effect.OnScrollEnd(gfx::Vector2dF());
198 EXPECT_FALSE(GetAndResetRefreshTriggered()); 200 EXPECT_FALSE(GetAndResetRefreshTriggered());
199 } 201 }
200 202
201 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollOrTouchConsumed) { 203 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollOrTouchConsumed) {
202 OverscrollRefresh effect(this, this); 204 OverscrollRefresh effect(this, this, kDragTargetPixels);
203 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 205 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
204 effect.OnScrollBegin(); 206 effect.OnScrollBegin();
205 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 207 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
206 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); 208 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
207 209
208 // Consumption of the initial touchmove or scroll should prevent future 210 // Consumption of the initial touchmove or scroll should prevent future
209 // activation. 211 // activation.
210 effect.OnScrollUpdateAck(true); 212 effect.OnScrollUpdateAck(true);
211 EXPECT_FALSE(effect.IsActive()); 213 EXPECT_FALSE(effect.IsActive());
212 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 214 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
213 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 215 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
214 effect.OnScrollUpdateAck(false); 216 effect.OnScrollUpdateAck(false);
215 EXPECT_FALSE(effect.IsActive()); 217 EXPECT_FALSE(effect.IsActive());
216 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 218 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
217 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 219 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
218 effect.OnScrollEnd(gfx::Vector2dF()); 220 effect.OnScrollEnd(gfx::Vector2dF());
219 EXPECT_FALSE(GetAndResetRefreshTriggered()); 221 EXPECT_FALSE(GetAndResetRefreshTriggered());
220 } 222 }
221 223
222 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollsJanked) { 224 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollsJanked) {
223 OverscrollRefresh effect(this, this); 225 OverscrollRefresh effect(this, this, kDragTargetPixels);
224 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 226 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
225 effect.OnScrollBegin(); 227 effect.OnScrollBegin();
226 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 228 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
227 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); 229 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
228 effect.OnScrollUpdateAck(false); 230 effect.OnScrollUpdateAck(false);
229 ASSERT_TRUE(effect.IsActive()); 231 ASSERT_TRUE(effect.IsActive());
230 232
231 // It should take more than just one or two large scrolls to trigger, 233 // It should take more than just one or two large scrolls to trigger,
232 // mitigating likelihood of jank triggering the effect. 234 // mitigating likelihood of jank triggering the effect.
233 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 235 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
234 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 236 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
235 effect.OnScrollEnd(gfx::Vector2dF()); 237 effect.OnScrollEnd(gfx::Vector2dF());
236 EXPECT_FALSE(GetAndResetRefreshTriggered()); 238 EXPECT_FALSE(GetAndResetRefreshTriggered());
237 } 239 }
238 240
239 TEST_F(OverscrollRefreshTest, NotTriggeredIfFlungDownward) { 241 TEST_F(OverscrollRefreshTest, NotTriggeredIfFlungDownward) {
240 OverscrollRefresh effect(this, this); 242 OverscrollRefresh effect(this, this, kDragTargetPixels);
241 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 243 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF());
242 effect.OnScrollBegin(); 244 effect.OnScrollBegin();
243 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 245 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
244 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); 246 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
245 effect.OnScrollUpdateAck(false); 247 effect.OnScrollUpdateAck(false);
246 ASSERT_TRUE(effect.IsActive()); 248 ASSERT_TRUE(effect.IsActive());
247 249
248 // Ensure the pull exceeds the necessary threshold. 250 // Ensure the pull exceeds the necessary threshold.
249 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); 251 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
250 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); 252 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
251 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); 253 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
252 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); 254 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
253 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); 255 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
254 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); 256 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
255 257
256 // Terminating the pull with a down-directed fling should prevent triggering. 258 // Terminating the pull with a down-directed fling should prevent triggering.
257 effect.OnScrollEnd(gfx::Vector2dF(0, -1000)); 259 effect.OnScrollEnd(gfx::Vector2dF(0, -1000));
258 EXPECT_FALSE(GetAndResetRefreshTriggered()); 260 EXPECT_FALSE(GetAndResetRefreshTriggered());
259 } 261 }
260 262
261 } // namespace content 263 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/android/overscroll_refresh.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698