Index: components/policy/core/browser/configuration_policy_handler.h |
diff --git a/components/policy/core/browser/configuration_policy_handler.h b/components/policy/core/browser/configuration_policy_handler.h |
index 54e77a257c456ec23281adbe658cd79becbbb0c8..60314b04dfe584363a4d48c8f7153facd14c1a32 100644 |
--- a/components/policy/core/browser/configuration_policy_handler.h |
+++ b/components/policy/core/browser/configuration_policy_handler.h |
@@ -9,6 +9,7 @@ |
#include <vector> |
#include "base/basictypes.h" |
+#include "base/callback.h" |
#include "base/compiler_specific.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/scoped_vector.h" |
@@ -159,20 +160,29 @@ class POLICY_EXPORT SimplePolicyHandler : public TypeCheckingPolicyHandler { |
DISALLOW_COPY_AND_ASSIGN(SimplePolicyHandler); |
}; |
-// A policy handler implementation that maps a string enum list to an int enum |
-// list as specified by a mapping table. |
-class POLICY_EXPORT StringToIntEnumListPolicyHandler |
+// Base class that encapsulates logic for mapping from a string enum list |
+// to a separate matching type value. |
+class POLICY_EXPORT StringMappingListPolicyHandler |
: public TypeCheckingPolicyHandler { |
public: |
- struct POLICY_EXPORT MappingEntry { |
+ // Data structure representing the map between policy strings and |
+ // matching pref values. |
+ class POLICY_EXPORT MappingEntry { |
+ public: |
+ MappingEntry(const char* policy_value, scoped_ptr<base::Value> map); |
+ ~MappingEntry(); |
+ |
const char* enum_value; |
- int int_value; |
+ scoped_ptr<base::Value> mapped_value; |
}; |
- StringToIntEnumListPolicyHandler(const char* policy_name, |
- const char* pref_path, |
- const MappingEntry* mapping_begin, |
- const MappingEntry* mapping_end); |
+ // Callback that generates the map for this instance. |
+ typedef base::Callback<void(ScopedVector<MappingEntry>*)> GenerateMapCallback; |
+ |
+ StringMappingListPolicyHandler(const char* policy_name, |
+ const char* pref_path, |
+ const GenerateMapCallback& map_generator); |
+ virtual ~StringMappingListPolicyHandler(); |
// ConfigurationPolicyHandler methods: |
virtual bool CheckPolicySettings(const PolicyMap& policies, |
@@ -187,14 +197,21 @@ class POLICY_EXPORT StringToIntEnumListPolicyHandler |
base::ListValue* output, |
PolicyErrorMap* errors); |
+ // Helper method that converts from a policy value string to the associated |
+ // pref value. |
+ scoped_ptr<base::Value> Map(const std::string& entry_value); |
+ |
// Name of the pref to write. |
const char* pref_path_; |
- // The mapping table. |
- const MappingEntry* mapping_begin_; |
- const MappingEntry* mapping_end_; |
+ // The callback invoked to generate the map for this instance. |
+ GenerateMapCallback map_getter_; |
+ |
+ // Map of string policy values to local pref values. This is generated lazily |
+ // so the generation does not have to happen if no policy is present. |
+ ScopedVector<MappingEntry> map_; |
- DISALLOW_COPY_AND_ASSIGN(StringToIntEnumListPolicyHandler); |
+ DISALLOW_COPY_AND_ASSIGN(StringMappingListPolicyHandler); |
}; |
// A policy handler implementation that ensures an int policy's value lies in an |