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