Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3429)

Unified Diff: chrome/browser/extensions/api/settings_private/prefs_util.cc

Issue 2479973002: MD Settings: clarify "controlled by" logic (Closed)
Patch Set: merge Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « chrome/browser/extensions/api/settings_private/prefs_util.h ('k') | chrome/browser/extensions/settings_api_helpers.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698