Index: third_party/libaddressinput/chromium/chrome_address_validator.h |
diff --git a/third_party/libaddressinput/chromium/preload_address_validator.h b/third_party/libaddressinput/chromium/chrome_address_validator.h |
similarity index 55% |
rename from third_party/libaddressinput/chromium/preload_address_validator.h |
rename to third_party/libaddressinput/chromium/chrome_address_validator.h |
index 8b22040b912a95e5bbb60569bb6f160855d0a039..49875c8272a1071c56baa1e309cc126285c06d66 100644 |
--- a/third_party/libaddressinput/chromium/preload_address_validator.h |
+++ b/third_party/libaddressinput/chromium/chrome_address_validator.h |
@@ -2,8 +2,8 @@ |
// 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_ |
+#ifndef THIRD_PARTY_LIBADDRESSINPUT_CHROMIUM_CHROME_ADDRESS_VALIDATOR_H_ |
+#define THIRD_PARTY_LIBADDRESSINPUT_CHROMIUM_CHROME_ADDRESS_VALIDATOR_H_ |
#include <cstddef> |
#include <string> |
@@ -14,28 +14,49 @@ |
#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" |
+#include "third_party/libaddressinput/src/cpp/include/libaddressinput/preload_supplier.h" |
namespace i18n { |
namespace addressinput { |
- |
+class AddressNormalizer; |
class Downloader; |
-class PreloadSupplier; |
class Storage; |
-class Synonyms; |
struct AddressData; |
- |
-} // namespace addressinput |
-} // namespace i18n |
+} |
+} |
namespace autofill { |
-class Suggestions; |
+class InputSuggester; |
-// Interface to the libaddressinput AddressValidator for Chromium Autofill. |
-class PreloadAddressValidator { |
+// The object to be notified when loading of address validation rules is |
+// finished. |
+class LoadRulesListener { |
public: |
- typedef ::i18n::addressinput::Callback<std::string, int> Callback; |
+ virtual ~LoadRulesListener() {} |
+ |
+ // Called when the validation rules for the |country_code| have been loaded. |
+ // The validation rules include the generic rules for the |country_code| and |
+ // specific rules for the country's administrative areas, localities, and |
+ // dependent localities. If a country has language-specific validation rules, |
+ // then these are also loaded. |
+ // |
+ // The |success| parameter is true when the rules were loaded successfully. |
+ virtual void OnAddressValidationRulesLoaded(const std::string& country_code, |
+ bool success) = 0; |
+}; |
+// Interface to the libaddressinput AddressValidator for Chromium Autofill. The |
+// class is named AddressValidator to simplify switching between libaddressinput |
+// and this version. |
+// |
+// It's not possible to name this file address_validator.h because some |
+// compilers do not handle multiple files with the same name (although in |
+// different directories) gracefully. This class is a shim between upstream |
+// libaddressinput API and the API that Chrome expects, hence the file name |
+// chrome_address_validator.h. |
+class AddressValidator { |
+ public: |
// The status of address validation. |
enum Status { |
// Address validation completed successfully. Check |problems| to see if any |
@@ -51,15 +72,15 @@ class PreloadAddressValidator { |
}; |
// Takes ownership of |downloader| and |storage|. |
- PreloadAddressValidator( |
- const std::string& validation_data_url, |
- scoped_ptr< ::i18n::addressinput::Downloader> downloader, |
- scoped_ptr< ::i18n::addressinput::Storage> storage); |
+ AddressValidator(const std::string& validation_data_url, |
+ scoped_ptr< ::i18n::addressinput::Downloader> downloader, |
+ scoped_ptr< ::i18n::addressinput::Storage> storage, |
+ LoadRulesListener* load_rules_listener); |
- virtual ~PreloadAddressValidator(); |
+ virtual ~AddressValidator(); |
// Loads the generic validation rules for |region_code| and specific rules |
- // for the regions's administrative areas, localities, and dependent |
+ // for the region'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. |
// |
@@ -67,9 +88,8 @@ class PreloadAddressValidator { |
// 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); |
+ // Invokes |load_rules_listener| when the loading has finished. |
+ virtual void LoadRules(const std::string& region_code); |
// Validates the |address| and populates |problems| with the validation |
// problems, filtered according to the |filter| parameter. |
@@ -77,7 +97,7 @@ class PreloadAddressValidator { |
// 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( |
+ virtual Status ValidateAddress( |
const ::i18n::addressinput::AddressData& address, |
const ::i18n::addressinput::FieldProblemMap* filter, |
::i18n::addressinput::FieldProblemMap* problems) const; |
@@ -119,23 +139,48 @@ class PreloadAddressValidator { |
::i18n::addressinput::AddressData* address) const; |
private: |
+ friend class MockAddressValidator; |
+ |
+ // Constructor used only for MockAddressValidator. |
+ AddressValidator(); |
+ |
+ // Verifies that |validator_| succeeded. Invoked by |validated_| callback. |
void Validated(bool success, |
const ::i18n::addressinput::AddressData&, |
const ::i18n::addressinput::FieldProblemMap&); |
+ // Invokes the |load_rules_listener_|, if it's not NULL. Called by |
+ // |rules_loaded_| callback. |
+ void RulesLoaded(bool success, const std::string& country_code, int); |
+ |
+ // Loads and stores aggregate rules at COUNTRY level. |
const scoped_ptr< ::i18n::addressinput::PreloadSupplier> supplier_; |
- const scoped_ptr<Suggestions> suggestions_; |
- const scoped_ptr< ::i18n::addressinput::Synonyms> synonyms_; |
+ |
+ // Suggests addresses based on user input. |
+ const scoped_ptr<InputSuggester> input_suggester_; |
+ |
+ // Normalizes addresses into a canonical form. |
+ const scoped_ptr< ::i18n::addressinput::AddressNormalizer> normalizer_; |
+ |
+ // Validates addresses. |
const scoped_ptr<const ::i18n::addressinput::AddressValidator> validator_; |
+ |
+ // The callback that |validator_| invokes when it finished validating an |
+ // address. |
const scoped_ptr<const ::i18n::addressinput::AddressValidator::Callback> |
validated_; |
- friend class MockAddressValidator; |
- PreloadAddressValidator(); |
+ // The callback that |supplier_| invokes when it finished loading rules. |
+ const scoped_ptr<const ::i18n::addressinput::PreloadSupplier::Callback> |
+ rules_loaded_; |
+ |
+ // Not owned delegate to invoke when |suppler_| finished loading rules. Can be |
+ // NULL. |
+ LoadRulesListener* const load_rules_listener_; |
- DISALLOW_COPY_AND_ASSIGN(PreloadAddressValidator); |
+ DISALLOW_COPY_AND_ASSIGN(AddressValidator); |
}; |
} // namespace autofill |
-#endif // THIRD_PARTY_LIBADDRESSINPUT_CHROMIUM_PRELOAD_ADDRESS_VALIDATOR_H_ |
+#endif // THIRD_PARTY_LIBADDRESSINPUT_CHROMIUM_CHROME_ADDRESS_VALIDATOR_H_ |