Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3963)

Unified Diff: chrome/browser/chromeos/login/user_manager_impl.cc

Issue 143873012: Add local state flag to force online login for a user (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compilation. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 1be67a3a26fd351b86e341cbbe0fd3cbf907c6ac..98680307021a96adaf0bbc433a8b394b683a7873 100644
--- a/chrome/browser/chromeos/login/user_manager_impl.cc
+++ b/chrome/browser/chromeos/login/user_manager_impl.cc
@@ -83,18 +83,22 @@ const char kPublicAccounts[] = "PublicAccounts";
const char kPublicAccountPendingDataRemoval[] =
"PublicAccountPendingDataRemoval";
-// A dictionary that maps usernames to the displayed name.
+// A dictionary that maps user IDs to the displayed name.
const char kUserDisplayName[] = "UserDisplayName";
-// A dictionary that maps usernames to the user's given name.
+// A dictionary that maps user IDs to the user's given name.
const char kUserGivenName[] = "UserGivenName";
-// A dictionary that maps usernames to the displayed (non-canonical) emails.
+// A dictionary that maps user IDs to the displayed (non-canonical) emails.
const char kUserDisplayEmail[] = "UserDisplayEmail";
-// A dictionary that maps usernames to OAuth token presence flag.
+// A dictionary that maps user IDs to OAuth token presence flag.
const char kUserOAuthTokenStatus[] = "OAuthTokenStatus";
+// A dictionary that maps user IDs to a flag indicating whether online
+// authentication against GAIA should be enforced during the next sign-in.
+const char kUserForceOnlineSignin[] = "UserForceOnlineSignin";
+
// A string pref containing the ID of the last user who logged in if it was
// a regular user or an empty string if it was another type of user (guest,
// kiosk, public account, etc.).
@@ -171,10 +175,11 @@ void UserManager::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterListPref(kPublicAccounts);
registry->RegisterStringPref(kPublicAccountPendingDataRemoval, "");
registry->RegisterStringPref(kLastLoggedInRegularUser, "");
- registry->RegisterDictionaryPref(kUserOAuthTokenStatus);
registry->RegisterDictionaryPref(kUserDisplayName);
registry->RegisterDictionaryPref(kUserGivenName);
registry->RegisterDictionaryPref(kUserDisplayEmail);
+ registry->RegisterDictionaryPref(kUserOAuthTokenStatus);
+ registry->RegisterDictionaryPref(kUserForceOnlineSignin);
SupervisedUserManager::RegisterPrefs(registry);
SessionLengthLimiter::RegisterPrefs(registry);
}
@@ -674,7 +679,7 @@ void UserManagerImpl::SaveUserOAuthStatus(
GetUserFlow(user_id)->HandleOAuthTokenStatusChange(oauth_token_status);
- // Do not update local store if data stored or cached outside the user's
+ // Do not update local state if data stored or cached outside the user's
// cryptohome is to be treated as ephemeral.
if (IsUserNonCryptohomeDataEphemeral(user_id))
return;
@@ -686,24 +691,19 @@ void UserManagerImpl::SaveUserOAuthStatus(
new base::FundamentalValue(static_cast<int>(oauth_token_status)));
}
-User::OAuthTokenStatus UserManagerImpl::LoadUserOAuthStatus(
- const std::string& user_id) const {
+void UserManagerImpl::SaveForceOnlineSignin(const std::string& user_id,
+ bool force_online_signin) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- PrefService* local_state = g_browser_process->local_state();
- const base::DictionaryValue* prefs_oauth_status =
- local_state->GetDictionary(kUserOAuthTokenStatus);
- int oauth_token_status = User::OAUTH_TOKEN_STATUS_UNKNOWN;
- if (prefs_oauth_status &&
- prefs_oauth_status->GetIntegerWithoutPathExpansion(
- user_id, &oauth_token_status)) {
- User::OAuthTokenStatus result =
- static_cast<User::OAuthTokenStatus>(oauth_token_status);
- if (result == User::OAUTH2_TOKEN_STATUS_INVALID)
- GetUserFlow(user_id)->HandleOAuthTokenStatusChange(result);
- return result;
- }
- return User::OAUTH_TOKEN_STATUS_UNKNOWN;
+ // Do not update local state if data stored or cached outside the user's
+ // cryptohome is to be treated as ephemeral.
+ if (IsUserNonCryptohomeDataEphemeral(user_id))
+ return;
+
+ DictionaryPrefUpdate force_online_update(g_browser_process->local_state(),
+ kUserForceOnlineSignin);
+ force_online_update->SetBooleanWithoutPathExpansion(user_id,
+ force_online_signin);
}
void UserManagerImpl::SaveUserDisplayName(const std::string& user_id,
@@ -713,7 +713,7 @@ void UserManagerImpl::SaveUserDisplayName(const std::string& user_id,
if (User* user = FindUserAndModify(user_id)) {
user->set_display_name(display_name);
- // Do not update local store if data stored or cached outside the user's
+ // Do not update local state if data stored or cached outside the user's
// cryptohome is to be treated as ephemeral.
if (!IsUserNonCryptohomeDataEphemeral(user_id)) {
PrefService* local_state = g_browser_process->local_state();
@@ -744,7 +744,7 @@ void UserManagerImpl::SaveUserDisplayEmail(const std::string& user_id,
user->set_display_email(display_email);
- // Do not update local store if data stored or cached outside the user's
+ // Do not update local state if data stored or cached outside the user's
// cryptohome is to be treated as ephemeral.
if (IsUserNonCryptohomeDataEphemeral(user_id))
return;
@@ -1139,6 +1139,7 @@ void UserManagerImpl::EnsureUsersLoaded() {
else
user = User::CreateRegularUser(*it);
user->set_oauth_token_status(LoadUserOAuthStatus(*it));
+ user->set_force_online_signin(LoadForceOnlineSignin(*it));
users_.push_back(user);
base::string16 display_name;
@@ -1446,6 +1447,40 @@ void UserManagerImpl::NotifyOnLogin() {
}
}
+User::OAuthTokenStatus UserManagerImpl::LoadUserOAuthStatus(
+ const std::string& user_id) const {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ PrefService* local_state = g_browser_process->local_state();
+ const base::DictionaryValue* prefs_oauth_status =
+ local_state->GetDictionary(kUserOAuthTokenStatus);
+ int oauth_token_status = User::OAUTH_TOKEN_STATUS_UNKNOWN;
+ if (prefs_oauth_status &&
+ prefs_oauth_status->GetIntegerWithoutPathExpansion(
+ user_id, &oauth_token_status)) {
+ User::OAuthTokenStatus result =
+ static_cast<User::OAuthTokenStatus>(oauth_token_status);
+ if (result == User::OAUTH2_TOKEN_STATUS_INVALID)
+ GetUserFlow(user_id)->HandleOAuthTokenStatusChange(result);
+ return result;
+ }
+ return User::OAUTH_TOKEN_STATUS_UNKNOWN;
+}
+
+bool UserManagerImpl::LoadForceOnlineSignin(const std::string& user_id) const {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ PrefService* local_state = g_browser_process->local_state();
+ const base::DictionaryValue* prefs_force_online =
+ local_state->GetDictionary(kUserForceOnlineSignin);
+ bool force_online_signin = false;
+ if (prefs_force_online) {
+ prefs_force_online->GetBooleanWithoutPathExpansion(user_id,
+ &force_online_signin);
+ }
+ return force_online_signin;
+}
+
void UserManagerImpl::UpdateOwnership() {
bool is_owner = DeviceSettingsService::Get()->HasPrivateOwnerKey();
VLOG(1) << "Current user " << (is_owner ? "is owner" : "is not owner");
@@ -1458,11 +1493,6 @@ void UserManagerImpl::RemoveNonCryptohomeData(const std::string& user_id) {
GetUserImageManager(user_id)->DeleteUserImage();
PrefService* prefs = g_browser_process->local_state();
- DictionaryPrefUpdate prefs_oauth_update(prefs, kUserOAuthTokenStatus);
- int oauth_status;
- prefs_oauth_update->GetIntegerWithoutPathExpansion(user_id, &oauth_status);
- prefs_oauth_update->RemoveWithoutPathExpansion(user_id, NULL);
-
DictionaryPrefUpdate prefs_display_name_update(prefs, kUserDisplayName);
prefs_display_name_update->RemoveWithoutPathExpansion(user_id, NULL);
@@ -1472,6 +1502,12 @@ void UserManagerImpl::RemoveNonCryptohomeData(const std::string& user_id) {
DictionaryPrefUpdate prefs_display_email_update(prefs, kUserDisplayEmail);
prefs_display_email_update->RemoveWithoutPathExpansion(user_id, NULL);
+ DictionaryPrefUpdate prefs_oauth_update(prefs, kUserOAuthTokenStatus);
+ prefs_oauth_update->RemoveWithoutPathExpansion(user_id, NULL);
+
+ DictionaryPrefUpdate prefs_force_online_update(prefs, kUserForceOnlineSignin);
+ prefs_force_online_update->RemoveWithoutPathExpansion(user_id, NULL);
+
supervised_user_manager_->RemoveNonCryptohomeData(user_id);
multi_profile_user_controller_->RemoveCachedValues(user_id);
« no previous file with comments | « chrome/browser/chromeos/login/user_manager_impl.h ('k') | chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698