// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/policy/url_blacklist_policy_handler.h" #include "base/memory/scoped_ptr.h" #include "base/prefs/pref_value_map.h" #include "base/values.h" #include "chrome/browser/policy/policy_error_map.h" #include "chrome/common/pref_names.h" #include "components/policy/core/common/policy_map.h" #include "grit/generated_resources.h" #include "policy/policy_constants.h" namespace policy { URLBlacklistPolicyHandler::URLBlacklistPolicyHandler() {} URLBlacklistPolicyHandler::~URLBlacklistPolicyHandler() {} bool URLBlacklistPolicyHandler::CheckPolicySettings(const PolicyMap& policies, PolicyErrorMap* errors) { const base::Value* disabled_schemes = policies.GetValue(key::kDisabledSchemes); const base::Value* url_blacklist = policies.GetValue(key::kURLBlacklist); if (disabled_schemes && !disabled_schemes->IsType(base::Value::TYPE_LIST)) { errors->AddError(key::kDisabledSchemes, IDS_POLICY_TYPE_ERROR, ValueTypeToString(base::Value::TYPE_LIST)); } if (url_blacklist && !url_blacklist->IsType(base::Value::TYPE_LIST)) { errors->AddError(key::kURLBlacklist, IDS_POLICY_TYPE_ERROR, ValueTypeToString(base::Value::TYPE_LIST)); } return true; } void URLBlacklistPolicyHandler::ApplyPolicySettings(const PolicyMap& policies, PrefValueMap* prefs) { const base::Value* url_blacklist_policy = policies.GetValue(key::kURLBlacklist); const base::ListValue* url_blacklist = NULL; if (url_blacklist_policy) url_blacklist_policy->GetAsList(&url_blacklist); const base::Value* disabled_schemes_policy = policies.GetValue(key::kDisabledSchemes); const base::ListValue* disabled_schemes = NULL; if (disabled_schemes_policy) disabled_schemes_policy->GetAsList(&disabled_schemes); scoped_ptr merged_url_blacklist(new base::ListValue()); // We start with the DisabledSchemes because we have size limit when // handling URLBlacklists. if (disabled_schemes) { for (base::ListValue::const_iterator entry(disabled_schemes->begin()); entry != disabled_schemes->end(); ++entry) { std::string entry_value; if ((*entry)->GetAsString(&entry_value)) { entry_value.append("://*"); merged_url_blacklist->AppendString(entry_value); } } } if (url_blacklist) { for (base::ListValue::const_iterator entry(url_blacklist->begin()); entry != url_blacklist->end(); ++entry) { if ((*entry)->IsType(Value::TYPE_STRING)) merged_url_blacklist->Append((*entry)->DeepCopy()); } } if (disabled_schemes || url_blacklist) prefs->SetValue(prefs::kUrlBlacklist, merged_url_blacklist.release()); } } // namespace policy