| Index: chrome/browser/chromeos/login/supervised_user_manager_impl.cc
|
| diff --git a/chrome/browser/chromeos/login/supervised_user_manager_impl.cc b/chrome/browser/chromeos/login/supervised_user_manager_impl.cc
|
| index 72c02e616072dc2533ee540e5b844bc04133e0e8..3da81b7f3790b4f5a662e3709f5cf00ff49e394d 100644
|
| --- a/chrome/browser/chromeos/login/supervised_user_manager_impl.cc
|
| +++ b/chrome/browser/chromeos/login/supervised_user_manager_impl.cc
|
| @@ -74,6 +74,15 @@ const char kSupervisedUserPasswordSalt[] =
|
| const char kSupervisedUserPasswordRevision[] =
|
| "SupervisedUserPasswordRevision";
|
|
|
| +// A map from user id to flag indicating if password should be updated upon
|
| +// signin.
|
| +const char kSupervisedUserNeedPasswordUpdate[] =
|
| + "SupervisedUserNeedPasswordUpdate";
|
| +
|
| +// A map from user id to flag indicating if cryptohome does not have signature
|
| +// key.
|
| +const char kSupervisedUserIncompleteKey[] = "SupervisedUserHasIncompleteKey";
|
| +
|
| std::string LoadSyncToken(base::FilePath profile_dir) {
|
| std::string token;
|
| base::FilePath token_file =
|
| @@ -117,6 +126,9 @@ void SupervisedUserManager::RegisterPrefs(PrefRegistrySimple* registry) {
|
| registry->RegisterDictionaryPref(kSupervisedUserPasswordSchema);
|
| registry->RegisterDictionaryPref(kSupervisedUserPasswordSalt);
|
| registry->RegisterDictionaryPref(kSupervisedUserPasswordRevision);
|
| +
|
| + registry->RegisterDictionaryPref(kSupervisedUserNeedPasswordUpdate);
|
| + registry->RegisterDictionaryPref(kSupervisedUserIncompleteKey);
|
| }
|
|
|
| SupervisedUserManagerImpl::SupervisedUserManagerImpl(UserManagerImpl* owner)
|
| @@ -253,6 +265,12 @@ void SupervisedUserManagerImpl::GetPasswordInformation(
|
| if (GetUserIntegerValue(user_id, kSupervisedUserPasswordRevision, &value))
|
| result->SetIntegerWithoutPathExpansion(kPasswordRevision, value);
|
|
|
| + bool flag;
|
| + if (GetUserBooleanValue(user_id, kSupervisedUserNeedPasswordUpdate, &flag))
|
| + result->SetBooleanWithoutPathExpansion(kRequirePasswordUpdate, flag);
|
| + if (GetUserBooleanValue(user_id, kSupervisedUserIncompleteKey, &flag))
|
| + result->SetBooleanWithoutPathExpansion(kHasIncompleteKey, flag);
|
| +
|
| std::string salt;
|
| if (GetUserStringValue(user_id, kSupervisedUserPasswordSalt, &salt))
|
| result->SetStringWithoutPathExpansion(kSalt, salt);
|
| @@ -267,6 +285,14 @@ void SupervisedUserManagerImpl::SetPasswordInformation(
|
| if (password_info->GetIntegerWithoutPathExpansion(kPasswordRevision, &value))
|
| SetUserIntegerValue(user_id, kSupervisedUserPasswordRevision, value);
|
|
|
| + bool flag;
|
| + if (password_info->GetBooleanWithoutPathExpansion(kRequirePasswordUpdate,
|
| + &flag)) {
|
| + SetUserBooleanValue(user_id, kSupervisedUserNeedPasswordUpdate, flag);
|
| + }
|
| + if (password_info->GetBooleanWithoutPathExpansion(kHasIncompleteKey, &flag))
|
| + SetUserBooleanValue(user_id, kSupervisedUserIncompleteKey, flag);
|
| +
|
| std::string salt;
|
| if (password_info->GetStringWithoutPathExpansion(kSalt, &salt))
|
| SetUserStringValue(user_id, kSupervisedUserPasswordSalt, salt);
|
| @@ -291,6 +317,14 @@ bool SupervisedUserManagerImpl::GetUserIntegerValue(
|
| return dictionary->GetIntegerWithoutPathExpansion(user_id, out_value);
|
| }
|
|
|
| +bool SupervisedUserManagerImpl::GetUserBooleanValue(const std::string& user_id,
|
| + const char* key,
|
| + bool* out_value) const {
|
| + PrefService* local_state = g_browser_process->local_state();
|
| + const base::DictionaryValue* dictionary = local_state->GetDictionary(key);
|
| + return dictionary->GetBooleanWithoutPathExpansion(user_id, out_value);
|
| +}
|
| +
|
| void SupervisedUserManagerImpl::SetUserStringValue(
|
| const std::string& user_id,
|
| const char* key,
|
| @@ -309,6 +343,14 @@ void SupervisedUserManagerImpl::SetUserIntegerValue(
|
| update->SetIntegerWithoutPathExpansion(user_id, value);
|
| }
|
|
|
| +void SupervisedUserManagerImpl::SetUserBooleanValue(const std::string& user_id,
|
| + const char* key,
|
| + const bool value) {
|
| + PrefService* local_state = g_browser_process->local_state();
|
| + DictionaryPrefUpdate update(local_state, key);
|
| + update->SetBooleanWithoutPathExpansion(user_id, value);
|
| +}
|
| +
|
| const User* SupervisedUserManagerImpl::FindByDisplayName(
|
| const base::string16& display_name) const {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| @@ -412,6 +454,8 @@ void SupervisedUserManagerImpl::RemoveNonCryptohomeData(
|
| CleanPref(user_id, kSupervisedUserPasswordSalt);
|
| CleanPref(user_id, kSupervisedUserPasswordSchema);
|
| CleanPref(user_id, kSupervisedUserPasswordRevision);
|
| + CleanPref(user_id, kSupervisedUserNeedPasswordUpdate);
|
| + CleanPref(user_id, kSupervisedUserIncompleteKey);
|
| }
|
|
|
| void SupervisedUserManagerImpl::CleanPref(const std::string& user_id,
|
|
|