Index: chrome/browser/chromeos/cros_settings_provider_user.cc |
diff --git a/chrome/browser/chromeos/cros_settings_provider_user.cc b/chrome/browser/chromeos/cros_settings_provider_user.cc |
index 29b2b222caee080c11b4a747d714c5d0708e3a74..f9bdfccad6137005820d573ce7f5564ad6a38159 100644 |
--- a/chrome/browser/chromeos/cros_settings_provider_user.cc |
+++ b/chrome/browser/chromeos/cros_settings_provider_user.cc |
@@ -7,11 +7,13 @@ |
#include "base/logging.h" |
#include "base/string_util.h" |
#include "base/values.h" |
+#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chromeos/cros/cros_library.h" |
#include "chrome/browser/chromeos/cros/login_library.h" |
#include "chrome/browser/chromeos/cros_settings.h" |
#include "chrome/browser/chromeos/cros_settings_names.h" |
#include "chrome/browser/chromeos/login/user_manager.h" |
+#include "chrome/browser/prefs/pref_service.h" |
namespace { |
@@ -22,19 +24,22 @@ Value* CreateSettingsBooleanValue(bool value, bool managed) { |
return dict; |
} |
+void UpdateCache(const char* name, bool value) { |
+ PrefService* prefs = g_browser_process->local_state(); |
+ prefs->SetBoolean(name, value); |
+ prefs->ScheduleSavePersistentPrefs(); |
+} |
+ |
} // namespace |
namespace chromeos { |
-UserCrosSettingsProvider::UserCrosSettingsProvider() |
- : cache_(new DictionaryValue) { |
+UserCrosSettingsProvider::UserCrosSettingsProvider() { |
current_user_is_owner_ = UserManager::Get()->current_user_is_owner(); |
- StartFetchingBoolSetting(kAccountsPrefAllowBWSI, true); |
- StartFetchingBoolSetting(kAccountsPrefAllowGuest, true); |
- StartFetchingBoolSetting(kAccountsPrefShowUserNamesOnSignIn, true); |
- |
- LoadUserWhitelist(); |
+ StartFetchingBoolSetting(kAccountsPrefAllowBWSI); |
+ StartFetchingBoolSetting(kAccountsPrefAllowGuest); |
+ StartFetchingBoolSetting(kAccountsPrefShowUserNamesOnSignIn); |
} |
UserCrosSettingsProvider::~UserCrosSettingsProvider() { |
@@ -42,16 +47,40 @@ UserCrosSettingsProvider::~UserCrosSettingsProvider() { |
SignedSettingsHelper::Get()->CancelCallback(this); |
} |
+void UserCrosSettingsProvider::RegisterPrefs(PrefService* local_state) { |
+ // Cached signed settings values |
+ local_state->RegisterBooleanPref(kAccountsPrefAllowBWSI, true); |
+ local_state->RegisterBooleanPref(kAccountsPrefAllowGuest, true); |
+ local_state->RegisterBooleanPref(kAccountsPrefShowUserNamesOnSignIn, true); |
+ local_state->RegisterListPref(kAccountsPrefUsers); |
+} |
+ |
+bool UserCrosSettingsProvider::cached_allow_bwsi() { |
+ return g_browser_process->local_state()->GetBoolean(kAccountsPrefAllowBWSI); |
+} |
+ |
+bool UserCrosSettingsProvider::cached_allow_guest() { |
+ return g_browser_process->local_state()->GetBoolean(kAccountsPrefAllowGuest); |
+} |
+ |
+bool UserCrosSettingsProvider::cached_show_users_on_signin() { |
+ return g_browser_process->local_state()->GetBoolean( |
+ kAccountsPrefShowUserNamesOnSignIn); |
+} |
+ |
+const ListValue* UserCrosSettingsProvider::cached_whitelist() { |
+ return g_browser_process->local_state()->GetList(kAccountsPrefUsers); |
+} |
+ |
void UserCrosSettingsProvider::Set(const std::string& path, Value* in_value) { |
if (path == kAccountsPrefAllowBWSI || |
path == kAccountsPrefAllowGuest || |
path == kAccountsPrefShowUserNamesOnSignIn) { |
bool bool_value = false; |
if (in_value->GetAsBoolean(&bool_value)) { |
- cache_->Set(path, in_value); |
- |
std::string value = bool_value ? "true" : "false"; |
SignedSettingsHelper::Get()->StartStorePropertyOp(path, value, this); |
+ UpdateCache(path.c_str(), bool_value); |
LOG(INFO) << "Set cros setting " << path << "=" << value; |
} |
@@ -65,9 +94,14 @@ void UserCrosSettingsProvider::Set(const std::string& path, Value* in_value) { |
bool UserCrosSettingsProvider::Get(const std::string& path, |
Value** out_value) const { |
- Value* value = NULL; |
- if (cache_->Get(path, &value) && value) { |
- *out_value = value->DeepCopy(); |
+ if (path == kAccountsPrefAllowBWSI || |
+ path == kAccountsPrefAllowGuest || |
+ path == kAccountsPrefShowUserNamesOnSignIn) { |
+ *out_value = Value::CreateBooleanValue( |
+ g_browser_process->local_state()->GetBoolean(path.c_str())); |
+ return true; |
+ } else if (path == kAccountsPrefUsers) { |
+ *out_value = GetUserWhitelist(); |
return true; |
} |
@@ -84,7 +118,7 @@ void UserCrosSettingsProvider::OnWhitelistCompleted(bool success, |
// Reload the whitelist on settings op failure. |
if (!success) |
- LoadUserWhitelist(); |
+ CrosSettings::Get()->FireObservers(kAccountsPrefUsers); |
} |
void UserCrosSettingsProvider::OnUnwhitelistCompleted(bool success, |
@@ -93,7 +127,7 @@ void UserCrosSettingsProvider::OnUnwhitelistCompleted(bool success, |
// Reload the whitelist on settings op failure. |
if (!success) |
- LoadUserWhitelist(); |
+ CrosSettings::Get()->FireObservers(kAccountsPrefUsers); |
} |
void UserCrosSettingsProvider::OnStorePropertyCompleted( |
@@ -115,33 +149,36 @@ void UserCrosSettingsProvider::OnRetrievePropertyCompleted( |
LOG(INFO) << "Retrieved cros setting " << name << "=" << value; |
- bool bool_value = value == "true" ? true : false; |
- cache_->Set(name, |
- CreateSettingsBooleanValue(bool_value, !current_user_is_owner_)); |
+ UpdateCache(name.c_str(), value == "true" ? true : false); |
CrosSettings::Get()->FireObservers(name.c_str()); |
} |
void UserCrosSettingsProvider::WhitelistUser(const std::string& email) { |
SignedSettingsHelper::Get()->StartWhitelistOp(email, true, this); |
+ |
+ PrefService* prefs = g_browser_process->local_state(); |
+ ListValue* cached_whitelist = prefs->GetMutableList(kAccountsPrefUsers); |
+ cached_whitelist->Append(Value::CreateStringValue(email)); |
+ prefs->ScheduleSavePersistentPrefs(); |
} |
void UserCrosSettingsProvider::UnwhitelistUser(const std::string& email) { |
SignedSettingsHelper::Get()->StartWhitelistOp(email, false, this); |
+ |
+ PrefService* prefs = g_browser_process->local_state(); |
+ ListValue* cached_whitelist = prefs->GetMutableList(kAccountsPrefUsers); |
+ StringValue email_value(email); |
+ if (cached_whitelist->Remove(email_value) != -1) |
+ prefs->ScheduleSavePersistentPrefs(); |
} |
void UserCrosSettingsProvider::StartFetchingBoolSetting( |
- const std::string& name, |
- bool default_value) { |
- if (!cache_->HasKey(name)) { |
- cache_->Set(name, |
- CreateSettingsBooleanValue(default_value, !current_user_is_owner_)); |
- } |
- |
+ const std::string& name) { |
if (CrosLibrary::Get()->EnsureLoaded()) |
SignedSettingsHelper::Get()->StartRetrieveProperty(name, this); |
} |
-void UserCrosSettingsProvider::LoadUserWhitelist() { |
+ListValue* UserCrosSettingsProvider::GetUserWhitelist() const { |
ListValue* user_list = new ListValue; |
std::vector<std::string> whitelist; |
@@ -150,6 +187,10 @@ void UserCrosSettingsProvider::LoadUserWhitelist() { |
&whitelist)) { |
LOG(WARNING) << "Failed to retrieve user whitelist."; |
} else { |
+ PrefService* prefs = g_browser_process->local_state(); |
+ ListValue* cached_whitelist = prefs->GetMutableList(kAccountsPrefUsers); |
+ cached_whitelist->Clear(); |
+ |
const UserManager::User& current_user = |
UserManager::Get()->logged_in_user(); |
for (size_t i = 0; i < whitelist.size(); ++i) { |
@@ -162,11 +203,13 @@ void UserCrosSettingsProvider::LoadUserWhitelist() { |
current_user_is_owner_ && email == current_user.email()); |
user_list->Append(user); |
+ cached_whitelist->Append(Value::CreateStringValue(email)); |
} |
+ |
+ prefs->ScheduleSavePersistentPrefs(); |
} |
- cache_->Set(kAccountsPrefUsers, user_list); |
- CrosSettings::Get()->FireObservers(kAccountsPrefUsers); |
+ return user_list; |
} |
} // namespace chromeos |