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 bda474d01b7c1d8ccbf94ba8feff4ff3a6981724..fd7204e11bfd4b537c455630d05ff0f94c6fe851 100644 |
--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc |
+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc |
@@ -7,6 +7,7 @@ |
#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/profiles/profile.h" |
#include "chrome/common/pref_names.h" |
#include "components/autofill/core/common/autofill_pref_names.h" |
@@ -19,6 +20,7 @@ |
#include "components/proxy_config/proxy_config_pref_names.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" |
@@ -27,6 +29,7 @@ |
#include "extensions/browser/extension_pref_value_map_factory.h" |
#include "extensions/browser/extension_registry.h" |
#include "extensions/common/extension.h" |
+#include "extensions/common/manifest.h" |
#if defined(OS_CHROMEOS) |
#include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" |
@@ -456,24 +459,22 @@ std::unique_ptr<settings_private::PrefObject> PrefsUtil::GetPref( |
} |
#endif |
- if (pref && pref->IsExtensionControlled()) { |
- 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; |
- } |
+ const Extension* extension = GetExtensionControllingPref(name); |
+ if (extension) { |
+ bool force_installed = Manifest::IsPolicyLocation(extension->location()); |
+ pref_object->read_only.reset(new bool(force_installed)); |
+ 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. |
+ // TODO(dbeam): where is this ever used? |
pref_object->read_only.reset(new bool(true)); |
return pref_object; |
} |
@@ -699,4 +700,18 @@ bool PrefsUtil::IsCrosSetting(const std::string& pref_name) { |
#endif |
} |
+const Extension* PrefsUtil::GetExtensionControllingPref( |
+ const std::string& pref_name) { |
+ if (pref_name == ::prefs::kHomePage) |
+ return GetExtensionOverridingHomepage(profile_); |
+ if (pref_name == ::prefs::kRestoreOnStartup) |
+ return GetExtensionOverridingStartupPages(profile_); |
+ // TODO(dbeam): add kDefaultSearchProviderEnabled to whitelist soon. |
+ if (pref_name == ::prefs::kDefaultSearchProviderEnabled) |
+ return GetExtensionOverridingSearchEngine(profile_); |
+ if (pref_name == proxy_config::prefs::kProxy) |
+ return GetExtensionOverridingProxy(profile_); |
+ return nullptr; |
+} |
+ |
} // namespace extensions |