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

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

Powered by Google App Engine
This is Rietveld 408576698