15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/transient_window_stacking_client.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/aura/test/aura_test_base.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/aura/test/test_windows.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/compositor/test/test_layers.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/window_util.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using aura::test::ChildWindowIDsAsString; 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using aura::test::CreateTestWindowWithId; 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using aura::Window; 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace wm { 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class TransientWindowStackingClientTest : public aura::test::AuraTestBase { 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TransientWindowStackingClientTest() {} 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~TransientWindowStackingClientTest() {} 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetUp() OVERRIDE { 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AuraTestBase::SetUp(); 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) client_.reset(new TransientWindowStackingClient); 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::SetWindowStackingClient(client_.get()); 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void TearDown() OVERRIDE { 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::SetWindowStackingClient(NULL); 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AuraTestBase::TearDown(); 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TransientWindowStackingClient> client_; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TransientWindowStackingClientTest); 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Tests that transient children are stacked as a unit when using stack above. 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(TransientWindowStackingClientTest, TransientChildrenGroupAbove) { 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Window> parent(CreateTestWindowWithId(0, root_window())); 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Window> w1(CreateTestWindowWithId(1, parent.get())); 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w11 = CreateTestWindowWithId(11, parent.get()); 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Window> w2(CreateTestWindowWithId(2, parent.get())); 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w21 = CreateTestWindowWithId(21, parent.get()); 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w211 = CreateTestWindowWithId(211, parent.get()); 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w212 = CreateTestWindowWithId(212, parent.get()); 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w213 = CreateTestWindowWithId(213, parent.get()); 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w22 = CreateTestWindowWithId(22, parent.get()); 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(8u, parent->children().size()); 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w1.get(), w11); // w11 is now owned by w1. 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w2.get(), w21); // w21 is now owned by w2. 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w2.get(), w22); // w22 is now owned by w2. 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w21, w211); // w211 is now owned by w21. 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w21, w212); // w212 is now owned by w21. 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w21, w213); // w213 is now owned by w21. 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Stack w1 at the top (end), this should force w11 to be last (on top of w1). 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAtTop(w1.get()); 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This tests that the order in children_ array rather than in 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // transient_children_ array is used when reinserting transient children. 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If transient_children_ array was used '22' would be following '21'. 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAtTop(w2.get()); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w22, parent->children().back()); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAbove(w11, w2.get()); 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAbove(w21, w1.get()); 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w22, parent->children().back()); 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAbove(w21, w22); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w213, parent->children().back()); 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get())); 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAbove(w11, w21); 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get())); 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAbove(w213, w21); 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // No change when stacking a transient parent above its transient child. 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAbove(w21, w211); 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This tests that the order in children_ array rather than in 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // transient_children_ array is used when reinserting transient children. 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If transient_children_ array was used '22' would be following '21'. 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAbove(w2.get(), w1.get()); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w212, parent->children().back()); 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAbove(w11, w213); 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Tests that transient children are stacked as a unit when using stack below. 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(TransientWindowStackingClientTest, TransientChildrenGroupBelow) { 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Window> parent(CreateTestWindowWithId(0, root_window())); 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Window> w1(CreateTestWindowWithId(1, parent.get())); 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w11 = CreateTestWindowWithId(11, parent.get()); 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Window> w2(CreateTestWindowWithId(2, parent.get())); 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w21 = CreateTestWindowWithId(21, parent.get()); 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w211 = CreateTestWindowWithId(211, parent.get()); 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w212 = CreateTestWindowWithId(212, parent.get()); 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w213 = CreateTestWindowWithId(213, parent.get()); 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Window* w22 = CreateTestWindowWithId(22, parent.get()); 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(8u, parent->children().size()); 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w1.get(), w11); // w11 is now owned by w1. 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w2.get(), w21); // w21 is now owned by w2. 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w2.get(), w22); // w22 is now owned by w2. 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w21, w211); // w211 is now owned by w21. 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w21, w212); // w212 is now owned by w21. 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTransientChild(w21, w213); // w213 is now owned by w21. 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Stack w2 at the bottom, this should force w11 to be last (on top of w1). 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This also tests that the order in children_ array rather than in 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // transient_children_ array is used when reinserting transient children. 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If transient_children_ array was used '22' would be following '21'. 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAtBottom(w2.get()); 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildAtBottom(w1.get()); 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w22, parent->children().back()); 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildBelow(w21, w1.get()); 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildBelow(w11, w2.get()); 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w22, parent->children().back()); 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildBelow(w22, w21); 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w213, parent->children().back()); 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get())); 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildBelow(w21, w11); 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get())); 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildBelow(w213, w211); 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // No change when stacking a transient parent below its transient child. 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildBelow(w21, w211); 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildBelow(w1.get(), w2.get()); 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w212, parent->children().back()); 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) parent->StackChildBelow(w213, w11); 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(w11, parent->children().back()); 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(TransientWindowStackingClientTest, 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StackWindowsWhoseLayersHaveNoDelegate) { 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Window> window1(CreateTestWindowWithId(1, root_window())); 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window1->layer()->set_name("1"); 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Window> window2(CreateTestWindowWithId(2, root_window())); 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window2->layer()->set_name("2"); 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Window> window3(CreateTestWindowWithId(3, root_window())); 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window3->layer()->set_name("3"); 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This brings |window1| (and its layer) to the front. 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_window()->StackChildAbove(window1.get(), window3.get()); 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 3 1", ChildWindowIDsAsString(root_window())); 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 3 1", 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::test::ChildLayerNamesAsString(*root_window()->layer())); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Since |window1| does not have a delegate, |window2| should not move in 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // front of it, nor should its layer. 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window1->layer()->set_delegate(NULL); 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_window()->StackChildAbove(window2.get(), window1.get()); 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("3 2 1", ChildWindowIDsAsString(root_window())); 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("3 2 1", 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::test::ChildLayerNamesAsString(*root_window()->layer())); 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It should still be possible to stack |window3| immediately below |window1|. 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_window()->StackChildBelow(window3.get(), window1.get()); 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 3 1", ChildWindowIDsAsString(root_window())); 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 3 1", 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::test::ChildLayerNamesAsString(*root_window()->layer())); 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Since neither |window3| nor |window1| have a delegate, |window2| should 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // not move in front of either. 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window3->layer()->set_delegate(NULL); 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_window()->StackChildBelow(window2.get(), window1.get()); 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 3 1", ChildWindowIDsAsString(root_window())); 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("2 3 1", 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::test::ChildLayerNamesAsString(*root_window()->layer())); 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace wm 216