Index: chrome/browser/ui/browser_finder_chromeos_unittest.cc |
diff --git a/chrome/browser/ui/browser_finder_chromeos_unittest.cc b/chrome/browser/ui/browser_finder_chromeos_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..64c14b1e9ddc68fc6837bff408453155efcee2f2 |
--- /dev/null |
+++ b/chrome/browser/ui/browser_finder_chromeos_unittest.cc |
@@ -0,0 +1,181 @@ |
+// Copyright (c) 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/ui/browser_finder.h" |
+ |
+#include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" |
+#include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h" |
+#include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/browser_window.h" |
+#include "chrome/test/base/browser_with_test_window_test.h" |
+#include "chrome/test/base/testing_browser_process.h" |
+#include "chrome/test/base/testing_profile_manager.h" |
+ |
+namespace test { |
+ |
+namespace { |
+ |
+const char kTestAccount1[] = "user1@test.com"; |
+const char kTestAccount2[] = "user2@test.com"; |
+ |
+class TestBrowserWindowAura : public TestBrowserWindow { |
msw
2015/07/01 19:55:16
I now see that three other files define TestBrowse
xdai1
2015/07/07 00:33:42
Extracted the class TestBrowserWindowAura into tes
|
+ public: |
+ // |native_window| is owned by the caller. |
+ explicit TestBrowserWindowAura(aura::Window* native_window) |
+ : native_window_(native_window) {} |
+ ~TestBrowserWindowAura() override {} |
+ |
+ // TestBrowserWindow override. |
+ aura::Window* GetNativeWindow() const override { |
+ return native_window_.get(); |
+ } |
+ |
+ Browser* browser() { return browser_.get(); } |
+ |
+ void CreateBrowser(const Browser::CreateParams& params) { |
+ Browser::CreateParams create_params = params; |
+ create_params.window = this; |
+ browser_.reset(new Browser(create_params)); |
+ } |
+ |
+ private: |
+ scoped_ptr<Browser> browser_; |
+ scoped_ptr<aura::Window> native_window_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestBrowserWindowAura); |
+}; |
+ |
+} // namespace |
+ |
+class BrowserFinderChromeOSTest : public BrowserWithTestWindowTest { |
+ protected: |
+ BrowserFinderChromeOSTest() : multi_user_window_manager_(nullptr) {} |
+ |
+ TestingProfile* CreateMultiUserProfile(const std::string& user_email) { |
+ TestingProfile* profile = |
+ profile_manager_->CreateTestingProfile(user_email); |
+ GetUserWindowManager()->AddUser(profile); |
+ return profile; |
+ } |
+ |
+ scoped_ptr<TestBrowserWindowAura> CreateBrowserWindowWithProfile( |
+ Profile* profile, |
+ bool is_incognito) { |
+ // Create a window. |
+ aura::Window* window = new aura::Window(NULL); |
msw
2015/07/01 19:55:16
nit: nullptr
xdai1
2015/07/07 00:33:42
Done.
|
+ window->set_id(0); |
+ window->SetType(ui::wm::WINDOW_TYPE_NORMAL); |
+ window->Init(ui::LAYER_TEXTURED); |
+ window->Show(); |
+ |
+ scoped_ptr<TestBrowserWindowAura> browser_window( |
+ new TestBrowserWindowAura(window)); |
+ if (is_incognito) { |
+ Browser::CreateParams params(profile->GetOffTheRecordProfile(), |
+ chrome::HOST_DESKTOP_TYPE_ASH); |
+ browser_window->CreateBrowser(params); |
+ } else { |
+ Browser::CreateParams params(profile->GetOriginalProfile(), |
+ chrome::HOST_DESKTOP_TYPE_ASH); |
+ browser_window->CreateBrowser(params); |
+ } |
+ return browser_window.Pass(); |
+ } |
+ |
+ chrome::MultiUserWindowManagerChromeOS* GetUserWindowManager() { |
+ if (!multi_user_window_manager_) { |
+ multi_user_window_manager_ = |
+ new chrome::MultiUserWindowManagerChromeOS(kTestAccount1); |
+ multi_user_window_manager_->Init(); |
+ chrome::MultiUserWindowManager::SetInstanceForTest( |
+ multi_user_window_manager_, |
+ chrome::MultiUserWindowManager::MULTI_PROFILE_MODE_SEPARATED); |
+ } |
+ return multi_user_window_manager_; |
+ } |
+ |
+ private: |
+ void SetUp() override { |
+ profile_manager_.reset( |
+ new TestingProfileManager(TestingBrowserProcess::GetGlobal())); |
+ ASSERT_TRUE(profile_manager_->SetUp()); |
+ profile_manager_->SetLoggedIn(true); |
+ chromeos::WallpaperManager::Initialize(); |
+ BrowserWithTestWindowTest::SetUp(); |
+ // Create a second profile. |
msw
2015/07/01 19:55:16
TearDown should probably explicitly destroy this p
xdai1
2015/07/07 00:33:42
Done.
|
+ CreateMultiUserProfile(kTestAccount2); |
+ } |
+ |
+ void TearDown() override { |
+ chrome::MultiUserWindowManager::DeleteInstance(); |
+ BrowserWithTestWindowTest::TearDown(); |
+ chromeos::WallpaperManager::Shutdown(); |
+ } |
+ |
+ // Override BrowserWithTestWindowTest. |
msw
2015/07/01 19:55:16
nit: SetUp and TearDown also override BrowserWithT
xdai1
2015/07/07 00:33:42
Removed it.
|
+ TestingProfile* CreateProfile() override { |
+ return CreateMultiUserProfile(kTestAccount1); |
+ } |
+ |
+ void DestroyProfile(TestingProfile* test_profile) override { |
+ profile_manager_->DeleteAllTestingProfiles(); |
msw
2015/07/01 19:55:16
Deleting all testing profiles doesn't seem like th
xdai1
2015/07/07 00:33:42
Done.
|
+ } |
+ |
+ TestingProfile* second_profile_; |
+ scoped_ptr<TestingProfileManager> profile_manager_; |
+ chrome::MultiUserWindowManagerChromeOS* multi_user_window_manager_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BrowserFinderChromeOSTest); |
+}; |
+ |
+TEST_F(BrowserFinderChromeOSTest, IncognitoBrowserMatchTest) { |
+ // GetBrowserCount() use kMatchAll to find all browser windows for profile(). |
+ EXPECT_EQ(1u, |
+ chrome::GetBrowserCount(profile(), chrome::HOST_DESKTOP_TYPE_ASH)); |
+ EXPECT_TRUE( |
+ chrome::FindAnyBrowser(profile(), true, chrome::HOST_DESKTOP_TYPE_ASH)); |
+ EXPECT_TRUE( |
+ chrome::FindAnyBrowser(profile(), false, chrome::HOST_DESKTOP_TYPE_ASH)); |
+ set_browser(nullptr); |
+ |
+ scoped_ptr<TestBrowserWindowAura> incognito_browser_window = |
+ CreateBrowserWindowWithProfile(profile(), true); |
+ // Incognito windows are excluded in GetBrowserCount() because kMatchAll |
+ // doesn't match original profile of the browser with the given profile. |
+ EXPECT_EQ(0u, |
+ chrome::GetBrowserCount(profile(), chrome::HOST_DESKTOP_TYPE_ASH)); |
+ EXPECT_TRUE( |
+ chrome::FindAnyBrowser(profile(), true, chrome::HOST_DESKTOP_TYPE_ASH)); |
+ EXPECT_FALSE( |
+ chrome::FindAnyBrowser(profile(), false, chrome::HOST_DESKTOP_TYPE_ASH)); |
+} |
+ |
+TEST_F(BrowserFinderChromeOSTest, FindBrowserOwnedByAnotherProfile) { |
+ set_browser(nullptr); |
+ |
+ scoped_ptr<TestBrowserWindowAura> browser_window = |
+ CreateBrowserWindowWithProfile(profile(), false); |
+ GetUserWindowManager()->SetWindowOwner(browser_window->GetNativeWindow(), |
+ kTestAccount1); |
+ EXPECT_EQ(1u, |
+ chrome::GetBrowserCount(profile(), chrome::HOST_DESKTOP_TYPE_ASH)); |
+ EXPECT_TRUE( |
+ chrome::FindAnyBrowser(profile(), true, chrome::HOST_DESKTOP_TYPE_ASH)); |
+ EXPECT_TRUE( |
+ chrome::FindAnyBrowser(profile(), false, chrome::HOST_DESKTOP_TYPE_ASH)); |
+ |
+ // Move the browser window to another user's desktop. Then no window should |
+ // be available for the current profile. |
+ GetUserWindowManager()->ShowWindowForUser(browser_window->GetNativeWindow(), |
+ kTestAccount2); |
+ EXPECT_EQ(0u, |
+ chrome::GetBrowserCount(profile(), chrome::HOST_DESKTOP_TYPE_ASH)); |
+ EXPECT_FALSE( |
+ chrome::FindAnyBrowser(profile(), true, chrome::HOST_DESKTOP_TYPE_ASH)); |
+ EXPECT_FALSE( |
+ chrome::FindAnyBrowser(profile(), false, chrome::HOST_DESKTOP_TYPE_ASH)); |
+} |
+ |
+} // namespace test |