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