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

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: Rebased 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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 // See that scrolling down the page now will result in the controls hiding. 200 // See that scrolling down the page now will result in the controls hiding.
191 manager->ScrollBy(gfx::Vector2dF(0.f, 20.f)); 201 manager->ScrollBy(gfx::Vector2dF(0.f, 20.f));
192 EXPECT_EQ(-20.f, manager->controls_top_offset()); 202 EXPECT_EQ(-20.f, manager->controls_top_offset());
193 EXPECT_EQ(0.f, manager->content_top_offset()); 203 EXPECT_EQ(0.f, manager->content_top_offset());
194 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 160)); 204 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 160));
195 205
196 manager->ScrollEnd(); 206 manager->ScrollEnd();
197 } 207 }
198 208
199 TEST(TopControlsManagerTest, partialShownHideAnimation) { 209 TEST(TopControlsManagerTest, partialShownHideAnimation) {
200 MockTopControlsManagerClient client; 210 MockTopControlsManagerClient client(0.5f, 0.5f);
201 TopControlsManager* manager = client.manager(); 211 TopControlsManager* manager = client.manager();
202 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300)); 212 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300));
203 manager->ScrollBy(gfx::Vector2dF(0.f, 300.f)); 213 manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
204 EXPECT_EQ(-100.f, manager->controls_top_offset()); 214 EXPECT_EQ(-100.f, manager->controls_top_offset());
205 EXPECT_EQ(0.f, manager->content_top_offset()); 215 EXPECT_EQ(0.f, manager->content_top_offset());
206 216
207 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 270)); 217 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 270));
208 manager->ScrollBy(gfx::Vector2dF(0.f, -15.f)); 218 manager->ScrollBy(gfx::Vector2dF(0.f, -15.f));
209 EXPECT_EQ(-85.f, manager->controls_top_offset()); 219 EXPECT_EQ(-85.f, manager->controls_top_offset());
210 EXPECT_EQ(0.f, manager->content_top_offset()); 220 EXPECT_EQ(0.f, manager->content_top_offset());
211 221
212 manager->ScrollEnd(); 222 manager->ScrollEnd();
213 EXPECT_TRUE(manager->animation()); 223 EXPECT_TRUE(manager->animation());
214 224
215 base::TimeTicks time = base::TimeTicks::Now(); 225 base::TimeTicks time = base::TimeTicks::Now();
216 float previous_offset = manager->controls_top_offset(); 226 float previous_offset = manager->controls_top_offset();
217 while(manager->animation()) { 227 while(manager->animation()) {
218 time = base::TimeDelta::FromMicroseconds(100) + time; 228 time = base::TimeDelta::FromMicroseconds(100) + time;
219 manager->Animate(time); 229 manager->Animate(time);
220 EXPECT_LT(manager->controls_top_offset(), previous_offset); 230 EXPECT_LT(manager->controls_top_offset(), previous_offset);
221 previous_offset = manager->controls_top_offset(); 231 previous_offset = manager->controls_top_offset();
222 } 232 }
223 EXPECT_FALSE(manager->animation()); 233 EXPECT_FALSE(manager->animation());
224 EXPECT_EQ(-100.f, manager->controls_top_offset()); 234 EXPECT_EQ(-100.f, manager->controls_top_offset());
225 EXPECT_EQ(0.f, manager->content_top_offset()); 235 EXPECT_EQ(0.f, manager->content_top_offset());
226 } 236 }
227 237
228 TEST(TopControlsManagerTest, partialShownShowAnimation) { 238 TEST(TopControlsManagerTest, partialShownShowAnimation) {
229 MockTopControlsManagerClient client; 239 MockTopControlsManagerClient client(0.5f, 0.5f);
230 TopControlsManager* manager = client.manager(); 240 TopControlsManager* manager = client.manager();
231 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300)); 241 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300));
232 manager->ScrollBy(gfx::Vector2dF(0.f, 300.f)); 242 manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
233 EXPECT_EQ(-100.f, manager->controls_top_offset()); 243 EXPECT_EQ(-100.f, manager->controls_top_offset());
234 EXPECT_EQ(0.f, manager->content_top_offset()); 244 EXPECT_EQ(0.f, manager->content_top_offset());
235 245
236 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 230)); 246 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 230));
237 manager->ScrollBy(gfx::Vector2dF(0.f, -70.f)); 247 manager->ScrollBy(gfx::Vector2dF(0.f, -70.f));
238 EXPECT_EQ(-30.f, manager->controls_top_offset()); 248 EXPECT_EQ(-30.f, manager->controls_top_offset());
239 EXPECT_EQ(0.f, manager->content_top_offset()); 249 EXPECT_EQ(0.f, manager->content_top_offset());
240 250
241 manager->ScrollEnd(); 251 manager->ScrollEnd();
242 EXPECT_TRUE(manager->animation()); 252 EXPECT_TRUE(manager->animation());
243 253
244 base::TimeTicks time = base::TimeTicks::Now(); 254 base::TimeTicks time = base::TimeTicks::Now();
245 float previous_offset = manager->controls_top_offset(); 255 float previous_offset = manager->controls_top_offset();
246 while(manager->animation()) { 256 while(manager->animation()) {
247 time = base::TimeDelta::FromMicroseconds(100) + time; 257 time = base::TimeDelta::FromMicroseconds(100) + time;
248 manager->Animate(time); 258 manager->Animate(time);
249 EXPECT_GT(manager->controls_top_offset(), previous_offset); 259 EXPECT_GT(manager->controls_top_offset(), previous_offset);
250 previous_offset = manager->controls_top_offset(); 260 previous_offset = manager->controls_top_offset();
251 } 261 }
252 EXPECT_FALSE(manager->animation()); 262 EXPECT_FALSE(manager->animation());
253 EXPECT_EQ(0.f, manager->controls_top_offset()); 263 EXPECT_EQ(0.f, manager->controls_top_offset());
254 EXPECT_EQ(0.f, manager->content_top_offset()); 264 EXPECT_EQ(0.f, manager->content_top_offset());
255 } 265 }
256 266
267 TEST(TopControlsManagerTest, partialHiddenWithAmbiguousThresholdShows) {
268 MockTopControlsManagerClient client(0.25f, 0.25f);
269 TopControlsManager* manager = client.manager();
270
271 manager->ScrollBegin();
272
273 manager->ScrollBy(gfx::Vector2dF(0.f, 20.f));
274 EXPECT_EQ(-20.f, manager->controls_top_offset());
275 EXPECT_EQ(80.f, manager->content_top_offset());
276
277 manager->ScrollEnd();
278 EXPECT_TRUE(manager->animation());
279
280 base::TimeTicks time = base::TimeTicks::Now();
281 float previous_offset = manager->controls_top_offset();
282 while(manager->animation()) {
283 time = base::TimeDelta::FromMicroseconds(100) + time;
284 manager->Animate(time);
285 EXPECT_GT(manager->controls_top_offset(), previous_offset);
286 previous_offset = manager->controls_top_offset();
287 }
288 EXPECT_FALSE(manager->animation());
289 EXPECT_EQ(0.f, manager->controls_top_offset());
290 EXPECT_EQ(100.f, manager->content_top_offset());
291 }
292
293 TEST(TopControlsManagerTest, partialHiddenWithAmbiguousThresholdHides) {
294 MockTopControlsManagerClient client(0.25f, 0.25f);
295 TopControlsManager* manager = client.manager();
296
297 manager->ScrollBegin();
298
299 manager->ScrollBy(gfx::Vector2dF(0.f, 30.f));
300 EXPECT_EQ(-30.f, manager->controls_top_offset());
301 EXPECT_EQ(70.f, manager->content_top_offset());
302
303 manager->ScrollEnd();
304 EXPECT_TRUE(manager->animation());
305
306 base::TimeTicks time = base::TimeTicks::Now();
307 float previous_offset = manager->controls_top_offset();
308 while(manager->animation()) {
309 time = base::TimeDelta::FromMicroseconds(100) + time;
310 manager->Animate(time);
311 EXPECT_LT(manager->controls_top_offset(), previous_offset);
312 previous_offset = manager->controls_top_offset();
313 }
314 EXPECT_FALSE(manager->animation());
315 EXPECT_EQ(-100.f, manager->controls_top_offset());
316 EXPECT_EQ(0.f, manager->content_top_offset());
317 }
318
319 TEST(TopControlsManagerTest, partialShownWithAmbiguousThresholdHides) {
320 MockTopControlsManagerClient client(0.25f, 0.25f);
321 TopControlsManager* manager = client.manager();
322 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300));
323
324 manager->ScrollBy(gfx::Vector2dF(0.f, 200.f));
325 EXPECT_EQ(-100.f, manager->controls_top_offset());
326 EXPECT_EQ(0.f, manager->content_top_offset());
327
328 manager->ScrollBegin();
329
330 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 180));
331 manager->ScrollBy(gfx::Vector2dF(0.f, -20.f));
332 EXPECT_EQ(-80.f, manager->controls_top_offset());
333 EXPECT_EQ(0.f, manager->content_top_offset());
334
335 manager->ScrollEnd();
336 EXPECT_TRUE(manager->animation());
337
338 base::TimeTicks time = base::TimeTicks::Now();
339 float previous_offset = manager->controls_top_offset();
340 while(manager->animation()) {
341 time = base::TimeDelta::FromMicroseconds(100) + time;
342 manager->Animate(time);
343 EXPECT_LT(manager->controls_top_offset(), previous_offset);
344 previous_offset = manager->controls_top_offset();
345 }
346 EXPECT_FALSE(manager->animation());
347 EXPECT_EQ(-100.f, manager->controls_top_offset());
348 EXPECT_EQ(0.f, manager->content_top_offset());
349 }
350
351 TEST(TopControlsManagerTest, partialShownWithAmbiguousThresholdShows) {
352 MockTopControlsManagerClient client(0.25f, 0.25f);
353 TopControlsManager* manager = client.manager();
354 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300));
355
356 manager->ScrollBy(gfx::Vector2dF(0.f, 200.f));
357 EXPECT_EQ(-100.f, manager->controls_top_offset());
358 EXPECT_EQ(0.f, manager->content_top_offset());
359
360 manager->ScrollBegin();
361
362 client.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 70));
363 manager->ScrollBy(gfx::Vector2dF(0.f, -30.f));
364 EXPECT_EQ(-70.f, manager->controls_top_offset());
365 EXPECT_EQ(0.f, manager->content_top_offset());
366
367 manager->ScrollEnd();
368 EXPECT_TRUE(manager->animation());
369
370 base::TimeTicks time = base::TimeTicks::Now();
371 float previous_offset = manager->controls_top_offset();
372 while(manager->animation()) {
373 time = base::TimeDelta::FromMicroseconds(100) + time;
374 manager->Animate(time);
375 EXPECT_GT(manager->controls_top_offset(), previous_offset);
376 previous_offset = manager->controls_top_offset();
377 }
378 EXPECT_FALSE(manager->animation());
379 EXPECT_EQ(0.f, manager->controls_top_offset());
380 EXPECT_EQ(0.f, manager->content_top_offset());
381 }
382
257 } // namespace 383 } // namespace
258 } // namespace cc 384 } // 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