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

Unified Diff: chrome/browser/chromeos/cros_settings_provider_user.cc

Issue 3413021: Implement users options handling in login screen. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: for tfarina,dpolukhin,nkostylev #1 Created 10 years, 3 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/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

Powered by Google App Engine
This is Rietveld 408576698