Index: chrome/browser/ui/ash/session_controller_client_unittest.cc |
diff --git a/chrome/browser/ui/ash/session_controller_client_unittest.cc b/chrome/browser/ui/ash/session_controller_client_unittest.cc |
index 660e1a89e1c93125a3518ac7cfe2c5ca362a60f5..7df02c5d824033bda2e0ba751f31b04d372d2fcb 100644 |
--- a/chrome/browser/ui/ash/session_controller_client_unittest.cc |
+++ b/chrome/browser/ui/ash/session_controller_client_unittest.cc |
@@ -22,6 +22,7 @@ |
#include "chrome/common/pref_names.h" |
#include "chrome/test/base/testing_browser_process.h" |
#include "chrome/test/base/testing_profile_manager.h" |
+#include "components/prefs/pref_service.h" |
#include "components/session_manager/core/session_manager.h" |
#include "components/signin/core/account_id/account_id.h" |
#include "components/user_manager/user_manager.h" |
@@ -66,6 +67,25 @@ class TestChromeUserManager : public FakeChromeUserManager { |
NotifyOnLogin(); |
} |
+ user_manager::UserList GetUnlockUsers() const override { |
+ // Test case UserPrefsChange expects that the list of the unlock users |
+ // depends on prefs::kAllowScreenLock. |
+ user_manager::UserList unlock_users; |
+ for (user_manager::User* user : users_) { |
+ Profile* user_profile = |
+ chromeos::ProfileHelper::Get()->GetProfileByUser(user); |
+ // Skip if user has a profile and kAllowScreenLock is set to false. |
+ if (user_profile && |
+ !user_profile->GetPrefs()->GetBoolean(prefs::kAllowScreenLock)) { |
+ continue; |
+ } |
+ |
+ unlock_users.push_back(user); |
+ } |
+ |
+ return unlock_users; |
+ } |
+ |
private: |
DISALLOW_COPY_AND_ASSIGN(TestChromeUserManager); |
}; |
@@ -172,28 +192,28 @@ class SessionControllerClientTest : public testing::Test { |
TestChromeUserManager* user_manager() { return user_manager_; } |
// Adds a regular user with a profile. |
- void InitForMultiProfile() { |
+ TestingProfile* InitForMultiProfile() { |
const AccountId account_id(AccountId::FromUserEmail(kUser)); |
const user_manager::User* user = user_manager()->AddUser(account_id); |
// Note that user profiles are created after user login in reality. |
- CreateTestingProfile(user); |
+ return CreateTestingProfile(user); |
} |
// Calls private methods to create a testing profile. |
James Cook
2017/05/08 21:50:00
nit: Maybe note that the profile is owned by the P
xiyuan
2017/05/08 22:27:39
Done.
It is sort of owned by ProfileManager. Pro
|
- void CreateTestingProfile(const user_manager::User* user) { |
+ TestingProfile* CreateTestingProfile(const user_manager::User* user) { |
const AccountId& account_id = user->GetAccountId(); |
- user_profile_ = |
+ TestingProfile* profile = |
profile_manager_->CreateTestingProfile(account_id.GetUserEmail()); |
- user_profile_->set_profile_name(account_id.GetUserEmail()); |
- chromeos::ProfileHelper::Get()->SetUserToProfileMappingForTesting( |
- user, user_profile_); |
+ profile->set_profile_name(account_id.GetUserEmail()); |
+ chromeos::ProfileHelper::Get()->SetUserToProfileMappingForTesting(user, |
+ profile); |
+ return profile; |
} |
content::TestBrowserThreadBundle threads_; |
std::unique_ptr<policy::PolicyCertVerifier> cert_verifier_; |
std::unique_ptr<TestingProfileManager> profile_manager_; |
- TestingProfile* user_profile_; |
session_manager::SessionManager session_manager_; |
private: |
@@ -246,7 +266,7 @@ TEST_F(SessionControllerClientTest, CyclingThreeUsers) { |
// Make sure MultiProfile disabled by primary user policy. |
TEST_F(SessionControllerClientTest, MultiProfileDisallowedByUserPolicy) { |
- InitForMultiProfile(); |
+ TestingProfile* user_profile = InitForMultiProfile(); |
EXPECT_EQ(ash::AddUserSessionPolicy::ALLOWED, |
SessionControllerClient::GetAddUserSessionPolicy()); |
const AccountId account_id(AccountId::FromUserEmail(kUser)); |
@@ -258,7 +278,7 @@ TEST_F(SessionControllerClientTest, MultiProfileDisallowedByUserPolicy) { |
EXPECT_EQ(ash::AddUserSessionPolicy::ALLOWED, |
SessionControllerClient::GetAddUserSessionPolicy()); |
- user_profile_->GetPrefs()->SetString( |
+ user_profile->GetPrefs()->SetString( |
prefs::kMultiProfileUserBehavior, |
chromeos::MultiProfileUserController::kBehaviorNotAllowed); |
EXPECT_EQ(ash::AddUserSessionPolicy::ERROR_NOT_ALLOWED_PRIMARY_USER, |
@@ -287,7 +307,7 @@ TEST_F(SessionControllerClientTest, |
// Make sure MultiProfile disabled by primary user certificates in memory. |
TEST_F(SessionControllerClientTest, |
MultiProfileDisallowedByPrimaryUserCertificatesInMemory) { |
- InitForMultiProfile(); |
+ TestingProfile* user_profile = InitForMultiProfile(); |
user_manager()->AddUser(AccountId::FromUserEmail("bb@b.b")); |
const AccountId account_id(AccountId::FromUserEmail(kUser)); |
@@ -298,9 +318,9 @@ TEST_F(SessionControllerClientTest, |
g_policy_cert_verifier_for_factory = cert_verifier_.get(); |
ASSERT_TRUE( |
policy::PolicyCertServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
- user_profile_, CreateTestPolicyCertService)); |
+ user_profile, CreateTestPolicyCertService)); |
policy::PolicyCertService* service = |
- policy::PolicyCertServiceFactory::GetForProfile(user_profile_); |
+ policy::PolicyCertServiceFactory::GetForProfile(user_profile); |
ASSERT_TRUE(service); |
EXPECT_FALSE(service->has_policy_certificates()); |
@@ -352,13 +372,13 @@ TEST_F(SessionControllerClientTest, |
// Make sure adding users to multiprofiles disabled by primary user policy. |
TEST_F(SessionControllerClientTest, |
AddUserToMultiprofileDisallowedByPrimaryUserPolicy) { |
- InitForMultiProfile(); |
+ TestingProfile* user_profile = InitForMultiProfile(); |
EXPECT_EQ(ash::AddUserSessionPolicy::ALLOWED, |
SessionControllerClient::GetAddUserSessionPolicy()); |
const AccountId account_id(AccountId::FromUserEmail(kUser)); |
user_manager()->LoginUser(account_id); |
- user_profile_->GetPrefs()->SetString( |
+ user_profile->GetPrefs()->SetString( |
prefs::kMultiProfileUserBehavior, |
chromeos::MultiProfileUserController::kBehaviorNotAllowed); |
user_manager()->AddUser(AccountId::FromUserEmail("bb@b.b")); |
@@ -429,17 +449,17 @@ TEST_F(SessionControllerClientTest, SupervisedUser) { |
session_controller.last_user_session()->type); |
// Simulate profile creation after login. |
- CreateTestingProfile(user); |
- user_profile_->SetSupervisedUserId("child-id"); |
+ TestingProfile* user_profile = CreateTestingProfile(user); |
+ user_profile->SetSupervisedUserId("child-id"); |
// Simulate supervised user custodians. |
- PrefService* prefs = user_profile_->GetPrefs(); |
+ PrefService* prefs = user_profile->GetPrefs(); |
prefs->SetString(prefs::kSupervisedUserCustodianEmail, "parent1@test.com"); |
prefs->SetString(prefs::kSupervisedUserSecondCustodianEmail, |
"parent2@test.com"); |
// Simulate the notification that the profile is ready. |
- client.OnLoginUserProfilePrepared(user_profile_); |
+ client.OnLoginUserProfilePrepared(user_profile); |
base::RunLoop().RunUntilIdle(); // For PostTask and mojo interface. |
// The custodians were sent over the mojo interface. |
@@ -457,3 +477,44 @@ TEST_F(SessionControllerClientTest, SupervisedUser) { |
EXPECT_EQ("parent3@test.com", |
session_controller.last_user_session()->custodian_email); |
} |
+ |
+TEST_F(SessionControllerClientTest, UserPrefsChange) { |
+ // Create an object to test and connect it to our test interface. |
+ SessionControllerClient client; |
+ TestSessionController session_controller; |
+ client.session_controller_ = session_controller.CreateInterfacePtrAndBind(); |
+ client.Init(); |
+ SessionControllerClient::FlushForTesting(); |
+ |
+ // Simulate login. |
+ const AccountId account_id(AccountId::FromUserEmail("user@test.com")); |
+ const user_manager::User* user = user_manager()->AddUser(account_id); |
+ session_manager_.CreateSession( |
+ account_id, chromeos::ProfileHelper::GetUserIdHashByUserIdForTesting( |
+ "user@test.com")); |
+ session_manager_.SetSessionState(SessionState::ACTIVE); |
+ SessionControllerClient::FlushForTesting(); |
+ |
+ // Simulate the notification that the profile is ready. |
+ TestingProfile* const user_profile = CreateTestingProfile(user); |
+ client.OnLoginUserProfilePrepared(user_profile); |
+ |
+ // Manipulate user prefs and verify SessionController is updated. |
+ PrefService* const user_prefs = user_profile->GetPrefs(); |
+ |
+ user_prefs->SetBoolean(prefs::kAllowScreenLock, true); |
+ SessionControllerClient::FlushForTesting(); |
+ EXPECT_TRUE(session_controller.last_session_info()->can_lock_screen); |
+ user_prefs->SetBoolean(prefs::kAllowScreenLock, false); |
+ SessionControllerClient::FlushForTesting(); |
+ EXPECT_FALSE(session_controller.last_session_info()->can_lock_screen); |
+ |
+ user_prefs->SetBoolean(prefs::kEnableAutoScreenLock, true); |
+ SessionControllerClient::FlushForTesting(); |
+ EXPECT_TRUE( |
+ session_controller.last_session_info()->should_lock_screen_automatically); |
+ user_prefs->SetBoolean(prefs::kEnableAutoScreenLock, false); |
+ SessionControllerClient::FlushForTesting(); |
+ EXPECT_FALSE( |
+ session_controller.last_session_info()->should_lock_screen_automatically); |
+} |