OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/chromeos/login/users/multi_profile_user_controller.h" | 5 #include "chrome/browser/chromeos/login/users/multi_profile_user_controller.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/prefs/pref_change_registrar.h" | 9 #include "base/prefs/pref_change_registrar.h" |
10 #include "base/prefs/pref_registry_simple.h" | 10 #include "base/prefs/pref_registry_simple.h" |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 false, | 86 false, |
87 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 87 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
88 } | 88 } |
89 | 89 |
90 // static | 90 // static |
91 MultiProfileUserController::UserAllowedInSessionReason | 91 MultiProfileUserController::UserAllowedInSessionReason |
92 MultiProfileUserController::GetPrimaryUserPolicy() { | 92 MultiProfileUserController::GetPrimaryUserPolicy() { |
93 UserManager* user_manager = UserManager::Get(); | 93 UserManager* user_manager = UserManager::Get(); |
94 CHECK(user_manager); | 94 CHECK(user_manager); |
95 | 95 |
96 const user_manager::User* primary_user = user_manager->GetPrimaryUser(); | 96 const user_manager::User* user = user_manager->GetPrimaryUser(); |
97 if (!primary_user) | 97 if (!user) |
98 return ALLOWED; | 98 return ALLOWED; |
99 Profile* primary_user_profile = | |
100 ProfileHelper::Get()->GetProfileByUserUnsafe(primary_user); | |
101 | |
102 std::string primary_user_email = primary_user->email(); | |
103 | 99 |
104 // Don't allow any secondary profiles if the primary profile is tainted. | 100 // Don't allow any secondary profiles if the primary profile is tainted. |
105 if (policy::PolicyCertServiceFactory::UsedPolicyCertificates( | 101 if (policy::PolicyCertServiceFactory::UsedPolicyCertificates(user->email())) { |
106 primary_user_email)) { | |
107 // Check directly in local_state before checking if the primary user has | 102 // Check directly in local_state before checking if the primary user has |
108 // a PolicyCertService. His profile may have been tainted previously though | 103 // a PolicyCertService. His profile may have been tainted previously though |
109 // he didn't get a PolicyCertService created for this session. | 104 // he didn't get a PolicyCertService created for this session. |
110 return NOT_ALLOWED_PRIMARY_POLICY_CERT_TAINTED; | 105 return NOT_ALLOWED_PRIMARY_POLICY_CERT_TAINTED; |
111 } | 106 } |
112 | 107 |
113 // If the primary profile already has policy certificates installed but hasn't | 108 Profile* profile = ProfileHelper::Get()->GetProfileByUser(user); |
114 // used them yet then it can become tainted at any time during this session; | 109 if (!profile) |
115 // disable secondary profiles in this case too. | 110 return ALLOWED; |
| 111 |
| 112 // If the primary profile already has policy certificates installed but |
| 113 // hasn't used them yet then it can become tainted at any time during this |
| 114 // session disable secondary profiles in this case too. |
116 policy::PolicyCertService* service = | 115 policy::PolicyCertService* service = |
117 primary_user_profile ? policy::PolicyCertServiceFactory::GetForProfile( | 116 policy::PolicyCertServiceFactory::GetForProfile(profile); |
118 primary_user_profile) | |
119 : NULL; | |
120 if (service && service->has_policy_certificates()) | 117 if (service && service->has_policy_certificates()) |
121 return NOT_ALLOWED_PRIMARY_POLICY_CERT_TAINTED; | 118 return NOT_ALLOWED_PRIMARY_POLICY_CERT_TAINTED; |
122 | 119 |
123 // No user is allowed if the primary user policy forbids it. | 120 // No user is allowed if the primary user policy forbids it. |
124 const std::string primary_user_behavior = | 121 const std::string behavior = profile->GetPrefs()->GetString( |
125 primary_user_profile->GetPrefs()->GetString( | 122 prefs::kMultiProfileUserBehavior); |
126 prefs::kMultiProfileUserBehavior); | 123 if (behavior == kBehaviorNotAllowed) |
127 if (primary_user_behavior == kBehaviorNotAllowed) | |
128 return NOT_ALLOWED_PRIMARY_USER_POLICY_FORBIDS; | 124 return NOT_ALLOWED_PRIMARY_USER_POLICY_FORBIDS; |
129 | 125 |
130 return ALLOWED; | 126 return ALLOWED; |
131 } | 127 } |
132 | 128 |
133 bool MultiProfileUserController::IsUserAllowedInSession( | 129 bool MultiProfileUserController::IsUserAllowedInSession( |
134 const std::string& user_email, | 130 const std::string& user_email, |
135 MultiProfileUserController::UserAllowedInSessionReason* reason) const { | 131 MultiProfileUserController::UserAllowedInSessionReason* reason) const { |
136 UserManager* user_manager = UserManager::Get(); | 132 UserManager* user_manager = UserManager::Get(); |
137 CHECK(user_manager); | 133 CHECK(user_manager); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 } else { | 236 } else { |
241 const std::string behavior = | 237 const std::string behavior = |
242 prefs->GetString(prefs::kMultiProfileUserBehavior); | 238 prefs->GetString(prefs::kMultiProfileUserBehavior); |
243 SetCachedValue(user_email, behavior); | 239 SetCachedValue(user_email, behavior); |
244 } | 240 } |
245 | 241 |
246 CheckSessionUsers(); | 242 CheckSessionUsers(); |
247 } | 243 } |
248 | 244 |
249 } // namespace chromeos | 245 } // namespace chromeos |
OLD | NEW |