Home | History | Annotate | Download | only in browser
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "components/policy/core/browser/url_blacklist_policy_handler.h"
      6 
      7 #include "base/memory/scoped_ptr.h"
      8 #include "base/prefs/pref_value_map.h"
      9 #include "base/values.h"
     10 #include "components/policy/core/browser/policy_error_map.h"
     11 #include "components/policy/core/common/policy_map.h"
     12 #include "components/policy/core/common/policy_pref_names.h"
     13 #include "grit/components_strings.h"
     14 #include "policy/policy_constants.h"
     15 
     16 namespace policy {
     17 
     18 URLBlacklistPolicyHandler::URLBlacklistPolicyHandler() {}
     19 
     20 URLBlacklistPolicyHandler::~URLBlacklistPolicyHandler() {}
     21 
     22 bool URLBlacklistPolicyHandler::CheckPolicySettings(const PolicyMap& policies,
     23                                                     PolicyErrorMap* errors) {
     24   const base::Value* disabled_schemes =
     25       policies.GetValue(key::kDisabledSchemes);
     26   const base::Value* url_blacklist = policies.GetValue(key::kURLBlacklist);
     27 
     28   if (disabled_schemes && !disabled_schemes->IsType(base::Value::TYPE_LIST)) {
     29     errors->AddError(key::kDisabledSchemes,
     30                      IDS_POLICY_TYPE_ERROR,
     31                      ValueTypeToString(base::Value::TYPE_LIST));
     32   }
     33 
     34   if (url_blacklist && !url_blacklist->IsType(base::Value::TYPE_LIST)) {
     35     errors->AddError(key::kURLBlacklist,
     36                      IDS_POLICY_TYPE_ERROR,
     37                      ValueTypeToString(base::Value::TYPE_LIST));
     38   }
     39 
     40   return true;
     41 }
     42 
     43 void URLBlacklistPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
     44                                                     PrefValueMap* prefs) {
     45   const base::Value* url_blacklist_policy =
     46       policies.GetValue(key::kURLBlacklist);
     47   const base::ListValue* url_blacklist = NULL;
     48   if (url_blacklist_policy)
     49     url_blacklist_policy->GetAsList(&url_blacklist);
     50   const base::Value* disabled_schemes_policy =
     51       policies.GetValue(key::kDisabledSchemes);
     52   const base::ListValue* disabled_schemes = NULL;
     53   if (disabled_schemes_policy)
     54     disabled_schemes_policy->GetAsList(&disabled_schemes);
     55 
     56   scoped_ptr<base::ListValue> merged_url_blacklist(new base::ListValue());
     57 
     58   // We start with the DisabledSchemes because we have size limit when
     59   // handling URLBlacklists.
     60   if (disabled_schemes) {
     61     for (base::ListValue::const_iterator entry(disabled_schemes->begin());
     62          entry != disabled_schemes->end(); ++entry) {
     63       std::string entry_value;
     64       if ((*entry)->GetAsString(&entry_value)) {
     65         entry_value.append("://*");
     66         merged_url_blacklist->AppendString(entry_value);
     67       }
     68     }
     69   }
     70 
     71   if (url_blacklist) {
     72     for (base::ListValue::const_iterator entry(url_blacklist->begin());
     73          entry != url_blacklist->end(); ++entry) {
     74       if ((*entry)->IsType(base::Value::TYPE_STRING))
     75         merged_url_blacklist->Append((*entry)->DeepCopy());
     76     }
     77   }
     78 
     79   if (disabled_schemes || url_blacklist) {
     80     prefs->SetValue(policy_prefs::kUrlBlacklist,
     81                     merged_url_blacklist.release());
     82   }
     83 }
     84 
     85 }  // namespace policy
     86