Index: third_party/libaddressinput/chromium/preload_address_validator.h |
diff --git a/third_party/libaddressinput/chromium/preload_address_validator.h b/third_party/libaddressinput/chromium/preload_address_validator.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..414f462ac9ee68e16835ba3bc0710bdfb0318ee1 |
--- /dev/null |
+++ b/third_party/libaddressinput/chromium/preload_address_validator.h |
@@ -0,0 +1,140 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef THIRD_PARTY_LIBADDRESSINPUT_CHROMIUM_PRELOAD_ADDRESS_VALIDATOR_H_ |
+#define THIRD_PARTY_LIBADDRESSINPUT_CHROMIUM_PRELOAD_ADDRESS_VALIDATOR_H_ |
+ |
+#include <cstddef> |
+#include <string> |
+#include <vector> |
+ |
+#include "base/macros.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_field.h" |
+#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_validator.h" |
+#include "third_party/libaddressinput/src/cpp/include/libaddressinput/callback.h" |
+ |
+namespace i18n { |
+namespace addressinput { |
+ |
+class Downloader; |
+class PreloadSupplier; |
+class Storage; |
+struct AddressData; |
+ |
+} // namespace addressinput |
+} // namespace i18n |
+ |
+namespace autofill { |
+ |
+// Interface to the libaddressinput AddressValidator for Chromium Autofill. |
+class PreloadAddressValidator { |
+ public: |
+ typedef ::i18n::addressinput::Callback<std::string, int> Callback; |
+ |
+ // The status of address validation. |
+ enum Status { |
+ // Address validation completed successfully. Check |problems| to see if any |
+ // problems were found. |
+ SUCCESS, |
+ |
+ // The validation rules are not available, because LoadRules() was not |
+ // called or failed. Reload the rules. |
+ RULES_UNAVAILABLE, |
+ |
+ // The validation rules are being loaded. Try again later. |
+ RULES_NOT_READY |
+ }; |
+ |
+ // Constructors take ownership of |downloader| and |storage|. |
+ PreloadAddressValidator( |
+ scoped_ptr< ::i18n::addressinput::Downloader> downloader, |
+ scoped_ptr< ::i18n::addressinput::Storage> storage); |
+ |
+ PreloadAddressValidator( |
+ const std::string& validation_data_url, |
+ scoped_ptr< ::i18n::addressinput::Downloader> downloader, |
+ scoped_ptr< ::i18n::addressinput::Storage> storage); |
+ |
+ virtual ~PreloadAddressValidator(); |
+ |
+ // Loads the generic validation rules for |region_code| and specific rules |
+ // for the regions's administrative areas, localities, and dependent |
+ // localities. A typical data size is 10KB. The largest is 250KB. If a region |
+ // has language-specific validation rules, then these are also loaded. |
+ // |
+ // Example rule: |
+ // https://i18napis.appspot.com/ssl-aggregate-address/data/US |
+ // |
+ // If the rules are already in progress of being loaded, it does nothing. |
+ // Calls |loaded| when the loading has finished. |
+ virtual void LoadRules(const std::string& region_code, |
+ const Callback& loaded); |
+ |
+ // Validates the |address| and populates |problems| with the validation |
+ // problems, filtered according to the |filter| parameter. |
+ // |
+ // If the |filter| is empty, then all discovered validation problems are |
+ // returned. If the |filter| contains problem elements, then only the problems |
+ // in the |filter| may be returned. |
+ virtual Status Validate( |
+ const ::i18n::addressinput::AddressData& address, |
+ const ::i18n::addressinput::FieldProblemMap* filter, |
+ ::i18n::addressinput::FieldProblemMap* problems) const; |
+ |
+ // Fills in |suggestions| for the partially typed in |user_input|, assuming |
+ // the user is typing in the |focused_field|. If the number of |suggestions| |
+ // is over the |suggestion_limit|, then returns no |suggestions| at all. |
+ // |
+ // If the |solutions| parameter is NULL, the checks whether the validation |
+ // rules are available, but does not fill in suggestions. |
+ // |
+ // Sample user input 1: |
+ // country code = "US" |
+ // postal code = "90066" |
+ // focused field = POSTAL_CODE |
+ // suggestions limit = 1 |
+ // Suggestion: |
+ // [{administrative_area: "CA"}] |
+ // |
+ // Sample user input 2: |
+ // country code = "CN" |
+ // dependent locality = "Zongyang" |
+ // focused field = DEPENDENT_LOCALITY |
+ // suggestions limit = 10 |
+ // Suggestion: |
+ // [{dependent_locality: "Zongyang Xian", |
+ // locality: "Anqing Shi", |
+ // administrative_area: "Anhui Sheng"}] |
+ virtual Status GetSuggestions( |
+ const ::i18n::addressinput::AddressData& user_input, |
+ ::i18n::addressinput::AddressField focused_field, |
+ size_t suggestion_limit, |
+ std::vector< ::i18n::addressinput::AddressData>* suggestions) const; |
+ |
+ // Canonicalizes the administrative area in |address_data|. For example, |
+ // "texas" changes to "TX". Returns true on success, otherwise leaves |
+ // |address_data| alone and returns false. |
+ virtual bool CanonicalizeAdministrativeArea( |
+ ::i18n::addressinput::AddressData* address_data) const; |
+ |
+ private: |
+ void Validated(bool success, |
+ const ::i18n::addressinput::AddressData&, |
+ const ::i18n::addressinput::FieldProblemMap&); |
+ |
+ const scoped_ptr< ::i18n::addressinput::PreloadSupplier> supplier_; |
+ const scoped_ptr<const ::i18n::addressinput::AddressValidator> validator_; |
+ const scoped_ptr<const ::i18n::addressinput::AddressValidator::Callback> |
+ validated_; |
+ |
+ friend class MockAddressValidator; |
+ PreloadAddressValidator(); |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PreloadAddressValidator); |
+}; |
+ |
+} // namespace autofill |
+ |
+#endif // THIRD_PARTY_LIBADDRESSINPUT_CHROMIUM_PRELOAD_ADDRESS_VALIDATOR_H_ |