diff options
author | rouslan@chromium.org <rouslan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-12 23:56:51 +0000 |
---|---|---|
committer | rouslan@chromium.org <rouslan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-12 23:56:51 +0000 |
commit | 95598bcb34a10b1c7fdd2d3e6454f84c72509841 (patch) | |
tree | b57c82687ee04bfbe10b32dff4be5083bbc31f51 | |
parent | 30176f01f54b5d7459c23185b5cb18a448625cb2 (diff) | |
download | chromium_src-95598bcb34a10b1c7fdd2d3e6454f84c72509841.zip chromium_src-95598bcb34a10b1c7fdd2d3e6454f84c72509841.tar.gz chromium_src-95598bcb34a10b1c7fdd2d3e6454f84c72509841.tar.bz2 |
[rac] Add AddressValidator API.
This patch adds the AddressValidator API without the implementation. It is
intended to start integration into Chrome in parallel with implementing
the API in the library. This is not the final API, as it may change as
integration into Chrome progresses.
BUG=327046
Review URL: https://codereview.chromium.org/106863006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240488 0039d316-1c4b-4281-b951-d872f2087c98
5 files changed, 230 insertions, 0 deletions
diff --git a/third_party/libaddressinput/chromium/cpp/include/libaddressinput/address_validator.h b/third_party/libaddressinput/chromium/cpp/include/libaddressinput/address_validator.h new file mode 100644 index 0000000..4ede9a6 --- /dev/null +++ b/third_party/libaddressinput/chromium/cpp/include/libaddressinput/address_validator.h @@ -0,0 +1,126 @@ +// Copyright (C) 2013 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef I18N_ADDRESSINPUT_ADDRESS_VALIDATOR_H_ +#define I18N_ADDRESSINPUT_ADDRESS_VALIDATOR_H_ + +#include <libaddressinput/address_field.h> +#include <libaddressinput/address_problem.h> +#include <libaddressinput/util/basictypes.h> +#include <libaddressinput/util/scoped_ptr.h> + +#include <map> +#include <string> +#include <vector> + +namespace i18n { +namespace addressinput { + +class Downloader; +class LoadRulesDelegate; +class Localization; +class RuleRetriever; +class Storage; +struct AddressData; + +typedef std::vector<AddressProblem> AddressProblems; +typedef std::multimap<AddressField, AddressProblem::Type> AddressProblemFilter; + +// Validates an AddressData structure. Sample usage: +// class MyClass : public LoadRulesDelegate { +// public: +// MyClass() : validator_(new MyDownloader, new MyStorage, this) { +// validator_.LoadRules("US"); +// } +// +// virtual ~MyClass() {} +// +// virtual void OnAddressValidationRulesLoaded( +// const std::string& country_code, +// bool success) { +// ... +// } +// +// void ValidateAddress() { +// AddressData address; +// address.country_code = "US"; +// address.administrative_area = "CA"; +// AddressProblems problems; +// AddressProblemFilter filter; +// AddressValidator::Status status = +// validator_.ValidateAddress(address, filter, &problems); +// if (status == AddressValidator::SUCCESS) { +// Process(problems); +// } +// } +// +// private: +// AddressValidator validator_; +// }; +class AddressValidator { + public: + // 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 + }; + + // Takes ownership of |downloader| and |storage|, which cannot be NULL. Does + // not take ownership of |load_rules_delegate|, which can be NULL. + AddressValidator(const Downloader* downloader, + Storage* storage, + LoadRulesDelegate* load_rules_delegate); + ~AddressValidator(); + + // Loads the generic validation rules for |country_code| and specific rules + // for the country's administrative areas, localities, and dependent + // localities. A typical data size is 10KB. The largest is 250KB. If a country + // has language-specific validation rules, then these are also loaded. + // + // If the rules were loaded successfully before, then does nothing. Notifies + // |load_rules_delegate| when the loading finishes. + void LoadRules(const std::string& country_code); + + // 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. + // + // If the |problems| parameter is NULL, then checks whether the validation + // rules are available, but does not validate the |address|. + Status ValidateAddress(const AddressData& address, + const AddressProblemFilter& filter, + const Localization& localization, + AddressProblems* problems) const; + private: + scoped_ptr<RuleRetriever> rule_retriever_; + LoadRulesDelegate* load_rules_delegate_; + + DISALLOW_COPY_AND_ASSIGN(AddressValidator); +}; + +} // namespace addressinput +} // namespace i18n + +#endif // I18N_ADDRESSINPUT_ADDRESS_VALIDATOR_H_ diff --git a/third_party/libaddressinput/chromium/cpp/include/libaddressinput/load_rules_delegate.h b/third_party/libaddressinput/chromium/cpp/include/libaddressinput/load_rules_delegate.h new file mode 100644 index 0000000..cb56fba --- /dev/null +++ b/third_party/libaddressinput/chromium/cpp/include/libaddressinput/load_rules_delegate.h @@ -0,0 +1,43 @@ +// Copyright (C) 2013 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef I18N_ADDRESSINPUT_LOAD_RULES_DELEGATE_H_ +#define I18N_ADDRESSINPUT_LOAD_RULES_DELEGATE_H_ + +#include <string> + +namespace i18n { +namespace addressinput { + +// The object to be notified when loading of address validation rules is +// finished. +class LoadRulesDelegate { + public: + virtual ~LoadRulesDelegate() {} + + // 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; +}; + +} // namespace addressinput +} // namespace i18n + +#endif // I18N_ADDRESSINPUT_LOAD_RULES_DELEGATE_H_ diff --git a/third_party/libaddressinput/chromium/cpp/libaddressinput.gyp b/third_party/libaddressinput/chromium/cpp/libaddressinput.gyp index ff9c86a..f1614b5 100644 --- a/third_party/libaddressinput/chromium/cpp/libaddressinput.gyp +++ b/third_party/libaddressinput/chromium/cpp/libaddressinput.gyp @@ -35,6 +35,7 @@ 'src/address_field_util.cc', 'src/address_problem.cc', 'src/address_ui.cc', + 'src/address_validator.cc', 'src/localization.cc', 'src/lookup_key_util.cc', 'src/region_data_constants.cc', @@ -46,6 +47,9 @@ 'src/validating_storage.cc', 'src/validating_util.cc', ], + 'defines': [ + 'VALIDATION_DATA_URL="https://i18napis.appspot.com/ssl-address/"', + ], 'dependencies': [ 'grit.gyp:generated_messages', 'rapidjson.gyp:rapidjson', diff --git a/third_party/libaddressinput/chromium/cpp/src/address_validator.cc b/third_party/libaddressinput/chromium/cpp/src/address_validator.cc new file mode 100644 index 0000000..011396d --- /dev/null +++ b/third_party/libaddressinput/chromium/cpp/src/address_validator.cc @@ -0,0 +1,51 @@ +// Copyright (C) 2013 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include <libaddressinput/address_validator.h> + +#include <libaddressinput/downloader.h> +#include <libaddressinput/load_rules_delegate.h> +#include <libaddressinput/localization.h> +#include <libaddressinput/storage.h> + +#include <string> + +#include "retriever.h" +#include "rule_retriever.h" +#include "validating_storage.h" + +namespace i18n { +namespace addressinput { + +AddressValidator::AddressValidator(const Downloader* downloader, + Storage* storage, + LoadRulesDelegate* load_rules_delegate) + : rule_retriever_(new RuleRetriever(new Retriever( + VALIDATION_DATA_URL, downloader, new ValidatingStorage(storage)))), + load_rules_delegate_(load_rules_delegate) {} + +AddressValidator::~AddressValidator() {} + +void AddressValidator::LoadRules(const std::string& country_code) {} + +AddressValidator::Status AddressValidator::ValidateAddress( + const AddressData& address, + const AddressProblemFilter& filter, + const Localization& localization, + AddressProblems* problems) const { + return RULES_UNAVAILABLE; +} + +} // namespace addressinput +} // namespace i18n diff --git a/third_party/libaddressinput/libaddressinput.gyp b/third_party/libaddressinput/libaddressinput.gyp index b8ddf96..adf3785 100644 --- a/third_party/libaddressinput/libaddressinput.gyp +++ b/third_party/libaddressinput/libaddressinput.gyp @@ -51,6 +51,8 @@ '<(libaddressinput_dir)/cpp/include/libaddressinput/address_problem.h', '<(libaddressinput_dir)/cpp/include/libaddressinput/address_ui_component.h', '<(libaddressinput_dir)/cpp/include/libaddressinput/address_ui.h', + '<(libaddressinput_dir)/cpp/include/libaddressinput/address_validator.h', + '<(libaddressinput_dir)/cpp/include/libaddressinput/load_rules_delegate.h', '<(libaddressinput_dir)/cpp/include/libaddressinput/localization.h', '<(libaddressinput_dir)/cpp/include/libaddressinput/util/basictypes.h', '<(libaddressinput_dir)/cpp/include/libaddressinput/util/scoped_ptr.h', @@ -60,6 +62,7 @@ '<(libaddressinput_dir)/cpp/src/address_field_util.h', '<(libaddressinput_dir)/cpp/src/address_problem.cc', '<(libaddressinput_dir)/cpp/src/address_ui.cc', + '<(libaddressinput_dir)/cpp/src/address_validator.cc', '<(libaddressinput_dir)/cpp/src/grit.h', '<(libaddressinput_dir)/cpp/src/localization.cc', '<(libaddressinput_dir)/cpp/src/lookup_key_util.cc', @@ -80,6 +83,9 @@ '<(libaddressinput_dir)/cpp/src/validating_util.cc', '<(libaddressinput_dir)/cpp/src/validating_util.h', ], + 'defines': [ + 'VALIDATION_DATA_URL="https://i18napis.appspot.com/ssl-address/"', + ], 'dependencies': [ 'generated_messages', '<(DEPTH)/base/base.gyp:base', |