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

Side by Side Diff: cc/top_controls_manager_unittest.cc

Issue 12210050: Expose FS show/hide thresholds to Command Line (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments, added unit tests Created 7 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 | Annotate | Revision Log
« no previous file with comments | « cc/top_controls_manager.cc ('k') | content/browser/renderer_host/render_process_host_impl.cc » ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/top_controls_manager.h" 5 #include "cc/top_controls_manager.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/time.h" 8 #include "base/time.h"
9 #include "cc/layer_impl.h" 9 #include "cc/layer_impl.h"
10 #include "cc/layer_tree_impl.h" 10 #include "cc/layer_tree_impl.h"
11 #include "cc/test/fake_impl_proxy.h" 11 #include "cc/test/fake_impl_proxy.h"
12 #include "cc/test/fake_layer_tree_host_impl.h" 12 #include "cc/test/fake_layer_tree_host_impl.h"
13 #include "cc/top_controls_manager_client.h" 13 #include "cc/top_controls_manager_client.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "ui/gfx/vector2d_f.h" 15 #include "ui/gfx/vector2d_f.h"
16 16
17 namespace cc { 17 namespace cc {
18 namespace { 18 namespace {
19 19
20 static const float kTopControlsHeight = 100; 20 static const float kTopControlsHeight = 100;
21 21
22 class MockTopControlsManagerClient : public TopControlsManagerClient { 22 class MockTopControlsManagerClient : public TopControlsManagerClient {
23 public: 23 public:
24 MockTopControlsManagerClient() 24 MockTopControlsManagerClient(float top_controls_show_threshold,
25 float top_controls_hide_threshold)
25 : host_impl_(&proxy_), 26 : host_impl_(&proxy_),
26 redraw_needed_(false), 27 redraw_needed_(false),
27 update_draw_properties_needed_(false) { 28 update_draw_properties_needed_(false),
29 top_controls_show_threshold_(top_controls_show_threshold),
30 top_controls_hide_threshold_(top_controls_hide_threshold) {
28 active_tree_ = LayerTreeImpl::create(&host_impl_); 31 active_tree_ = LayerTreeImpl::create(&host_impl_);
29 root_scroll_layer_ = LayerImpl::create(active_tree_.get(), 1); 32 root_scroll_layer_ = LayerImpl::create(active_tree_.get(), 1);
30 } 33 }
31 34
32 virtual ~MockTopControlsManagerClient() {} 35 virtual ~MockTopControlsManagerClient() {}
33 36
34 virtual void setNeedsRedraw() OVERRIDE { 37 virtual void setNeedsRedraw() OVERRIDE {
35 redraw_needed_ = true; 38 redraw_needed_ = true;
36 } 39 }
37 40
38 virtual void setActiveTreeNeedsUpdateDrawProperties() OVERRIDE { 41 virtual void setActiveTreeNeedsUpdateDrawProperties() OVERRIDE {
39 update_draw_properties_needed_ = true; 42 update_draw_properties_needed_ = true;
40 } 43 }
41 44
42 virtual bool haveRootScrollLayer() const OVERRIDE { 45 virtual bool haveRootScrollLayer() const OVERRIDE {
43 return true; 46 return true;
44 } 47 }
45 48
46 virtual float rootScrollLayerTotalScrollY() const OVERRIDE { 49 virtual float rootScrollLayerTotalScrollY() const OVERRIDE {
47 return root_scroll_layer_->scrollOffset().y() + 50 return root_scroll_layer_->scrollOffset().y() +
48 root_scroll_layer_->scrollDelta().y(); 51 root_scroll_layer_->scrollDelta().y();
49 } 52 }
50 53
51 LayerImpl* rootScrollLayer() { 54 LayerImpl* rootScrollLayer() {
52 return root_scroll_layer_.get(); 55 return root_scroll_layer_.get();
53 } 56 }
54 57
55 TopControlsManager* manager() { 58 TopControlsManager* manager() {
56 if (!manager_) 59 if (!manager_) {
57 manager_ = TopControlsManager::Create(this, kTopControlsHeight); 60 manager_ = TopControlsManager::Create(this,
61 kTopControlsHeight,
62 top_controls_show_threshold_,
63 top_controls_hide_threshold_);
64 }
58 return manager_.get(); 65 return manager_.get();
59 } 66 }
60 67
61 private: 68 private:
62 FakeImplProxy proxy_; 69 FakeImplProxy proxy_;
63 FakeLayerTreeHostImpl host_impl_; 70 FakeLayerTreeHostImpl host_impl_;
64 scoped_ptr<LayerTreeImpl> active_tree_; 71 scoped_ptr<LayerTreeImpl> active_tree_;
65 scoped_ptr<LayerImpl> root_scroll_layer_; 72 scoped_ptr<LayerImpl> root_scroll_layer_;
66 scoped_ptr<TopControlsManager> manager_; 73 scoped_ptr<TopControlsManager> manager_;
67 bool redraw_needed_; 74 bool redraw_needed_;
68 bool update_draw_properties_needed_; 75 bool update_draw_properties_needed_;
76
77 float top_controls_show_threshold_;
78 float top_controls_hide_threshold_;
69 }; 79 };
70 80
71 TEST(TopControlsManagerTest, overlayModeDetection) { 81 TEST(TopControlsManagerTest, overlayModeDetection) {
72 MockTopControlsManagerClient client; 82 MockTopControlsManagerClient client(0.5f, 0.5f);
73 TopControlsManager* manager = client.manager(); 83 TopControlsManager* manager = client.manager();
74 client.rootScrollLayer()->setScrollDelta(gfx::Vector2dF(0.f, 0.f)); 84 client.rootScrollLayer()->setScrollDelta(gfx::Vector2dF(0.f, 0.f));
75 85
76 manager->ScrollBegin(); 86 manager->ScrollBegin();
77 87
78 gfx::Vector2dF remaining_scroll = manager->ScrollBy( 88 gfx::Vector2dF remaining_scroll = manager->ScrollBy(
79 gfx::Vector2dF(0.f, 30.f)); 89 gfx::Vector2dF(0.f, 30.f));
80 EXPECT_EQ(0.f, remaining_scroll.y()); 90 EXPECT_EQ(0.f, remaining_scroll.y());
81 EXPECT_EQ(-30.f, manager->controls_top_offset()); 91 EXPECT_EQ(-30.f, manager->controls_top_offset());
82 EXPECT_EQ(70.f, manager->content_top_offset()); 92 EXPECT_EQ(70.f, manager->content_top_offset());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 client.rootScrollLayer()->scrollDelta() + remaining_scroll); 137 client.rootScrollLayer()->scrollDelta() + remaining_scroll);
128 138
129 remaining_scroll = manager->ScrollBy(gfx::Vector2dF(0.f, -50.f)); 139 remaining_scroll = manager->ScrollBy(gfx::Vector2dF(0.f, -50.f));
130 EXPECT_EQ(0.f, manager->controls_top_offset()); 140 EXPECT_EQ(0.f, manager->controls_top_offset());
131 EXPECT_EQ(100.f, manager->content_top_offset()); 141 EXPECT_EQ(100.f, manager->content_top_offset());
132 client.rootScrollLayer()->setScrollDelta( 142 client.rootScrollLayer()->setScrollDelta(
133 client.rootScrollLayer()->scrollDelta() + remaining_scroll); 143 client.rootScrollLayer()->scrollDelta() + remaining_scroll);
134 } 144 }
135 145
136 TEST(TopControlsManagerTest, ensureScrollThresholdApplied) { 146 TEST(TopControlsManagerTest, ensureScrollThresholdApplied) {
137 MockTopControlsManagerClient client; 147 MockTopControlsManagerClient client(0.5f, 0.5f);
138 TopControlsManager* manager = client.manager(); 148 TopControlsManager* manager = client.manager();
139 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 200)); 149 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 200));
140 150
141 manager->ScrollBegin(); 151 manager->ScrollBegin();
142 152
143 // Scroll down to hide the controls entirely. 153 // Scroll down to hide the controls entirely.
144 manager->ScrollBy(gfx::Vector2dF(0.f, 30.f)); 154 manager->ScrollBy(gfx::Vector2dF(0.f, 30.f));
145 EXPECT_EQ(-30.f, manager->controls_top_offset()); 155 EXPECT_EQ(-30.f, manager->controls_top_offset());
146 EXPECT_EQ(70.f, manager->content_top_offset()); 156 EXPECT_EQ(70.f, manager->content_top_offset());
147 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 230)); 157 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 230));
(...skipping 29 matching lines...) Expand all
177 187
178 manager->ScrollBy(gfx::Vector2dF(0.f, -50.f)); 188 manager->ScrollBy(gfx::Vector2dF(0.f, -50.f));
179 EXPECT_EQ(-40.f, manager->controls_top_offset()); 189 EXPECT_EQ(-40.f, manager->controls_top_offset());
180 EXPECT_EQ(0.f, manager->content_top_offset()); 190 EXPECT_EQ(0.f, manager->content_top_offset());
181 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 240)); 191 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 240));
182 192
183 manager->ScrollEnd(); 193 manager->ScrollEnd();
184 } 194 }
185 195
186 TEST(TopControlsManagerTest, partialShownHideAnimation) { 196 TEST(TopControlsManagerTest, partialShownHideAnimation) {
187 MockTopControlsManagerClient client; 197 MockTopControlsManagerClient client(0.5f, 0.5f);
188 TopControlsManager* manager = client.manager(); 198 TopControlsManager* manager = client.manager();
189 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300)); 199 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300));
190 manager->ScrollBy(gfx::Vector2dF(0.f, 300.f)); 200 manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
191 EXPECT_EQ(-100.f, manager->controls_top_offset()); 201 EXPECT_EQ(-100.f, manager->controls_top_offset());
192 EXPECT_EQ(0.f, manager->content_top_offset()); 202 EXPECT_EQ(0.f, manager->content_top_offset());
193 203
194 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 270)); 204 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 270));
195 manager->ScrollBy(gfx::Vector2dF(0.f, -15.f)); 205 manager->ScrollBy(gfx::Vector2dF(0.f, -15.f));
196 EXPECT_EQ(-85.f, manager->controls_top_offset()); 206 EXPECT_EQ(-85.f, manager->controls_top_offset());
197 EXPECT_EQ(0.f, manager->content_top_offset()); 207 EXPECT_EQ(0.f, manager->content_top_offset());
198 208
199 manager->ScrollEnd(); 209 manager->ScrollEnd();
200 EXPECT_TRUE(manager->animation()); 210 EXPECT_TRUE(manager->animation());
201 211
202 base::TimeTicks time = base::TimeTicks::Now(); 212 base::TimeTicks time = base::TimeTicks::Now();
203 float previous_offset = manager->controls_top_offset(); 213 float previous_offset = manager->controls_top_offset();
204 while(manager->animation()) { 214 while(manager->animation()) {
205 time = base::TimeDelta::FromMicroseconds(100) + time; 215 time = base::TimeDelta::FromMicroseconds(100) + time;
206 manager->Animate(time); 216 manager->Animate(time);
207 EXPECT_LT(manager->controls_top_offset(), previous_offset); 217 EXPECT_LT(manager->controls_top_offset(), previous_offset);
208 previous_offset = manager->controls_top_offset(); 218 previous_offset = manager->controls_top_offset();
209 } 219 }
210 EXPECT_FALSE(manager->animation()); 220 EXPECT_FALSE(manager->animation());
211 EXPECT_EQ(-100.f, manager->controls_top_offset()); 221 EXPECT_EQ(-100.f, manager->controls_top_offset());
212 EXPECT_EQ(0.f, manager->content_top_offset()); 222 EXPECT_EQ(0.f, manager->content_top_offset());
213 } 223 }
214 224
215 TEST(TopControlsManagerTest, partialShownShowAnimation) { 225 TEST(TopControlsManagerTest, partialShownShowAnimation) {
216 MockTopControlsManagerClient client; 226 MockTopControlsManagerClient client(0.5f, 0.5f);
217 TopControlsManager* manager = client.manager(); 227 TopControlsManager* manager = client.manager();
218 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300)); 228 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300));
219 manager->ScrollBy(gfx::Vector2dF(0.f, 300.f)); 229 manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
220 EXPECT_EQ(-100.f, manager->controls_top_offset()); 230 EXPECT_EQ(-100.f, manager->controls_top_offset());
221 EXPECT_EQ(0.f, manager->content_top_offset()); 231 EXPECT_EQ(0.f, manager->content_top_offset());
222 232
223 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 230)); 233 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 230));
224 manager->ScrollBy(gfx::Vector2dF(0.f, -70.f)); 234 manager->ScrollBy(gfx::Vector2dF(0.f, -70.f));
225 EXPECT_EQ(-30.f, manager->controls_top_offset()); 235 EXPECT_EQ(-30.f, manager->controls_top_offset());
226 EXPECT_EQ(0.f, manager->content_top_offset()); 236 EXPECT_EQ(0.f, manager->content_top_offset());
227 237
228 manager->ScrollEnd(); 238 manager->ScrollEnd();
229 EXPECT_TRUE(manager->animation()); 239 EXPECT_TRUE(manager->animation());
230 240
231 base::TimeTicks time = base::TimeTicks::Now(); 241 base::TimeTicks time = base::TimeTicks::Now();
232 float previous_offset = manager->controls_top_offset(); 242 float previous_offset = manager->controls_top_offset();
233 while(manager->animation()) { 243 while(manager->animation()) {
234 time = base::TimeDelta::FromMicroseconds(100) + time; 244 time = base::TimeDelta::FromMicroseconds(100) + time;
235 manager->Animate(time); 245 manager->Animate(time);
236 EXPECT_GT(manager->controls_top_offset(), previous_offset); 246 EXPECT_GT(manager->controls_top_offset(), previous_offset);
237 previous_offset = manager->controls_top_offset(); 247 previous_offset = manager->controls_top_offset();
238 } 248 }
239 EXPECT_FALSE(manager->animation()); 249 EXPECT_FALSE(manager->animation());
240 EXPECT_EQ(0.f, manager->controls_top_offset()); 250 EXPECT_EQ(0.f, manager->controls_top_offset());
241 EXPECT_EQ(0.f, manager->content_top_offset()); 251 EXPECT_EQ(0.f, manager->content_top_offset());
242 } 252 }
243 253
254 TEST(TopControlsManagerTest, partialHideWithAmbiguousThresholdShows) {
Ted C 2013/02/12 15:40:03 I guess to be consistent with the above names, it
David Trainor- moved to gerrit 2013/02/12 18:19:25 Done.
255 MockTopControlsManagerClient client(0.25f, 0.25f);
256 TopControlsManager* manager = client.manager();
257
258 manager->ScrollBegin();
259
260 manager->ScrollBy(gfx::Vector2dF(0.f, 20.f));
261 EXPECT_EQ(-20.f, manager->controls_top_offset());
262 EXPECT_EQ(80.f, manager->content_top_offset());
263
264 manager->ScrollEnd();
265 EXPECT_TRUE(manager->animation());
266
267 base::TimeTicks time = base::TimeTicks::Now();
268 float previous_offset = manager->controls_top_offset();
269 while(manager->animation()) {
270 time = base::TimeDelta::FromMicroseconds(100) + time;
271 manager->Animate(time);
272 EXPECT_GT(manager->controls_top_offset(), previous_offset);
273 previous_offset = manager->controls_top_offset();
274 }
275 EXPECT_FALSE(manager->animation());
276 EXPECT_EQ(0.f, manager->controls_top_offset());
277 EXPECT_EQ(100.f, manager->content_top_offset());
278 }
279
280 TEST(TopControlsManagerTest, partialHideWithAmbiguousThresholdHides) {
281 MockTopControlsManagerClient client(0.25f, 0.25f);
282 TopControlsManager* manager = client.manager();
283
284 manager->ScrollBegin();
285
286 manager->ScrollBy(gfx::Vector2dF(0.f, 30.f));
287 EXPECT_EQ(-30.f, manager->controls_top_offset());
288 EXPECT_EQ(70.f, manager->content_top_offset());
289
290 manager->ScrollEnd();
291 EXPECT_TRUE(manager->animation());
292
293 base::TimeTicks time = base::TimeTicks::Now();
294 float previous_offset = manager->controls_top_offset();
295 while(manager->animation()) {
296 time = base::TimeDelta::FromMicroseconds(100) + time;
297 manager->Animate(time);
298 EXPECT_LT(manager->controls_top_offset(), previous_offset);
299 previous_offset = manager->controls_top_offset();
300 }
301 EXPECT_FALSE(manager->animation());
302 EXPECT_EQ(-100.f, manager->controls_top_offset());
303 EXPECT_EQ(0.f, manager->content_top_offset());
304 }
305
306 TEST(TopControlsManagerTest, partialShowWithAmbiguousThresholdHides) {
307 MockTopControlsManagerClient client(0.25f, 0.25f);
308 TopControlsManager* manager = client.manager();
309 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300));
310
311 manager->ScrollBy(gfx::Vector2dF(0.f, 200.f));
312 EXPECT_EQ(-100.f, manager->controls_top_offset());
313 EXPECT_EQ(0.f, manager->content_top_offset());
314
315 manager->ScrollBegin();
316
317 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 180));
318 manager->ScrollBy(gfx::Vector2dF(0.f, -20.f));
319 EXPECT_EQ(-80.f, manager->controls_top_offset());
320 EXPECT_EQ(0.f, manager->content_top_offset());
321
322 manager->ScrollEnd();
323 EXPECT_TRUE(manager->animation());
324
325 base::TimeTicks time = base::TimeTicks::Now();
326 float previous_offset = manager->controls_top_offset();
327 while(manager->animation()) {
328 time = base::TimeDelta::FromMicroseconds(100) + time;
329 manager->Animate(time);
330 EXPECT_LT(manager->controls_top_offset(), previous_offset);
331 previous_offset = manager->controls_top_offset();
332 }
333 EXPECT_FALSE(manager->animation());
334 EXPECT_EQ(-100.f, manager->controls_top_offset());
335 EXPECT_EQ(0.f, manager->content_top_offset());
336 }
337
338 TEST(TopControlsManagerTest, partialShowWithAmbiguousThresholdShows) {
339 MockTopControlsManagerClient client(0.25f, 0.25f);
340 TopControlsManager* manager = client.manager();
341 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300));
342
343 manager->ScrollBy(gfx::Vector2dF(0.f, 200.f));
344 EXPECT_EQ(-100.f, manager->controls_top_offset());
345 EXPECT_EQ(0.f, manager->content_top_offset());
346
347 manager->ScrollBegin();
348
349 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 70));
350 manager->ScrollBy(gfx::Vector2dF(0.f, -30.f));
351 EXPECT_EQ(-70.f, manager->controls_top_offset());
352 EXPECT_EQ(0.f, manager->content_top_offset());
353
354 manager->ScrollEnd();
355 EXPECT_TRUE(manager->animation());
356
357 base::TimeTicks time = base::TimeTicks::Now();
358 float previous_offset = manager->controls_top_offset();
359 while(manager->animation()) {
360 time = base::TimeDelta::FromMicroseconds(100) + time;
361 manager->Animate(time);
362 EXPECT_GT(manager->controls_top_offset(), previous_offset);
363 previous_offset = manager->controls_top_offset();
364 }
365 EXPECT_FALSE(manager->animation());
366 EXPECT_EQ(0.f, manager->controls_top_offset());
367 EXPECT_EQ(0.f, manager->content_top_offset());
368 }
369
244 } // namespace 370 } // namespace
245 } // namespace cc 371 } // namespace cc
OLDNEW
« no previous file with comments | « cc/top_controls_manager.cc ('k') | content/browser/renderer_host/render_process_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698