Chromium Code Reviews| 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 "chrome/browser/extensions/api/settings_private/prefs_util.h" | 5 #include "chrome/browser/extensions/api/settings_private/prefs_util.h" |
| 6 | 6 |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
| 9 #include "chrome/browser/extensions/chrome_extension_function.h" | 9 #include "chrome/browser/extensions/chrome_extension_function.h" |
| 10 #include "chrome/browser/extensions/settings_api_helpers.h" | 10 #include "chrome/browser/extensions/settings_api_helpers.h" |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 365 settings_private::PrefType::PREF_TYPE_DICTIONARY; | 365 settings_private::PrefType::PREF_TYPE_DICTIONARY; |
| 366 | 366 |
| 367 #if defined(GOOGLE_CHROME_BUILD) | 367 #if defined(GOOGLE_CHROME_BUILD) |
| 368 (*s_whitelist)[::prefs::kMediaRouterEnableCloudServices] = | 368 (*s_whitelist)[::prefs::kMediaRouterEnableCloudServices] = |
| 369 settings_private::PrefType::PREF_TYPE_BOOLEAN; | 369 settings_private::PrefType::PREF_TYPE_BOOLEAN; |
| 370 #endif // defined(GOOGLE_CHROME_BUILD) | 370 #endif // defined(GOOGLE_CHROME_BUILD) |
| 371 | 371 |
| 372 return *s_whitelist; | 372 return *s_whitelist; |
| 373 } | 373 } |
| 374 | 374 |
| 375 settings_private::PrefType PrefsUtil::GetWhitelistedPrefType( | |
| 376 const std::string& pref_name) { | |
| 377 const TypedPrefMap& keys = GetWhitelistedKeys(); | |
| 378 const auto& iter = keys.find(pref_name); | |
|
michaelpg
2017/04/04 00:37:09
nit: keys.count(pref_name) ? : is (IMO) prettier t
stevenjb
2017/04/04 18:18:11
We need to return iter->second.
| |
| 379 return iter != keys.end() ? iter->second | |
| 380 : settings_private::PrefType::PREF_TYPE_NONE; | |
| 381 } | |
| 382 | |
| 375 settings_private::PrefType PrefsUtil::GetType(const std::string& name, | 383 settings_private::PrefType PrefsUtil::GetType(const std::string& name, |
| 376 base::Value::Type type) { | 384 base::Value::Type type) { |
| 377 switch (type) { | 385 switch (type) { |
| 378 case base::Value::Type::BOOLEAN: | 386 case base::Value::Type::BOOLEAN: |
| 379 return settings_private::PrefType::PREF_TYPE_BOOLEAN; | 387 return settings_private::PrefType::PREF_TYPE_BOOLEAN; |
| 380 case base::Value::Type::INTEGER: | 388 case base::Value::Type::INTEGER: |
| 381 case base::Value::Type::DOUBLE: | 389 case base::Value::Type::DOUBLE: |
| 382 return settings_private::PrefType::PREF_TYPE_NUMBER; | 390 return settings_private::PrefType::PREF_TYPE_NUMBER; |
| 383 case base::Value::Type::STRING: | 391 case base::Value::Type::STRING: |
| 384 return IsPrefTypeURL(name) ? settings_private::PrefType::PREF_TYPE_URL | 392 return IsPrefTypeURL(name) ? settings_private::PrefType::PREF_TYPE_URL |
| 385 : settings_private::PrefType::PREF_TYPE_STRING; | 393 : settings_private::PrefType::PREF_TYPE_STRING; |
| 386 case base::Value::Type::LIST: | 394 case base::Value::Type::LIST: |
| 387 return settings_private::PrefType::PREF_TYPE_LIST; | 395 return settings_private::PrefType::PREF_TYPE_LIST; |
| 388 case base::Value::Type::DICTIONARY: | 396 case base::Value::Type::DICTIONARY: |
| 389 return settings_private::PrefType::PREF_TYPE_DICTIONARY; | 397 return settings_private::PrefType::PREF_TYPE_DICTIONARY; |
| 390 default: | 398 default: |
| 391 return settings_private::PrefType::PREF_TYPE_NONE; | 399 return settings_private::PrefType::PREF_TYPE_NONE; |
| 392 } | 400 } |
| 393 } | 401 } |
| 394 | 402 |
| 395 std::unique_ptr<settings_private::PrefObject> PrefsUtil::GetCrosSettingsPref( | 403 std::unique_ptr<settings_private::PrefObject> PrefsUtil::GetCrosSettingsPref( |
| 396 const std::string& name) { | 404 const std::string& name) { |
| 397 std::unique_ptr<settings_private::PrefObject> pref_object( | 405 std::unique_ptr<settings_private::PrefObject> pref_object( |
| 398 new settings_private::PrefObject()); | 406 new settings_private::PrefObject()); |
| 399 | 407 |
| 400 #if defined(OS_CHROMEOS) | 408 #if defined(OS_CHROMEOS) |
| 401 const base::Value* value = CrosSettings::Get()->GetPref(name); | 409 const base::Value* value = CrosSettings::Get()->GetPref(name); |
| 402 DCHECK(value) << "Pref not found: " << name; | 410 if (!value) { |
| 411 LOG(ERROR) << "Cros settings pref not found: " << name; | |
|
michaelpg
2017/04/04 00:37:09
would NOTREACHED be more appropriate than removing
stevenjb
2017/04/04 18:18:11
We should only use DCHECK for code that is logical
| |
| 412 return nullptr; | |
| 413 } | |
| 403 pref_object->key = name; | 414 pref_object->key = name; |
| 404 pref_object->type = GetType(name, value->GetType()); | 415 pref_object->type = GetType(name, value->GetType()); |
| 405 pref_object->value.reset(value->DeepCopy()); | 416 pref_object->value.reset(value->DeepCopy()); |
| 406 #endif | 417 #endif |
| 407 | 418 |
| 408 return pref_object; | 419 return pref_object; |
| 409 } | 420 } |
| 410 | 421 |
| 411 std::unique_ptr<settings_private::PrefObject> PrefsUtil::GetPref( | 422 std::unique_ptr<settings_private::PrefObject> PrefsUtil::GetPref( |
| 412 const std::string& name) { | 423 const std::string& name) { |
| 424 if (GetWhitelistedPrefType(name) == | |
| 425 settings_private::PrefType::PREF_TYPE_NONE) { | |
| 426 return nullptr; | |
| 427 } | |
| 428 | |
| 413 const PrefService::Preference* pref = nullptr; | 429 const PrefService::Preference* pref = nullptr; |
| 414 std::unique_ptr<settings_private::PrefObject> pref_object; | 430 std::unique_ptr<settings_private::PrefObject> pref_object; |
| 415 if (IsCrosSetting(name)) { | 431 if (IsCrosSetting(name)) { |
| 416 pref_object = GetCrosSettingsPref(name); | 432 pref_object = GetCrosSettingsPref(name); |
| 433 if (!pref_object) | |
| 434 return nullptr; | |
| 417 } else { | 435 } else { |
| 418 PrefService* pref_service = FindServiceForPref(name); | 436 PrefService* pref_service = FindServiceForPref(name); |
| 419 pref = pref_service->FindPreference(name); | 437 pref = pref_service->FindPreference(name); |
| 420 if (!pref) | 438 if (!pref) |
| 421 return nullptr; | 439 return nullptr; |
| 422 pref_object.reset(new settings_private::PrefObject()); | 440 pref_object.reset(new settings_private::PrefObject()); |
| 423 pref_object->key = pref->name(); | 441 pref_object->key = pref->name(); |
| 424 pref_object->type = GetType(name, pref->GetType()); | 442 pref_object->type = GetType(name, pref->GetType()); |
| 425 pref_object->value.reset(pref->GetValue()->DeepCopy()); | 443 pref_object->value.reset(pref->GetValue()->DeepCopy()); |
| 426 } | 444 } |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 499 return pref_object; | 517 return pref_object; |
| 500 } | 518 } |
| 501 | 519 |
| 502 // TODO(dbeam): surface !IsUserModifiable or IsPrefSupervisorControlled? | 520 // TODO(dbeam): surface !IsUserModifiable or IsPrefSupervisorControlled? |
| 503 | 521 |
| 504 return pref_object; | 522 return pref_object; |
| 505 } | 523 } |
| 506 | 524 |
| 507 PrefsUtil::SetPrefResult PrefsUtil::SetPref(const std::string& pref_name, | 525 PrefsUtil::SetPrefResult PrefsUtil::SetPref(const std::string& pref_name, |
| 508 const base::Value* value) { | 526 const base::Value* value) { |
| 527 if (GetWhitelistedPrefType(pref_name) == | |
| 528 settings_private::PrefType::PREF_TYPE_NONE) { | |
| 529 return PREF_NOT_FOUND; | |
| 530 } | |
| 531 | |
| 509 if (IsCrosSetting(pref_name)) | 532 if (IsCrosSetting(pref_name)) |
| 510 return SetCrosSettingsPref(pref_name, value); | 533 return SetCrosSettingsPref(pref_name, value); |
| 511 | 534 |
| 512 PrefService* pref_service = FindServiceForPref(pref_name); | 535 PrefService* pref_service = FindServiceForPref(pref_name); |
| 513 | 536 |
| 514 if (!IsPrefUserModifiable(pref_name)) | 537 if (!IsPrefUserModifiable(pref_name)) |
| 515 return PREF_NOT_MODIFIABLE; | 538 return PREF_NOT_MODIFIABLE; |
| 516 | 539 |
| 517 const PrefService::Preference* pref = pref_service->FindPreference(pref_name); | 540 const PrefService::Preference* pref = pref_service->FindPreference(pref_name); |
| 518 if (!pref) | 541 if (!pref) |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 614 } | 637 } |
| 615 | 638 |
| 616 CrosSettings::Get()->RemoveFromList(pref_name, &value); | 639 CrosSettings::Get()->RemoveFromList(pref_name, &value); |
| 617 return true; | 640 return true; |
| 618 #else | 641 #else |
| 619 return false; | 642 return false; |
| 620 #endif | 643 #endif |
| 621 } | 644 } |
| 622 | 645 |
| 623 bool PrefsUtil::IsPrefTypeURL(const std::string& pref_name) { | 646 bool PrefsUtil::IsPrefTypeURL(const std::string& pref_name) { |
| 624 settings_private::PrefType pref_type = | 647 return GetWhitelistedPrefType(pref_name) == |
| 625 settings_private::PrefType::PREF_TYPE_NONE; | 648 settings_private::PrefType::PREF_TYPE_URL; |
| 626 | |
| 627 const TypedPrefMap keys = GetWhitelistedKeys(); | |
| 628 const auto& iter = keys.find(pref_name); | |
| 629 if (iter != keys.end()) | |
| 630 pref_type = iter->second; | |
| 631 | |
| 632 return pref_type == settings_private::PrefType::PREF_TYPE_URL; | |
| 633 } | 649 } |
| 634 | 650 |
| 635 #if defined(OS_CHROMEOS) | 651 #if defined(OS_CHROMEOS) |
| 636 bool PrefsUtil::IsPrefEnterpriseManaged(const std::string& pref_name) { | 652 bool PrefsUtil::IsPrefEnterpriseManaged(const std::string& pref_name) { |
| 637 if (IsPrivilegedCrosSetting(pref_name)) { | 653 if (IsPrivilegedCrosSetting(pref_name)) { |
| 638 policy::BrowserPolicyConnectorChromeOS* connector = | 654 policy::BrowserPolicyConnectorChromeOS* connector = |
| 639 g_browser_process->platform_part()->browser_policy_connector_chromeos(); | 655 g_browser_process->platform_part()->browser_policy_connector_chromeos(); |
| 640 if (connector->IsEnterpriseManaged()) | 656 if (connector->IsEnterpriseManaged()) |
| 641 return true; | 657 return true; |
| 642 } | 658 } |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 751 ExtensionPrefValueMapFactory::GetForBrowserContext(profile_) | 767 ExtensionPrefValueMapFactory::GetForBrowserContext(profile_) |
| 752 ->GetExtensionControllingPref(pref_object.key); | 768 ->GetExtensionControllingPref(pref_object.key); |
| 753 if (extension_id.empty()) | 769 if (extension_id.empty()) |
| 754 return nullptr; | 770 return nullptr; |
| 755 | 771 |
| 756 return ExtensionRegistry::Get(profile_)->GetExtensionById( | 772 return ExtensionRegistry::Get(profile_)->GetExtensionById( |
| 757 extension_id, ExtensionRegistry::ENABLED); | 773 extension_id, ExtensionRegistry::ENABLED); |
| 758 } | 774 } |
| 759 | 775 |
| 760 } // namespace extensions | 776 } // namespace extensions |
| OLD | NEW |