diff options
author | rouslan@chromium.org <rouslan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-26 18:11:22 +0000 |
---|---|---|
committer | rouslan@chromium.org <rouslan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-26 18:11:22 +0000 |
commit | 00dde4c3d606d2d989df81d73b996ce0a1fe1f73 (patch) | |
tree | 83f7533bb4dc069b40fd900a3bb0f991a3c34f9f /third_party | |
parent | 48e0f635b43dc7920479271c154f4121e6db9f40 (diff) | |
download | chromium_src-00dde4c3d606d2d989df81d73b996ce0a1fe1f73.zip chromium_src-00dde4c3d606d2d989df81d73b996ce0a1fe1f73.tar.gz chromium_src-00dde4c3d606d2d989df81d73b996ce0a1fe1f73.tar.bz2 |
Do not suggest completions for name and street address.
Libaddressinput should not provide address suggestions if the focused
field is not postal code or one of the levels of administrative areas.
BUG=356357
TEST=AddressValidatorTest.SuggestOnlyForAdministrativeAreasAndPostalCode
Review URL: https://codereview.chromium.org/211513004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@259630 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party')
-rw-r--r-- | third_party/libaddressinput/chromium/cpp/src/address_validator.cc | 22 | ||||
-rw-r--r-- | third_party/libaddressinput/chromium/cpp/test/address_validator_test.cc | 35 |
2 files changed, 52 insertions, 5 deletions
diff --git a/third_party/libaddressinput/chromium/cpp/src/address_validator.cc b/third_party/libaddressinput/chromium/cpp/src/address_validator.cc index 3241d47..435f75d 100644 --- a/third_party/libaddressinput/chromium/cpp/src/address_validator.cc +++ b/third_party/libaddressinput/chromium/cpp/src/address_validator.cc @@ -271,14 +271,16 @@ class AddressValidatorImpl : public AddressValidator { assert(ruleset_it->second != NULL); - // Do not suggest anything if the user input is empty. - if (user_input.GetFieldValue(focused_field).empty()) { + // Do not suggest anything if the user is typing in the field for which + // there's no validation data. + if (focused_field != POSTAL_CODE && + (focused_field < ADMIN_AREA || focused_field > DEPENDENT_LOCALITY)) { return SUCCESS; } - // Initialize the prefix search index lazily. - if (!ruleset_it->second->prefix_search_index_ready()) { - ruleset_it->second->BuildPrefixSearchIndex(); + // Do not suggest anything if the user input is empty. + if (user_input.GetFieldValue(focused_field).empty()) { + return SUCCESS; } const Ruleset& country_ruleset = *ruleset_it->second; @@ -295,6 +297,16 @@ class AddressValidatorImpl : public AddressValidator { return SUCCESS; } + // Initialize the prefix search index lazily. + if (!ruleset_it->second->prefix_search_index_ready()) { + ruleset_it->second->BuildPrefixSearchIndex(); + } + + if (focused_field != POSTAL_CODE && + focused_field > country_ruleset.deepest_ruleset_level()) { + return SUCCESS; + } + // Determine the most specific address field that can be suggested. AddressField suggestion_field = focused_field != POSTAL_CODE ? focused_field : DEPENDENT_LOCALITY; diff --git a/third_party/libaddressinput/chromium/cpp/test/address_validator_test.cc b/third_party/libaddressinput/chromium/cpp/test/address_validator_test.cc index cf68ec0..f0d2095 100644 --- a/third_party/libaddressinput/chromium/cpp/test/address_validator_test.cc +++ b/third_party/libaddressinput/chromium/cpp/test/address_validator_test.cc @@ -521,5 +521,40 @@ TEST_F(AddressValidatorTest, SuggestionIncludesCountry) { EXPECT_EQ("US", suggestions[0].country_code); } +TEST_F(AddressValidatorTest, SuggestOnlyForAdministrativeAreasAndPostalCode) { + AddressData address; + address.country_code = "US"; + address.administrative_area = "CA"; + address.locality = "Los Angeles"; + address.dependent_locality = "Venice"; + address.postal_code = "90291"; + address.sorting_code = "123"; + address.address_lines.push_back("123 Main St"); + address.organization = "Google"; + address.recipient = "Jon Smith"; + + // Fields that should not have suggestions in US. + static const AddressField kNoSugestFields[] = { + COUNTRY, + LOCALITY, + DEPENDENT_LOCALITY, + SORTING_CODE, + STREET_ADDRESS, + ORGANIZATION, + RECIPIENT + }; + + static const size_t kNumNoSuggestFields = + sizeof kNoSugestFields / sizeof (AddressField); + + for (size_t i = 0; i < kNumNoSuggestFields; ++i) { + std::vector<AddressData> suggestions; + EXPECT_EQ(AddressValidator::SUCCESS, + validator_->GetSuggestions( + address, kNoSugestFields[i], 999, &suggestions)); + EXPECT_TRUE(suggestions.empty()); + } +} + } // namespace addressinput } // namespace i18n |