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 "base/memory/scoped_ptr.h"
      6 #include "base/prefs/pref_value_map.h"
      7 #include "base/values.h"
      8 #include "components/policy/core/browser/policy_error_map.h"
      9 #include "components/policy/core/browser/url_blacklist_policy_handler.h"
     10 #include "components/policy/core/common/policy_map.h"
     11 #include "components/policy/core/common/policy_pref_names.h"
     12 #include "policy/policy_constants.h"
     13 #include "testing/gtest/include/gtest/gtest.h"
     14 
     15 // Note: this file should move to components/policy/core/browser, but the
     16 // components_unittests runner does not load the ResourceBundle as
     17 // ChromeTestSuite::Initialize does, which leads to failures using
     18 // PolicyErrorMap.
     19 
     20 namespace policy {
     21 
     22 namespace {
     23 
     24 const char kTestDisabledScheme[] = "kTestDisabledScheme";
     25 const char kTestBlacklistValue[] = "kTestBlacklistValue";
     26 
     27 }  // namespace
     28 
     29 class URLBlacklistPolicyHandlerTest : public testing::Test {
     30  protected:
     31   void SetPolicy(const std::string& key, base::Value* value) {
     32     policies_.Set(key, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, value, NULL);
     33   }
     34   bool CheckPolicy(const std::string& key, base::Value* value) {
     35     SetPolicy(key, value);
     36     return handler_.CheckPolicySettings(policies_, &errors_);
     37   }
     38   void ApplyPolicies() {
     39     handler_.ApplyPolicySettings(policies_, &prefs_);
     40   }
     41 
     42   URLBlacklistPolicyHandler handler_;
     43   PolicyErrorMap errors_;
     44   PolicyMap policies_;
     45   PrefValueMap prefs_;
     46 };
     47 
     48 TEST_F(URLBlacklistPolicyHandlerTest,
     49        CheckPolicySettings_DisabledSchemesUnspecified) {
     50   EXPECT_TRUE(CheckPolicy(key::kURLBlacklist, new base::ListValue));
     51   EXPECT_EQ(0U, errors_.size());
     52 }
     53 
     54 TEST_F(URLBlacklistPolicyHandlerTest,
     55        CheckPolicySettings_URLBlacklistUnspecified) {
     56   EXPECT_TRUE(CheckPolicy(key::kDisabledSchemes, new base::ListValue));
     57   EXPECT_EQ(0U, errors_.size());
     58 }
     59 
     60 TEST_F(URLBlacklistPolicyHandlerTest,
     61        CheckPolicySettings_DisabledSchemesWrongType) {
     62   // The policy expects a list. Give it a boolean.
     63   EXPECT_TRUE(CheckPolicy(key::kDisabledSchemes,
     64                           base::Value::CreateBooleanValue(false)));
     65   EXPECT_EQ(1U, errors_.size());
     66   const std::string expected = key::kDisabledSchemes;
     67   const std::string actual = errors_.begin()->first;
     68   EXPECT_EQ(expected, actual);
     69 }
     70 
     71 TEST_F(URLBlacklistPolicyHandlerTest,
     72        CheckPolicySettings_URLBlacklistWrongType) {
     73   // The policy expects a list. Give it a boolean.
     74   EXPECT_TRUE(CheckPolicy(key::kURLBlacklist,
     75                           base::Value::CreateBooleanValue(false)));
     76   EXPECT_EQ(1U, errors_.size());
     77   const std::string expected = key::kURLBlacklist;
     78   const std::string actual = errors_.begin()->first;
     79   EXPECT_EQ(expected, actual);
     80 }
     81 
     82 TEST_F(URLBlacklistPolicyHandlerTest, ApplyPolicySettings_NothingSpecified) {
     83   ApplyPolicies();
     84   EXPECT_FALSE(prefs_.GetValue(policy_prefs::kUrlBlacklist, NULL));
     85 }
     86 
     87 TEST_F(URLBlacklistPolicyHandlerTest,
     88        ApplyPolicySettings_DisabledSchemesWrongType) {
     89   // The policy expects a list. Give it a boolean.
     90   SetPolicy(key::kDisabledSchemes, base::Value::CreateBooleanValue(false));
     91   ApplyPolicies();
     92   EXPECT_FALSE(prefs_.GetValue(policy_prefs::kUrlBlacklist, NULL));
     93 }
     94 
     95 TEST_F(URLBlacklistPolicyHandlerTest,
     96        ApplyPolicySettings_URLBlacklistWrongType) {
     97   // The policy expects a list. Give it a boolean.
     98   SetPolicy(key::kURLBlacklist, base::Value::CreateBooleanValue(false));
     99   ApplyPolicies();
    100   EXPECT_FALSE(prefs_.GetValue(policy_prefs::kUrlBlacklist, NULL));
    101 }
    102 
    103 TEST_F(URLBlacklistPolicyHandlerTest,
    104        ApplyPolicySettings_DisabledSchemesEmpty) {
    105   SetPolicy(key::kDisabledSchemes, new base::ListValue);
    106   ApplyPolicies();
    107   base::Value* out;
    108   EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlacklist, &out));
    109   base::ListValue* out_list;
    110   EXPECT_TRUE(out->GetAsList(&out_list));
    111   EXPECT_EQ(0U, out_list->GetSize());
    112 }
    113 
    114 TEST_F(URLBlacklistPolicyHandlerTest,
    115        ApplyPolicySettings_URLBlacklistEmpty) {
    116   SetPolicy(key::kURLBlacklist, new base::ListValue);
    117   ApplyPolicies();
    118   base::Value* out;
    119   EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlacklist, &out));
    120   base::ListValue* out_list;
    121   EXPECT_TRUE(out->GetAsList(&out_list));
    122   EXPECT_EQ(0U, out_list->GetSize());
    123 }
    124 
    125 TEST_F(URLBlacklistPolicyHandlerTest,
    126        ApplyPolicySettings_DisabledSchemesWrongElementType) {
    127   // The policy expects string-valued elements. Give it booleans.
    128   scoped_ptr<base::ListValue> in(new base::ListValue);
    129   in->AppendBoolean(false);
    130   SetPolicy(key::kDisabledSchemes, in.release());
    131   ApplyPolicies();
    132 
    133   // The element should be skipped.
    134   base::Value* out;
    135   EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlacklist, &out));
    136   base::ListValue* out_list;
    137   EXPECT_TRUE(out->GetAsList(&out_list));
    138   EXPECT_EQ(0U, out_list->GetSize());
    139 }
    140 
    141 TEST_F(URLBlacklistPolicyHandlerTest,
    142        ApplyPolicySettings_URLBlacklistWrongElementType) {
    143   // The policy expects string-valued elements. Give it booleans.
    144   scoped_ptr<base::ListValue> in(new base::ListValue);
    145   in->AppendBoolean(false);
    146   SetPolicy(key::kURLBlacklist, in.release());
    147   ApplyPolicies();
    148 
    149   // The element should be skipped.
    150   base::Value* out;
    151   EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlacklist, &out));
    152   base::ListValue* out_list;
    153   EXPECT_TRUE(out->GetAsList(&out_list));
    154   EXPECT_EQ(0U, out_list->GetSize());
    155 }
    156 
    157 TEST_F(URLBlacklistPolicyHandlerTest,
    158        ApplyPolicySettings_DisabledSchemesSuccessful) {
    159   scoped_ptr<base::ListValue> in_disabled_schemes(new base::ListValue);
    160   in_disabled_schemes->AppendString(kTestDisabledScheme);
    161   SetPolicy(key::kDisabledSchemes, in_disabled_schemes.release());
    162   ApplyPolicies();
    163 
    164   base::Value* out;
    165   EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlacklist, &out));
    166   base::ListValue* out_list;
    167   EXPECT_TRUE(out->GetAsList(&out_list));
    168   EXPECT_EQ(1U, out_list->GetSize());
    169 
    170   std::string out_string;
    171   EXPECT_TRUE(out_list->GetString(0U, &out_string));
    172   EXPECT_EQ(kTestDisabledScheme + std::string("://*"), out_string);
    173 }
    174 
    175 TEST_F(URLBlacklistPolicyHandlerTest,
    176        ApplyPolicySettings_URLBlacklistSuccessful) {
    177   scoped_ptr<base::ListValue> in_url_blacklist(new base::ListValue);
    178   in_url_blacklist->AppendString(kTestBlacklistValue);
    179   SetPolicy(key::kURLBlacklist, in_url_blacklist.release());
    180   ApplyPolicies();
    181 
    182   base::Value* out;
    183   EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlacklist, &out));
    184   base::ListValue* out_list;
    185   EXPECT_TRUE(out->GetAsList(&out_list));
    186   EXPECT_EQ(1U, out_list->GetSize());
    187 
    188   std::string out_string;
    189   EXPECT_TRUE(out_list->GetString(0U, &out_string));
    190   EXPECT_EQ(kTestBlacklistValue, out_string);
    191 }
    192 
    193 TEST_F(URLBlacklistPolicyHandlerTest, ApplyPolicySettings_MergeSuccessful) {
    194   scoped_ptr<base::ListValue> in_disabled_schemes(new base::ListValue);
    195   in_disabled_schemes->AppendString(kTestDisabledScheme);
    196   SetPolicy(key::kDisabledSchemes, in_disabled_schemes.release());
    197 
    198   scoped_ptr<base::ListValue> in_url_blacklist(new base::ListValue);
    199   in_url_blacklist->AppendString(kTestBlacklistValue);
    200   SetPolicy(key::kURLBlacklist, in_url_blacklist.release());
    201 
    202   ApplyPolicies();
    203 
    204   base::Value* out;
    205   EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlacklist, &out));
    206   base::ListValue* out_list;
    207   EXPECT_TRUE(out->GetAsList(&out_list));
    208   EXPECT_EQ(2U, out_list->GetSize());
    209 
    210   std::string out1;
    211   EXPECT_TRUE(out_list->GetString(0U, &out1));
    212   EXPECT_EQ(kTestDisabledScheme + std::string("://*"), out1);
    213 
    214   std::string out2;
    215   EXPECT_TRUE(out_list->GetString(1U, &out2));
    216   EXPECT_EQ(kTestBlacklistValue, out2);
    217 }
    218 
    219 }  // namespace policy
    220