| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/cros_settings.h" | 5 #include "chrome/browser/chromeos/cros_settings.h" |
| 6 | 6 |
| 7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| 11 #include "chrome/browser/chromeos/user_cros_settings_provider.h" | 11 #include "chrome/browser/chromeos/device_settings_provider.h" |
| 12 #include "chrome/browser/ui/webui/options/chromeos/system_settings_provider.h" | 12 #include "chrome/browser/ui/webui/options/chromeos/system_settings_provider.h" |
| 13 #include "chrome/common/chrome_notification_types.h" | 13 #include "chrome/common/chrome_notification_types.h" |
| 14 #include "content/public/browser/notification_details.h" | 14 #include "content/public/browser/notification_details.h" |
| 15 #include "content/public/browser/notification_source.h" | 15 #include "content/public/browser/notification_source.h" |
| 16 #include "content/public/browser/notification_types.h" | 16 #include "content/public/browser/notification_types.h" |
| 17 | 17 |
| 18 namespace chromeos { | 18 namespace chromeos { |
| 19 | 19 |
| 20 static base::LazyInstance<CrosSettings> g_cros_settings = | 20 static base::LazyInstance<CrosSettings> g_cros_settings = |
| 21 LAZY_INSTANCE_INITIALIZER; | 21 LAZY_INSTANCE_INITIALIZER; |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 void CrosSettings::SetString(const std::string& path, | 76 void CrosSettings::SetString(const std::string& path, |
| 77 const std::string& in_value) { | 77 const std::string& in_value) { |
| 78 DCHECK(CalledOnValidThread()); | 78 DCHECK(CalledOnValidThread()); |
| 79 base::StringValue value(in_value); | 79 base::StringValue value(in_value); |
| 80 Set(path, value); | 80 Set(path, value); |
| 81 } | 81 } |
| 82 | 82 |
| 83 void CrosSettings::AppendToList(const std::string& path, | 83 void CrosSettings::AppendToList(const std::string& path, |
| 84 const base::Value* value) { | 84 const base::Value* value) { |
| 85 DCHECK(CalledOnValidThread()); | 85 DCHECK(CalledOnValidThread()); |
| 86 const base::Value* old_value = GetPref(path); | 86 base::Value* old_value = GetPref(path); |
| 87 scoped_ptr<base::Value> new_value( | 87 scoped_ptr<base::Value> new_value( |
| 88 old_value ? old_value->DeepCopy() : new base::ListValue()); | 88 old_value ? old_value : new base::ListValue()); |
| 89 static_cast<base::ListValue*>(new_value.get())->Append(value->DeepCopy()); | 89 static_cast<base::ListValue*>(new_value.get())->Append(value->DeepCopy()); |
| 90 Set(path, *new_value); | 90 Set(path, *new_value); |
| 91 } | 91 } |
| 92 | 92 |
| 93 void CrosSettings::RemoveFromList(const std::string& path, | 93 void CrosSettings::RemoveFromList(const std::string& path, |
| 94 const base::Value* value) { | 94 const base::Value* value) { |
| 95 DCHECK(CalledOnValidThread()); | 95 DCHECK(CalledOnValidThread()); |
| 96 const base::Value* old_value = GetPref(path); | 96 base::Value* old_value = GetPref(path); |
| 97 scoped_ptr<base::Value> new_value( | 97 scoped_ptr<base::Value> new_value( |
| 98 old_value ? old_value->DeepCopy() : new base::ListValue()); | 98 old_value ? old_value : new base::ListValue()); |
| 99 static_cast<base::ListValue*>(new_value.get())->Remove(*value, NULL); | 99 static_cast<base::ListValue*>(new_value.get())->Remove(*value, NULL); |
| 100 Set(path, *new_value); | 100 Set(path, *new_value); |
| 101 } | 101 } |
| 102 | 102 |
| 103 bool CrosSettings::FindEmailInList(const std::string& path, | 103 bool CrosSettings::FindEmailInList(const std::string& path, |
| 104 const std::string& email) const { | 104 const std::string& email) const { |
| 105 DCHECK(CalledOnValidThread()); | 105 DCHECK(CalledOnValidThread()); |
| 106 base::StringValue email_value(email); | 106 base::StringValue email_value(email); |
| 107 const base::ListValue* value = | 107 scoped_ptr<base::ListValue> value( |
| 108 static_cast<const base::ListValue*>(GetPref(path)); | 108 static_cast<base::ListValue*>(GetPref(path))); |
| 109 if (value) { | 109 if (value.get()) { |
| 110 if (value->Find(email_value) != value->end()) | 110 if (value->Find(email_value) != value->end()) |
| 111 return true; | 111 return true; |
| 112 std::string::size_type at_pos = email.find('@'); | 112 std::string::size_type at_pos = email.find('@'); |
| 113 if (at_pos != std::string::npos) { | 113 if (at_pos != std::string::npos) { |
| 114 base::StringValue wildcarded_value( | 114 base::StringValue wildcarded_value( |
| 115 std::string("*").append(email.substr(at_pos))); | 115 std::string("*").append(email.substr(at_pos))); |
| 116 return value->Find(wildcarded_value) != value->end(); | 116 return value->Find(wildcarded_value) != value->end(); |
| 117 } | 117 } |
| 118 } | 118 } |
| 119 return false; | 119 return false; |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 | 188 |
| 189 CrosSettingsProvider* CrosSettings::GetProvider( | 189 CrosSettingsProvider* CrosSettings::GetProvider( |
| 190 const std::string& path) const { | 190 const std::string& path) const { |
| 191 for (size_t i = 0; i < providers_.size(); ++i) { | 191 for (size_t i = 0; i < providers_.size(); ++i) { |
| 192 if (providers_[i]->HandlesSetting(path)) | 192 if (providers_[i]->HandlesSetting(path)) |
| 193 return providers_[i]; | 193 return providers_[i]; |
| 194 } | 194 } |
| 195 return NULL; | 195 return NULL; |
| 196 } | 196 } |
| 197 | 197 |
| 198 const base::Value* CrosSettings::GetPref(const std::string& path) const { | 198 void CrosSettings::ReloadProviders() const { |
| 199 for (size_t i = 0; i < providers_.size(); ++i) { |
| 200 providers_[i]->Reload(); |
| 201 } |
| 202 } |
| 203 |
| 204 base::Value* CrosSettings::GetPref(const std::string& path) const { |
| 199 DCHECK(CalledOnValidThread()); | 205 DCHECK(CalledOnValidThread()); |
| 200 CrosSettingsProvider* provider = GetProvider(path); | 206 CrosSettingsProvider* provider = GetProvider(path); |
| 201 if (provider) | 207 if (provider) |
| 202 return provider->Get(path); | 208 return provider->Get(path); |
| 203 NOTREACHED() << path << " preference was not found in the signed settings."; | 209 NOTREACHED() << path << " preference was not found in the signed settings."; |
| 204 return NULL; | 210 return NULL; |
| 205 } | 211 } |
| 206 | 212 |
| 207 bool CrosSettings::GetTrusted(const std::string& path, | 213 bool CrosSettings::GetTrusted(const std::string& path, |
| 208 const base::Closure& callback) const { | 214 const base::Closure& callback) const { |
| 209 DCHECK(CalledOnValidThread()); | 215 DCHECK(CalledOnValidThread()); |
| 210 CrosSettingsProvider* provider = GetProvider(path); | 216 CrosSettingsProvider* provider = GetProvider(path); |
| 211 if (provider) | 217 if (provider) |
| 212 return provider->GetTrusted(path, callback); | 218 return provider->GetTrusted(path, callback); |
| 213 NOTREACHED() << "CrosSettings::GetTrusted called for unknown pref : " << path; | 219 NOTREACHED() << "CrosSettings::GetTrusted called for unknown pref : " << path; |
| 214 return false; | 220 return false; |
| 215 } | 221 } |
| 216 | 222 |
| 217 bool CrosSettings::GetBoolean(const std::string& path, | 223 bool CrosSettings::GetBoolean(const std::string& path, |
| 218 bool* bool_value) const { | 224 bool* bool_value) const { |
| 219 DCHECK(CalledOnValidThread()); | 225 DCHECK(CalledOnValidThread()); |
| 220 const base::Value* value = GetPref(path); | 226 scoped_ptr<base::Value> value(GetPref(path)); |
| 221 if (value) | 227 if (value.get()) |
| 222 return value->GetAsBoolean(bool_value); | 228 return value->GetAsBoolean(bool_value); |
| 223 return false; | 229 return false; |
| 224 } | 230 } |
| 225 | 231 |
| 226 bool CrosSettings::GetInteger(const std::string& path, | 232 bool CrosSettings::GetInteger(const std::string& path, |
| 227 int* out_value) const { | 233 int* out_value) const { |
| 228 DCHECK(CalledOnValidThread()); | 234 DCHECK(CalledOnValidThread()); |
| 229 const base::Value* value = GetPref(path); | 235 scoped_ptr<base::Value> value(GetPref(path)); |
| 230 if (value) | 236 if (value.get()) |
| 231 return value->GetAsInteger(out_value); | 237 return value->GetAsInteger(out_value); |
| 232 return false; | 238 return false; |
| 233 } | 239 } |
| 234 | 240 |
| 235 bool CrosSettings::GetDouble(const std::string& path, | 241 bool CrosSettings::GetDouble(const std::string& path, |
| 236 double* out_value) const { | 242 double* out_value) const { |
| 237 DCHECK(CalledOnValidThread()); | 243 DCHECK(CalledOnValidThread()); |
| 238 const base::Value* value = GetPref(path); | 244 scoped_ptr<base::Value> value(GetPref(path)); |
| 239 if (value) | 245 if (value.get()) |
| 240 return value->GetAsDouble(out_value); | 246 return value->GetAsDouble(out_value); |
| 241 return false; | 247 return false; |
| 242 } | 248 } |
| 243 | 249 |
| 244 bool CrosSettings::GetString(const std::string& path, | 250 bool CrosSettings::GetString(const std::string& path, |
| 245 std::string* out_value) const { | 251 std::string* out_value) const { |
| 246 DCHECK(CalledOnValidThread()); | 252 DCHECK(CalledOnValidThread()); |
| 247 const base::Value* value = GetPref(path); | 253 scoped_ptr<base::Value> value(GetPref(path)); |
| 248 if (value) | 254 if (value.get()) |
| 249 return value->GetAsString(out_value); | 255 return value->GetAsString(out_value); |
| 250 return false; | 256 return false; |
| 251 } | 257 } |
| 252 | 258 |
| 253 bool CrosSettings::GetList(const std::string& path, | 259 bool CrosSettings::GetList(const std::string& path, |
| 254 const base::ListValue** out_value) const { | 260 const base::ListValue** out_value) const { |
| 255 DCHECK(CalledOnValidThread()); | 261 DCHECK(CalledOnValidThread()); |
| 256 const base::Value* value = GetPref(path); | 262 scoped_ptr<base::Value> value(GetPref(path)); |
| 257 if (value) | 263 if (value.get()) |
| 258 return value->GetAsList(out_value); | 264 return value->GetAsList(out_value); |
| 259 return false; | 265 return false; |
| 260 } | 266 } |
| 261 | 267 |
| 262 CrosSettings::CrosSettings() { | 268 CrosSettings::CrosSettings() { |
| 263 AddSettingsProvider(new SystemSettingsProvider()); | 269 AddSettingsProvider(new SystemSettingsProvider()); |
| 264 AddSettingsProvider(new UserCrosSettingsProvider()); | 270 AddSettingsProvider(new DeviceSettingsProvider()); |
| 265 } | 271 } |
| 266 | 272 |
| 267 CrosSettings::~CrosSettings() { | 273 CrosSettings::~CrosSettings() { |
| 268 STLDeleteElements(&providers_); | 274 STLDeleteElements(&providers_); |
| 269 STLDeleteValues(&settings_observers_); | 275 STLDeleteValues(&settings_observers_); |
| 270 } | 276 } |
| 271 | 277 |
| 272 } // namespace chromeos | 278 } // namespace chromeos |
| OLD | NEW |