Home | History | Annotate | Download | only in messaging
      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 "chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h"
      6 
      7 #include "base/prefs/pref_value_map.h"
      8 #include "chrome/browser/extensions/policy_handlers.h"
      9 #include "chrome/common/pref_names.h"
     10 #include "components/policy/core/browser/policy_error_map.h"
     11 #include "components/policy/core/common/policy_map.h"
     12 #include "policy/policy_constants.h"
     13 #include "testing/gtest/include/gtest/gtest.h"
     14 
     15 namespace extensions {
     16 
     17 const char kTestPref[] = "unit_test.test_pref";
     18 
     19 TEST(NativeMessagingHostListPolicyHandlerTest, CheckPolicySettings) {
     20   base::ListValue list;
     21   policy::PolicyMap policy_map;
     22   NativeMessagingHostListPolicyHandler handler(
     23       policy::key::kNativeMessagingBlacklist, kTestPref, true);
     24 
     25   policy_map.Set(policy::key::kNativeMessagingBlacklist,
     26                  policy::POLICY_LEVEL_MANDATORY,
     27                  policy::POLICY_SCOPE_USER,
     28                  list.DeepCopy(),
     29                  NULL);
     30   {
     31     policy::PolicyErrorMap errors;
     32     EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
     33     EXPECT_TRUE(errors.empty());
     34   }
     35 
     36   list.Append(new base::StringValue("test.a.b"));
     37   policy_map.Set(policy::key::kNativeMessagingBlacklist,
     38                  policy::POLICY_LEVEL_MANDATORY,
     39                  policy::POLICY_SCOPE_USER,
     40                  list.DeepCopy(),
     41                  NULL);
     42   {
     43     policy::PolicyErrorMap errors;
     44     EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
     45     EXPECT_TRUE(errors.empty());
     46   }
     47 
     48   list.Append(new base::StringValue("*"));
     49   policy_map.Set(policy::key::kNativeMessagingBlacklist,
     50                  policy::POLICY_LEVEL_MANDATORY,
     51                  policy::POLICY_SCOPE_USER,
     52                  list.DeepCopy(),
     53                  NULL);
     54   {
     55     policy::PolicyErrorMap errors;
     56     EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
     57     EXPECT_TRUE(errors.empty());
     58   }
     59 
     60   list.Append(new base::StringValue("invalid Name"));
     61   policy_map.Set(policy::key::kNativeMessagingBlacklist,
     62                  policy::POLICY_LEVEL_MANDATORY,
     63                  policy::POLICY_SCOPE_USER,
     64                  list.DeepCopy(),
     65                  NULL);
     66   {
     67     policy::PolicyErrorMap errors;
     68     EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
     69     EXPECT_FALSE(errors.empty());
     70     EXPECT_FALSE(
     71         errors.GetErrors(policy::key::kNativeMessagingBlacklist).empty());
     72   }
     73 }
     74 
     75 TEST(NativeMessagingHostListPolicyHandlerTest, ApplyPolicySettings) {
     76   base::ListValue policy;
     77   base::ListValue expected;
     78   policy::PolicyMap policy_map;
     79   PrefValueMap prefs;
     80   base::Value* value = NULL;
     81   NativeMessagingHostListPolicyHandler handler(
     82       policy::key::kNativeMessagingBlacklist, kTestPref, true);
     83 
     84   policy.Append(new base::StringValue("com.example.test"));
     85   expected.Append(new base::StringValue("com.example.test"));
     86 
     87   policy_map.Set(policy::key::kNativeMessagingBlacklist,
     88                  policy::POLICY_LEVEL_MANDATORY,
     89                  policy::POLICY_SCOPE_USER,
     90                  policy.DeepCopy(),
     91                  NULL);
     92   handler.ApplyPolicySettings(policy_map, &prefs);
     93   EXPECT_TRUE(prefs.GetValue(kTestPref, &value));
     94   EXPECT_TRUE(base::Value::Equals(&expected, value));
     95 
     96   policy.Append(new base::StringValue("*"));
     97   expected.Append(new base::StringValue("*"));
     98 
     99   policy_map.Set(policy::key::kNativeMessagingBlacklist,
    100                  policy::POLICY_LEVEL_MANDATORY,
    101                  policy::POLICY_SCOPE_USER,
    102                  policy.DeepCopy(),
    103                  NULL);
    104   handler.ApplyPolicySettings(policy_map, &prefs);
    105   EXPECT_TRUE(prefs.GetValue(kTestPref, &value));
    106   EXPECT_TRUE(base::Value::Equals(&expected, value));
    107 
    108   policy.Append(new base::StringValue("invalid Name"));
    109   policy_map.Set(policy::key::kNativeMessagingBlacklist,
    110                  policy::POLICY_LEVEL_MANDATORY,
    111                  policy::POLICY_SCOPE_USER,
    112                  policy.DeepCopy(),
    113                  NULL);
    114   handler.ApplyPolicySettings(policy_map, &prefs);
    115   EXPECT_TRUE(prefs.GetValue(kTestPref, &value));
    116   EXPECT_TRUE(base::Value::Equals(&expected, value));
    117 }
    118 
    119 }  // namespace extensions
    120