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

Side by Side Diff: cc/top_controls_manager_unittest.cc

Issue 11552009: Add support for calculating the position of the top controls in the cc layer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Forgot to add the changes to cc_messages.h Created 8 years 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
OLDNEW
(Empty)
1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "cc/top_controls_manager.h"
6
7 #include "base/memory/scoped_ptr.h"
8 #include "base/time.h"
9 #include "cc/layer_impl.h"
10 #include "cc/layer_tree_impl.h"
11 #include "cc/test/fake_impl_proxy.h"
12 #include "cc/test/fake_layer_tree_host_impl.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "ui/gfx/vector2d_f.h"
15
16 namespace cc {
17 namespace {
18
19 class MockTopControlsDelegate : public TopControlsDelegate {
20 public:
21 static const float kTopControlsHeight = 100;
22
23 MockTopControlsDelegate()
24 : host_impl_(&proxy_),
25 redraw_needed_(false),
26 update_draw_properties_needed_(false) {
27 active_tree_ = LayerTreeImpl::create(&host_impl_);
28 root_scroll_layer_ = LayerImpl::create(active_tree_.get(), 1);
29 active_tree_->set_root_scroll_layer(root_scroll_layer_.get());
30 }
31
32 virtual void setNeedsRedraw() OVERRIDE {
33 redraw_needed_ = true;
34 }
35
36 virtual void setNeedsUpdateDrawProperties() OVERRIDE {
37 update_draw_properties_needed_ = true;
38 }
39
40 virtual LayerTreeImpl* activeTree() OVERRIDE {
41 return active_tree_.get();
42 }
43
44 TopControlsManager* manager() {
45 if (!manager_)
46 manager_ = TopControlsManager::create(this, true, kTopControlsHeight);
47 return manager_.get();
48 }
49
50 LayerImpl* rootScrollLayer() {
51 return root_scroll_layer_.get();
52 }
53
54 private:
55 FakeImplProxy proxy_;
56 FakeLayerTreeHostImpl host_impl_;
57 scoped_ptr<LayerTreeImpl> active_tree_;
58 scoped_ptr<LayerImpl> root_scroll_layer_;
59 scoped_ptr<TopControlsManager> manager_;
60 bool redraw_needed_;
61 bool update_draw_properties_needed_;
62 };
63
64 TEST(TopControlsManagerTest, overlayModeDetection) {
65 MockTopControlsDelegate delegate;
66 TopControlsManager* manager = delegate.manager();
67 delegate.rootScrollLayer()->setScrollDelta(gfx::Vector2dF(0.f, 0.f));
68
69 gfx::Vector2dF remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, 30.f));
70 ASSERT_EQ(0.f, remainingScroll.y());
aelias_OOO_until_Jul13 2012/12/19 08:31:18 Use EXPECT_ instead of ASSERT_ all through these t
Ted C 2012/12/19 21:34:17 Done.
71 ASSERT_EQ(-30.f, manager->controls_top_offset());
72 ASSERT_EQ(70.f, manager->content_top_offset());
73 ASSERT_FALSE(manager->is_overlay_mode());
74 delegate.rootScrollLayer()->setScrollDelta(
75 delegate.rootScrollLayer()->scrollDelta() + remainingScroll);
76
77 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, 69.f));
78 ASSERT_EQ(0.f, remainingScroll.y());
79 ASSERT_EQ(-99.f, manager->controls_top_offset());
80 ASSERT_EQ(1.f, manager->content_top_offset());
81 ASSERT_FALSE(manager->is_overlay_mode());
82 delegate.rootScrollLayer()->setScrollDelta(
83 delegate.rootScrollLayer()->scrollDelta() + remainingScroll);
84
85 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, -20.f));
86 ASSERT_EQ(0.f, remainingScroll.y());
87 ASSERT_EQ(-79.f, manager->controls_top_offset());
88 ASSERT_EQ(21.f, manager->content_top_offset());
89 ASSERT_FALSE(manager->is_overlay_mode());
90 delegate.rootScrollLayer()->setScrollDelta(
91 delegate.rootScrollLayer()->scrollDelta() + remainingScroll);
92
93 // Scroll to the toggle point
94 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, 21.f));
95 ASSERT_EQ(0.f, remainingScroll.y());
96 ASSERT_EQ(-100.f, manager->controls_top_offset());
97 ASSERT_EQ(0.f, manager->content_top_offset());
98 ASSERT_FALSE(manager->is_overlay_mode());
99 delegate.rootScrollLayer()->setScrollDelta(
100 delegate.rootScrollLayer()->scrollDelta() + remainingScroll);
101
102 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, 1.f));
103 ASSERT_EQ(1.f, remainingScroll.y());
104 ASSERT_EQ(-100.f, manager->controls_top_offset());
105 ASSERT_EQ(0.f, manager->content_top_offset());
106 ASSERT_TRUE(manager->is_overlay_mode());
107 delegate.rootScrollLayer()->setScrollDelta(
108 delegate.rootScrollLayer()->scrollDelta() + remainingScroll);
109
110 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, -1.f));
111 ASSERT_EQ(-1.f, remainingScroll.y());
112 ASSERT_EQ(-99.f, manager->controls_top_offset());
113 ASSERT_EQ(0.f, manager->content_top_offset());
114 ASSERT_TRUE(manager->is_overlay_mode());
115 delegate.rootScrollLayer()->setScrollDelta(
116 delegate.rootScrollLayer()->scrollDelta() + remainingScroll);
117
118 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, -50.f));
119 ASSERT_EQ(-50.f, remainingScroll.y());
120 ASSERT_EQ(-49.f, manager->controls_top_offset());
121 ASSERT_EQ(50.f, manager->content_top_offset());
122 ASSERT_FALSE(manager->is_overlay_mode());
123 delegate.rootScrollLayer()->setScrollDelta(
124 delegate.rootScrollLayer()->scrollDelta() + remainingScroll);
125
126 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, -50.f));
127 ASSERT_EQ(0.f, manager->controls_top_offset());
128 ASSERT_EQ(100.f, manager->content_top_offset());
129 ASSERT_FALSE(manager->is_overlay_mode());
130 delegate.rootScrollLayer()->setScrollDelta(
131 delegate.rootScrollLayer()->scrollDelta() + remainingScroll);
132 }
133
134 TEST(TopControlsManagerTest, partialShownHideAnimation) {
135 MockTopControlsDelegate delegate;
136 TopControlsManager* manager = delegate.manager();
137 delegate.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300));
138 manager->scrollBy(gfx::Vector2dF(0.f, 300.f));
139 ASSERT_EQ(-100.f, manager->controls_top_offset());
140 ASSERT_EQ(0.f, manager->content_top_offset());
141 ASSERT_TRUE(manager->is_overlay_mode());
142
143 delegate.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 270));
144 manager->scrollBy(gfx::Vector2dF(0.f, -15.f));
145 ASSERT_EQ(-85.f, manager->controls_top_offset());
146 ASSERT_EQ(0.f, manager->content_top_offset());
147 ASSERT_TRUE(manager->is_overlay_mode());
148
149 manager->scrollEnd();
150 ASSERT_TRUE(manager->animation());
151
152 base::TimeTicks time = base::TimeTicks::Now();
153 float previousOffset = manager->controls_top_offset();
154 while(manager->animation()) {
155 time = base::TimeDelta::FromMicroseconds(100) + time;
156 manager->animate(time);
157 ASSERT_LT(manager->controls_top_offset(), previousOffset);
158 previousOffset = manager->controls_top_offset();
159 }
160 ASSERT_FALSE(manager->animation());
161 ASSERT_EQ(-100.f, manager->controls_top_offset());
162 ASSERT_EQ(0.f, manager->content_top_offset());
163 ASSERT_TRUE(manager->is_overlay_mode());
164 }
165
166 TEST(TopControlsManagerTest, partialShownShowAnimation) {
167 MockTopControlsDelegate delegate;
168 TopControlsManager* manager = delegate.manager();
169 delegate.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300));
170 manager->scrollBy(gfx::Vector2dF(0.f, 300.f));
171 ASSERT_EQ(-100.f, manager->controls_top_offset());
172 ASSERT_EQ(0.f, manager->content_top_offset());
173 ASSERT_TRUE(manager->is_overlay_mode());
174
175 delegate.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 230));
176 manager->scrollBy(gfx::Vector2dF(0.f, -70.f));
177 ASSERT_EQ(-30.f, manager->controls_top_offset());
178 ASSERT_EQ(0.f, manager->content_top_offset());
179 ASSERT_TRUE(manager->is_overlay_mode());
180
181 manager->scrollEnd();
182 ASSERT_TRUE(manager->animation());
183
184 base::TimeTicks time = base::TimeTicks::Now();
185 float previousOffset = manager->controls_top_offset();
186 while(manager->animation()) {
187 time = base::TimeDelta::FromMicroseconds(100) + time;
188 manager->animate(time);
189 ASSERT_GT(manager->controls_top_offset(), previousOffset);
190 previousOffset = manager->controls_top_offset();
191 }
192 ASSERT_FALSE(manager->animation());
193 ASSERT_EQ(0.f, manager->controls_top_offset());
194 ASSERT_EQ(0.f, manager->content_top_offset());
195 ASSERT_TRUE(manager->is_overlay_mode());
196 }
197
198 } // namespace
199 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698