Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 | |
| OLD | NEW |