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