1 // Copyright 2013 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.
5 #ifndef COMPONENTS_POLICY_CORE_COMMON_SCHEMA_INTERNAL_H_
6 #define COMPONENTS_POLICY_CORE_COMMON_SCHEMA_INTERNAL_H_
8 #include "base/values.h"
9 #include "components/policy/policy_export.h"
14 // These types are used internally by the SchemaOwner parser, and by the
15 // compile-time code generator. They shouldn't be used directly.
17 // Represents the type of one policy, or an item of a list policy, or a
18 // property of a map policy.
19 struct POLICY_EXPORT SchemaNode
{
21 base::Value::Type type
;
23 // If |type| is TYPE_DICTIONARY then |extra| is an offset into
24 // SchemaData::properties_nodes that indexes the PropertiesNode describing
25 // the entries of this dictionary.
27 // If |type| is TYPE_LIST then |extra| is an offset into
28 // SchemaData::schema_nodes that indexes the SchemaNode describing the items
31 // If |type| is TYPE_INTEGER or TYPE_STRING, and contains corresponding
32 // restriction (enumeration of possible values, or range for integer), then
33 // |extra| is an offset into SchemaData::restriction_nodes that indexes the
34 // RestrictionNode describing the restriction on the value.
36 // Otherwise extra is -1 and is invalid.
40 // Represents an entry of a map policy.
41 struct POLICY_EXPORT PropertyNode
{
45 // An offset into SchemaData::schema_nodes that indexes the SchemaNode
46 // describing the structure of this key.
50 // Represents the list of keys of a map policy.
51 struct POLICY_EXPORT PropertiesNode
{
52 // An offset into SchemaData::property_nodes that indexes the PropertyNode
53 // describing the first known property of this map policy.
56 // An offset into SchemaData::property_nodes that indexes the PropertyNode
57 // right beyond the last known property of this map policy.
59 // If |begin == end| then the map policy that this PropertiesNode corresponds
60 // to does not have known properties.
62 // Note that the range [begin, end) is sorted by PropertyNode::key, so that
63 // properties can be looked up by binary searching in the range.
66 // An offset into SchemaData::property_nodes that indexes the PropertyNode
67 // right beyond the last known pattern property.
69 // [end, pattern_end) is the range that covers all pattern properties
70 // defined. It's not required to be sorted.
73 // If this map policy supports keys with any value (besides the well-known
74 // values described in the range [begin, end)) then |additional| is an offset
75 // into SchemaData::schema_nodes that indexes the SchemaNode describing the
76 // structure of the values for those keys. Otherwise |additional| is -1 and
81 // Represents the restriction on TYPE_INTEGER or TYPE_STRING instance of
83 union POLICY_EXPORT RestrictionNode
{
84 // Offsets into SchemaData::int_enums or SchemaData::string_enums, the
85 // entry of which describes the enumeration of all possible values of
86 // corresponding integer or string value. |offset_begin| being strictly less
87 // than |offset_end| is assumed.
88 struct EnumerationRestriction
{
91 } enumeration_restriction
;
93 // For integer type only, represents that all values between |min_value|
94 // and |max_value| can be choosen. Note that integer type in base::Value
95 // is bounded, so this can also be used if only one of |min_value| and
96 // |max_value| is stated. |max_value| being greater or equal to |min_value|
98 struct RangedRestriction
{
101 } ranged_restriction
;
103 // For string type only, requires |pattern_index| and |pattern_index_backup|
104 // to be exactly the same. And it's an offset into SchemaData::string_enums
105 // which contains the regular expression that the target string must follow.
106 struct StringPatternRestriction
{
108 int pattern_index_backup
;
109 } string_pattern_restriction
;
113 // Contains arrays of related nodes. All of the offsets in these nodes reference
114 // other nodes in these arrays.
115 struct POLICY_EXPORT SchemaData
{
116 const SchemaNode
* schema_nodes
;
117 const PropertyNode
* property_nodes
;
118 const PropertiesNode
* properties_nodes
;
119 const RestrictionNode
* restriction_nodes
;
121 const int* int_enums
;
122 const char** string_enums
;
125 } // namespace internal
126 } // namespace policy
128 #endif // COMPONENTS_POLICY_CORE_COMMON_SCHEMA_INTERNAL_H_