OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include "ash/content/shell_content_state.h" | 7 #include "ash/content/shell_content_state.h" |
8 #include "ash/public/cpp/shell_window_ids.h" | 8 #include "ash/public/cpp/shell_window_ids.h" |
9 #include "ash/shelf/shelf_widget.h" | 9 #include "ash/shelf/shelf_widget.h" |
10 #include "ash/shelf/wm_shelf.h" | 10 #include "ash/shelf/wm_shelf.h" |
(...skipping 30 matching lines...) Expand all Loading... |
41 #include "chrome/browser/ui/browser.h" | 41 #include "chrome/browser/ui/browser.h" |
42 #include "chrome/browser/ui/browser_list.h" | 42 #include "chrome/browser/ui/browser_list.h" |
43 #include "chrome/test/base/test_browser_window_aura.h" | 43 #include "chrome/test/base/test_browser_window_aura.h" |
44 #include "chrome/test/base/testing_browser_process.h" | 44 #include "chrome/test/base/testing_browser_process.h" |
45 #include "chrome/test/base/testing_profile.h" | 45 #include "chrome/test/base/testing_profile.h" |
46 #include "chrome/test/base/testing_profile_manager.h" | 46 #include "chrome/test/base/testing_profile_manager.h" |
47 #include "components/signin/core/account_id/account_id.h" | 47 #include "components/signin/core/account_id/account_id.h" |
48 #include "components/user_manager/user_info.h" | 48 #include "components/user_manager/user_info.h" |
49 #include "components/user_manager/user_manager.h" | 49 #include "components/user_manager/user_manager.h" |
50 #include "ui/aura/client/aura_constants.h" | 50 #include "ui/aura/client/aura_constants.h" |
| 51 #include "ui/aura/window.h" |
51 #include "ui/aura/window_event_dispatcher.h" | 52 #include "ui/aura/window_event_dispatcher.h" |
52 #include "ui/base/ui_base_types.h" | 53 #include "ui/base/ui_base_types.h" |
53 #include "ui/wm/core/window_modality_controller.h" | 54 #include "ui/wm/core/window_modality_controller.h" |
54 #include "ui/wm/core/window_util.h" | 55 #include "ui/wm/core/window_util.h" |
55 #include "ui/wm/public/activation_client.h" | 56 #include "ui/wm/public/activation_client.h" |
56 | 57 |
57 namespace { | 58 namespace { |
58 | 59 |
59 const char kAAccountIdString[] = | 60 const char kAAccountIdString[] = |
60 "{\"account_type\":\"unknown\",\"email\":\"A\"}"; | 61 "{\"account_type\":\"unknown\",\"email\":\"A\"}"; |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 base::TimeTicks now = base::TimeTicks::Now(); | 165 base::TimeTicks now = base::TimeTicks::Now(); |
165 while (multi_user_window_manager_->IsAnimationRunningForTest()) { | 166 while (multi_user_window_manager_->IsAnimationRunningForTest()) { |
166 // This should never take longer then a second. | 167 // This should never take longer then a second. |
167 ASSERT_GE(1000, (base::TimeTicks::Now() - now).InMilliseconds()); | 168 ASSERT_GE(1000, (base::TimeTicks::Now() - now).InMilliseconds()); |
168 base::RunLoop().RunUntilIdle(); | 169 base::RunLoop().RunUntilIdle(); |
169 } | 170 } |
170 } | 171 } |
171 | 172 |
172 // Return the window with the given index. | 173 // Return the window with the given index. |
173 aura::Window* window(size_t index) { | 174 aura::Window* window(size_t index) { |
174 DCHECK(index < window_.size()); | 175 DCHECK(index < windows_.size()); |
175 return window_[index]; | 176 return windows_[index]; |
176 } | 177 } |
177 | 178 |
178 // Delete the window at the given index, and set the referefence to NULL. | 179 // Delete the window at the given index, and set the referefence to NULL. |
179 void delete_window_at(size_t index) { | 180 void delete_window_at(size_t index) { |
180 delete window_[index]; | 181 delete windows_[index]; |
181 window_[index] = NULL; | 182 windows_[index] = NULL; |
182 } | 183 } |
183 | 184 |
184 // The accessor to the MultiWindowManager. | 185 // The accessor to the MultiWindowManager. |
185 chrome::MultiUserWindowManagerChromeOS* multi_user_window_manager() { | 186 chrome::MultiUserWindowManagerChromeOS* multi_user_window_manager() { |
186 return multi_user_window_manager_; | 187 return multi_user_window_manager_; |
187 } | 188 } |
188 | 189 |
189 chromeos::FakeChromeUserManager* user_manager() { return fake_user_manager_; } | 190 chromeos::FakeChromeUserManager* user_manager() { return fake_user_manager_; } |
190 | 191 |
191 TestingProfileManager* profile_manager() { return profile_manager_.get(); } | 192 TestingProfileManager* profile_manager() { return profile_manager_.get(); } |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 } | 279 } |
279 | 280 |
280 MaximizeModeWindowManager* maximize_mode_window_manager() { | 281 MaximizeModeWindowManager* maximize_mode_window_manager() { |
281 return Shell::Get() | 282 return Shell::Get() |
282 ->maximize_mode_controller() | 283 ->maximize_mode_controller() |
283 ->maximize_mode_window_manager_.get(); | 284 ->maximize_mode_window_manager_.get(); |
284 } | 285 } |
285 | 286 |
286 private: | 287 private: |
287 // These get created for each session. | 288 // These get created for each session. |
288 std::vector<aura::Window*> window_; | 289 aura::Window::Windows windows_; |
289 | 290 |
290 // The instance of the MultiUserWindowManager. | 291 // The instance of the MultiUserWindowManager. |
291 chrome::MultiUserWindowManagerChromeOS* multi_user_window_manager_; | 292 chrome::MultiUserWindowManagerChromeOS* multi_user_window_manager_; |
292 | 293 |
293 // Owned by |user_manager_enabler_|. | 294 // Owned by |user_manager_enabler_|. |
294 chromeos::FakeChromeUserManager* fake_user_manager_ = nullptr; | 295 chromeos::FakeChromeUserManager* fake_user_manager_ = nullptr; |
295 | 296 |
296 std::unique_ptr<TestingProfileManager> profile_manager_; | 297 std::unique_ptr<TestingProfileManager> profile_manager_; |
297 | 298 |
298 chromeos::ScopedUserManagerEnabler user_manager_enabler_; | 299 chromeos::ScopedUserManagerEnabler user_manager_enabler_; |
(...skipping 13 matching lines...) Expand all Loading... |
312 AshTestBase::SetUp(); | 313 AshTestBase::SetUp(); |
313 profile_manager_.reset( | 314 profile_manager_.reset( |
314 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); | 315 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); |
315 ASSERT_TRUE(profile_manager_.get()->SetUp()); | 316 ASSERT_TRUE(profile_manager_.get()->SetUp()); |
316 EnsureTestUser(AccountId::FromUserEmail("a")); | 317 EnsureTestUser(AccountId::FromUserEmail("a")); |
317 EnsureTestUser(AccountId::FromUserEmail("b")); | 318 EnsureTestUser(AccountId::FromUserEmail("b")); |
318 EnsureTestUser(AccountId::FromUserEmail("c")); | 319 EnsureTestUser(AccountId::FromUserEmail("c")); |
319 } | 320 } |
320 | 321 |
321 void MultiUserWindowManagerChromeOSTest::SetUpForThisManyWindows(int windows) { | 322 void MultiUserWindowManagerChromeOSTest::SetUpForThisManyWindows(int windows) { |
322 DCHECK(window_.empty()); | 323 DCHECK(windows_.empty()); |
323 for (int i = 0; i < windows; i++) { | 324 for (int i = 0; i < windows; i++) { |
324 window_.push_back(CreateTestWindowInShellWithId(i)); | 325 windows_.push_back(CreateTestWindowInShellWithId(i)); |
325 window_[i]->Show(); | 326 windows_[i]->Show(); |
326 } | 327 } |
327 multi_user_window_manager_ = | 328 multi_user_window_manager_ = |
328 new chrome::MultiUserWindowManagerChromeOS(AccountId::FromUserEmail("A")); | 329 new chrome::MultiUserWindowManagerChromeOS(AccountId::FromUserEmail("A")); |
329 multi_user_window_manager_->Init(); | 330 multi_user_window_manager_->Init(); |
330 multi_user_window_manager_->SetAnimationSpeedForTest( | 331 multi_user_window_manager_->SetAnimationSpeedForTest( |
331 chrome::MultiUserWindowManagerChromeOS::ANIMATION_SPEED_DISABLED); | 332 chrome::MultiUserWindowManagerChromeOS::ANIMATION_SPEED_DISABLED); |
332 chrome::MultiUserWindowManager::SetInstanceForTest(multi_user_window_manager_, | 333 chrome::MultiUserWindowManager::SetInstanceForTest(multi_user_window_manager_, |
333 chrome::MultiUserWindowManager::MULTI_PROFILE_MODE_SEPARATED); | 334 chrome::MultiUserWindowManager::MULTI_PROFILE_MODE_SEPARATED); |
334 EXPECT_TRUE(multi_user_window_manager_); | 335 EXPECT_TRUE(multi_user_window_manager_); |
335 chromeos::WallpaperManager::Initialize(); | 336 chromeos::WallpaperManager::Initialize(); |
336 } | 337 } |
337 | 338 |
338 void MultiUserWindowManagerChromeOSTest::TearDown() { | 339 void MultiUserWindowManagerChromeOSTest::TearDown() { |
339 // Since the AuraTestBase is needed to create our assets, we have to | 340 // Since the AuraTestBase is needed to create our assets, we have to |
340 // also delete them before we tear it down. | 341 // also delete them before we tear it down. |
341 while (!window_.empty()) { | 342 while (!windows_.empty()) { |
342 delete *(window_.begin()); | 343 delete *(windows_.begin()); |
343 window_.erase(window_.begin()); | 344 windows_.erase(windows_.begin()); |
344 } | 345 } |
345 | 346 |
346 chrome::MultiUserWindowManager::DeleteInstance(); | 347 chrome::MultiUserWindowManager::DeleteInstance(); |
347 AshTestBase::TearDown(); | 348 AshTestBase::TearDown(); |
348 chromeos::WallpaperManager::Shutdown(); | 349 chromeos::WallpaperManager::Shutdown(); |
349 profile_manager_.reset(); | 350 profile_manager_.reset(); |
350 } | 351 } |
351 | 352 |
352 std::string MultiUserWindowManagerChromeOSTest::GetStatus() { | 353 std::string MultiUserWindowManagerChromeOSTest::GetStatus() { |
353 std::string s; | 354 std::string s; |
354 for (size_t i = 0; i < window_.size(); i++) { | 355 for (size_t i = 0; i < windows_.size(); i++) { |
355 if (i) | 356 if (i) |
356 s += ", "; | 357 s += ", "; |
357 if (!window(i)) { | 358 if (!window(i)) { |
358 s += "D"; | 359 s += "D"; |
359 continue; | 360 continue; |
360 } | 361 } |
361 s += window(i)->IsVisible() ? "S[" : "H["; | 362 s += window(i)->IsVisible() ? "S[" : "H["; |
362 const AccountId& owner = | 363 const AccountId& owner = |
363 multi_user_window_manager_->GetWindowOwner(window(i)); | 364 multi_user_window_manager_->GetWindowOwner(window(i)); |
364 s += owner.GetUserEmail(); | 365 s += owner.GetUserEmail(); |
(...skipping 1148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1513 multi_user_window_manager()->SetWindowOwner(window(1), account_id_A); | 1514 multi_user_window_manager()->SetWindowOwner(window(1), account_id_A); |
1514 multi_user_window_manager()->SetWindowOwner(window(2), account_id_A); | 1515 multi_user_window_manager()->SetWindowOwner(window(2), account_id_A); |
1515 EXPECT_EQ("S[A], S[A], S[A]", GetStatus()); | 1516 EXPECT_EQ("S[A], S[A], S[A]", GetStatus()); |
1516 | 1517 |
1517 // Activate the windows one by one. | 1518 // Activate the windows one by one. |
1518 activation_client->ActivateWindow(window(2)); | 1519 activation_client->ActivateWindow(window(2)); |
1519 activation_client->ActivateWindow(window(1)); | 1520 activation_client->ActivateWindow(window(1)); |
1520 activation_client->ActivateWindow(window(0)); | 1521 activation_client->ActivateWindow(window(0)); |
1521 EXPECT_EQ(wm::GetActiveWindow(), window(0)); | 1522 EXPECT_EQ(wm::GetActiveWindow(), window(0)); |
1522 | 1523 |
1523 aura::Window::Windows mru_list = WmWindow::ToAuraWindows( | 1524 aura::Window::Windows mru_list = |
1524 Shell::Get()->mru_window_tracker()->BuildMruWindowList()); | 1525 Shell::Get()->mru_window_tracker()->BuildMruWindowList(); |
1525 EXPECT_EQ(mru_list[0], window(0)); | 1526 EXPECT_EQ(mru_list[0], window(0)); |
1526 EXPECT_EQ(mru_list[1], window(1)); | 1527 EXPECT_EQ(mru_list[1], window(1)); |
1527 EXPECT_EQ(mru_list[2], window(2)); | 1528 EXPECT_EQ(mru_list[2], window(2)); |
1528 | 1529 |
1529 user_manager()->SwitchActiveUser(account_id_B); | 1530 user_manager()->SwitchActiveUser(account_id_B); |
1530 multi_user_window_manager()->ActiveUserChanged( | 1531 multi_user_window_manager()->ActiveUserChanged( |
1531 user_manager()->FindUser(account_id_B)); | 1532 user_manager()->FindUser(account_id_B)); |
1532 EXPECT_EQ("H[A], H[A], H[A]", GetStatus()); | 1533 EXPECT_EQ("H[A], H[A], H[A]", GetStatus()); |
1533 EXPECT_EQ(wm::GetActiveWindow(), nullptr); | 1534 EXPECT_EQ(wm::GetActiveWindow(), nullptr); |
1534 | 1535 |
1535 user_manager()->SwitchActiveUser(account_id_A); | 1536 user_manager()->SwitchActiveUser(account_id_A); |
1536 multi_user_window_manager()->ActiveUserChanged( | 1537 multi_user_window_manager()->ActiveUserChanged( |
1537 user_manager()->FindUser(account_id_A)); | 1538 user_manager()->FindUser(account_id_A)); |
1538 EXPECT_EQ("S[A], S[A], S[A]", GetStatus()); | 1539 EXPECT_EQ("S[A], S[A], S[A]", GetStatus()); |
1539 EXPECT_EQ(wm::GetActiveWindow(), window(0)); | 1540 EXPECT_EQ(wm::GetActiveWindow(), window(0)); |
1540 | 1541 |
1541 mru_list = WmWindow::ToAuraWindows( | 1542 mru_list = Shell::Get()->mru_window_tracker()->BuildMruWindowList(); |
1542 Shell::Get()->mru_window_tracker()->BuildMruWindowList()); | |
1543 EXPECT_EQ(mru_list[0], window(0)); | 1543 EXPECT_EQ(mru_list[0], window(0)); |
1544 EXPECT_EQ(mru_list[1], window(1)); | 1544 EXPECT_EQ(mru_list[1], window(1)); |
1545 EXPECT_EQ(mru_list[2], window(2)); | 1545 EXPECT_EQ(mru_list[2], window(2)); |
1546 } | 1546 } |
1547 | 1547 |
1548 // Tests that ChromeNewWindowClient::GetActiveBrowser works properly in | 1548 // Tests that ChromeNewWindowClient::GetActiveBrowser works properly in |
1549 // multi-user scenario, that is it should return the browser with active window | 1549 // multi-user scenario, that is it should return the browser with active window |
1550 // associated with it (crbug.com/675265). | 1550 // associated with it (crbug.com/675265). |
1551 TEST_F(MultiUserWindowManagerChromeOSTest, GetActiveBrowserTest) { | 1551 TEST_F(MultiUserWindowManagerChromeOSTest, GetActiveBrowserTest) { |
1552 SetUpForThisManyWindows(1); | 1552 SetUpForThisManyWindows(1); |
(...skipping 25 matching lines...) Expand all Loading... |
1578 user_manager()->SwitchActiveUser(account_id_B); | 1578 user_manager()->SwitchActiveUser(account_id_B); |
1579 multi_user_window_manager()->ActiveUserChanged( | 1579 multi_user_window_manager()->ActiveUserChanged( |
1580 user_manager()->FindUser(account_id_B)); | 1580 user_manager()->FindUser(account_id_B)); |
1581 EXPECT_EQ(browser.get(), BrowserList::GetInstance()->GetLastActive()); | 1581 EXPECT_EQ(browser.get(), BrowserList::GetInstance()->GetLastActive()); |
1582 EXPECT_EQ(nullptr, wm::GetActiveWindow()); | 1582 EXPECT_EQ(nullptr, wm::GetActiveWindow()); |
1583 EXPECT_EQ(nullptr, ChromeNewWindowClient::GetActiveBrowser()); | 1583 EXPECT_EQ(nullptr, ChromeNewWindowClient::GetActiveBrowser()); |
1584 } | 1584 } |
1585 | 1585 |
1586 } // namespace test | 1586 } // namespace test |
1587 } // namespace ash | 1587 } // namespace ash |
OLD | NEW |