OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_HANDLER_H_ | |
6 #define CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_HANDLER_H_ | |
7 | |
8 #include <string> | |
9 #include <vector> | |
10 | |
11 #include "base/basictypes.h" | |
12 #include "base/memory/scoped_ptr.h" | |
13 #include "base/values.h" | |
14 | |
15 class PrefValueMap; | |
16 | |
17 namespace policy { | |
18 | |
19 class PolicyErrorMap; | |
20 class PolicyMap; | |
21 | |
22 // Maps a policy type to a preference path, and to the expected value type. | |
23 struct PolicyToPreferenceMapEntry { | |
24 const char* const policy_name; | |
25 const char* const preference_path; | |
26 const base::Value::Type value_type; | |
27 }; | |
28 | |
29 // An abstract super class that subclasses should implement to map policies to | |
30 // their corresponding preferences, and to check whether the policies are valid. | |
31 class ConfigurationPolicyHandler { | |
32 public: | |
33 static std::string ValueTypeToString(Value::Type type); | |
34 | |
35 ConfigurationPolicyHandler(); | |
36 virtual ~ConfigurationPolicyHandler(); | |
37 | |
38 // Returns whether the policy settings handled by this | |
39 // ConfigurationPolicyHandler can be applied. Fills |errors| with error | |
40 // messages or warnings. |errors| may contain error messages even when | |
41 // |CheckPolicySettings()| returns true. | |
42 virtual bool CheckPolicySettings(const PolicyMap& policies, | |
43 PolicyErrorMap* errors) = 0; | |
44 | |
45 // Processes the policies handled by this ConfigurationPolicyHandler and sets | |
46 // the appropriate preferences in |prefs|. | |
47 virtual void ApplyPolicySettings(const PolicyMap& policies, | |
48 PrefValueMap* prefs) = 0; | |
49 | |
50 // Modifies the values of some of the policies in |policies| so that they | |
51 // are more suitable to display to the user. This can be used to remove | |
52 // sensitive values such as passwords, or to pretty-print values. | |
53 virtual void PrepareForDisplaying(PolicyMap* policies) const; | |
54 | |
55 private: | |
56 DISALLOW_COPY_AND_ASSIGN(ConfigurationPolicyHandler); | |
57 }; | |
58 | |
59 // Abstract class derived from ConfigurationPolicyHandler that should be | |
60 // subclassed to handle a single policy (not a combination of policies). | |
61 class TypeCheckingPolicyHandler : public ConfigurationPolicyHandler { | |
62 public: | |
63 TypeCheckingPolicyHandler(const char* policy_name, | |
64 base::Value::Type value_type); | |
65 virtual ~TypeCheckingPolicyHandler(); | |
66 | |
67 // ConfigurationPolicyHandler methods: | |
68 virtual bool CheckPolicySettings(const PolicyMap& policies, | |
69 PolicyErrorMap* errors) OVERRIDE; | |
70 | |
71 const char* policy_name() const; | |
72 | |
73 protected: | |
74 // Runs policy checks and returns the policy value if successful. | |
75 bool CheckAndGetValue(const PolicyMap& policies, | |
76 PolicyErrorMap* errors, | |
77 const Value** value); | |
78 | |
79 private: | |
80 // The name of the policy. | |
81 const char* policy_name_; | |
82 | |
83 // The type the value of the policy should have. | |
84 base::Value::Type value_type_; | |
85 | |
86 DISALLOW_COPY_AND_ASSIGN(TypeCheckingPolicyHandler); | |
87 }; | |
88 | |
89 // Abstract class derived from TypeCheckingPolicyHandler that ensures an int | |
90 // policy's value lies in an allowed range. Either clamps or rejects values | |
91 // outside the range. | |
92 class IntRangePolicyHandlerBase : public TypeCheckingPolicyHandler { | |
93 public: | |
94 IntRangePolicyHandlerBase(const char* policy_name, | |
95 int min, | |
96 int max, | |
97 bool clamp); | |
98 | |
99 // ConfigurationPolicyHandler: | |
100 virtual bool CheckPolicySettings(const PolicyMap& policies, | |
101 PolicyErrorMap* errors) OVERRIDE; | |
102 | |
103 protected: | |
104 virtual ~IntRangePolicyHandlerBase(); | |
105 | |
106 // Ensures that the value is in the allowed range. Returns false if the value | |
107 // cannot be parsed or lies outside the allowed range and clamping is | |
108 // disabled. | |
109 bool EnsureInRange(const base::Value* input, | |
110 int* output, | |
111 PolicyErrorMap* errors); | |
112 | |
113 private: | |
114 // The minimum value allowed. | |
115 int min_; | |
116 | |
117 // The maximum value allowed. | |
118 int max_; | |
119 | |
120 // Whether to clamp values lying outside the allowed range instead of | |
121 // rejecting them. | |
122 bool clamp_; | |
123 | |
124 DISALLOW_COPY_AND_ASSIGN(IntRangePolicyHandlerBase); | |
125 }; | |
126 | |
127 // ConfigurationPolicyHandler for policies that map directly to a preference. | |
128 class SimplePolicyHandler : public TypeCheckingPolicyHandler { | |
129 public: | |
130 SimplePolicyHandler(const char* policy_name, | |
131 const char* pref_path, | |
132 base::Value::Type value_type); | |
133 virtual ~SimplePolicyHandler(); | |
134 | |
135 // ConfigurationPolicyHandler methods: | |
136 virtual void ApplyPolicySettings(const PolicyMap& policies, | |
137 PrefValueMap* prefs) OVERRIDE; | |
138 | |
139 private: | |
140 // The DictionaryValue path of the preference the policy maps to. | |
141 const char* pref_path_; | |
142 | |
143 DISALLOW_COPY_AND_ASSIGN(SimplePolicyHandler); | |
144 }; | |
145 | |
146 // A policy handler implementation that maps a string enum list to an int enum | |
147 // list as specified by a mapping table. | |
148 class StringToIntEnumListPolicyHandler : public TypeCheckingPolicyHandler { | |
149 public: | |
150 struct MappingEntry { | |
151 const char* enum_value; | |
152 int int_value; | |
153 }; | |
154 | |
155 StringToIntEnumListPolicyHandler(const char* policy_name, | |
156 const char* pref_path, | |
157 const MappingEntry* mapping_begin, | |
158 const MappingEntry* mapping_end); | |
159 | |
160 // ConfigurationPolicyHandler methods: | |
161 virtual bool CheckPolicySettings(const PolicyMap& policies, | |
162 PolicyErrorMap* errors) OVERRIDE; | |
163 virtual void ApplyPolicySettings(const PolicyMap& policies, | |
164 PrefValueMap* prefs) OVERRIDE; | |
165 | |
166 private: | |
167 // Attempts to convert the list in |input| to |output| according to the table, | |
168 // returns false on errors. | |
169 bool Convert(const base::Value* input, | |
170 base::ListValue* output, | |
171 PolicyErrorMap* errors); | |
172 | |
173 // Name of the pref to write. | |
174 const char* pref_path_; | |
175 | |
176 // The mapping table. | |
177 const MappingEntry* mapping_begin_; | |
178 const MappingEntry* mapping_end_; | |
179 | |
180 DISALLOW_COPY_AND_ASSIGN(StringToIntEnumListPolicyHandler); | |
181 }; | |
182 | |
183 // A policy handler implementation that ensures an int policy's value lies in an | |
184 // allowed range. | |
185 class IntRangePolicyHandler : public IntRangePolicyHandlerBase { | |
186 public: | |
187 IntRangePolicyHandler(const char* policy_name, | |
188 const char* pref_path, | |
189 int min, | |
190 int max, | |
191 bool clamp); | |
192 virtual ~IntRangePolicyHandler(); | |
193 | |
194 // ConfigurationPolicyHandler: | |
195 virtual void ApplyPolicySettings(const PolicyMap& policies, | |
196 PrefValueMap* prefs) OVERRIDE; | |
197 | |
198 private: | |
199 // Name of the pref to write. | |
200 const char* pref_path_; | |
201 | |
202 DISALLOW_COPY_AND_ASSIGN(IntRangePolicyHandler); | |
203 }; | |
204 | |
205 // A policy handler implementation that maps an int percentage value to a | |
206 // double. | |
207 class IntPercentageToDoublePolicyHandler : public IntRangePolicyHandlerBase { | |
208 public: | |
209 IntPercentageToDoublePolicyHandler(const char* policy_name, | |
210 const char* pref_path, | |
211 int min, | |
212 int max, | |
213 bool clamp); | |
214 virtual ~IntPercentageToDoublePolicyHandler(); | |
215 | |
216 // ConfigurationPolicyHandler: | |
217 virtual void ApplyPolicySettings(const PolicyMap& policies, | |
218 PrefValueMap* prefs) OVERRIDE; | |
219 | |
220 private: | |
221 // Name of the pref to write. | |
222 const char* pref_path_; | |
223 | |
224 DISALLOW_COPY_AND_ASSIGN(IntPercentageToDoublePolicyHandler); | |
225 }; | |
226 | |
227 } // namespace policy | |
228 | |
229 #endif // CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_HANDLER_H_ | |
OLD | NEW |