Chromium Code Reviews| 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 "chrome/browser/ui/ash/session_state_delegate_chromeos.h" | 5 #include "chrome/browser/ui/ash/session_state_delegate_chromeos.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "chrome/browser/chromeos/login/users/fake_user_manager.h" | 10 #include "chrome/browser/chromeos/login/users/fake_user_manager.h" |
| 11 #include "chrome/browser/chromeos/login/users/multi_profile_user_controller.h" | |
| 12 #include "chrome/browser/chromeos/policy/policy_cert_service.h" | |
| 13 #include "chrome/browser/chromeos/policy/policy_cert_service_factory.h" | |
| 14 #include "chrome/browser/chromeos/policy/policy_cert_verifier.h" | |
| 15 #include "chrome/browser/chromeos/profiles/profile_helper.h" | |
| 16 #include "chrome/common/pref_names.h" | |
| 17 #include "chrome/test/base/testing_browser_process.h" | |
| 11 #include "chrome/test/base/testing_profile_manager.h" | 18 #include "chrome/test/base/testing_profile_manager.h" |
| 19 #include "net/cert/x509_certificate.h" | |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 21 |
| 22 namespace { | |
| 23 | |
| 24 const char* kUser = "user@test.com"; | |
| 25 | |
| 26 // Weak ptr to PolicyCertVerifier - object is freed in test destructor once | |
| 27 // we've ensured the profile has been shut down. | |
| 28 policy::PolicyCertVerifier* g_policy_cert_verifier_for_factory = NULL; | |
| 29 | |
| 30 KeyedService* TestPolicyCertServiceFactory(content::BrowserContext* context) { | |
|
James Cook
2014/08/12 20:08:30
nit: I would name this CreatePolicyCertServiceForT
Roman Sorokin (ftl)
2014/08/13 09:11:52
Done.
| |
| 31 return policy::PolicyCertService::CreateForTesting( | |
| 32 kUser, | |
| 33 g_policy_cert_verifier_for_factory, | |
| 34 chromeos::UserManager::Get()).release(); | |
| 35 } | |
| 36 | |
| 37 } // namespace | |
| 14 | 38 |
| 15 class SessionStateDelegateChromeOSTest : public testing::Test { | 39 class SessionStateDelegateChromeOSTest : public testing::Test { |
| 16 protected: | 40 protected: |
| 17 SessionStateDelegateChromeOSTest() : user_manager_(NULL) { | 41 SessionStateDelegateChromeOSTest() : user_manager_(NULL) { |
| 18 } | 42 } |
| 19 | 43 |
| 20 virtual ~SessionStateDelegateChromeOSTest() { | 44 virtual ~SessionStateDelegateChromeOSTest() { |
| 21 } | 45 } |
| 22 | 46 |
| 23 virtual void SetUp() OVERRIDE { | 47 virtual void SetUp() OVERRIDE { |
| 24 // Initialize the UserManager singleton to a fresh FakeUserManager instance. | 48 // Initialize the UserManager singleton to a fresh FakeUserManager instance. |
| 25 user_manager_ = new chromeos::FakeUserManager; | 49 user_manager_ = new chromeos::FakeUserManager; |
| 26 user_manager_enabler_.reset( | 50 user_manager_enabler_.reset( |
| 27 new chromeos::ScopedUserManagerEnabler(user_manager_)); | 51 new chromeos::ScopedUserManagerEnabler(user_manager_)); |
| 28 | 52 |
| 29 // Create our SessionStateDelegate to experiment with. | 53 // Create our SessionStateDelegate to experiment with. |
| 30 session_state_delegate_.reset(new SessionStateDelegateChromeos()); | 54 session_state_delegate_.reset(new SessionStateDelegateChromeos()); |
| 31 testing::Test::SetUp(); | 55 testing::Test::SetUp(); |
| 32 } | 56 } |
| 33 | 57 |
| 34 virtual void TearDown() OVERRIDE { | 58 virtual void TearDown() OVERRIDE { |
| 35 testing::Test::TearDown(); | 59 testing::Test::TearDown(); |
| 36 session_state_delegate_.reset(); | 60 session_state_delegate_.reset(); |
| 37 user_manager_enabler_.reset(); | 61 user_manager_enabler_.reset(); |
| 38 user_manager_ = NULL; | 62 user_manager_ = NULL; |
| 63 // Clear our cached pointer to the PolicyCertVerifier. | |
| 64 g_policy_cert_verifier_for_factory = NULL; | |
| 39 } | 65 } |
| 40 | 66 |
| 41 // Add and log in a user to the session. | 67 // Add and log in a user to the session. |
| 42 void UserAddedToSession(std::string user) { | 68 void UserAddedToSession(std::string user) { |
| 43 user_manager()->AddUser(user); | 69 user_manager()->AddUser(user); |
| 44 user_manager()->LoginUser(user); | 70 user_manager()->LoginUser(user); |
| 45 } | 71 } |
| 46 | 72 |
| 47 // Get the active user. | 73 // Get the active user. |
| 48 const std::string& GetActiveUser() { | 74 const std::string& GetActiveUser() { |
| 49 return chromeos::UserManager::Get()->GetActiveUser()->email(); | 75 return chromeos::UserManager::Get()->GetActiveUser()->email(); |
| 50 } | 76 } |
| 51 | 77 |
| 52 chromeos::FakeUserManager* user_manager() { return user_manager_; } | 78 chromeos::FakeUserManager* user_manager() { return user_manager_; } |
| 53 SessionStateDelegateChromeos* session_state_delegate() { | 79 SessionStateDelegateChromeos* session_state_delegate() { |
| 54 return session_state_delegate_.get(); | 80 return session_state_delegate_.get(); |
| 55 } | 81 } |
| 56 | 82 |
| 83 void InitForMultiProfile() { | |
| 84 profile_manager_.reset( | |
| 85 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); | |
| 86 ASSERT_TRUE(profile_manager_->SetUp()); | |
| 87 | |
| 88 const std::string user_email(kUser); | |
| 89 const user_manager::User* user = user_manager()->AddUser(user_email); | |
| 90 | |
| 91 // Note that user profiles are created after user login in reality. | |
| 92 user_profile_ = profile_manager_->CreateTestingProfile(user_email); | |
| 93 user_profile_->set_profile_name(user_email); | |
| 94 chromeos::ProfileHelper::Get()->SetUserToProfileMappingForTesting( | |
| 95 user, user_profile_); | |
| 96 } | |
| 97 | |
| 98 TestingProfile* user_profile() { return user_profile_; } | |
| 99 | |
| 57 private: | 100 private: |
| 58 scoped_ptr<chromeos::ScopedUserManagerEnabler> user_manager_enabler_; | 101 scoped_ptr<chromeos::ScopedUserManagerEnabler> user_manager_enabler_; |
| 59 scoped_ptr<SessionStateDelegateChromeos> session_state_delegate_; | 102 scoped_ptr<SessionStateDelegateChromeos> session_state_delegate_; |
| 60 | 103 |
| 61 // Not owned. | 104 // Not owned. |
| 62 chromeos::FakeUserManager* user_manager_; | 105 chromeos::FakeUserManager* user_manager_; |
| 63 | 106 |
| 107 scoped_ptr<TestingProfileManager> profile_manager_; | |
| 108 TestingProfile* user_profile_; | |
| 109 | |
| 64 DISALLOW_COPY_AND_ASSIGN(SessionStateDelegateChromeOSTest); | 110 DISALLOW_COPY_AND_ASSIGN(SessionStateDelegateChromeOSTest); |
| 65 }; | 111 }; |
| 66 | 112 |
| 67 // Make sure that cycling one user does not cause any harm. | 113 // Make sure that cycling one user does not cause any harm. |
| 68 TEST_F(SessionStateDelegateChromeOSTest, CyclingOneUser) { | 114 TEST_F(SessionStateDelegateChromeOSTest, CyclingOneUser) { |
| 69 UserAddedToSession("firstuser@test.com"); | 115 UserAddedToSession("firstuser@test.com"); |
| 70 | 116 |
| 71 EXPECT_EQ("firstuser@test.com", GetActiveUser()); | 117 EXPECT_EQ("firstuser@test.com", GetActiveUser()); |
| 72 session_state_delegate()->CycleActiveUser( | 118 session_state_delegate()->CycleActiveUser( |
| 73 ash::SessionStateDelegate::CYCLE_TO_NEXT_USER); | 119 ash::SessionStateDelegate::CYCLE_TO_NEXT_USER); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 97 // Cycle backwards. | 143 // Cycle backwards. |
| 98 const ash::SessionStateDelegate::CycleUser backward = | 144 const ash::SessionStateDelegate::CycleUser backward = |
| 99 ash::SessionStateDelegate::CYCLE_TO_PREVIOUS_USER; | 145 ash::SessionStateDelegate::CYCLE_TO_PREVIOUS_USER; |
| 100 session_state_delegate()->CycleActiveUser(backward); | 146 session_state_delegate()->CycleActiveUser(backward); |
| 101 EXPECT_EQ("thirduser@test.com", GetActiveUser()); | 147 EXPECT_EQ("thirduser@test.com", GetActiveUser()); |
| 102 session_state_delegate()->CycleActiveUser(backward); | 148 session_state_delegate()->CycleActiveUser(backward); |
| 103 EXPECT_EQ("seconduser@test.com", GetActiveUser()); | 149 EXPECT_EQ("seconduser@test.com", GetActiveUser()); |
| 104 session_state_delegate()->CycleActiveUser(backward); | 150 session_state_delegate()->CycleActiveUser(backward); |
| 105 EXPECT_EQ("firstuser@test.com", GetActiveUser()); | 151 EXPECT_EQ("firstuser@test.com", GetActiveUser()); |
| 106 } | 152 } |
| 153 | |
| 154 // Make sure MultiProfile disabled by primary user policy. | |
| 155 TEST_F(SessionStateDelegateChromeOSTest, MultiProfileDisallowedByUserPolicy) { | |
| 156 InitForMultiProfile(); | |
| 157 EXPECT_TRUE( | |
| 158 session_state_delegate()->IsMultiProfileAllowedByPrimaryUserPolicy()); | |
| 159 const std::string user_email(kUser); | |
| 160 user_manager()->LoginUser(user_email); | |
| 161 EXPECT_TRUE( | |
| 162 session_state_delegate()->IsMultiProfileAllowedByPrimaryUserPolicy()); | |
| 163 | |
| 164 user_profile()->GetPrefs()->SetString( | |
| 165 prefs::kMultiProfileUserBehavior, | |
| 166 chromeos::MultiProfileUserController::kBehaviorNotAllowed); | |
| 167 EXPECT_FALSE( | |
| 168 session_state_delegate()->IsMultiProfileAllowedByPrimaryUserPolicy()); | |
| 169 } | |
| 170 | |
| 171 // Make sure MultiProfile disabled by primary user policy certificates. | |
| 172 TEST_F(SessionStateDelegateChromeOSTest, | |
| 173 MultiProfileDisallowedByPolicyCertificates) { | |
| 174 InitForMultiProfile(); | |
| 175 const std::string user_email(kUser); | |
| 176 user_manager()->LoginUser(user_email); | |
| 177 EXPECT_TRUE( | |
| 178 session_state_delegate()->IsMultiProfileAllowedByPrimaryUserPolicy()); | |
| 179 policy::PolicyCertServiceFactory::SetUsedPolicyCertificates(user_email); | |
| 180 EXPECT_FALSE( | |
| 181 session_state_delegate()->IsMultiProfileAllowedByPrimaryUserPolicy()); | |
| 182 } | |
| 183 | |
| 184 // Make sure MultiProfile disabled by primary user certificates in memory. | |
| 185 TEST_F(SessionStateDelegateChromeOSTest, | |
| 186 MultiProfileDisallowedByPrimaryUserCertificatesInMemory) { | |
| 187 InitForMultiProfile(); | |
| 188 const std::string user_email(kUser); | |
| 189 user_manager()->LoginUser(user_email); | |
| 190 EXPECT_TRUE( | |
| 191 session_state_delegate()->IsMultiProfileAllowedByPrimaryUserPolicy()); | |
| 192 scoped_ptr<policy::PolicyCertVerifier> cert_verifier; | |
| 193 cert_verifier.reset(new policy::PolicyCertVerifier(base::Closure())); | |
| 194 g_policy_cert_verifier_for_factory = cert_verifier.get(); | |
| 195 ASSERT_TRUE( | |
| 196 policy::PolicyCertServiceFactory::GetInstance()->SetTestingFactoryAndUse( | |
| 197 user_profile(), TestPolicyCertServiceFactory)); | |
| 198 policy::PolicyCertService* service = | |
| 199 policy::PolicyCertServiceFactory::GetForProfile(user_profile()); | |
| 200 ASSERT_TRUE(service); | |
| 201 | |
| 202 EXPECT_FALSE(service->has_policy_certificates()); | |
| 203 net::CertificateList certificates; | |
| 204 certificates.push_back(new net::X509Certificate( | |
| 205 "subject", "issuer", base::Time(), base::Time())); | |
| 206 service->OnTrustAnchorsChanged(certificates); | |
| 207 EXPECT_TRUE(service->has_policy_certificates()); | |
| 208 EXPECT_FALSE( | |
| 209 session_state_delegate()->IsMultiProfileAllowedByPrimaryUserPolicy()); | |
| 210 } | |
|
James Cook
2014/08/12 20:08:30
Nice test suite. Good coverage, and helps me as a
| |
| OLD | NEW |