| 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
|
|
|