| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 CHROME_BROWSER_CHROMEOS_NETWORK_SETTINGS_ONC_VALIDATOR_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_NETWORK_SETTINGS_ONC_VALIDATOR_H_ |
| 6 #define CHROME_BROWSER_CHROMEOS_NETWORK_SETTINGS_ONC_VALIDATOR_H_ | 6 #define CHROME_BROWSER_CHROMEOS_NETWORK_SETTINGS_ONC_VALIDATOR_H_ |
| 7 | 7 |
| 8 #include <sstream> |
| 9 #include <vector> |
| 10 |
| 8 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
| 12 #include "base/memory/scoped_vector.h" |
| 13 #include "base/string16.h" |
| 9 #include "chrome/browser/chromeos/network_settings/onc_mapper.h" | 14 #include "chrome/browser/chromeos/network_settings/onc_mapper.h" |
| 10 | 15 |
| 11 namespace base { | 16 namespace base { |
| 12 class Value; | 17 class Value; |
| 13 class DictionaryValue; | 18 class DictionaryValue; |
| 14 } | 19 } |
| 15 | 20 |
| 16 namespace chromeos { | 21 namespace chromeos { |
| 17 namespace onc { | 22 namespace onc { |
| 18 | 23 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 // |onc_signature.h|. If an error is found, the function returns NULL. If | 56 // |onc_signature.h|. If an error is found, the function returns NULL. If |
| 52 // possible (no error encountered) a DeepCopy is created that contains all but | 57 // possible (no error encountered) a DeepCopy is created that contains all but |
| 53 // the invalid fields and values and returns this "repaired" object. | 58 // the invalid fields and values and returns this "repaired" object. |
| 54 // That means, if not handled as an error, then the following are ignored: | 59 // That means, if not handled as an error, then the following are ignored: |
| 55 // - unknown fields | 60 // - unknown fields |
| 56 // - invalid field names in kRecommended arrays | 61 // - invalid field names in kRecommended arrays |
| 57 // - kRecommended fields in an unmanaged ONC | 62 // - kRecommended fields in an unmanaged ONC |
| 58 // For details, see the comment at the Constructor. | 63 // For details, see the comment at the Constructor. |
| 59 scoped_ptr<base::DictionaryValue> ValidateAndRepairObject( | 64 scoped_ptr<base::DictionaryValue> ValidateAndRepairObject( |
| 60 const OncValueSignature* object_signature, | 65 const OncValueSignature* object_signature, |
| 61 const base::DictionaryValue& onc_object); | 66 const base::DictionaryValue& onc_object, |
| 67 std::string* messages); |
| 62 | 68 |
| 63 private: | 69 private: |
| 64 // Overriden from Mapper: | 70 // Overridden from Mapper: |
| 65 // Compare |onc_value|s type with |onc_type| and validate/repair according to | 71 // Compare |onc_value|s type with |onc_type| and validate/repair according to |
| 66 // |signature|. On error returns NULL. | 72 // |signature|. On error returns NULL. |
| 67 virtual scoped_ptr<base::Value> MapValue( | 73 virtual scoped_ptr<base::Value> MapValue( |
| 68 const OncValueSignature& signature, | 74 const OncValueSignature& signature, |
| 69 const base::Value& onc_value) OVERRIDE; | 75 const base::Value& onc_value, |
| 76 bool* error) OVERRIDE; |
| 70 | 77 |
| 71 // Dispatch to the right validation function according to | 78 // Dispatch to the right validation function according to |
| 72 // |signature|. Iterates over all fields and recursively validates/repairs | 79 // |signature|. Iterates over all fields and recursively validates/repairs |
| 73 // these. All valid fields are added to the result dictionary. Returns the | 80 // these. All valid fields are added to the result dictionary. Returns the |
| 74 // repaired dictionary. On error returns NULL. | 81 // repaired dictionary. On error returns NULL. |
| 75 virtual scoped_ptr<base::DictionaryValue> MapObject( | 82 virtual scoped_ptr<base::DictionaryValue> MapObject( |
| 76 const OncValueSignature& signature, | 83 const OncValueSignature& signature, |
| 77 const base::DictionaryValue& onc_object) OVERRIDE; | 84 const base::DictionaryValue& onc_object, |
| 85 bool* error) OVERRIDE; |
| 86 |
| 87 // Pushes/pops the |field_name| to |path_|, otherwise like |Mapper::MapField|. |
| 88 virtual scoped_ptr<base::Value> MapField( |
| 89 const std::string& field_name, |
| 90 const OncValueSignature& object_signature, |
| 91 const base::Value& onc_value, |
| 92 bool* found_unknown_field, |
| 93 bool* error) OVERRIDE; |
| 94 |
| 95 // Pushes/pops the index to |path_|, otherwise like |Mapper::MapEntry|. |
| 96 virtual scoped_ptr<base::Value> MapEntry( |
| 97 int index, |
| 98 const OncValueSignature& signature, |
| 99 const base::Value& onc_value, |
| 100 bool* error) OVERRIDE; |
| 78 | 101 |
| 79 // This is the default validation of objects/dictionaries. Validates | 102 // This is the default validation of objects/dictionaries. Validates |
| 80 // |onc_object| according to |object_signature|. |result| must point to a | 103 // |onc_object| according to |object_signature|. |result| must point to a |
| 81 // dictionary into which the repaired fields are written. | 104 // dictionary into which the repaired fields are written. |
| 82 bool ValidateObjectDefault( | 105 bool ValidateObjectDefault( |
| 83 const OncValueSignature& object_signature, | 106 const OncValueSignature& object_signature, |
| 84 const base::DictionaryValue& onc_object, | 107 const base::DictionaryValue& onc_object, |
| 85 base::DictionaryValue* result); | 108 base::DictionaryValue* result); |
| 86 | 109 |
| 87 // Validates/repairs the kRecommended array in |result| according to | 110 // Validates/repairs the kRecommended array in |result| according to |
| 88 // |object_signature| of the enclosing object. | 111 // |object_signature| of the enclosing object. |
| 89 bool ValidateRecommendedField( | 112 bool ValidateRecommendedField( |
| 90 const OncValueSignature& object_signature, | 113 const OncValueSignature& object_signature, |
| 91 base::DictionaryValue* result); | 114 base::DictionaryValue* result); |
| 92 | 115 |
| 116 bool ValidateToplevelConfiguration( |
| 117 const base::DictionaryValue& onc_object, |
| 118 base::DictionaryValue* result); |
| 119 |
| 93 bool ValidateNetworkConfiguration( | 120 bool ValidateNetworkConfiguration( |
| 94 const base::DictionaryValue& onc_object, | 121 const base::DictionaryValue& onc_object, |
| 95 base::DictionaryValue* result); | 122 base::DictionaryValue* result); |
| 96 | 123 |
| 97 bool ValidateEthernet( | 124 bool ValidateEthernet( |
| 98 const base::DictionaryValue& onc_object, | 125 const base::DictionaryValue& onc_object, |
| 99 base::DictionaryValue* result); | 126 base::DictionaryValue* result); |
| 100 | 127 |
| 101 bool ValidateIPConfig( | 128 bool ValidateIPConfig( |
| 102 const base::DictionaryValue& onc_object, | 129 const base::DictionaryValue& onc_object, |
| (...skipping 28 matching lines...) Expand all Loading... |
| 131 base::DictionaryValue* result); | 158 base::DictionaryValue* result); |
| 132 | 159 |
| 133 bool ValidateEAP( | 160 bool ValidateEAP( |
| 134 const base::DictionaryValue& onc_object, | 161 const base::DictionaryValue& onc_object, |
| 135 base::DictionaryValue* result); | 162 base::DictionaryValue* result); |
| 136 | 163 |
| 137 bool ValidateCertificate( | 164 bool ValidateCertificate( |
| 138 const base::DictionaryValue& onc_object, | 165 const base::DictionaryValue& onc_object, |
| 139 base::DictionaryValue* result); | 166 base::DictionaryValue* result); |
| 140 | 167 |
| 168 bool FieldExistsAndHasNoValueOf(const base::DictionaryValue& object, |
| 169 const std::string &field_name, |
| 170 const char** valid_values); |
| 171 |
| 172 bool FieldExistsAndIsNotInRange(const base::DictionaryValue& object, |
| 173 const std::string &field_name, |
| 174 int lower_bound, |
| 175 int upper_bound); |
| 176 |
| 177 bool RequireField(const base::DictionaryValue& dict, const std::string& key); |
| 178 |
| 179 void AddWarning(const std::string& msg); |
| 180 void AddError(const std::string& msg); |
| 181 void AddMessage(bool is_error, const std::string& msg); |
| 182 |
| 183 std::string JoinMessages(); |
| 184 |
| 141 const bool error_on_unknown_field_; | 185 const bool error_on_unknown_field_; |
| 142 const bool error_on_wrong_recommended_; | 186 const bool error_on_wrong_recommended_; |
| 143 const bool error_on_missing_field_; | 187 const bool error_on_missing_field_; |
| 144 const bool managed_onc_; | 188 const bool managed_onc_; |
| 145 | 189 |
| 190 // The path of field names and indices to the current value. Indices |
| 191 // are stored as strings in decimal notation. |
| 192 std::vector<std::string> path_; |
| 193 |
| 194 // A list of warning/error messages accumulated up to the current entry. |
| 195 // ScopedVector<std::ostringstream> messages_; |
| 196 std::vector<std::string> messages_; |
| 197 |
| 146 DISALLOW_COPY_AND_ASSIGN(Validator); | 198 DISALLOW_COPY_AND_ASSIGN(Validator); |
| 147 }; | 199 }; |
| 148 | 200 |
| 149 } // namespace onc | 201 } // namespace onc |
| 150 } // namespace chromeos | 202 } // namespace chromeos |
| 151 | 203 |
| 152 #endif // CHROME_BROWSER_CHROMEOS_NETWORK_SETTINGS_ONC_VALIDATOR_H_ | 204 #endif // CHROME_BROWSER_CHROMEOS_NETWORK_SETTINGS_ONC_VALIDATOR_H_ |
| OLD | NEW |