15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/browser/url_blacklist_policy_handler.h" 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/pref_value_map.h" 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/values.h" 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/browser/policy_error_map.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/policy_pref_names.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "grit/components_strings.h" 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "policy/policy_constants.h" 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace policy { 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)URLBlacklistPolicyHandler::URLBlacklistPolicyHandler() {} 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)URLBlacklistPolicyHandler::~URLBlacklistPolicyHandler() {} 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool URLBlacklistPolicyHandler::CheckPolicySettings(const PolicyMap& policies, 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PolicyErrorMap* errors) { 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::Value* disabled_schemes = 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) policies.GetValue(key::kDisabledSchemes); 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::Value* url_blacklist = policies.GetValue(key::kURLBlacklist); 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (disabled_schemes && !disabled_schemes->IsType(base::Value::TYPE_LIST)) { 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) errors->AddError(key::kDisabledSchemes, 301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_POLICY_TYPE_ERROR, 311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ValueTypeToString(base::Value::TYPE_LIST)); 321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (url_blacklist && !url_blacklist->IsType(base::Value::TYPE_LIST)) { 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) errors->AddError(key::kURLBlacklist, 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_POLICY_TYPE_ERROR, 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ValueTypeToString(base::Value::TYPE_LIST)); 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return true; 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void URLBlacklistPolicyHandler::ApplyPolicySettings(const PolicyMap& policies, 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PrefValueMap* prefs) { 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::Value* url_blacklist_policy = 461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) policies.GetValue(key::kURLBlacklist); 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::ListValue* url_blacklist = NULL; 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (url_blacklist_policy) 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) url_blacklist_policy->GetAsList(&url_blacklist); 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::Value* disabled_schemes_policy = 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) policies.GetValue(key::kDisabledSchemes); 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::ListValue* disabled_schemes = NULL; 531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (disabled_schemes_policy) 541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) disabled_schemes_policy->GetAsList(&disabled_schemes); 551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<base::ListValue> merged_url_blacklist(new base::ListValue()); 571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // We start with the DisabledSchemes because we have size limit when 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // handling URLBlacklists. 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (disabled_schemes) { 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (base::ListValue::const_iterator entry(disabled_schemes->begin()); 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) entry != disabled_schemes->end(); ++entry) { 631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string entry_value; 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if ((*entry)->GetAsString(&entry_value)) { 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) entry_value.append("://*"); 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) merged_url_blacklist->AppendString(entry_value); 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (url_blacklist) { 721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (base::ListValue::const_iterator entry(url_blacklist->begin()); 731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) entry != url_blacklist->end(); ++entry) { 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ((*entry)->IsType(base::Value::TYPE_STRING)) 751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) merged_url_blacklist->Append((*entry)->DeepCopy()); 761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (disabled_schemes || url_blacklist) { 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prefs->SetValue(policy_prefs::kUrlBlacklist, 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) merged_url_blacklist.release()); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace policy 86