Chromium Code Reviews| Index: chromeos/network/onc/onc_validator.h |
| diff --git a/chromeos/network/onc/onc_validator.h b/chromeos/network/onc/onc_validator.h |
| index 4a742720752c9efa5c45d2041a48a3a49cbbe562..23ad30216a314be97ab1b8f8e96f28837683a3ab 100644 |
| --- a/chromeos/network/onc/onc_validator.h |
| +++ b/chromeos/network/onc/onc_validator.h |
| @@ -5,6 +5,8 @@ |
| #ifndef CHROMEOS_NETWORK_ONC_ONC_VALIDATOR_H_ |
| #define CHROMEOS_NETWORK_ONC_ONC_VALIDATOR_H_ |
| +#include <vector> |
|
Joao da Silva
2012/12/13 09:51:35
Also <string>
pneubeck (no reviews)
2012/12/13 14:10:03
Done.
|
| + |
| #include "base/memory/scoped_ptr.h" |
| #include "chromeos/chromeos_export.h" |
| #include "chromeos/network/onc/onc_mapper.h" |
| @@ -21,6 +23,12 @@ struct OncValueSignature; |
| class CHROMEOS_EXPORT Validator : public Mapper { |
| public: |
| + enum Result { |
| + VALID, |
| + VALID_WITH_WARNINGS, |
| + INVALID |
| + }; |
| + |
| // Creates a Validator that searches for the following invalid cases: |
|
pastarmovj
2012/12/13 10:15:44
This seems more like a documentation on the class
pneubeck (no reviews)
2012/12/13 14:10:03
Done and added a missing case in the comment.
|
| // - a field name is found that is not part of the signature |
| // (controlled by |error_on_unknown_field|) |
| @@ -35,11 +43,18 @@ class CHROMEOS_EXPORT Validator : public Mapper { |
| // - a required field is missing (controlled by |error_on_missing_field|) |
| // |
| // If one of these invalid cases occurs and the controlling flag is true, then |
| - // it is an error and the validation stops. The function |
| - // ValidateAndRepairObject returns NULL. |
| + // it is an error. The function ValidateAndRepairObject sets |result| to |
| + // INVALID and returns NULL. |
| + // |
| + // Otherwise, a DeepCopy of the validated object is created, which contains |
| + // all but the invalid fields and values. |
| // |
| - // If no error occurred, then a DeepCopy of the validated object is created, |
| - // which contains all but the invalid fields and values. |
| + // If one of the invalid cases occurs and the controlling flag is false, then |
| + // it is a warning. The function ValidateAndRepairObject sets |result| to |
| + // VALID_WITH_WARNINGS and returns the repaired copy. |
| + // |
| + // If no error occurred, |result| is set to VALID and an exact DeepCopy is |
| + // returned. |
| Validator(bool error_on_unknown_field, |
| bool error_on_wrong_recommended, |
| bool error_on_missing_field, |
| @@ -52,22 +67,25 @@ class CHROMEOS_EXPORT Validator : public Mapper { |
| // |onc_signature.h|. If an error is found, the function returns NULL. If |
| // possible (no error encountered) a DeepCopy is created that contains all but |
| // the invalid fields and values and returns this "repaired" object. |
| - // That means, if not handled as an error, then the following are ignored: |
| + // That means, if not handled as an error, then the following are dropped from |
| + // the copy: |
| // - unknown fields |
| // - invalid field names in kRecommended arrays |
| // - kRecommended fields in an unmanaged ONC |
| // For details, see the comment at the Constructor. |
| scoped_ptr<base::DictionaryValue> ValidateAndRepairObject( |
| const OncValueSignature* object_signature, |
| - const base::DictionaryValue& onc_object); |
| + const base::DictionaryValue& onc_object, |
| + Result* result); |
| private: |
| - // Overriden from Mapper: |
| + // Overridden from Mapper: |
| // Compare |onc_value|s type with |onc_type| and validate/repair according to |
| // |signature|. On error returns NULL. |
| virtual scoped_ptr<base::Value> MapValue( |
| const OncValueSignature& signature, |
| - const base::Value& onc_value) OVERRIDE; |
| + const base::Value& onc_value, |
| + bool* error) OVERRIDE; |
| // Dispatch to the right validation function according to |
| // |signature|. Iterates over all fields and recursively validates/repairs |
| @@ -75,7 +93,23 @@ class CHROMEOS_EXPORT Validator : public Mapper { |
| // repaired dictionary. On error returns NULL. |
| virtual scoped_ptr<base::DictionaryValue> MapObject( |
| const OncValueSignature& signature, |
| - const base::DictionaryValue& onc_object) OVERRIDE; |
| + const base::DictionaryValue& onc_object, |
| + bool* error) OVERRIDE; |
| + |
| + // Pushes/pops the |field_name| to |path_|, otherwise like |Mapper::MapField|. |
| + virtual scoped_ptr<base::Value> MapField( |
| + const std::string& field_name, |
| + const OncValueSignature& object_signature, |
| + const base::Value& onc_value, |
| + bool* found_unknown_field, |
| + bool* error) OVERRIDE; |
| + |
| + // Pushes/pops the index to |path_|, otherwise like |Mapper::MapEntry|. |
| + virtual scoped_ptr<base::Value> MapEntry( |
| + int index, |
| + const OncValueSignature& signature, |
| + const base::Value& onc_value, |
| + bool* error) OVERRIDE; |
| // This is the default validation of objects/dictionaries. Validates |
| // |onc_object| according to |object_signature|. |result| must point to a |
| @@ -91,6 +125,10 @@ class CHROMEOS_EXPORT Validator : public Mapper { |
| const OncValueSignature& object_signature, |
| base::DictionaryValue* result); |
| + bool ValidateToplevelConfiguration( |
| + const base::DictionaryValue& onc_object, |
| + base::DictionaryValue* result); |
| + |
| bool ValidateNetworkConfiguration( |
| const base::DictionaryValue& onc_object, |
| base::DictionaryValue* result); |
| @@ -139,11 +177,34 @@ class CHROMEOS_EXPORT Validator : public Mapper { |
| const base::DictionaryValue& onc_object, |
| base::DictionaryValue* result); |
| + bool FieldExistsAndHasNoValueOf(const base::DictionaryValue& object, |
| + const std::string &field_name, |
| + const char** valid_values); |
| + |
| + bool FieldExistsAndIsNotInRange(const base::DictionaryValue& object, |
| + const std::string &field_name, |
| + int lower_bound, |
| + int upper_bound); |
| + |
| + bool RequireField(const base::DictionaryValue& dict, const std::string& key); |
| + |
| + std::string WarningHeader(); |
| + std::string ErrorHeader(); |
| + std::string MessageHeader(bool is_error); |
| + |
| const bool error_on_unknown_field_; |
| const bool error_on_wrong_recommended_; |
| const bool error_on_missing_field_; |
| const bool managed_onc_; |
| + // The path of field names and indices to the current value. Indices |
| + // are stored as strings in decimal notation. |
| + std::vector<std::string> path_; |
| + |
| + // Tracks if an error or warning occurred within validation initiated by |
| + // function ValidateAndRepairObject. |
| + bool error_or_warning_found_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(Validator); |
| }; |