Index: chrome/browser/policy/configuration_policy_handler_list_factory.cc |
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc |
index 0a26524ee762d201d67724d48bc8a76a9da42069..0991c67abef8da91d977adbabe477a67fa5bea05 100644 |
--- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc |
+++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc |
@@ -7,6 +7,7 @@ |
#include "base/basictypes.h" |
#include "base/bind.h" |
#include "base/memory/scoped_vector.h" |
+#include "base/prefs/pref_value_map.h" |
#include "base/values.h" |
#include "chrome/browser/net/proxy_policy_handler.h" |
#include "chrome/browser/policy/managed_bookmarks_policy_handler.h" |
@@ -99,9 +100,6 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] = { |
{ key::kSafeBrowsingEnabled, |
prefs::kSafeBrowsingEnabled, |
base::Value::TYPE_BOOLEAN }, |
- { key::kForceSafeSearch, |
- prefs::kForceSafeSearch, |
- base::Value::TYPE_BOOLEAN }, |
{ key::kForceGoogleSafeSearch, |
prefs::kForceGoogleSafeSearch, |
base::Value::TYPE_BOOLEAN }, |
@@ -503,6 +501,34 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] = { |
#endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS) |
}; |
+class ForceSafeSearchPolicyHandler : public TypeCheckingPolicyHandler { |
+ public: |
+ ForceSafeSearchPolicyHandler() |
+ : TypeCheckingPolicyHandler(key::kForceSafeSearch, |
+ base::Value::TYPE_BOOLEAN) {} |
+ ~ForceSafeSearchPolicyHandler() override {} |
+ |
+ // ConfigurationPolicyHandler implementation: |
+ void ApplyPolicySettings(const PolicyMap& policies, |
+ PrefValueMap* prefs) override { |
+ // If either of the new GoogleSafeSearch or YouTubeSafetyMode policies is |
+ // defined, then this one should be ignored. crbug.com/476908 |
+ // Note: Those policies are declared in kSimplePolicyMap above. |
+ if (policies.GetValue(key::kForceGoogleSafeSearch) || |
+ policies.GetValue(key::kForceYouTubeSafetyMode)) { |
+ return; |
+ } |
+ const base::Value* value = policies.GetValue(policy_name()); |
+ if (value) { |
+ prefs->SetValue(prefs::kForceGoogleSafeSearch, value->DeepCopy()); |
+ prefs->SetValue(prefs::kForceYouTubeSafetyMode, value->DeepCopy()); |
+ } |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ForceSafeSearchPolicyHandler); |
+}; |
+ |
#if defined(ENABLE_EXTENSIONS) |
void GetExtensionAllowedTypesMap( |
ScopedVector<StringMappingListPolicyHandler::MappingEntry>* result) { |
@@ -555,6 +581,7 @@ scoped_ptr<ConfigurationPolicyHandlerList> BuildHandlerList( |
handlers->AddHandler(make_scoped_ptr(new AutofillPolicyHandler())); |
handlers->AddHandler(make_scoped_ptr(new DefaultSearchPolicyHandler())); |
+ handlers->AddHandler(make_scoped_ptr(new ForceSafeSearchPolicyHandler())); |
handlers->AddHandler(make_scoped_ptr(new IncognitoModePolicyHandler())); |
handlers->AddHandler( |
make_scoped_ptr(new ManagedBookmarksPolicyHandler(chrome_schema))); |