| Index: third_party/libaddressinput/chromium/preload_address_validator.cc
|
| diff --git a/third_party/libaddressinput/chromium/preload_address_validator.cc b/third_party/libaddressinput/chromium/preload_address_validator.cc
|
| index 816e3a5d522702e1ee041d3e33ab866dc4256185..e11a1fe464ad7f318e80264b31e7a17b95030244 100644
|
| --- a/third_party/libaddressinput/chromium/preload_address_validator.cc
|
| +++ b/third_party/libaddressinput/chromium/preload_address_validator.cc
|
| @@ -7,30 +7,34 @@
|
| #include <vector>
|
|
|
| #include "base/basictypes.h"
|
| +#include "base/logging.h"
|
| #include "base/memory/scoped_ptr.h"
|
| -
|
| -#define I18N_ADDRESSINPUT_UTIL_BASICTYPES_H_
|
| #include "third_party/libaddressinput/chromium/preload_address_validator.h"
|
| #include "third_party/libaddressinput/chromium/suggestions.h"
|
| #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_data.h"
|
| +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_input_helper.h"
|
| +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_normalizer.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/downloader.h"
|
| #include "third_party/libaddressinput/src/cpp/include/libaddressinput/preload_supplier.h"
|
| #include "third_party/libaddressinput/src/cpp/include/libaddressinput/storage.h"
|
| -#include "third_party/libaddressinput/src/cpp/include/libaddressinput/synonyms.h"
|
|
|
| namespace autofill {
|
|
|
| using ::i18n::addressinput::AddressData;
|
| using ::i18n::addressinput::AddressField;
|
| +using ::i18n::addressinput::AddressInputHelper;
|
| +using ::i18n::addressinput::AddressNormalizer;
|
| using ::i18n::addressinput::AddressValidator;
|
| using ::i18n::addressinput::BuildCallback;
|
| using ::i18n::addressinput::Downloader;
|
| using ::i18n::addressinput::FieldProblemMap;
|
| +using ::i18n::addressinput::INVALID_FORMAT;
|
| +using ::i18n::addressinput::MISMATCHING_VALUE;
|
| +using ::i18n::addressinput::POSTAL_CODE;
|
| using ::i18n::addressinput::PreloadSupplier;
|
| using ::i18n::addressinput::Storage;
|
| -using ::i18n::addressinput::Synonyms;
|
|
|
| PreloadAddressValidator::PreloadAddressValidator(
|
| const std::string& validation_data_url,
|
| @@ -44,21 +48,22 @@ PreloadAddressValidator::PreloadAddressValidator(
|
| suggestions_(
|
| new Suggestions(
|
| supplier_.get())),
|
| - synonyms_(
|
| - new Synonyms(
|
| + normalizer_(
|
| + new AddressNormalizer(
|
| supplier_.get())),
|
| validator_(
|
| new AddressValidator(
|
| supplier_.get())),
|
| + input_helper_(
|
| + new AddressInputHelper(supplier_.get())),
|
| validated_(BuildCallback(this, &PreloadAddressValidator::Validated)) {
|
| }
|
|
|
| -PreloadAddressValidator::~PreloadAddressValidator() {
|
| -}
|
| +PreloadAddressValidator::~PreloadAddressValidator() {}
|
|
|
| void PreloadAddressValidator::LoadRules(const std::string& region_code,
|
| const Callback& loaded) {
|
| - assert(supplier_ != NULL);
|
| + DCHECK(supplier_);
|
| supplier_->LoadRules(region_code, loaded);
|
| }
|
|
|
| @@ -66,19 +71,21 @@ PreloadAddressValidator::Status PreloadAddressValidator::Validate(
|
| const AddressData& address,
|
| const FieldProblemMap* filter,
|
| FieldProblemMap* problems) const {
|
| - assert(supplier_ != NULL);
|
| - assert(validator_ != NULL);
|
| + DCHECK(supplier_);
|
| + DCHECK(validator_);
|
| + DCHECK(normalizer_);
|
|
|
| - if (supplier_->IsPending(address.region_code)) {
|
| + if (supplier_->IsPending(address.region_code))
|
| return RULES_NOT_READY;
|
| - }
|
|
|
| - if (!supplier_->IsLoaded(address.region_code)) {
|
| + if (!supplier_->IsLoaded(address.region_code))
|
| return RULES_UNAVAILABLE;
|
| - }
|
| +
|
| + AddressData normalized_address = address;
|
| + normalizer_->Normalize(&normalized_address);
|
|
|
| validator_->Validate(
|
| - address,
|
| + normalized_address,
|
| /*allow_postal*/ false,
|
| /*require_name*/ false,
|
| filter,
|
| @@ -93,39 +100,72 @@ PreloadAddressValidator::Status PreloadAddressValidator::GetSuggestions(
|
| AddressField focused_field,
|
| size_t suggestion_limit,
|
| std::vector<AddressData>* suggestions) const {
|
| - assert(suggestions_ != NULL);
|
| - assert(supplier_ != NULL);
|
| + DCHECK(suggestions);
|
| + DCHECK(suggestions_);
|
| + DCHECK(input_helper_);
|
| + DCHECK(supplier_);
|
|
|
| - if (supplier_->IsPending(user_input.region_code)) {
|
| + if (supplier_->IsPending(user_input.region_code))
|
| return RULES_NOT_READY;
|
| - }
|
|
|
| - if (!supplier_->IsLoaded(user_input.region_code)) {
|
| + if (!supplier_->IsLoaded(user_input.region_code))
|
| return RULES_UNAVAILABLE;
|
| +
|
| + AddressData address_copy = user_input;
|
| + FieldProblemMap filter;
|
| + FieldProblemMap problems;
|
| + if (focused_field == POSTAL_CODE) {
|
| + filter.insert(std::make_pair(POSTAL_CODE, INVALID_FORMAT));
|
| +
|
| + Status status = Validate(address_copy, &filter, &problems);
|
| + DCHECK(status == SUCCESS);
|
| + (void)status;
|
| +
|
| + if (!problems.empty())
|
| + return SUCCESS;
|
| +
|
| + input_helper_->FillAddress(&address_copy);
|
| }
|
|
|
| suggestions_->GetSuggestions(
|
| - user_input,
|
| + address_copy,
|
| focused_field,
|
| suggestion_limit,
|
| suggestions);
|
|
|
| + filter.clear();
|
| + filter.insert(std::make_pair(POSTAL_CODE, MISMATCHING_VALUE));
|
| + std::vector<AddressData> valid_postal_codes;
|
| + for (std::vector<AddressData>::const_iterator suggestion_it =
|
| + suggestions->begin();
|
| + suggestion_it != suggestions->end();
|
| + ++suggestion_it) {
|
| + problems.clear();
|
| +
|
| + Status status = Validate(address_copy, &filter, &problems);
|
| + DCHECK(status == SUCCESS);
|
| + (void)status;
|
| +
|
| + if (problems.empty())
|
| + valid_postal_codes.push_back(*suggestion_it);
|
| + }
|
| + suggestions->swap(valid_postal_codes);
|
| +
|
| return SUCCESS;
|
| }
|
|
|
| bool PreloadAddressValidator::CanonicalizeAdministrativeArea(
|
| AddressData* address) const {
|
| - assert(address != NULL);
|
| - assert(supplier_ != NULL);
|
| - assert(synonyms_ != NULL);
|
| + DCHECK(address);
|
| + DCHECK(supplier_);
|
| + DCHECK(normalizer_);
|
|
|
| - if (!supplier_->IsLoaded(address->region_code)) {
|
| + if (!supplier_->IsLoaded(address->region_code))
|
| return false;
|
| - }
|
|
|
| // TODO: It would probably be beneficial to use the full canonicalization.
|
| AddressData tmp(*address);
|
| - synonyms_->NormalizeForDisplay(&tmp);
|
| + normalizer_->Normalize(&tmp);
|
| address->administrative_area = tmp.administrative_area;
|
|
|
| return true;
|
| @@ -134,11 +174,10 @@ bool PreloadAddressValidator::CanonicalizeAdministrativeArea(
|
| void PreloadAddressValidator::Validated(bool success,
|
| const AddressData&,
|
| const FieldProblemMap&) {
|
| - assert(success);
|
| + DCHECK(success);
|
| }
|
|
|
| // Stub constructor for use by MockAddressValidator.
|
| -PreloadAddressValidator::PreloadAddressValidator() {
|
| -}
|
| +PreloadAddressValidator::PreloadAddressValidator() {}
|
|
|
| } // namespace autofill
|
|
|