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

Side by Side Diff: ui/wm/core/transient_window_manager_unittest.cc

Issue 1868363002: Replace scoped_ptr with std::unique_ptr in //ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scopedptrcc
Patch Set: scopedptrui: rebase-make_scoped_ptr Created 4 years, 8 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
« no previous file with comments | « ui/wm/core/shadow_unittest.cc ('k') | ui/wm/core/transient_window_stacking_client_unittest.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "ui/wm/core/transient_window_manager.h" 5 #include "ui/wm/core/transient_window_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "ui/aura/client/window_tree_client.h" 10 #include "ui/aura/client/window_tree_client.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 private: 44 private:
45 int add_count_; 45 int add_count_;
46 int remove_count_; 46 int remove_count_;
47 47
48 DISALLOW_COPY_AND_ASSIGN(TestTransientWindowObserver); 48 DISALLOW_COPY_AND_ASSIGN(TestTransientWindowObserver);
49 }; 49 };
50 50
51 class WindowVisibilityObserver : public aura::WindowObserver { 51 class WindowVisibilityObserver : public aura::WindowObserver {
52 public: 52 public:
53 WindowVisibilityObserver(Window* observed_window, 53 WindowVisibilityObserver(Window* observed_window,
54 scoped_ptr<Window> owned_window) 54 std::unique_ptr<Window> owned_window)
55 : observed_window_(observed_window), 55 : observed_window_(observed_window),
56 owned_window_(std::move(owned_window)) { 56 owned_window_(std::move(owned_window)) {
57 observed_window_->AddObserver(this); 57 observed_window_->AddObserver(this);
58 } 58 }
59 ~WindowVisibilityObserver() override { 59 ~WindowVisibilityObserver() override {
60 observed_window_->RemoveObserver(this); 60 observed_window_->RemoveObserver(this);
61 } 61 }
62 62
63 void OnWindowVisibilityChanged(Window* window, bool visible) override { 63 void OnWindowVisibilityChanged(Window* window, bool visible) override {
64 owned_window_.reset(); 64 owned_window_.reset();
65 } 65 }
66 private: 66 private:
67 Window* observed_window_; 67 Window* observed_window_;
68 scoped_ptr<Window> owned_window_; 68 std::unique_ptr<Window> owned_window_;
69 69
70 DISALLOW_COPY_AND_ASSIGN(WindowVisibilityObserver); 70 DISALLOW_COPY_AND_ASSIGN(WindowVisibilityObserver);
71 }; 71 };
72 72
73 class TransientWindowManagerTest : public aura::test::AuraTestBase { 73 class TransientWindowManagerTest : public aura::test::AuraTestBase {
74 public: 74 public:
75 TransientWindowManagerTest() {} 75 TransientWindowManagerTest() {}
76 ~TransientWindowManagerTest() override {} 76 ~TransientWindowManagerTest() override {}
77 77
78 void SetUp() override { 78 void SetUp() override {
(...skipping 12 matching lines...) Expand all
91 Window* window = new Window(NULL); 91 Window* window = new Window(NULL);
92 window->set_id(id); 92 window->set_id(id);
93 window->SetType(ui::wm::WINDOW_TYPE_NORMAL); 93 window->SetType(ui::wm::WINDOW_TYPE_NORMAL);
94 window->Init(ui::LAYER_TEXTURED); 94 window->Init(ui::LAYER_TEXTURED);
95 AddTransientChild(parent, window); 95 AddTransientChild(parent, window);
96 aura::client::ParentWindowWithContext(window, root_window(), gfx::Rect()); 96 aura::client::ParentWindowWithContext(window, root_window(), gfx::Rect());
97 return window; 97 return window;
98 } 98 }
99 99
100 private: 100 private:
101 scoped_ptr<wm::WMState> wm_state_; 101 std::unique_ptr<wm::WMState> wm_state_;
102 102
103 DISALLOW_COPY_AND_ASSIGN(TransientWindowManagerTest); 103 DISALLOW_COPY_AND_ASSIGN(TransientWindowManagerTest);
104 }; 104 };
105 105
106 // Various assertions for transient children. 106 // Various assertions for transient children.
107 TEST_F(TransientWindowManagerTest, TransientChildren) { 107 TEST_F(TransientWindowManagerTest, TransientChildren) {
108 scoped_ptr<Window> parent(CreateTestWindowWithId(0, root_window())); 108 std::unique_ptr<Window> parent(CreateTestWindowWithId(0, root_window()));
109 scoped_ptr<Window> w1(CreateTestWindowWithId(1, parent.get())); 109 std::unique_ptr<Window> w1(CreateTestWindowWithId(1, parent.get()));
110 scoped_ptr<Window> w3(CreateTestWindowWithId(3, parent.get())); 110 std::unique_ptr<Window> w3(CreateTestWindowWithId(3, parent.get()));
111 Window* w2 = CreateTestWindowWithId(2, parent.get()); 111 Window* w2 = CreateTestWindowWithId(2, parent.get());
112 // w2 is now owned by w1. 112 // w2 is now owned by w1.
113 AddTransientChild(w1.get(), w2); 113 AddTransientChild(w1.get(), w2);
114 // Stack w1 at the top (end), this should force w2 to be last (on top of w1). 114 // Stack w1 at the top (end), this should force w2 to be last (on top of w1).
115 parent->StackChildAtTop(w1.get()); 115 parent->StackChildAtTop(w1.get());
116 ASSERT_EQ(3u, parent->children().size()); 116 ASSERT_EQ(3u, parent->children().size());
117 EXPECT_EQ(w2, parent->children().back()); 117 EXPECT_EQ(w2, parent->children().back());
118 118
119 // Destroy w1, which should also destroy w3 (since it's a transient child). 119 // Destroy w1, which should also destroy w3 (since it's a transient child).
120 w1.reset(); 120 w1.reset();
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 w1->Hide(); 175 w1->Hide();
176 EXPECT_FALSE(w2->IsVisible()); 176 EXPECT_FALSE(w2->IsVisible());
177 w2->Hide(); 177 w2->Hide();
178 EXPECT_FALSE(w2->IsVisible()); 178 EXPECT_FALSE(w2->IsVisible());
179 w1->Show(); 179 w1->Show();
180 EXPECT_TRUE(w2->IsVisible()); 180 EXPECT_TRUE(w2->IsVisible());
181 } 181 }
182 182
183 // Tests that transient children are stacked as a unit when using stack above. 183 // Tests that transient children are stacked as a unit when using stack above.
184 TEST_F(TransientWindowManagerTest, TransientChildrenGroupAbove) { 184 TEST_F(TransientWindowManagerTest, TransientChildrenGroupAbove) {
185 scoped_ptr<Window> parent(CreateTestWindowWithId(0, root_window())); 185 std::unique_ptr<Window> parent(CreateTestWindowWithId(0, root_window()));
186 scoped_ptr<Window> w1(CreateTestWindowWithId(1, parent.get())); 186 std::unique_ptr<Window> w1(CreateTestWindowWithId(1, parent.get()));
187 Window* w11 = CreateTestWindowWithId(11, parent.get()); 187 Window* w11 = CreateTestWindowWithId(11, parent.get());
188 scoped_ptr<Window> w2(CreateTestWindowWithId(2, parent.get())); 188 std::unique_ptr<Window> w2(CreateTestWindowWithId(2, parent.get()));
189 Window* w21 = CreateTestWindowWithId(21, parent.get()); 189 Window* w21 = CreateTestWindowWithId(21, parent.get());
190 Window* w211 = CreateTestWindowWithId(211, parent.get()); 190 Window* w211 = CreateTestWindowWithId(211, parent.get());
191 Window* w212 = CreateTestWindowWithId(212, parent.get()); 191 Window* w212 = CreateTestWindowWithId(212, parent.get());
192 Window* w213 = CreateTestWindowWithId(213, parent.get()); 192 Window* w213 = CreateTestWindowWithId(213, parent.get());
193 Window* w22 = CreateTestWindowWithId(22, parent.get()); 193 Window* w22 = CreateTestWindowWithId(22, parent.get());
194 ASSERT_EQ(8u, parent->children().size()); 194 ASSERT_EQ(8u, parent->children().size());
195 195
196 // w11 is now owned by w1. 196 // w11 is now owned by w1.
197 AddTransientChild(w1.get(), w11); 197 AddTransientChild(w1.get(), w11);
198 // w21 is now owned by w2. 198 // w21 is now owned by w2.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 EXPECT_EQ(w212, parent->children().back()); 251 EXPECT_EQ(w212, parent->children().back());
252 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); 252 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get()));
253 253
254 parent->StackChildAbove(w11, w213); 254 parent->StackChildAbove(w11, w213);
255 EXPECT_EQ(w11, parent->children().back()); 255 EXPECT_EQ(w11, parent->children().back());
256 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); 256 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get()));
257 } 257 }
258 258
259 // Tests that transient children are stacked as a unit when using stack below. 259 // Tests that transient children are stacked as a unit when using stack below.
260 TEST_F(TransientWindowManagerTest, TransientChildrenGroupBelow) { 260 TEST_F(TransientWindowManagerTest, TransientChildrenGroupBelow) {
261 scoped_ptr<Window> parent(CreateTestWindowWithId(0, root_window())); 261 std::unique_ptr<Window> parent(CreateTestWindowWithId(0, root_window()));
262 scoped_ptr<Window> w1(CreateTestWindowWithId(1, parent.get())); 262 std::unique_ptr<Window> w1(CreateTestWindowWithId(1, parent.get()));
263 Window* w11 = CreateTestWindowWithId(11, parent.get()); 263 Window* w11 = CreateTestWindowWithId(11, parent.get());
264 scoped_ptr<Window> w2(CreateTestWindowWithId(2, parent.get())); 264 std::unique_ptr<Window> w2(CreateTestWindowWithId(2, parent.get()));
265 Window* w21 = CreateTestWindowWithId(21, parent.get()); 265 Window* w21 = CreateTestWindowWithId(21, parent.get());
266 Window* w211 = CreateTestWindowWithId(211, parent.get()); 266 Window* w211 = CreateTestWindowWithId(211, parent.get());
267 Window* w212 = CreateTestWindowWithId(212, parent.get()); 267 Window* w212 = CreateTestWindowWithId(212, parent.get());
268 Window* w213 = CreateTestWindowWithId(213, parent.get()); 268 Window* w213 = CreateTestWindowWithId(213, parent.get());
269 Window* w22 = CreateTestWindowWithId(22, parent.get()); 269 Window* w22 = CreateTestWindowWithId(22, parent.get());
270 ASSERT_EQ(8u, parent->children().size()); 270 ASSERT_EQ(8u, parent->children().size());
271 271
272 // w11 is now owned by w1. 272 // w11 is now owned by w1.
273 AddTransientChild(w1.get(), w11); 273 AddTransientChild(w1.get(), w11);
274 // w21 is now owned by w2. 274 // w21 is now owned by w2.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 EXPECT_EQ(w212, parent->children().back()); 324 EXPECT_EQ(w212, parent->children().back());
325 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); 325 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get()));
326 326
327 parent->StackChildBelow(w213, w11); 327 parent->StackChildBelow(w213, w11);
328 EXPECT_EQ(w11, parent->children().back()); 328 EXPECT_EQ(w11, parent->children().back());
329 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); 329 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get()));
330 } 330 }
331 331
332 // Tests that transient windows are stacked properly when created. 332 // Tests that transient windows are stacked properly when created.
333 TEST_F(TransientWindowManagerTest, StackUponCreation) { 333 TEST_F(TransientWindowManagerTest, StackUponCreation) {
334 scoped_ptr<Window> window0(CreateTestWindowWithId(0, root_window())); 334 std::unique_ptr<Window> window0(CreateTestWindowWithId(0, root_window()));
335 scoped_ptr<Window> window1(CreateTestWindowWithId(1, root_window())); 335 std::unique_ptr<Window> window1(CreateTestWindowWithId(1, root_window()));
336 336
337 scoped_ptr<Window> window2(CreateTransientChild(2, window0.get())); 337 std::unique_ptr<Window> window2(CreateTransientChild(2, window0.get()));
338 EXPECT_EQ("0 2 1", ChildWindowIDsAsString(root_window())); 338 EXPECT_EQ("0 2 1", ChildWindowIDsAsString(root_window()));
339 } 339 }
340 340
341 // Tests for a crash when window destroyed inside 341 // Tests for a crash when window destroyed inside
342 // UpdateTransientChildVisibility loop. 342 // UpdateTransientChildVisibility loop.
343 TEST_F(TransientWindowManagerTest, CrashOnVisibilityChange) { 343 TEST_F(TransientWindowManagerTest, CrashOnVisibilityChange) {
344 scoped_ptr<Window> window1(CreateTransientChild(1, root_window())); 344 std::unique_ptr<Window> window1(CreateTransientChild(1, root_window()));
345 scoped_ptr<Window> window2(CreateTransientChild(2, root_window())); 345 std::unique_ptr<Window> window2(CreateTransientChild(2, root_window()));
346 window1->Show(); 346 window1->Show();
347 window2->Show(); 347 window2->Show();
348 348
349 WindowVisibilityObserver visibility_observer(window1.get(), 349 WindowVisibilityObserver visibility_observer(window1.get(),
350 std::move(window2)); 350 std::move(window2));
351 root_window()->Hide(); 351 root_window()->Hide();
352 } 352 }
353 // Tests that windows are restacked properly after a call to AddTransientChild() 353 // Tests that windows are restacked properly after a call to AddTransientChild()
354 // or RemoveTransientChild(). 354 // or RemoveTransientChild().
355 TEST_F(TransientWindowManagerTest, RestackUponAddOrRemoveTransientChild) { 355 TEST_F(TransientWindowManagerTest, RestackUponAddOrRemoveTransientChild) {
356 scoped_ptr<Window> windows[4]; 356 std::unique_ptr<Window> windows[4];
357 for (int i = 0; i < 4; i++) 357 for (int i = 0; i < 4; i++)
358 windows[i].reset(CreateTestWindowWithId(i, root_window())); 358 windows[i].reset(CreateTestWindowWithId(i, root_window()));
359 EXPECT_EQ("0 1 2 3", ChildWindowIDsAsString(root_window())); 359 EXPECT_EQ("0 1 2 3", ChildWindowIDsAsString(root_window()));
360 360
361 AddTransientChild(windows[0].get(), windows[2].get()); 361 AddTransientChild(windows[0].get(), windows[2].get());
362 EXPECT_EQ("0 2 1 3", ChildWindowIDsAsString(root_window())); 362 EXPECT_EQ("0 2 1 3", ChildWindowIDsAsString(root_window()));
363 363
364 AddTransientChild(windows[0].get(), windows[3].get()); 364 AddTransientChild(windows[0].get(), windows[3].get());
365 EXPECT_EQ("0 2 3 1", ChildWindowIDsAsString(root_window())); 365 EXPECT_EQ("0 2 3 1", ChildWindowIDsAsString(root_window()));
366 366
(...skipping 27 matching lines...) Expand all
394 }; 394 };
395 395
396 } // namespace 396 } // namespace
397 397
398 // Verifies the delegate is notified of destruction after transients are 398 // Verifies the delegate is notified of destruction after transients are
399 // destroyed. 399 // destroyed.
400 TEST_F(TransientWindowManagerTest, NotifyDelegateAfterDeletingTransients) { 400 TEST_F(TransientWindowManagerTest, NotifyDelegateAfterDeletingTransients) {
401 std::vector<std::string> destruction_order; 401 std::vector<std::string> destruction_order;
402 402
403 DestroyedTrackingDelegate parent_delegate("parent", &destruction_order); 403 DestroyedTrackingDelegate parent_delegate("parent", &destruction_order);
404 scoped_ptr<Window> parent(new Window(&parent_delegate)); 404 std::unique_ptr<Window> parent(new Window(&parent_delegate));
405 parent->Init(ui::LAYER_NOT_DRAWN); 405 parent->Init(ui::LAYER_NOT_DRAWN);
406 406
407 DestroyedTrackingDelegate transient_delegate("transient", &destruction_order); 407 DestroyedTrackingDelegate transient_delegate("transient", &destruction_order);
408 Window* transient = new Window(&transient_delegate); // Owned by |parent|. 408 Window* transient = new Window(&transient_delegate); // Owned by |parent|.
409 transient->Init(ui::LAYER_NOT_DRAWN); 409 transient->Init(ui::LAYER_NOT_DRAWN);
410 AddTransientChild(parent.get(), transient); 410 AddTransientChild(parent.get(), transient);
411 parent.reset(); 411 parent.reset();
412 412
413 ASSERT_EQ(2u, destruction_order.size()); 413 ASSERT_EQ(2u, destruction_order.size());
414 EXPECT_EQ("transient", destruction_order[0]); 414 EXPECT_EQ("transient", destruction_order[0]);
415 EXPECT_EQ("parent", destruction_order[1]); 415 EXPECT_EQ("parent", destruction_order[1]);
416 } 416 }
417 417
418 TEST_F(TransientWindowManagerTest, 418 TEST_F(TransientWindowManagerTest,
419 StackTransientsLayersRelativeToOtherTransients) { 419 StackTransientsLayersRelativeToOtherTransients) {
420 // Create a window with several transients, then a couple windows on top. 420 // Create a window with several transients, then a couple windows on top.
421 scoped_ptr<Window> window1(CreateTestWindowWithId(1, root_window())); 421 std::unique_ptr<Window> window1(CreateTestWindowWithId(1, root_window()));
422 scoped_ptr<Window> window11(CreateTransientChild(11, window1.get())); 422 std::unique_ptr<Window> window11(CreateTransientChild(11, window1.get()));
423 scoped_ptr<Window> window12(CreateTransientChild(12, window1.get())); 423 std::unique_ptr<Window> window12(CreateTransientChild(12, window1.get()));
424 scoped_ptr<Window> window13(CreateTransientChild(13, window1.get())); 424 std::unique_ptr<Window> window13(CreateTransientChild(13, window1.get()));
425 425
426 EXPECT_EQ("1 11 12 13", ChildWindowIDsAsString(root_window())); 426 EXPECT_EQ("1 11 12 13", ChildWindowIDsAsString(root_window()));
427 427
428 // Stack 11 above 12. 428 // Stack 11 above 12.
429 root_window()->StackChildAbove(window11.get(), window12.get()); 429 root_window()->StackChildAbove(window11.get(), window12.get());
430 EXPECT_EQ("1 12 11 13", ChildWindowIDsAsString(root_window())); 430 EXPECT_EQ("1 12 11 13", ChildWindowIDsAsString(root_window()));
431 431
432 // Stack 13 below 12. 432 // Stack 13 below 12.
433 root_window()->StackChildBelow(window13.get(), window12.get()); 433 root_window()->StackChildBelow(window13.get(), window12.get());
434 EXPECT_EQ("1 13 12 11", ChildWindowIDsAsString(root_window())); 434 EXPECT_EQ("1 13 12 11", ChildWindowIDsAsString(root_window()));
435 435
436 // Stack 11 above 1. 436 // Stack 11 above 1.
437 root_window()->StackChildAbove(window11.get(), window1.get()); 437 root_window()->StackChildAbove(window11.get(), window1.get());
438 EXPECT_EQ("1 11 13 12", ChildWindowIDsAsString(root_window())); 438 EXPECT_EQ("1 11 13 12", ChildWindowIDsAsString(root_window()));
439 439
440 // Stack 12 below 13. 440 // Stack 12 below 13.
441 root_window()->StackChildBelow(window12.get(), window13.get()); 441 root_window()->StackChildBelow(window12.get(), window13.get());
442 EXPECT_EQ("1 11 12 13", ChildWindowIDsAsString(root_window())); 442 EXPECT_EQ("1 11 12 13", ChildWindowIDsAsString(root_window()));
443 } 443 }
444 444
445 // Verifies TransientWindowObserver is notified appropriately. 445 // Verifies TransientWindowObserver is notified appropriately.
446 TEST_F(TransientWindowManagerTest, TransientWindowObserverNotified) { 446 TEST_F(TransientWindowManagerTest, TransientWindowObserverNotified) {
447 scoped_ptr<Window> parent(CreateTestWindowWithId(0, root_window())); 447 std::unique_ptr<Window> parent(CreateTestWindowWithId(0, root_window()));
448 scoped_ptr<Window> w1(CreateTestWindowWithId(1, parent.get())); 448 std::unique_ptr<Window> w1(CreateTestWindowWithId(1, parent.get()));
449 449
450 TestTransientWindowObserver test_observer; 450 TestTransientWindowObserver test_observer;
451 TransientWindowManager::Get(parent.get())->AddObserver(&test_observer); 451 TransientWindowManager::Get(parent.get())->AddObserver(&test_observer);
452 452
453 AddTransientChild(parent.get(), w1.get()); 453 AddTransientChild(parent.get(), w1.get());
454 EXPECT_EQ(1, test_observer.add_count()); 454 EXPECT_EQ(1, test_observer.add_count());
455 EXPECT_EQ(0, test_observer.remove_count()); 455 EXPECT_EQ(0, test_observer.remove_count());
456 456
457 RemoveTransientChild(parent.get(), w1.get()); 457 RemoveTransientChild(parent.get(), w1.get());
458 EXPECT_EQ(1, test_observer.add_count()); 458 EXPECT_EQ(1, test_observer.add_count());
459 EXPECT_EQ(1, test_observer.remove_count()); 459 EXPECT_EQ(1, test_observer.remove_count());
460 460
461 TransientWindowManager::Get(parent.get())->RemoveObserver(&test_observer); 461 TransientWindowManager::Get(parent.get())->RemoveObserver(&test_observer);
462 } 462 }
463 463
464 } // namespace wm 464 } // namespace wm
OLDNEW
« no previous file with comments | « ui/wm/core/shadow_unittest.cc ('k') | ui/wm/core/transient_window_stacking_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698