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

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

Issue 910373002: [Android] Disable pull-to-refresh with overflow:hidden (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 10 months 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') | content/common/cc_messages.h » ('j') | 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/android/resources/resource_manager.h" 8 #include "ui/android/resources/resource_manager.h"
9 9
10 namespace content { 10 namespace content {
11 11
12 const float kDragTargetPixels = 100;
13 const bool kMirror = false;
14
15 gfx::SizeF DefaultViewportSize() {
16 return gfx::SizeF(512, 512);
17 }
18
19 class OverscrollRefreshTest : public OverscrollRefreshClient, 12 class OverscrollRefreshTest : public OverscrollRefreshClient,
20 public ui::ResourceManager, 13 public ui::ResourceManager,
21 public testing::Test { 14 public testing::Test {
22 public: 15 public:
23 OverscrollRefreshTest() 16 OverscrollRefreshTest()
24 : refresh_triggered_(false), still_refreshing_(false) {} 17 : refresh_triggered_(false), still_refreshing_(false) {}
25 18
26 // OverscrollRefreshClient implementation. 19 // OverscrollRefreshClient implementation.
27 void TriggerRefresh() override { 20 void TriggerRefresh() override {
28 refresh_triggered_ = true; 21 refresh_triggered_ = true;
(...skipping 18 matching lines...) Expand all
47 refresh_triggered_ = false; 40 refresh_triggered_ = false;
48 return triggered; 41 return triggered;
49 } 42 }
50 43
51 void PullBeyondActivationThreshold(OverscrollRefresh* effect) { 44 void PullBeyondActivationThreshold(OverscrollRefresh* effect) {
52 for (int i = 0; i < OverscrollRefresh::kMinPullsToActivate; ++i) 45 for (int i = 0; i < OverscrollRefresh::kMinPullsToActivate; ++i)
53 EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 100))); 46 EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 100)));
54 } 47 }
55 48
56 protected: 49 protected:
50
51 scoped_ptr<OverscrollRefresh> CreateEffect() {
52 const float kDragTargetPixels = 100;
53 const bool kMirror = false;
54 scoped_ptr<OverscrollRefresh> effect(
55 new OverscrollRefresh(this, this, kDragTargetPixels, kMirror));
56
57 const gfx::SizeF kViewportSize(512, 512);
58 const gfx::Vector2dF kScrollOffset;
59 const bool kOverflowYHidden = false;
60 effect->UpdateDisplay(kViewportSize, kScrollOffset, kOverflowYHidden);
61
62 return effect.Pass();
63 }
64
57 void SignalRefreshCompleted() { still_refreshing_ = false; } 65 void SignalRefreshCompleted() { still_refreshing_ = false; }
58 66
59 private: 67 private:
60 bool refresh_triggered_; 68 bool refresh_triggered_;
61 bool still_refreshing_; 69 bool still_refreshing_;
62 }; 70 };
63 71
64 TEST_F(OverscrollRefreshTest, Basic) { 72 TEST_F(OverscrollRefreshTest, Basic) {
65 OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror); 73 scoped_ptr<OverscrollRefresh> effect = CreateEffect();
66 74
67 gfx::Vector2dF origin_scroll_offset; 75 EXPECT_FALSE(effect->IsActive());
68 effect.UpdateDisplay(DefaultViewportSize(), origin_scroll_offset); 76 EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
69 EXPECT_FALSE(effect.IsActive());
70 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck());
71 77
72 effect.OnScrollBegin(); 78 effect->OnScrollBegin();
73 EXPECT_FALSE(effect.IsActive()); 79 EXPECT_FALSE(effect->IsActive());
74 EXPECT_TRUE(effect.IsAwaitingScrollUpdateAck()); 80 EXPECT_TRUE(effect->IsAwaitingScrollUpdateAck());
75 81
76 // The initial scroll should not be consumed, as it should first be offered 82 // The initial scroll should not be consumed, as it should first be offered
77 // to content. 83 // to content.
78 gfx::Vector2dF scroll_up(0, 10); 84 gfx::Vector2dF scroll_up(0, 10);
79 EXPECT_FALSE(effect.WillHandleScrollUpdate(scroll_up)); 85 EXPECT_FALSE(effect->WillHandleScrollUpdate(scroll_up));
80 EXPECT_FALSE(effect.IsActive()); 86 EXPECT_FALSE(effect->IsActive());
81 EXPECT_TRUE(effect.IsAwaitingScrollUpdateAck()); 87 EXPECT_TRUE(effect->IsAwaitingScrollUpdateAck());
82 88
83 // The unconsumed, overscrolling scroll will trigger the effect. 89 // The unconsumed, overscrolling scroll will trigger the effect->
84 effect.OnScrollUpdateAck(false); 90 effect->OnScrollUpdateAck(false);
85 EXPECT_TRUE(effect.IsActive()); 91 EXPECT_TRUE(effect->IsActive());
86 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 92 EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
87 93
88 // Further scrolls will be consumed. 94 // Further scrolls will be consumed.
89 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 50))); 95 EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 50)));
90 EXPECT_TRUE(effect.IsActive()); 96 EXPECT_TRUE(effect->IsActive());
91 97
92 // Even scrolls in the down direction should be consumed. 98 // Even scrolls in the down direction should be consumed.
93 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, -50))); 99 EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, -50)));
94 EXPECT_TRUE(effect.IsActive()); 100 EXPECT_TRUE(effect->IsActive());
95 101
96 // Feed enough scrolls to the effect to exceeds the threshold. 102 // Feed enough scrolls to the effect to exceeds the threshold.
97 PullBeyondActivationThreshold(&effect); 103 PullBeyondActivationThreshold(effect.get());
98 EXPECT_TRUE(effect.IsActive()); 104 EXPECT_TRUE(effect->IsActive());
99 105
100 // Ending the scroll while beyond the threshold should trigger a refresh. 106 // Ending the scroll while beyond the threshold should trigger a refresh.
101 gfx::Vector2dF zero_velocity; 107 gfx::Vector2dF zero_velocity;
102 EXPECT_FALSE(GetAndResetRefreshTriggered()); 108 EXPECT_FALSE(GetAndResetRefreshTriggered());
103 effect.OnScrollEnd(zero_velocity); 109 effect->OnScrollEnd(zero_velocity);
104 EXPECT_TRUE(effect.IsActive()); 110 EXPECT_TRUE(effect->IsActive());
105 EXPECT_TRUE(GetAndResetRefreshTriggered()); 111 EXPECT_TRUE(GetAndResetRefreshTriggered());
106 SignalRefreshCompleted(); 112 SignalRefreshCompleted();
107 113
108 // Ensure animation doesn't explode. 114 // Ensure animation doesn't explode.
109 base::TimeTicks initial_time = base::TimeTicks::Now(); 115 base::TimeTicks initial_time = base::TimeTicks::Now();
110 base::TimeTicks current_time = initial_time; 116 base::TimeTicks current_time = initial_time;
111 scoped_refptr<cc::Layer> layer = cc::Layer::Create(); 117 scoped_refptr<cc::Layer> layer = cc::Layer::Create();
112 while (effect.Animate(current_time, layer.get())) 118 while (effect->Animate(current_time, layer.get()))
113 current_time += base::TimeDelta::FromMilliseconds(16); 119 current_time += base::TimeDelta::FromMilliseconds(16);
114 120
115 // The effect should terminate in a timely fashion. 121 // The effect should terminate in a timely fashion.
116 EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue()); 122 EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue());
117 EXPECT_LE( 123 EXPECT_LE(
118 current_time.ToInternalValue(), 124 current_time.ToInternalValue(),
119 (initial_time + base::TimeDelta::FromSeconds(10)).ToInternalValue()); 125 (initial_time + base::TimeDelta::FromSeconds(10)).ToInternalValue());
120 EXPECT_FALSE(effect.IsActive()); 126 EXPECT_FALSE(effect->IsActive());
121 } 127 }
122 128
123 TEST_F(OverscrollRefreshTest, AnimationTerminatesEvenIfRefreshNeverTerminates) { 129 TEST_F(OverscrollRefreshTest, AnimationTerminatesEvenIfRefreshNeverTerminates) {
124 OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror); 130 scoped_ptr<OverscrollRefresh> effect = CreateEffect();
125 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 131 effect->OnScrollBegin();
126 effect.OnScrollBegin(); 132 ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
127 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 133 ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
128 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); 134 effect->OnScrollUpdateAck(false);
129 effect.OnScrollUpdateAck(false); 135 ASSERT_TRUE(effect->IsActive());
130 ASSERT_TRUE(effect.IsActive()); 136 PullBeyondActivationThreshold(effect.get());
131 PullBeyondActivationThreshold(&effect); 137 ASSERT_TRUE(effect->IsActive());
132 ASSERT_TRUE(effect.IsActive()); 138 effect->OnScrollEnd(gfx::Vector2dF(0, 0));
133 effect.OnScrollEnd(gfx::Vector2dF(0, 0));
134 ASSERT_TRUE(GetAndResetRefreshTriggered()); 139 ASSERT_TRUE(GetAndResetRefreshTriggered());
135 140
136 // Verify that the animation terminates even if the triggered refresh 141 // Verify that the animation terminates even if the triggered refresh
137 // action never terminates (i.e., |still_refreshing_| is always true). 142 // action never terminates (i.e., |still_refreshing_| is always true).
138 base::TimeTicks initial_time = base::TimeTicks::Now(); 143 base::TimeTicks initial_time = base::TimeTicks::Now();
139 base::TimeTicks current_time = initial_time; 144 base::TimeTicks current_time = initial_time;
140 scoped_refptr<cc::Layer> layer = cc::Layer::Create(); 145 scoped_refptr<cc::Layer> layer = cc::Layer::Create();
141 while (effect.Animate(current_time, layer.get())) 146 while (effect->Animate(current_time, layer.get()))
142 current_time += base::TimeDelta::FromMilliseconds(16); 147 current_time += base::TimeDelta::FromMilliseconds(16);
143 148
144 EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue()); 149 EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue());
145 EXPECT_LE( 150 EXPECT_LE(
146 current_time.ToInternalValue(), 151 current_time.ToInternalValue(),
147 (initial_time + base::TimeDelta::FromSeconds(10)).ToInternalValue()); 152 (initial_time + base::TimeDelta::FromSeconds(10)).ToInternalValue());
148 EXPECT_FALSE(effect.IsActive()); 153 EXPECT_FALSE(effect->IsActive());
149 } 154 }
150 155
151 TEST_F(OverscrollRefreshTest, NotTriggeredIfBelowThreshold) { 156 TEST_F(OverscrollRefreshTest, NotTriggeredIfBelowThreshold) {
152 OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror); 157 scoped_ptr<OverscrollRefresh> effect = CreateEffect();
153 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 158 effect->OnScrollBegin();
154 effect.OnScrollBegin(); 159 ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
155 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 160 ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
156 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); 161 effect->OnScrollUpdateAck(false);
157 effect.OnScrollUpdateAck(false); 162 ASSERT_TRUE(effect->IsActive());
158 ASSERT_TRUE(effect.IsActive());
159 163
160 // Terminating the pull before it exceeds the threshold will prevent refresh. 164 // Terminating the pull before it exceeds the threshold will prevent refresh.
161 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 165 EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
162 effect.OnScrollEnd(gfx::Vector2dF()); 166 effect->OnScrollEnd(gfx::Vector2dF());
163 EXPECT_FALSE(GetAndResetRefreshTriggered()); 167 EXPECT_FALSE(GetAndResetRefreshTriggered());
164 } 168 }
165 169
166 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialYOffsetIsNotZero) { 170 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialYOffsetIsNotZero) {
167 OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror); 171 scoped_ptr<OverscrollRefresh> effect = CreateEffect();
168 172
169 // A positive y scroll offset at the start of scroll will prevent activation, 173 // A positive y scroll offset at the start of scroll will prevent activation,
170 // even if the subsequent scroll overscrolls upward. 174 // even if the subsequent scroll overscrolls upward.
175 gfx::SizeF viewport_size(512, 512);
171 gfx::Vector2dF nonzero_offset(0, 10); 176 gfx::Vector2dF nonzero_offset(0, 10);
172 effect.UpdateDisplay(DefaultViewportSize(), nonzero_offset); 177 bool overflow_y_hidden = false;
173 effect.OnScrollBegin(); 178 effect->UpdateDisplay(viewport_size, nonzero_offset, overflow_y_hidden);
179 effect->OnScrollBegin();
174 180
175 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 181 ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
176 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 182 EXPECT_FALSE(effect->IsActive());
177 EXPECT_FALSE(effect.IsActive()); 183 EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
178 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 184 effect->OnScrollUpdateAck(false);
179 effect.OnScrollUpdateAck(false); 185 EXPECT_FALSE(effect->IsActive());
180 EXPECT_FALSE(effect.IsActive()); 186 EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
181 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 187 EXPECT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
182 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 188 effect->OnScrollEnd(gfx::Vector2dF());
183 effect.OnScrollEnd(gfx::Vector2dF()); 189 EXPECT_FALSE(GetAndResetRefreshTriggered());
190 }
191
192 TEST_F(OverscrollRefreshTest, NotTriggeredIfOverflowYHidden) {
193 scoped_ptr<OverscrollRefresh> effect = CreateEffect();
194
195 // "overflow-y: hidden" on the root layer will prevent activation,
196 // even if the subsequent scroll overscrolls upward.
197 gfx::SizeF viewport_size(512, 512);
198 gfx::Vector2dF zero_offset;
199 bool overflow_y_hidden = true;
200 effect->UpdateDisplay(viewport_size, zero_offset, overflow_y_hidden);
201 effect->OnScrollBegin();
202 ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
203 EXPECT_FALSE(effect->IsActive());
204 EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
205 effect->OnScrollUpdateAck(false);
206 EXPECT_FALSE(effect->IsActive());
207 EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
208 EXPECT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
209 effect->OnScrollEnd(gfx::Vector2dF());
184 EXPECT_FALSE(GetAndResetRefreshTriggered()); 210 EXPECT_FALSE(GetAndResetRefreshTriggered());
185 } 211 }
186 212
187 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollDownward) { 213 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollDownward) {
188 OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror); 214 scoped_ptr<OverscrollRefresh> effect = CreateEffect();
189 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 215 effect->OnScrollBegin();
190 effect.OnScrollBegin();
191 216
192 // A downward initial scroll will prevent activation, even if the subsequent 217 // A downward initial scroll will prevent activation, even if the subsequent
193 // scroll overscrolls upward. 218 // scroll overscrolls upward.
194 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, -10))); 219 ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, -10)));
195 EXPECT_FALSE(effect.IsActive()); 220 EXPECT_FALSE(effect->IsActive());
196 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 221 EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
197 222
198 effect.OnScrollUpdateAck(false); 223 effect->OnScrollUpdateAck(false);
199 EXPECT_FALSE(effect.IsActive()); 224 EXPECT_FALSE(effect->IsActive());
200 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 225 EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
201 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 226 EXPECT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
202 effect.OnScrollEnd(gfx::Vector2dF()); 227 effect->OnScrollEnd(gfx::Vector2dF());
203 EXPECT_FALSE(GetAndResetRefreshTriggered()); 228 EXPECT_FALSE(GetAndResetRefreshTriggered());
204 } 229 }
205 230
206 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollOrTouchConsumed) { 231 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollOrTouchConsumed) {
207 OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror); 232 scoped_ptr<OverscrollRefresh> effect = CreateEffect();
208 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 233 effect->OnScrollBegin();
209 effect.OnScrollBegin(); 234 ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
210 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 235 ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
211 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck());
212 236
213 // Consumption of the initial touchmove or scroll should prevent future 237 // Consumption of the initial touchmove or scroll should prevent future
214 // activation. 238 // activation.
215 effect.OnScrollUpdateAck(true); 239 effect->OnScrollUpdateAck(true);
216 EXPECT_FALSE(effect.IsActive()); 240 EXPECT_FALSE(effect->IsActive());
217 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 241 EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
218 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 242 EXPECT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
219 effect.OnScrollUpdateAck(false); 243 effect->OnScrollUpdateAck(false);
220 EXPECT_FALSE(effect.IsActive()); 244 EXPECT_FALSE(effect->IsActive());
221 EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); 245 EXPECT_FALSE(effect->IsAwaitingScrollUpdateAck());
222 EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 246 EXPECT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
223 effect.OnScrollEnd(gfx::Vector2dF()); 247 effect->OnScrollEnd(gfx::Vector2dF());
224 EXPECT_FALSE(GetAndResetRefreshTriggered()); 248 EXPECT_FALSE(GetAndResetRefreshTriggered());
225 } 249 }
226 250
227 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollsJanked) { 251 TEST_F(OverscrollRefreshTest, NotTriggeredIfInitialScrollsJanked) {
228 OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror); 252 scoped_ptr<OverscrollRefresh> effect = CreateEffect();
229 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 253 effect->OnScrollBegin();
230 effect.OnScrollBegin(); 254 ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
231 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 255 ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
232 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); 256 effect->OnScrollUpdateAck(false);
233 effect.OnScrollUpdateAck(false); 257 ASSERT_TRUE(effect->IsActive());
234 ASSERT_TRUE(effect.IsActive());
235 258
236 // It should take more than just one or two large scrolls to trigger, 259 // It should take more than just one or two large scrolls to trigger,
237 // mitigating likelihood of jank triggering the effect. 260 // mitigating likelihood of jank triggering the effect->
238 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 261 EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
239 EXPECT_TRUE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); 262 EXPECT_TRUE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 500)));
240 effect.OnScrollEnd(gfx::Vector2dF()); 263 effect->OnScrollEnd(gfx::Vector2dF());
241 EXPECT_FALSE(GetAndResetRefreshTriggered()); 264 EXPECT_FALSE(GetAndResetRefreshTriggered());
242 } 265 }
243 266
244 TEST_F(OverscrollRefreshTest, NotTriggeredIfFlungDownward) { 267 TEST_F(OverscrollRefreshTest, NotTriggeredIfFlungDownward) {
245 OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror); 268 scoped_ptr<OverscrollRefresh> effect = CreateEffect();
246 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 269 effect->OnScrollBegin();
247 effect.OnScrollBegin(); 270 ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
248 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 271 ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
249 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); 272 effect->OnScrollUpdateAck(false);
250 effect.OnScrollUpdateAck(false); 273 ASSERT_TRUE(effect->IsActive());
251 ASSERT_TRUE(effect.IsActive());
252 274
253 // Ensure the pull exceeds the necessary threshold. 275 // Ensure the pull exceeds the necessary threshold.
254 PullBeyondActivationThreshold(&effect); 276 PullBeyondActivationThreshold(effect.get());
255 ASSERT_TRUE(effect.IsActive()); 277 ASSERT_TRUE(effect->IsActive());
256 278
257 // Terminating the pull with a down-directed fling should prevent triggering. 279 // Terminating the pull with a down-directed fling should prevent triggering.
258 effect.OnScrollEnd(gfx::Vector2dF(0, -1000)); 280 effect->OnScrollEnd(gfx::Vector2dF(0, -1000));
259 EXPECT_FALSE(GetAndResetRefreshTriggered()); 281 EXPECT_FALSE(GetAndResetRefreshTriggered());
260 } 282 }
261 283
262 TEST_F(OverscrollRefreshTest, NotTriggeredIfReleasedWithoutActivation) { 284 TEST_F(OverscrollRefreshTest, NotTriggeredIfReleasedWithoutActivation) {
263 OverscrollRefresh effect(this, this, kDragTargetPixels, kMirror); 285 scoped_ptr<OverscrollRefresh> effect = CreateEffect();
264 effect.UpdateDisplay(DefaultViewportSize(), gfx::Vector2dF()); 286 effect->OnScrollBegin();
265 effect.OnScrollBegin(); 287 ASSERT_FALSE(effect->WillHandleScrollUpdate(gfx::Vector2dF(0, 10)));
266 ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); 288 ASSERT_TRUE(effect->IsAwaitingScrollUpdateAck());
267 ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); 289 effect->OnScrollUpdateAck(false);
268 effect.OnScrollUpdateAck(false); 290 ASSERT_TRUE(effect->IsActive());
269 ASSERT_TRUE(effect.IsActive());
270 291
271 // Ensure the pull exceeds the necessary threshold. 292 // Ensure the pull exceeds the necessary threshold.
272 PullBeyondActivationThreshold(&effect); 293 PullBeyondActivationThreshold(effect.get());
273 ASSERT_TRUE(effect.IsActive()); 294 ASSERT_TRUE(effect->IsActive());
274 295
275 // An early release should prevent the refresh action from firing. 296 // An early release should prevent the refresh action from firing.
276 effect.ReleaseWithoutActivation(); 297 effect->ReleaseWithoutActivation();
277 effect.OnScrollEnd(gfx::Vector2dF()); 298 effect->OnScrollEnd(gfx::Vector2dF());
278 EXPECT_FALSE(GetAndResetRefreshTriggered()); 299 EXPECT_FALSE(GetAndResetRefreshTriggered());
279 300
280 // The early release should trigger a dismissal animation. 301 // The early release should trigger a dismissal animation.
281 EXPECT_TRUE(effect.IsActive()); 302 EXPECT_TRUE(effect->IsActive());
282 base::TimeTicks initial_time = base::TimeTicks::Now(); 303 base::TimeTicks initial_time = base::TimeTicks::Now();
283 base::TimeTicks current_time = initial_time; 304 base::TimeTicks current_time = initial_time;
284 scoped_refptr<cc::Layer> layer = cc::Layer::Create(); 305 scoped_refptr<cc::Layer> layer = cc::Layer::Create();
285 while (effect.Animate(current_time, layer.get())) 306 while (effect->Animate(current_time, layer.get()))
286 current_time += base::TimeDelta::FromMilliseconds(16); 307 current_time += base::TimeDelta::FromMilliseconds(16);
287 308
288 EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue()); 309 EXPECT_GT(current_time.ToInternalValue(), initial_time.ToInternalValue());
289 EXPECT_FALSE(effect.IsActive()); 310 EXPECT_FALSE(effect->IsActive());
290 EXPECT_FALSE(GetAndResetRefreshTriggered()); 311 EXPECT_FALSE(GetAndResetRefreshTriggered());
291 } 312 }
292 313
293 } // namespace content 314 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/android/overscroll_refresh.cc ('k') | content/common/cc_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698