| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef COMPONENTS_POLICY_CORE_COMMON_SCHEMA_H_ | 5 #ifndef COMPONENTS_POLICY_CORE_COMMON_SCHEMA_H_ |
| 6 #define COMPONENTS_POLICY_CORE_COMMON_SCHEMA_H_ | 6 #define COMPONENTS_POLICY_CORE_COMMON_SCHEMA_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "components/policy/policy_export.h" | 13 #include "components/policy/policy_export.h" |
| 14 | 14 |
| 15 namespace policy { | 15 namespace policy { |
| 16 namespace internal { | 16 namespace internal { |
| 17 | 17 |
| 18 struct POLICY_EXPORT SchemaData; | 18 struct POLICY_EXPORT SchemaData; |
| 19 struct POLICY_EXPORT SchemaNode; | 19 struct POLICY_EXPORT SchemaNode; |
| 20 struct POLICY_EXPORT PropertyNode; | 20 struct POLICY_EXPORT PropertyNode; |
| 21 struct POLICY_EXPORT PropertiesNode; | 21 struct POLICY_EXPORT PropertiesNode; |
| 22 | 22 |
| 23 } // namespace internal | 23 } // namespace internal |
| 24 | 24 |
| 25 // Option flags passed to Schema::Validate() and Schema::Normalize(), describing | 25 // Option flags passed to Schema::Validate() and Schema::Normalize(), describing |
| 26 // the strategy to handle unknown properties or invalid values for dict type. | 26 // the strategy to handle unknown properties or invalid values for dict type. |
| 27 // Note that in Schema::Normalize() allowed errors will be dropped and thus | 27 // Note that in Schema::Normalize() allowed errors will be dropped and thus |
| 28 // ignored. | 28 // ignored. |
| 29 // Unknown error indicates that some value in a dictionary (may or may not be |
| 30 // the one in root) have unknown property name according to schema. |
| 31 // Invalid error indicates a validation failure against the schema. As |
| 32 // validation is done recursively, a validation failure of dict properties or |
| 33 // list items might be ignored (or dropped in Normalize()) or trigger whole |
| 34 // dictionary/list validation failure. |
| 29 enum SchemaOnErrorStrategy { | 35 enum SchemaOnErrorStrategy { |
| 30 // No errors will be allowed. | 36 // No errors will be allowed. |
| 31 SCHEMA_STRICT = 0, | 37 SCHEMA_STRICT = 0, |
| 32 // Unknown properties in the top-level dictionary will be ignored. | 38 // Unknown properties in the top-level dictionary will be ignored. |
| 33 SCHEMA_ALLOW_UNKNOWN_TOPLEVEL, | 39 SCHEMA_ALLOW_UNKNOWN_TOPLEVEL, |
| 34 // Unknown properties in any dictionary will be ignored. | 40 // Unknown properties in any dictionary will be ignored. |
| 35 SCHEMA_ALLOW_UNKNOWN, | 41 SCHEMA_ALLOW_UNKNOWN, |
| 36 // Mismatched values will be ignored at the toplevel. | 42 // Mismatched values will be ignored at the toplevel. |
| 37 SCHEMA_ALLOW_INVALID_TOPLEVEL, | 43 SCHEMA_ALLOW_INVALID_TOPLEVEL, |
| 38 // Mismatched values will be ignored at the top-level value. | 44 // Mismatched values will be ignored at the top-level value. |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 // detailed message if |value| doesn't strictly conform to the schema. If | 89 // detailed message if |value| doesn't strictly conform to the schema. If |
| 84 // |value| doesn't conform to the schema even within the allowance of | 90 // |value| doesn't conform to the schema even within the allowance of |
| 85 // |strategy|, false will be returned and |error_path| and |error| will | 91 // |strategy|, false will be returned and |error_path| and |error| will |
| 86 // contain the corresponding error that caused the failure. |error_path| can | 92 // contain the corresponding error that caused the failure. |error_path| can |
| 87 // be NULL and in that case no error path will be returned. | 93 // be NULL and in that case no error path will be returned. |
| 88 bool Validate(const base::Value& value, | 94 bool Validate(const base::Value& value, |
| 89 SchemaOnErrorStrategy strategy, | 95 SchemaOnErrorStrategy strategy, |
| 90 std::string* error_path, | 96 std::string* error_path, |
| 91 std::string* error) const; | 97 std::string* error) const; |
| 92 | 98 |
| 93 // Same as Validate() but drop values with errors instead of ignoring them. | 99 // Similar to Validate() but drop values with errors instead of ignoring them. |
| 100 // |changed| is a pointer to a boolean value, and indicate whether |value| |
| 101 // is changed or not (probably dropped properties or items). Be sure to set |
| 102 // the bool that |changed| pointed to to false before calling Normalize(). |
| 103 // |changed| can be NULL and in that case no boolean will be set. |
| 104 // This function will also take the ownership of dropped base::Value and |
| 105 // destroy them. |
| 94 bool Normalize(base::Value* value, | 106 bool Normalize(base::Value* value, |
| 95 SchemaOnErrorStrategy strategy, | 107 SchemaOnErrorStrategy strategy, |
| 96 std::string* error_path, | 108 std::string* error_path, |
| 97 std::string* error) const; | 109 std::string* error, |
| 110 bool* changed) const; |
| 98 | 111 |
| 99 // Used to iterate over the known properties of TYPE_DICTIONARY schemas. | 112 // Used to iterate over the known properties of TYPE_DICTIONARY schemas. |
| 100 class POLICY_EXPORT Iterator { | 113 class POLICY_EXPORT Iterator { |
| 101 public: | 114 public: |
| 102 Iterator(const scoped_refptr<const InternalStorage>& storage, | 115 Iterator(const scoped_refptr<const InternalStorage>& storage, |
| 103 const internal::PropertiesNode* node); | 116 const internal::PropertiesNode* node); |
| 104 Iterator(const Iterator& iterator); | 117 Iterator(const Iterator& iterator); |
| 105 ~Iterator(); | 118 ~Iterator(); |
| 106 | 119 |
| 107 Iterator& operator=(const Iterator& iterator); | 120 Iterator& operator=(const Iterator& iterator); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 bool ValidateIntegerRestriction(int index, int value) const; | 170 bool ValidateIntegerRestriction(int index, int value) const; |
| 158 bool ValidateStringRestriction(int index, const char* str) const; | 171 bool ValidateStringRestriction(int index, const char* str) const; |
| 159 | 172 |
| 160 scoped_refptr<const InternalStorage> storage_; | 173 scoped_refptr<const InternalStorage> storage_; |
| 161 const internal::SchemaNode* node_; | 174 const internal::SchemaNode* node_; |
| 162 }; | 175 }; |
| 163 | 176 |
| 164 } // namespace policy | 177 } // namespace policy |
| 165 | 178 |
| 166 #endif // COMPONENTS_POLICY_CORE_COMMON_SCHEMA_H_ | 179 #endif // COMPONENTS_POLICY_CORE_COMMON_SCHEMA_H_ |
| OLD | NEW |