Index: chrome/browser/chromeos/login/user_manager_impl.cc |
diff --git a/chrome/browser/chromeos/login/user_manager_impl.cc b/chrome/browser/chromeos/login/user_manager_impl.cc |
index 0fc5a6a8e2948e0c104499335807f98a84acc82f..543a2fbc1045e9d32d8d27043cac2573a0348389 100644 |
--- a/chrome/browser/chromeos/login/user_manager_impl.cc |
+++ b/chrome/browser/chromeos/login/user_manager_impl.cc |
@@ -35,6 +35,7 @@ |
#include "chrome/browser/chromeos/policy/device_local_account.h" |
#include "chrome/browser/chromeos/session_length_limiter.h" |
#include "chrome/browser/chromeos/settings/cros_settings_names.h" |
+#include "chrome/browser/managed_mode/managed_user_service.h" |
#include "chrome/browser/policy/browser_policy_connector.h" |
#include "chrome/browser/prefs/scoped_user_pref_update.h" |
#include "chrome/browser/profiles/profile_manager.h" |
@@ -205,6 +206,7 @@ UserManagerImpl::UserManagerImpl() |
is_current_user_new_(false), |
is_current_user_ephemeral_regular_user_(false), |
ephemeral_users_enabled_(false), |
+ locally_managed_users_enabled_by_policy_(false), |
merge_session_state_(MERGE_STATUS_NOT_STARTED), |
observed_sync_service_(NULL), |
user_image_manager_(new UserImageManagerImpl) { |
@@ -215,6 +217,10 @@ UserManagerImpl::UserManagerImpl() |
registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED, |
content::NotificationService::AllSources()); |
RetrieveTrustedDevicePolicies(); |
+ cros_settings_->AddSettingsObserver(kAccountsPrefDeviceLocalAccounts, |
+ this); |
+ cros_settings_->AddSettingsObserver(kAccountsPrefSupervisedUsersEnabled, |
+ this); |
UpdateLoginState(); |
} |
@@ -237,6 +243,9 @@ void UserManagerImpl::Shutdown() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
cros_settings_->RemoveSettingsObserver(kAccountsPrefDeviceLocalAccounts, |
this); |
+ cros_settings_->RemoveSettingsObserver( |
+ kAccountsPrefSupervisedUsersEnabled, |
+ this); |
// Stop the session length limiter. |
session_length_limiter_.reset(); |
@@ -713,11 +722,14 @@ void UserManagerImpl::Observe(int type, |
} |
} |
break; |
- case chrome::NOTIFICATION_SYSTEM_SETTING_CHANGED: |
- DCHECK_EQ(*content::Details<const std::string>(details).ptr(), |
- kAccountsPrefDeviceLocalAccounts); |
+ case chrome::NOTIFICATION_SYSTEM_SETTING_CHANGED: { |
+ std::string changed_setting = |
+ *content::Details<const std::string>(details).ptr(); |
+ DCHECK(changed_setting == kAccountsPrefDeviceLocalAccounts || |
+ changed_setting == kAccountsPrefSupervisedUsersEnabled); |
RetrieveTrustedDevicePolicies(); |
break; |
+ } |
default: |
NOTREACHED(); |
} |
@@ -1010,6 +1022,7 @@ void UserManagerImpl::EnsureUsersLoaded() { |
void UserManagerImpl::RetrieveTrustedDevicePolicies() { |
ephemeral_users_enabled_ = false; |
+ locally_managed_users_enabled_by_policy_ = false; |
owner_email_ = ""; |
// Schedule a callback if device policy has not yet been verified. |
@@ -1021,6 +1034,8 @@ void UserManagerImpl::RetrieveTrustedDevicePolicies() { |
cros_settings_->GetBoolean(kAccountsPrefEphemeralUsersEnabled, |
&ephemeral_users_enabled_); |
+ cros_settings_->GetBoolean(kAccountsPrefSupervisedUsersEnabled, |
+ &locally_managed_users_enabled_by_policy_); |
cros_settings_->GetString(kDeviceOwner, &owner_email_); |
EnsureUsersLoaded(); |
@@ -1052,9 +1067,6 @@ void UserManagerImpl::RetrieveTrustedDevicePolicies() { |
if (changed) |
NotifyUserListChanged(); |
- |
- cros_settings_->AddSettingsObserver(kAccountsPrefDeviceLocalAccounts, |
- this); |
} |
bool UserManagerImpl::AreEphemeralUsersEnabled() const { |
@@ -1586,6 +1598,12 @@ void UserManagerImpl::SetAppModeChromeClientOAuthInfo( |
chrome_client_secret_ = chrome_client_secret; |
} |
+bool UserManagerImpl::AreLocallyManagedUsersAllowed() const { |
+ return ManagedUserService::AreManagedUsersEnabled() && |
+ (locally_managed_users_enabled_by_policy_ || |
+ !g_browser_process->browser_policy_connector()->IsEnterpriseManaged()); |
+} |
+ |
UserFlow* UserManagerImpl::GetDefaultUserFlow() const { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
if (!default_flow_.get()) |