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

Unified Diff: chrome/browser/autofill/personal_data_manager.cc

Issue 6877130: These changes *are* for review :) (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/autofill/personal_data_manager.cc
===================================================================
--- chrome/browser/autofill/personal_data_manager.cc (revision 85992)
+++ chrome/browser/autofill/personal_data_manager.cc (working copy)
@@ -15,6 +15,7 @@
#include "chrome/browser/autofill/autofill_metrics.h"
#include "chrome/browser/autofill/form_structure.h"
#include "chrome/browser/autofill/phone_number.h"
+#include "chrome/browser/autofill/phone_number_i18n.h"
#include "chrome/browser/autofill/select_control_handler.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
@@ -225,6 +226,11 @@
// Detect and discard forms with multiple fields of the same type.
std::set<AutofillFieldType> types_seen;
+ // We only set complete phone, so aggregate phone parts in these vars and set
+ // complete at the end.
+ PhoneNumber::PhoneCombineHelper home(AutofillType::PHONE_HOME);
+ PhoneNumber::PhoneCombineHelper fax(AutofillType::PHONE_FAX);
+
for (size_t i = 0; i < form.field_count(); ++i) {
const AutofillField* field = form.field(i);
string16 value = CollapseWhitespace(field->value, false);
@@ -262,52 +268,13 @@
}
++importable_credit_card_fields;
} else {
- // In the case of a phone number, if the whole phone number was entered
- // into a single field, then parse it and set the sub components.
- if (AutofillType(field_type).subgroup() ==
- AutofillType::PHONE_WHOLE_NUMBER) {
- string16 number;
- string16 city_code;
- string16 country_code;
- PhoneNumber::ParsePhoneNumber(value,
- &number,
- &city_code,
- &country_code);
- if (number.empty())
- continue;
+ // We need to store phone data in the variables, before building the whole
+ // number at the end. The rest of the fields are set "as is".
+ // If the fields are not the phone fields in question both home.SetInfo()
+ // and fax.SetInfo() are going to return false.
+ if (!home.SetInfo(field_type, value) && !fax.SetInfo(field_type, value))
+ imported_profile->SetInfo(field_type, value);
- if (group == AutofillType::PHONE_HOME) {
- imported_profile->SetInfo(PHONE_HOME_COUNTRY_CODE, country_code);
- imported_profile->SetInfo(PHONE_HOME_CITY_CODE, city_code);
- imported_profile->SetInfo(PHONE_HOME_NUMBER, number);
- } else if (group == AutofillType::PHONE_FAX) {
- imported_profile->SetInfo(PHONE_FAX_COUNTRY_CODE, country_code);
- imported_profile->SetInfo(PHONE_FAX_CITY_CODE, city_code);
- imported_profile->SetInfo(PHONE_FAX_NUMBER, number);
- }
-
- continue;
- }
-
- // Phone and fax numbers can be split across multiple fields, so we
- // might have already stored the prefix, and now be at the suffix.
- // If so, combine them to form the full number.
- if (group == AutofillType::PHONE_HOME ||
- group == AutofillType::PHONE_FAX) {
- AutofillFieldType number_type = PHONE_HOME_NUMBER;
- if (group == AutofillType::PHONE_FAX)
- number_type = PHONE_FAX_NUMBER;
-
- string16 stored_number = imported_profile->GetInfo(number_type);
- if (stored_number.size() ==
- static_cast<size_t>(PhoneNumber::kPrefixLength) &&
- value.size() == static_cast<size_t>(PhoneNumber::kSuffixLength)) {
- value = stored_number + value;
- }
- }
-
- imported_profile->SetInfo(field_type, value);
-
// Reject profiles with invalid country information.
if (field_type == ADDRESS_HOME_COUNTRY &&
!value.empty() && imported_profile->CountryCode().empty()) {
@@ -317,6 +284,33 @@
}
}
+ // Build phone numbers if they are from parts.
+ if (imported_profile.get()) {
+ string16 constructed_number;
+ if (!home.empty()) {
+ if (!home.ParseNumber(imported_profile->CountryCode(),
+ &constructed_number)) {
+ imported_profile.reset();
+ } else {
+ imported_profile->SetInfo(PHONE_HOME_WHOLE_NUMBER, constructed_number);
+ }
+ }
+ if (!fax.empty()) {
+ if (!fax.ParseNumber(imported_profile->CountryCode(),
+ &constructed_number)) {
+ imported_profile.reset();
+ } else {
+ imported_profile->SetInfo(PHONE_FAX_WHOLE_NUMBER, constructed_number);
+ }
+ }
+ }
+ // Normalize phone numbers.
+ if (imported_profile.get()) {
+ // Reject profile if even one of the phones is invalid.
+ if (!imported_profile->NormalizePhones())
+ imported_profile.reset();
+ }
+
// Reject the profile if minimum address and validation requirements are not
// met.
if (imported_profile.get() && !IsValidLearnableProfile(*imported_profile))
« no previous file with comments | « chrome/browser/autofill/autofill_profile_unittest.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