Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Side by Side Diff: third_party/libaddressinput/chromium/preload_address_validator.cc

Issue 386873002: Reland "Use upstream libaddressinput in Chrome." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix iOS compile. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <cstddef>
6 #include <string>
7 #include <vector>
8
9 #include "base/basictypes.h"
10 #include "base/memory/scoped_ptr.h"
11
12 #define I18N_ADDRESSINPUT_UTIL_BASICTYPES_H_
13 #include "third_party/libaddressinput/chromium/preload_address_validator.h"
14 #include "third_party/libaddressinput/chromium/suggestions.h"
15 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_da ta.h"
16 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_va lidator.h"
17 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/callback.h "
18 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/downloader .h"
19 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/preload_su pplier.h"
20 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/storage.h"
21 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/synonyms.h "
22
23 namespace autofill {
24
25 using ::i18n::addressinput::AddressData;
26 using ::i18n::addressinput::AddressField;
27 using ::i18n::addressinput::AddressValidator;
28 using ::i18n::addressinput::BuildCallback;
29 using ::i18n::addressinput::Downloader;
30 using ::i18n::addressinput::FieldProblemMap;
31 using ::i18n::addressinput::PreloadSupplier;
32 using ::i18n::addressinput::Storage;
33 using ::i18n::addressinput::Synonyms;
34
35 PreloadAddressValidator::PreloadAddressValidator(
36 const std::string& validation_data_url,
37 scoped_ptr<Downloader> downloader,
38 scoped_ptr<Storage> storage)
39 : supplier_(
40 new PreloadSupplier(
41 validation_data_url,
42 downloader.release(),
43 storage.release())),
44 suggestions_(
45 new Suggestions(
46 supplier_.get())),
47 synonyms_(
48 new Synonyms(
49 supplier_.get())),
50 validator_(
51 new AddressValidator(
52 supplier_.get())),
53 validated_(BuildCallback(this, &PreloadAddressValidator::Validated)) {
54 }
55
56 PreloadAddressValidator::~PreloadAddressValidator() {
57 }
58
59 void PreloadAddressValidator::LoadRules(const std::string& region_code,
60 const Callback& loaded) {
61 assert(supplier_ != NULL);
62 supplier_->LoadRules(region_code, loaded);
63 }
64
65 PreloadAddressValidator::Status PreloadAddressValidator::Validate(
66 const AddressData& address,
67 const FieldProblemMap* filter,
68 FieldProblemMap* problems) const {
69 assert(supplier_ != NULL);
70 assert(validator_ != NULL);
71
72 if (supplier_->IsPending(address.region_code)) {
73 return RULES_NOT_READY;
74 }
75
76 if (!supplier_->IsLoaded(address.region_code)) {
77 return RULES_UNAVAILABLE;
78 }
79
80 validator_->Validate(
81 address,
82 /*allow_postal*/ false,
83 /*require_name*/ false,
84 filter,
85 problems,
86 *validated_);
87
88 return SUCCESS;
89 }
90
91 PreloadAddressValidator::Status PreloadAddressValidator::GetSuggestions(
92 const AddressData& user_input,
93 AddressField focused_field,
94 size_t suggestion_limit,
95 std::vector<AddressData>* suggestions) const {
96 assert(suggestions_ != NULL);
97 assert(supplier_ != NULL);
98
99 if (supplier_->IsPending(user_input.region_code)) {
100 return RULES_NOT_READY;
101 }
102
103 if (!supplier_->IsLoaded(user_input.region_code)) {
104 return RULES_UNAVAILABLE;
105 }
106
107 suggestions_->GetSuggestions(
108 user_input,
109 focused_field,
110 suggestion_limit,
111 suggestions);
112
113 return SUCCESS;
114 }
115
116 bool PreloadAddressValidator::CanonicalizeAdministrativeArea(
117 AddressData* address) const {
118 assert(address != NULL);
119 assert(supplier_ != NULL);
120 assert(synonyms_ != NULL);
121
122 if (!supplier_->IsLoaded(address->region_code)) {
123 return false;
124 }
125
126 // TODO: It would probably be beneficial to use the full canonicalization.
127 AddressData tmp(*address);
128 synonyms_->NormalizeForDisplay(&tmp);
129 address->administrative_area = tmp.administrative_area;
130
131 return true;
132 }
133
134 void PreloadAddressValidator::Validated(bool success,
135 const AddressData&,
136 const FieldProblemMap&) {
137 assert(success);
138 }
139
140 // Stub constructor for use by MockAddressValidator.
141 PreloadAddressValidator::PreloadAddressValidator() {
142 }
143
144 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698