Index: chrome/browser/extensions/api/settings_private/prefs_util.cc |
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc |
index 33aca7f0f6ce3b90a6da31dfca4f6595bc7cfb67..9cb236dc7b63d1a4f1d11fa9e7b8f0f35aef638a 100644 |
--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc |
+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc |
@@ -7,6 +7,8 @@ |
#include "build/build_config.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/extensions/chrome_extension_function.h" |
+#include "chrome/browser/extensions/settings_api_helpers.h" |
+#include "chrome/browser/prefs/session_startup_pref.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/common/pref_names.h" |
#include "components/autofill/core/common/autofill_pref_names.h" |
@@ -18,6 +20,7 @@ |
#include "components/prefs/pref_service.h" |
#include "components/proxy_config/proxy_config_pref_names.h" |
#include "components/safe_browsing_db/safe_browsing_prefs.h" |
+#include "components/search_engines/search_engines_pref_names.h" |
#include "components/spellcheck/browser/pref_names.h" |
#include "components/translate/core/browser/translate_prefs.h" |
#include "components/translate/core/common/translate_pref_names.h" |
@@ -25,6 +28,8 @@ |
#include "extensions/browser/extension_pref_value_map.h" |
#include "extensions/browser/extension_pref_value_map_factory.h" |
#include "extensions/browser/extension_registry.h" |
+#include "extensions/browser/extension_system.h" |
+#include "extensions/browser/management_policy.h" |
#include "extensions/common/extension.h" |
#if defined(OS_CHROMEOS) |
@@ -92,6 +97,10 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelistedKeys() { |
(*s_whitelist)[::prefs::kUsesSystemTheme] = |
settings_private::PrefType::PREF_TYPE_BOOLEAN; |
#endif |
+ (*s_whitelist)[::prefs::kHomePage] = |
+ settings_private::PrefType::PREF_TYPE_URL; |
+ (*s_whitelist)[::prefs::kHomePageIsNewTabPage] = |
+ settings_private::PrefType::PREF_TYPE_BOOLEAN; |
(*s_whitelist)[::prefs::kWebKitDefaultFixedFontSize] = |
settings_private::PrefType::PREF_TYPE_NUMBER; |
(*s_whitelist)[::prefs::kWebKitDefaultFontSize] = |
@@ -109,6 +118,12 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelistedKeys() { |
(*s_whitelist)[::prefs::kDefaultCharset] = |
settings_private::PrefType::PREF_TYPE_STRING; |
+ // On startup. |
+ (*s_whitelist)[::prefs::kRestoreOnStartup] = |
+ settings_private::PrefType::PREF_TYPE_NUMBER; |
+ (*s_whitelist)[::prefs::kURLsToRestoreOnStartup] = |
+ settings_private::PrefType::PREF_TYPE_LIST; |
+ |
// Downloads settings. |
(*s_whitelist)[::prefs::kDownloadDefaultDirectory] = |
settings_private::PrefType::PREF_TYPE_STRING; |
@@ -121,13 +136,9 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelistedKeys() { |
(*s_whitelist)[::prefs::kLocalDiscoveryNotificationsEnabled] = |
settings_private::PrefType::PREF_TYPE_BOOLEAN; |
- // Miscelaneous. TODO(stevenjb): categorize. |
+ // Miscellaneous. TODO(stevenjb): categorize. |
(*s_whitelist)[::prefs::kEnableDoNotTrack] = |
settings_private::PrefType::PREF_TYPE_BOOLEAN; |
- (*s_whitelist)[::prefs::kHomePage] = |
- settings_private::PrefType::PREF_TYPE_URL; |
- (*s_whitelist)[::prefs::kHomePageIsNewTabPage] = |
- settings_private::PrefType::PREF_TYPE_BOOLEAN; |
(*s_whitelist)[::prefs::kApplicationLocale] = |
settings_private::PrefType::PREF_TYPE_STRING; |
(*s_whitelist)[::prefs::kNetworkPredictionOptions] = |
@@ -142,10 +153,6 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelistedKeys() { |
settings_private::PrefType::PREF_TYPE_BOOLEAN; |
(*s_whitelist)[::prefs::kSearchSuggestEnabled] = |
settings_private::PrefType::PREF_TYPE_BOOLEAN; |
- (*s_whitelist)[::prefs::kRestoreOnStartup] = |
- settings_private::PrefType::PREF_TYPE_NUMBER; |
- (*s_whitelist)[::prefs::kURLsToRestoreOnStartup] = |
- settings_private::PrefType::PREF_TYPE_LIST; |
(*s_whitelist)[spellcheck::prefs::kSpellCheckDictionaries] = |
settings_private::PrefType::PREF_TYPE_LIST; |
(*s_whitelist)[spellcheck::prefs::kSpellCheckUseSpellingService] = |
@@ -382,40 +389,42 @@ std::unique_ptr<settings_private::PrefObject> PrefsUtil::GetPref( |
#if defined(OS_CHROMEOS) |
if (IsPrefPrimaryUserControlled(name)) { |
- pref_object->policy_source = |
- settings_private::PolicySource::POLICY_SOURCE_PRIMARY_USER; |
- pref_object->policy_enforcement = |
- settings_private::PolicyEnforcement::POLICY_ENFORCEMENT_ENFORCED; |
- pref_object->policy_source_name.reset( |
+ pref_object->controlled_by = |
+ settings_private::ControlledBy::CONTROLLED_BY_PRIMARY_USER; |
+ pref_object->enforcement = |
+ settings_private::Enforcement::ENFORCEMENT_ENFORCED; |
+ pref_object->controlled_by_name.reset( |
new std::string(user_manager::UserManager::Get() |
->GetPrimaryUser() |
->GetAccountId() |
.GetUserEmail())); |
return pref_object; |
} |
+ |
if (IsPrefEnterpriseManaged(name)) { |
// Enterprise managed prefs are treated the same as device policy restricted |
// prefs in the UI. |
- pref_object->policy_source = |
- settings_private::PolicySource::POLICY_SOURCE_DEVICE_POLICY; |
- pref_object->policy_enforcement = |
- settings_private::PolicyEnforcement::POLICY_ENFORCEMENT_ENFORCED; |
+ pref_object->controlled_by = |
+ settings_private::ControlledBy::CONTROLLED_BY_DEVICE_POLICY; |
+ pref_object->enforcement = |
+ settings_private::Enforcement::ENFORCEMENT_ENFORCED; |
return pref_object; |
} |
#endif |
if (pref && pref->IsManaged()) { |
- pref_object->policy_source = |
- settings_private::PolicySource::POLICY_SOURCE_USER_POLICY; |
- pref_object->policy_enforcement = |
- settings_private::PolicyEnforcement::POLICY_ENFORCEMENT_ENFORCED; |
+ pref_object->controlled_by = |
+ settings_private::ControlledBy::CONTROLLED_BY_USER_POLICY; |
+ pref_object->enforcement = |
+ settings_private::Enforcement::ENFORCEMENT_ENFORCED; |
return pref_object; |
} |
+ |
if (pref && pref->IsRecommended()) { |
- pref_object->policy_source = |
- settings_private::PolicySource::POLICY_SOURCE_USER_POLICY; |
- pref_object->policy_enforcement = |
- settings_private::PolicyEnforcement::POLICY_ENFORCEMENT_RECOMMENDED; |
+ pref_object->controlled_by = |
+ settings_private::ControlledBy::CONTROLLED_BY_USER_POLICY; |
+ pref_object->enforcement = |
+ settings_private::Enforcement::ENFORCEMENT_RECOMMENDED; |
pref_object->recommended_value.reset( |
pref->GetRecommendedValue()->DeepCopy()); |
return pref_object; |
@@ -427,38 +436,32 @@ std::unique_ptr<settings_private::PrefObject> PrefsUtil::GetPref( |
// device policy there is no "owner". (In the unlikely case that both |
// situations apply, either badge is potentially relevant, so the order |
// is somewhat arbitrary). |
- pref_object->policy_source = |
- settings_private::PolicySource::POLICY_SOURCE_OWNER; |
- pref_object->policy_enforcement = |
- settings_private::PolicyEnforcement::POLICY_ENFORCEMENT_ENFORCED; |
- pref_object->policy_source_name.reset(new std::string( |
+ pref_object->controlled_by = |
+ settings_private::ControlledBy::CONTROLLED_BY_OWNER; |
+ pref_object->enforcement = |
+ settings_private::Enforcement::ENFORCEMENT_ENFORCED; |
+ pref_object->controlled_by_name.reset(new std::string( |
user_manager::UserManager::Get()->GetOwnerAccountId().GetUserEmail())); |
return pref_object; |
} |
#endif |
- if (pref && pref->IsExtensionControlled()) { |
Dan Beam
2017/02/23 01:49:38
i probably broke stuff with this
|
- std::string extension_id = |
- ExtensionPrefValueMapFactory::GetForBrowserContext(profile_) |
- ->GetExtensionControllingPref(pref->name()); |
- const Extension* extension = ExtensionRegistry::Get(profile_)-> |
- GetExtensionById(extension_id, ExtensionRegistry::ENABLED); |
- if (extension) { |
- pref_object->policy_source = |
- settings_private::PolicySource::POLICY_SOURCE_EXTENSION; |
- pref_object->policy_enforcement = |
- settings_private::PolicyEnforcement::POLICY_ENFORCEMENT_ENFORCED; |
- pref_object->extension_id.reset(new std::string(extension_id)); |
- pref_object->policy_source_name.reset(new std::string(extension->name())); |
- return pref_object; |
- } |
- } |
- if (pref && (!pref->IsUserModifiable() || IsPrefSupervisorControlled(name))) { |
- // TODO(stevenjb): Investigate whether either of these should be badged. |
- pref_object->read_only.reset(new bool(true)); |
+ const Extension* extension = GetExtensionControllingPref(*pref_object); |
+ if (extension) { |
+ pref_object->controlled_by = |
+ settings_private::ControlledBy::CONTROLLED_BY_EXTENSION; |
+ pref_object->enforcement = |
+ settings_private::Enforcement::ENFORCEMENT_ENFORCED; |
+ pref_object->extension_id.reset(new std::string(extension->id())); |
+ pref_object->controlled_by_name.reset(new std::string(extension->name())); |
+ bool can_be_disabled = !ExtensionSystem::Get(profile_)->management_policy() |
+ ->MustRemainEnabled(extension, nullptr); |
+ pref_object->extension_can_be_disabled.reset(new bool(can_be_disabled)); |
return pref_object; |
} |
+ // TODO(dbeam): surface !IsUserModifiable or IsPrefSupervisorControlled? |
+ |
return pref_object; |
} |
@@ -680,4 +683,19 @@ bool PrefsUtil::IsCrosSetting(const std::string& pref_name) { |
#endif |
} |
+const Extension* PrefsUtil::GetExtensionControllingPref( |
+ const settings_private::PrefObject& pref_object) { |
+ // Look for specific prefs that might be extension controlled. This generally |
+ // corresponds with some indiciator that should be shown in the settings UI. |
+ if (pref_object.key == ::prefs::kHomePage) |
+ return GetExtensionOverridingHomepage(profile_); |
+ if (pref_object.key == ::prefs::kURLsToRestoreOnStartup) |
+ return GetExtensionOverridingStartupPages(profile_); |
+ if (pref_object.key == ::prefs::kDefaultSearchProviderEnabled) |
+ return GetExtensionOverridingSearchEngine(profile_); |
+ if (pref_object.key == proxy_config::prefs::kProxy) |
+ return GetExtensionOverridingProxy(profile_); |
+ return nullptr; |
+} |
+ |
} // namespace extensions |