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

Side by Side Diff: content/browser/web_contents/aura/native_view_screen_bounds_observer_unittest.cc

Issue 54623007: Make code path for bounds changes getting to renderer less brittle (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moved observer into content/browser/web_contents/aura and added tests Created 7 years, 1 month 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 (c) 2013 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 "content/browser/web_contents/aura/native_view_screen_bounds_observer.h "
6
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "ui/aura/root_window.h"
9 #include "ui/aura/test/aura_test_base.h"
10 #include "ui/aura/window.h"
11
12 namespace content {
13
14 class NativeViewScreenBoundsObserverDelegateStub
15 : public NativeViewScreenBoundsObserverDelegate {
16 public:
17 NativeViewScreenBoundsObserverDelegateStub() : window_(NULL),
18 position_changed_count_(0),
19 bounds_changed_count_(0) {
20 }
21 virtual ~NativeViewScreenBoundsObserverDelegateStub() { }
22
23 void SetDelegateWindow(aura::Window* window) { window_ = window; }
24
25 void ClearCounts() {
26 position_changed_count_ = 0;
27 bounds_changed_count_ = 0;
28 }
29
30 int GetPositionChangedCount() {
31 return position_changed_count_;
32 }
33
34 int GetBoundsChangedCount() {
35 return bounds_changed_count_;
36 }
37
38 // Overriden from NativeViewScreenBoundsObserverDelegate
39 virtual aura::Window* GetDelegateWindow() OVERRIDE { return window_; }
40 virtual void AddDelegateWindowObserver(aura::WindowObserver* observer)
41 OVERRIDE {}
42 virtual void RemoveDelegateWindowObserver(aura::WindowObserver* observer)
43 OVERRIDE {}
44 virtual void RemoveRootWindowObserver(aura::RootWindowObserver* observer)
45 OVERRIDE {}
46 virtual void AddRootWindowObserver(aura::RootWindowObserver* observer)
47 OVERRIDE {}
48 virtual void OnScreenPositionChanged() OVERRIDE {
49 position_changed_count_++;
50 }
51 virtual void OnScreenBoundsChanged() OVERRIDE {
52 bounds_changed_count_++;
53 }
54
55 private:
56 aura::Window* window_;
57 int position_changed_count_;
58 int bounds_changed_count_;
59
60 DISALLOW_COPY_AND_ASSIGN(NativeViewScreenBoundsObserverDelegateStub);
61 };
62
63 class NativeViewScreenBoundsObserverTest : public aura::test::AuraTestBase {
64 public:
65 NativeViewScreenBoundsObserverTest() {}
66 virtual ~NativeViewScreenBoundsObserverTest() { }
67
68 virtual void SetUp() {
69 aura::test::AuraTestBase::SetUp();
70 observer_.Init(&delegate_);
71 }
72
73 bool IsWindowInSet(aura::Window* window, std::set<aura::Window*> windows) {
74 return (windows.end() != windows.find(window));
75 }
76
77 bool IsWindowObserved(aura::Window* window) {
78 return IsWindowInSet(window, observed());
sadrul 2013/11/08 02:16:26 Use aura::Window::HasObserver() to determine this
rharrison 2013/11/12 22:16:29 Done.
79 }
80
81 std::set<aura::Window*> observed() { return observer_.observed_; }
82
83 void ClearObserver() {
84 observer_.RemoveFromObserved(observed());
85 delegate_.RemoveRootWindowObserver(&observer_);
86 delegate_.RemoveDelegateWindowObserver(&observer_);
87 }
88
89 std::set<aura::Window*> GenerateAncestors(aura::Window* window) {
90 return observer_.GenerateAncestors(window);
91 }
92
93 void AddToObserved(const std::set<aura::Window*>& windows) {
94 observer_.AddToObserved(windows);
95 }
96
97 void RemoveFromObserved(const std::set<aura::Window*>& windows) {
98 observer_.RemoveFromObserved(windows);
99 }
100
101 NativeViewScreenBoundsObserver observer_;
102 NativeViewScreenBoundsObserverDelegateStub delegate_;
103 };
104
105 TEST_F(NativeViewScreenBoundsObserverTest, Init) {
106 EXPECT_EQ(static_cast<unsigned int>(0), observed().size());
sadrul 2013/11/08 02:16:26 EXPECT_EQ(0u, observed().size())
rharrison 2013/11/12 22:16:29 Done.
107 ClearObserver();
108
109 // observed count is the number of windows created + 1 due to the root_window
110 // being at the top.
111 aura::Window* delegate_window = CreateNormalWindow(0, root_window(), NULL);
112 delegate_.SetDelegateWindow(delegate_window);
113 observer_.Init(&delegate_);
114 EXPECT_EQ(static_cast<unsigned int>(2), observed().size());
115 EXPECT_TRUE(IsWindowObserved(delegate_window));
116 ClearObserver();
117
118 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL);
119 parent_window->AddChild(delegate_window);
120 observer_.Init(&delegate_);
121 EXPECT_EQ(static_cast<unsigned int>(3), observed().size());
122 EXPECT_TRUE(IsWindowObserved(delegate_window));
123 EXPECT_TRUE(IsWindowObserved(parent_window));
124 ClearObserver();
125
126 aura::Window* grandparent_window = CreateNormalWindow(0, root_window(), NULL);
127 grandparent_window->AddChild(parent_window);
128 observer_.Init(&delegate_);
129 EXPECT_EQ(static_cast<unsigned int>(4), observed().size());
130 EXPECT_TRUE(IsWindowObserved(delegate_window));
131 EXPECT_TRUE(IsWindowObserved(parent_window));
132 EXPECT_TRUE(IsWindowObserved(grandparent_window));
133 ClearObserver();
134 }
135
136 TEST_F(NativeViewScreenBoundsObserverTest, OnWindowParentChanged) {
137 aura::Window* delegate_window = CreateNormalWindow(0, root_window(), NULL);
138 delegate_.SetDelegateWindow(delegate_window);
139 observer_.Init(&delegate_);
140 EXPECT_EQ(static_cast<unsigned int>(2), observed().size());
141 EXPECT_TRUE(IsWindowObserved(delegate_window));
142
143 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL);
144 parent_window->AddChild(delegate_window);
145 EXPECT_EQ(static_cast<unsigned int>(3), observed().size());
146 EXPECT_TRUE(IsWindowObserved(delegate_window));
147 EXPECT_TRUE(IsWindowObserved(parent_window));
148
149 aura::Window* grandparent_window = CreateNormalWindow(0, root_window(), NULL);
150 grandparent_window->AddChild(parent_window);
151 EXPECT_EQ(static_cast<unsigned int>(4), observed().size());
152 EXPECT_TRUE(IsWindowObserved(delegate_window));
153 EXPECT_TRUE(IsWindowObserved(parent_window));
154 EXPECT_TRUE(IsWindowObserved(grandparent_window));
155
156 aura::Window* new_parent_window = CreateNormalWindow(0, root_window(), NULL);
157 new_parent_window->AddChild(delegate_window);
158 EXPECT_EQ(static_cast<unsigned int>(3), observed().size());
159 EXPECT_TRUE(IsWindowObserved(delegate_window));
160 EXPECT_FALSE(IsWindowObserved(parent_window));
161 EXPECT_FALSE(IsWindowObserved(grandparent_window));
162 EXPECT_TRUE(IsWindowObserved(new_parent_window));
163
164 grandparent_window->AddChild(new_parent_window);
165 EXPECT_EQ(static_cast<unsigned int>(4), observed().size());
166 EXPECT_TRUE(IsWindowObserved(delegate_window));
167 EXPECT_FALSE(IsWindowObserved(parent_window));
168 EXPECT_TRUE(IsWindowObserved(grandparent_window));
169 EXPECT_TRUE(IsWindowObserved(new_parent_window));
sadrul 2013/11/08 02:16:26 Add some expectations on Position/BoundsChangedCou
rharrison 2013/11/12 22:16:29 Added additional additional cases in OnWindowBound
170 }
171
172 TEST_F(NativeViewScreenBoundsObserverTest, OnWindowBoundsChanged) {
173 gfx::Rect base_bounds(0, 0, 400, 400);
174 gfx::Rect resized_bounds(0, 0, 200, 200);
175 gfx::Rect moved_bounds(100, 100, 400, 400);
176
177 aura::Window* delegate_window = CreateNormalWindow(0, root_window(), NULL);
178 delegate_window->SetBounds(base_bounds);
179 delegate_.SetDelegateWindow(delegate_window);
180 observer_.Init(&delegate_);
181 delegate_.ClearCounts();
182 delegate_window->SetBounds(resized_bounds);
183 EXPECT_EQ(0, delegate_.GetPositionChangedCount());
184 EXPECT_EQ(1, delegate_.GetBoundsChangedCount());
185
186 delegate_window->SetBounds(base_bounds);
187 delegate_.ClearCounts();
188 delegate_window->SetBounds(moved_bounds);
189 EXPECT_EQ(1, delegate_.GetPositionChangedCount());
190 EXPECT_EQ(0, delegate_.GetBoundsChangedCount());
191
192 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL);
193 parent_window->SetBounds(base_bounds);
194 parent_window->AddChild(delegate_window);
195 delegate_.ClearCounts();
196 parent_window->SetBounds(resized_bounds);
197 EXPECT_EQ(0, delegate_.GetPositionChangedCount());
198 EXPECT_EQ(1, delegate_.GetBoundsChangedCount());
199
200 parent_window->SetBounds(base_bounds);
201 delegate_.ClearCounts();
202 parent_window->SetBounds(moved_bounds);
203 EXPECT_EQ(1, delegate_.GetPositionChangedCount());
204 EXPECT_EQ(0, delegate_.GetBoundsChangedCount());
205 }
206
207 TEST_F(NativeViewScreenBoundsObserverTest, GenerateAncestors) {
208 aura::Window* child_window = CreateNormalWindow(0, root_window(), NULL);
209 std::set<aura::Window*> ancestors;
210 ancestors = GenerateAncestors(child_window);
211 EXPECT_EQ(static_cast<unsigned int>(1), ancestors.size());
212 EXPECT_FALSE(IsWindowInSet(child_window, ancestors));
213
214 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL);
215 parent_window->AddChild(child_window);
216 ancestors = GenerateAncestors(child_window);
217 EXPECT_EQ(static_cast<unsigned int>(2), ancestors.size());
218 EXPECT_FALSE(IsWindowInSet(child_window, ancestors));
219 EXPECT_TRUE(IsWindowInSet(parent_window, ancestors));
220
221 aura::Window* grandparent_window = CreateNormalWindow(0, root_window(), NULL);
222 grandparent_window->AddChild(parent_window);
223 ancestors = GenerateAncestors(child_window);
224 EXPECT_EQ(static_cast<unsigned int>(3), ancestors.size());
225 EXPECT_FALSE(IsWindowInSet(child_window, ancestors));
226 EXPECT_TRUE(IsWindowInSet(parent_window, ancestors));
227 EXPECT_TRUE(IsWindowInSet(grandparent_window, ancestors));
228 }
229
230 TEST_F(NativeViewScreenBoundsObserverTest, AddToObserved) {
231 std::set<aura::Window*> windows;
232 aura::Window* child_window = CreateNormalWindow(0, root_window(), NULL);
233 windows.insert(child_window);
234 AddToObserved(windows);
235 EXPECT_EQ(static_cast<unsigned int>(1), observed().size());
236 EXPECT_TRUE(IsWindowObserved(child_window));
237
238 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL);
239 windows.insert(parent_window);
240 AddToObserved(windows);
241 EXPECT_EQ(static_cast<unsigned int>(2), observed().size());
242 EXPECT_TRUE(IsWindowObserved(child_window));
243 EXPECT_TRUE(IsWindowObserved(parent_window));
244
245 aura::Window* grandparent_window = CreateNormalWindow(0, root_window(), NULL);
246 windows.clear();
247 windows.insert(grandparent_window);
248 AddToObserved(windows);
249 EXPECT_EQ(static_cast<unsigned int>(3), observed().size());
250 EXPECT_TRUE(IsWindowObserved(child_window));
251 EXPECT_TRUE(IsWindowObserved(parent_window));
252 EXPECT_TRUE(IsWindowObserved(grandparent_window));
253 }
254
255 TEST_F(NativeViewScreenBoundsObserverTest, RemoveFromObserved) {
sadrul 2013/11/08 02:16:26 I am not sure what we are testing in these last th
rharrison 2013/11/12 22:16:29 I don't think they are adding more coverage, remov
256 aura::Window* child_window = CreateNormalWindow(0, root_window(), NULL);
257 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL);
258 aura::Window* grandparent_window = CreateNormalWindow(0, root_window(), NULL);
259 std::set<aura::Window*> base_windows;
260 base_windows.insert(child_window);
261 base_windows.insert(parent_window);
262 base_windows.insert(grandparent_window);
263
264 std::set<aura::Window*> removed_windows;
265 AddToObserved(base_windows);
266 RemoveFromObserved(removed_windows);
267 EXPECT_EQ(static_cast<unsigned int>(3), observed().size());
268 EXPECT_TRUE(IsWindowObserved(child_window));
269 EXPECT_TRUE(IsWindowObserved(parent_window));
270 EXPECT_TRUE(IsWindowObserved(grandparent_window));
271
272 removed_windows = base_windows;
273 RemoveFromObserved(removed_windows);
274 EXPECT_EQ(static_cast<unsigned int>(0), observed().size());
275 EXPECT_FALSE(IsWindowObserved(child_window));
276 EXPECT_FALSE(IsWindowObserved(parent_window));
277 EXPECT_FALSE(IsWindowObserved(grandparent_window));
278
279 AddToObserved(base_windows);
280 removed_windows.clear();
281 removed_windows.insert(parent_window);
282 RemoveFromObserved(removed_windows);
283 EXPECT_EQ(static_cast<unsigned int>(2), observed().size());
284 EXPECT_TRUE(IsWindowObserved(child_window));
285 EXPECT_FALSE(IsWindowObserved(parent_window));
286 EXPECT_TRUE(IsWindowObserved(grandparent_window));
287
288 removed_windows.clear();
289 removed_windows.insert(parent_window);
290 RemoveFromObserved(removed_windows);
291 EXPECT_EQ(static_cast<unsigned int>(2), observed().size());
292 EXPECT_TRUE(IsWindowObserved(child_window));
293 EXPECT_FALSE(IsWindowObserved(parent_window));
294 EXPECT_TRUE(IsWindowObserved(grandparent_window));
295
296 removed_windows.clear();
297 removed_windows.insert(child_window);
298 RemoveFromObserved(removed_windows);
299 EXPECT_EQ(static_cast<unsigned int>(1), observed().size());
300 EXPECT_FALSE(IsWindowObserved(child_window));
301 EXPECT_FALSE(IsWindowObserved(parent_window));
302 EXPECT_TRUE(IsWindowObserved(grandparent_window));
303
304 removed_windows.clear();
305 removed_windows.insert(grandparent_window);
306 RemoveFromObserved(removed_windows);
307 EXPECT_EQ(static_cast<unsigned int>(0), observed().size());
308 EXPECT_FALSE(IsWindowObserved(child_window));
309 EXPECT_FALSE(IsWindowObserved(parent_window));
310 EXPECT_FALSE(IsWindowObserved(grandparent_window));
311 }
312
313 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698