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

Side by Side Diff: chrome/browser/autofill/personal_data_manager.cc

Issue 6673079: Reduce boxing and unboxing of AutofillFieldType (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 9 years, 9 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
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/autofill/personal_data_manager.h" 5 #include "chrome/browser/autofill/personal_data_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 WebKit::WebRegularExpression re(WebKit::WebString(kEmailPattern), 80 WebKit::WebRegularExpression re(WebKit::WebString(kEmailPattern),
81 WebKit::WebTextCaseInsensitive); 81 WebKit::WebTextCaseInsensitive);
82 return re.match(WebKit::WebString(StringToLowerASCII(value))) != -1; 82 return re.match(WebKit::WebString(StringToLowerASCII(value))) != -1;
83 } 83 }
84 84
85 // Returns true if minimum requirements for import of a given |profile| have 85 // Returns true if minimum requirements for import of a given |profile| have
86 // been met. An address submitted via a form must have at least these fields 86 // been met. An address submitted via a form must have at least these fields
87 // filled. No verification of validity of the contents is preformed. This is 87 // filled. No verification of validity of the contents is preformed. This is
88 // and existence check only. 88 // and existence check only.
89 bool IsMinimumAddress(const AutofillProfile& profile) { 89 bool IsMinimumAddress(const AutofillProfile& profile) {
90 return !profile.GetFieldText(AutofillType(ADDRESS_HOME_LINE1)).empty() && 90 return !profile.GetFieldText(ADDRESS_HOME_LINE1).empty() &&
91 !profile.GetFieldText(AutofillType(ADDRESS_HOME_CITY)).empty() && 91 !profile.GetFieldText(ADDRESS_HOME_CITY).empty() &&
92 !profile.GetFieldText(AutofillType(ADDRESS_HOME_STATE)).empty() && 92 !profile.GetFieldText(ADDRESS_HOME_STATE).empty() &&
93 !profile.GetFieldText(AutofillType(ADDRESS_HOME_ZIP)).empty(); 93 !profile.GetFieldText(ADDRESS_HOME_ZIP).empty();
94 } 94 }
95 95
96 // Whether we have already logged the number of profiles this session. 96 // Whether we have already logged the number of profiles this session.
97 bool g_has_logged_profile_count = false; 97 bool g_has_logged_profile_count = false;
98 98
99 } // namespace 99 } // namespace
100 100
101 PersonalDataManager::~PersonalDataManager() { 101 PersonalDataManager::~PersonalDataManager() {
102 CancelPendingQuery(&pending_profiles_query_); 102 CancelPendingQuery(&pending_profiles_query_);
103 CancelPendingQuery(&pending_creditcards_query_); 103 CancelPendingQuery(&pending_creditcards_query_);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 const FormStructure* form = *iter; 167 const FormStructure* form = *iter;
168 for (size_t i = 0; i < form->field_count(); ++i) { 168 for (size_t i = 0; i < form->field_count(); ++i) {
169 const AutofillField* field = form->field(i); 169 const AutofillField* field = form->field(i);
170 string16 value = CollapseWhitespace(field->value, false); 170 string16 value = CollapseWhitespace(field->value, false);
171 171
172 // If we don't know the type of the field, or the user hasn't entered any 172 // If we don't know the type of the field, or the user hasn't entered any
173 // information into the field, then skip it. 173 // information into the field, then skip it.
174 if (!field->IsFieldFillable() || value.empty()) 174 if (!field->IsFieldFillable() || value.empty())
175 continue; 175 continue;
176 176
177 AutofillType field_type(field->type()); 177 AutofillFieldType field_type = field->type();
178 FieldTypeGroup group(field_type.group()); 178 FieldTypeGroup group(AutofillType(field_type).group());
179 179
180 if (group == AutofillType::CREDIT_CARD) { 180 if (group == AutofillType::CREDIT_CARD) {
181 // If the user has a password set, we have no way of setting credit 181 // If the user has a password set, we have no way of setting credit
182 // card numbers. 182 // card numbers.
183 if (!HasPassword()) { 183 if (!HasPassword()) {
184 if (LowerCaseEqualsASCII(field->form_control_type, "month")) { 184 if (LowerCaseEqualsASCII(field->form_control_type, "month")) {
185 DCHECK_EQ(CREDIT_CARD_EXP_MONTH, field_type.field_type()); 185 DCHECK_EQ(CREDIT_CARD_EXP_MONTH, field_type);
186 local_imported_credit_card->SetInfoForMonthInputType(value); 186 local_imported_credit_card->SetInfoForMonthInputType(value);
187 } else { 187 } else {
188 local_imported_credit_card->SetInfo( 188 local_imported_credit_card->SetInfo(field_type, value);
189 AutofillType(field_type.field_type()), value);
190 } 189 }
191 ++importable_credit_card_fields; 190 ++importable_credit_card_fields;
192 } 191 }
193 } else { 192 } else {
194 // In the case of a phone number, if the whole phone number was entered 193 // In the case of a phone number, if the whole phone number was entered
195 // into a single field, then parse it and set the sub components. 194 // into a single field, then parse it and set the sub components.
196 if (field_type.subgroup() == AutofillType::PHONE_WHOLE_NUMBER) { 195 if (AutofillType(field_type).subgroup() ==
196 AutofillType::PHONE_WHOLE_NUMBER) {
197 string16 number; 197 string16 number;
198 string16 city_code; 198 string16 city_code;
199 string16 country_code; 199 string16 country_code;
200 PhoneNumber::ParsePhoneNumber(value, 200 PhoneNumber::ParsePhoneNumber(value,
201 &number, 201 &number,
202 &city_code, 202 &city_code,
203 &country_code); 203 &country_code);
204 if (number.empty()) 204 if (number.empty())
205 continue; 205 continue;
206 206
207 if (group == AutofillType::PHONE_HOME) { 207 if (group == AutofillType::PHONE_HOME) {
208 imported_profile->SetInfo(AutofillType(PHONE_HOME_COUNTRY_CODE), 208 imported_profile->SetInfo(PHONE_HOME_COUNTRY_CODE, country_code);
209 country_code); 209 imported_profile->SetInfo(PHONE_HOME_CITY_CODE, city_code);
210 imported_profile->SetInfo(AutofillType(PHONE_HOME_CITY_CODE), 210 imported_profile->SetInfo(PHONE_HOME_NUMBER, number);
211 city_code);
212 imported_profile->SetInfo(AutofillType(PHONE_HOME_NUMBER), number);
213 } else if (group == AutofillType::PHONE_FAX) { 211 } else if (group == AutofillType::PHONE_FAX) {
214 imported_profile->SetInfo(AutofillType(PHONE_FAX_COUNTRY_CODE), 212 imported_profile->SetInfo(PHONE_FAX_COUNTRY_CODE, country_code);
215 country_code); 213 imported_profile->SetInfo(PHONE_FAX_CITY_CODE, city_code);
216 imported_profile->SetInfo(AutofillType(PHONE_FAX_CITY_CODE), 214 imported_profile->SetInfo(PHONE_FAX_NUMBER, number);
217 city_code);
218 imported_profile->SetInfo(AutofillType(PHONE_FAX_NUMBER), number);
219 } 215 }
220 216
221 continue; 217 continue;
222 } 218 }
223 219
224 // Phone and fax numbers can be split across multiple fields, so we 220 // Phone and fax numbers can be split across multiple fields, so we
225 // might have already stored the prefix, and now be at the suffix. 221 // might have already stored the prefix, and now be at the suffix.
226 // If so, combine them to form the full number. 222 // If so, combine them to form the full number.
227 if (group == AutofillType::PHONE_HOME || 223 if (group == AutofillType::PHONE_HOME ||
228 group == AutofillType::PHONE_FAX) { 224 group == AutofillType::PHONE_FAX) {
229 AutofillType number_type(PHONE_HOME_NUMBER); 225 AutofillFieldType number_type = PHONE_HOME_NUMBER;
230 if (group == AutofillType::PHONE_FAX) 226 if (group == AutofillType::PHONE_FAX)
231 number_type = AutofillType(PHONE_FAX_NUMBER); 227 number_type = PHONE_FAX_NUMBER;
232 228
233 string16 stored_number = imported_profile->GetFieldText(number_type); 229 string16 stored_number = imported_profile->GetFieldText(number_type);
234 if (stored_number.size() == 230 if (stored_number.size() ==
235 static_cast<size_t>(PhoneNumber::kPrefixLength) && 231 static_cast<size_t>(PhoneNumber::kPrefixLength) &&
236 value.size() == static_cast<size_t>(PhoneNumber::kSuffixLength)) { 232 value.size() == static_cast<size_t>(PhoneNumber::kSuffixLength)) {
237 value = stored_number + value; 233 value = stored_number + value;
238 } 234 }
239 } 235 }
240 236
241 if (field_type.field_type() == EMAIL_ADDRESS && !IsValidEmail(value)) 237 if (field_type == EMAIL_ADDRESS && !IsValidEmail(value))
242 continue; 238 continue;
243 239
244 imported_profile->SetInfo(AutofillType(field_type.field_type()), 240 imported_profile->SetInfo(field_type, value);
245 value);
246 ++importable_fields; 241 ++importable_fields;
247 } 242 }
248 } 243 }
249 } 244 }
250 245
251 // If the user did not enter enough information on the page then don't bother 246 // If the user did not enter enough information on the page then don't bother
252 // importing the data. 247 // importing the data.
253 if (importable_fields < kMinProfileImportSize) 248 if (importable_fields < kMinProfileImportSize)
254 imported_profile.reset(); 249 imported_profile.reset();
255 if (importable_credit_card_fields < kMinCreditCardImportSize) 250 if (importable_credit_card_fields < kMinCreditCardImportSize)
256 local_imported_credit_card.reset(); 251 local_imported_credit_card.reset();
257 252
258 if (imported_profile.get() && !IsMinimumAddress(*imported_profile.get())) 253 if (imported_profile.get() && !IsMinimumAddress(*imported_profile.get()))
259 imported_profile.reset(); 254 imported_profile.reset();
260 255
261 if (local_imported_credit_card.get() && 256 if (local_imported_credit_card.get() &&
262 !CreditCard::IsCreditCardNumber(local_imported_credit_card->GetFieldText( 257 !CreditCard::IsCreditCardNumber(local_imported_credit_card->GetFieldText(
263 AutofillType(CREDIT_CARD_NUMBER)))) { 258 CREDIT_CARD_NUMBER))) {
264 local_imported_credit_card.reset(); 259 local_imported_credit_card.reset();
265 } 260 }
266 261
267 // Don't import if we already have this info. 262 // Don't import if we already have this info.
268 if (local_imported_credit_card.get()) { 263 if (local_imported_credit_card.get()) {
269 for (std::vector<CreditCard*>::const_iterator iter = credit_cards_.begin(); 264 for (std::vector<CreditCard*>::const_iterator iter = credit_cards_.begin();
270 iter != credit_cards_.end(); 265 iter != credit_cards_.end();
271 ++iter) { 266 ++iter) {
272 if (local_imported_credit_card->IsSubsetOf(**iter)) { 267 if (local_imported_credit_card->IsSubsetOf(**iter)) {
273 local_imported_credit_card.reset(); 268 local_imported_credit_card.reset();
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 } 803 }
809 804
810 const AutofillMetrics* PersonalDataManager::metric_logger() const { 805 const AutofillMetrics* PersonalDataManager::metric_logger() const {
811 return metric_logger_.get(); 806 return metric_logger_.get();
812 } 807 }
813 808
814 void PersonalDataManager::set_metric_logger( 809 void PersonalDataManager::set_metric_logger(
815 const AutofillMetrics* metric_logger) { 810 const AutofillMetrics* metric_logger) {
816 metric_logger_.reset(metric_logger); 811 metric_logger_.reset(metric_logger);
817 } 812 }
OLDNEW
« no previous file with comments | « chrome/browser/autofill/form_group.cc ('k') | chrome/browser/autofill/personal_data_manager_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698