| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "base/prefs/pref_service.h" | 5 #include "base/prefs/pref_service.h" |
| 6 #include "chrome/browser/browser_process.h" | 6 #include "chrome/browser/browser_process.h" |
| 7 #include "chrome/browser/extensions/api/settings_private/prefs_util.h" | 7 #include "chrome/browser/extensions/api/settings_private/prefs_util.h" |
| 8 #include "chrome/browser/extensions/chrome_extension_function.h" | 8 #include "chrome/browser/extensions/chrome_extension_function.h" |
| 9 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" |
| 10 #include "chrome/common/pref_names.h" | 10 #include "chrome/common/pref_names.h" |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 } else if (!IsPrefUserModifiable(name)) { | 169 } else if (!IsPrefUserModifiable(name)) { |
| 170 pref_object->policy_source = | 170 pref_object->policy_source = |
| 171 api::settings_private::PolicySource::POLICY_SOURCE_USER; | 171 api::settings_private::PolicySource::POLICY_SOURCE_USER; |
| 172 pref_object->policy_enforcement = | 172 pref_object->policy_enforcement = |
| 173 api::settings_private::PolicyEnforcement::POLICY_ENFORCEMENT_ENFORCED; | 173 api::settings_private::PolicyEnforcement::POLICY_ENFORCEMENT_ENFORCED; |
| 174 } | 174 } |
| 175 | 175 |
| 176 return pref_object.Pass(); | 176 return pref_object.Pass(); |
| 177 } | 177 } |
| 178 | 178 |
| 179 bool PrefsUtil::SetPref(const std::string& pref_name, | 179 PrefsUtil::SetPrefResult PrefsUtil::SetPref(const std::string& pref_name, |
| 180 const base::Value* value) { | 180 const base::Value* value) { |
| 181 if (IsCrosSetting(pref_name)) | 181 if (IsCrosSetting(pref_name)) |
| 182 return SetCrosSettingsPref(pref_name, value); | 182 return SetCrosSettingsPref(pref_name, value); |
| 183 | 183 |
| 184 PrefService* pref_service = FindServiceForPref(pref_name); | 184 PrefService* pref_service = FindServiceForPref(pref_name); |
| 185 | 185 |
| 186 if (!IsPrefUserModifiable(pref_name)) | 186 if (!IsPrefUserModifiable(pref_name)) |
| 187 return false; | 187 return PREF_NOT_MODIFIABLE; |
| 188 | 188 |
| 189 const PrefService::Preference* pref = | 189 const PrefService::Preference* pref = |
| 190 pref_service->FindPreference(pref_name); | 190 pref_service->FindPreference(pref_name); |
| 191 if (!pref) | 191 if (!pref) |
| 192 return false; | 192 return PREF_NOT_FOUND; |
| 193 | 193 |
| 194 DCHECK_EQ(pref->GetType(), value->GetType()); | 194 DCHECK_EQ(pref->GetType(), value->GetType()); |
| 195 | 195 |
| 196 switch (pref->GetType()) { | 196 switch (pref->GetType()) { |
| 197 case base::Value::TYPE_BOOLEAN: | 197 case base::Value::TYPE_BOOLEAN: |
| 198 case base::Value::TYPE_DOUBLE: | 198 case base::Value::TYPE_DOUBLE: |
| 199 case base::Value::TYPE_LIST: | 199 case base::Value::TYPE_LIST: |
| 200 pref_service->Set(pref_name, *value); | 200 pref_service->Set(pref_name, *value); |
| 201 break; | 201 break; |
| 202 case base::Value::TYPE_INTEGER: { | 202 case base::Value::TYPE_INTEGER: { |
| 203 // In JS all numbers are doubles. | 203 // In JS all numbers are doubles. |
| 204 double double_value; | 204 double double_value; |
| 205 if (!value->GetAsDouble(&double_value)) | 205 if (!value->GetAsDouble(&double_value)) |
| 206 return false; | 206 return PREF_TYPE_MISMATCH; |
| 207 | 207 |
| 208 pref_service->SetInteger(pref_name, static_cast<int>(double_value)); | 208 pref_service->SetInteger(pref_name, static_cast<int>(double_value)); |
| 209 break; | 209 break; |
| 210 } | 210 } |
| 211 case base::Value::TYPE_STRING: { | 211 case base::Value::TYPE_STRING: { |
| 212 std::string string_value; | 212 std::string string_value; |
| 213 if (!value->GetAsString(&string_value)) | 213 if (!value->GetAsString(&string_value)) |
| 214 return false; | 214 return PREF_TYPE_MISMATCH; |
| 215 | 215 |
| 216 if (IsPrefTypeURL(pref_name)) { | 216 if (IsPrefTypeURL(pref_name)) { |
| 217 GURL fixed = url_formatter::FixupURL(string_value, std::string()); | 217 GURL fixed = url_formatter::FixupURL(string_value, std::string()); |
| 218 string_value = fixed.spec(); | 218 string_value = fixed.spec(); |
| 219 } | 219 } |
| 220 | 220 |
| 221 pref_service->SetString(pref_name, string_value); | 221 pref_service->SetString(pref_name, string_value); |
| 222 break; | 222 break; |
| 223 } | 223 } |
| 224 default: | 224 default: |
| 225 return false; | 225 return PREF_TYPE_UNSUPPORTED; |
| 226 } | 226 } |
| 227 | 227 |
| 228 // TODO(orenb): Process setting metrics here and in the CrOS setting method | 228 // TODO(orenb): Process setting metrics here and in the CrOS setting method |
| 229 // too (like "ProcessUserMetric" in CoreOptionsHandler). | 229 // too (like "ProcessUserMetric" in CoreOptionsHandler). |
| 230 return true; | 230 return SUCCESS; |
| 231 } | 231 } |
| 232 | 232 |
| 233 bool PrefsUtil::SetCrosSettingsPref(const std::string& pref_name, | 233 PrefsUtil::SetPrefResult PrefsUtil::SetCrosSettingsPref( |
| 234 const base::Value* value) { | 234 const std::string& pref_name, const base::Value* value) { |
| 235 #if defined(OS_CHROMEOS) | 235 #if defined(OS_CHROMEOS) |
| 236 chromeos::OwnerSettingsServiceChromeOS* service = | 236 chromeos::OwnerSettingsServiceChromeOS* service = |
| 237 chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( | 237 chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( |
| 238 profile_); | 238 profile_); |
| 239 | 239 |
| 240 // Returns false if not the owner, for settings requiring owner. | 240 // Check if setting requires owner. |
| 241 if (service && service->HandlesSetting(pref_name)) | 241 if (service && service->HandlesSetting(pref_name)) { |
| 242 return service->Set(pref_name, *value); | 242 if (service->Set(pref_name, *value)) |
| 243 return SUCCESS; |
| 244 return PREF_NOT_MODIFIABLE; |
| 245 } |
| 243 | 246 |
| 244 chromeos::CrosSettings::Get()->Set(pref_name, *value); | 247 chromeos::CrosSettings::Get()->Set(pref_name, *value); |
| 245 return true; | 248 return SUCCEESS; |
| 246 #else | 249 #else |
| 247 return false; | 250 return PREF_NOT_FOUND; |
| 248 #endif | 251 #endif |
| 249 } | 252 } |
| 250 | 253 |
| 251 bool PrefsUtil::AppendToListCrosSetting(const std::string& pref_name, | 254 bool PrefsUtil::AppendToListCrosSetting(const std::string& pref_name, |
| 252 const base::Value& value) { | 255 const base::Value& value) { |
| 253 #if defined(OS_CHROMEOS) | 256 #if defined(OS_CHROMEOS) |
| 254 chromeos::OwnerSettingsServiceChromeOS* service = | 257 chromeos::OwnerSettingsServiceChromeOS* service = |
| 255 chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( | 258 chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( |
| 256 profile_); | 259 profile_); |
| 257 | 260 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 | 346 |
| 344 bool PrefsUtil::IsCrosSetting(const std::string& pref_name) { | 347 bool PrefsUtil::IsCrosSetting(const std::string& pref_name) { |
| 345 #if defined(OS_CHROMEOS) | 348 #if defined(OS_CHROMEOS) |
| 346 return CrosSettings::Get()->IsCrosSettings(pref_name); | 349 return CrosSettings::Get()->IsCrosSettings(pref_name); |
| 347 #else | 350 #else |
| 348 return false; | 351 return false; |
| 349 #endif | 352 #endif |
| 350 } | 353 } |
| 351 | 354 |
| 352 } // namespace extensions | 355 } // namespace extensions |
| OLD | NEW |