OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "components/autofill/core/browser/personal_data_manager.h" | 5 #include "components/autofill/core/browser/personal_data_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <iterator> | 9 #include <iterator> |
10 | 10 |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 for (size_t i = 0; i < form.field_count(); ++i) { | 252 for (size_t i = 0; i < form.field_count(); ++i) { |
253 const AutofillField* field = form.field(i); | 253 const AutofillField* field = form.field(i); |
254 base::string16 value = CollapseWhitespace(field->value, false); | 254 base::string16 value = CollapseWhitespace(field->value, false); |
255 | 255 |
256 // If we don't know the type of the field, or the user hasn't entered any | 256 // If we don't know the type of the field, or the user hasn't entered any |
257 // information into the field, then skip it. | 257 // information into the field, then skip it. |
258 if (!field->IsFieldFillable() || value.empty()) | 258 if (!field->IsFieldFillable() || value.empty()) |
259 continue; | 259 continue; |
260 | 260 |
261 AutofillType field_type = field->Type(); | 261 AutofillType field_type = field->Type(); |
262 ServerFieldType server_field_type = field_type.server_type(); | 262 ServerFieldType server_field_type = field_type.GetStorableType(); |
263 FieldTypeGroup group(field_type.group()); | 263 FieldTypeGroup group(field_type.group()); |
264 | 264 |
265 // There can be multiple email fields (e.g. in the case of 'confirm email' | 265 // There can be multiple email fields (e.g. in the case of 'confirm email' |
266 // fields) but they must all contain the same value, else the profile is | 266 // fields) but they must all contain the same value, else the profile is |
267 // invalid. | 267 // invalid. |
268 if (server_field_type == EMAIL_ADDRESS) { | 268 if (server_field_type == EMAIL_ADDRESS) { |
269 if (types_seen.count(server_field_type) && | 269 if (types_seen.count(server_field_type) && |
270 imported_profile->GetRawInfo(EMAIL_ADDRESS) != value) { | 270 imported_profile->GetRawInfo(EMAIL_ADDRESS) != value) { |
271 imported_profile.reset(); | 271 imported_profile.reset(); |
272 break; | 272 break; |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 if (multi_values[i].empty()) | 610 if (multi_values[i].empty()) |
611 continue; | 611 continue; |
612 | 612 |
613 base::string16 profile_value_lower_case( | 613 base::string16 profile_value_lower_case( |
614 StringToLowerASCII(multi_values[i])); | 614 StringToLowerASCII(multi_values[i])); |
615 base::string16 field_value_lower_case( | 615 base::string16 field_value_lower_case( |
616 StringToLowerASCII(field_contents)); | 616 StringToLowerASCII(field_contents)); |
617 // Phone numbers could be split in US forms, so field value could be | 617 // Phone numbers could be split in US forms, so field value could be |
618 // either prefix or suffix of the phone. | 618 // either prefix or suffix of the phone. |
619 bool matched_phones = false; | 619 bool matched_phones = false; |
620 if ((type.server_type() == PHONE_HOME_NUMBER || | 620 if (type.GetStorableType() == PHONE_HOME_NUMBER && |
621 type.server_type() == PHONE_BILLING_NUMBER) && | |
622 !field_value_lower_case.empty() && | 621 !field_value_lower_case.empty() && |
623 profile_value_lower_case.find(field_value_lower_case) != | 622 profile_value_lower_case.find(field_value_lower_case) != |
624 base::string16::npos) { | 623 base::string16::npos) { |
625 matched_phones = true; | 624 matched_phones = true; |
626 } | 625 } |
627 | 626 |
628 // Suggest variants of the profile that's already been filled in. | 627 // Suggest variants of the profile that's already been filled in. |
629 if (matched_phones || | 628 if (matched_phones || |
630 profile_value_lower_case == field_value_lower_case) { | 629 profile_value_lower_case == field_value_lower_case) { |
631 for (size_t j = 0; j < multi_values.size(); ++j) { | 630 for (size_t j = 0; j < multi_values.size(); ++j) { |
632 if (!multi_values[j].empty()) { | 631 if (!multi_values[j].empty()) { |
633 values->push_back(multi_values[j]); | 632 values->push_back(multi_values[j]); |
634 guid_pairs->push_back(GUIDPair(profile->guid(), j)); | 633 guid_pairs->push_back(GUIDPair(profile->guid(), j)); |
635 } | 634 } |
636 } | 635 } |
637 | 636 |
638 // We've added all the values for this profile so move on to the | 637 // We've added all the values for this profile so move on to the |
639 // next. | 638 // next. |
640 break; | 639 break; |
641 } | 640 } |
642 } | 641 } |
643 } | 642 } |
644 } | 643 } |
645 | 644 |
646 if (!field_is_autofilled) { | 645 if (!field_is_autofilled) { |
647 AutofillProfile::CreateInferredLabels( | 646 AutofillProfile::CreateInferredLabels( |
648 &matched_profiles, &other_field_types, | 647 &matched_profiles, &other_field_types, |
649 type.server_type(), 1, labels); | 648 type.GetStorableType(), 1, labels); |
650 } else { | 649 } else { |
651 // No sub-labels for previously filled fields. | 650 // No sub-labels for previously filled fields. |
652 labels->resize(values->size()); | 651 labels->resize(values->size()); |
653 } | 652 } |
654 | 653 |
655 // No icons for profile suggestions. | 654 // No icons for profile suggestions. |
656 icons->resize(values->size()); | 655 icons->resize(values->size()); |
657 } | 656 } |
658 | 657 |
659 void PersonalDataManager::GetCreditCardSuggestions( | 658 void PersonalDataManager::GetCreditCardSuggestions( |
(...skipping 11 matching lines...) Expand all Loading... |
671 const std::vector<CreditCard*>& credit_cards = GetCreditCards(); | 670 const std::vector<CreditCard*>& credit_cards = GetCreditCards(); |
672 for (std::vector<CreditCard*>::const_iterator iter = credit_cards.begin(); | 671 for (std::vector<CreditCard*>::const_iterator iter = credit_cards.begin(); |
673 iter != credit_cards.end(); ++iter) { | 672 iter != credit_cards.end(); ++iter) { |
674 CreditCard* credit_card = *iter; | 673 CreditCard* credit_card = *iter; |
675 | 674 |
676 // The value of the stored data for this field type in the |credit_card|. | 675 // The value of the stored data for this field type in the |credit_card|. |
677 base::string16 creditcard_field_value = | 676 base::string16 creditcard_field_value = |
678 credit_card->GetInfo(type, app_locale_); | 677 credit_card->GetInfo(type, app_locale_); |
679 if (!creditcard_field_value.empty() && | 678 if (!creditcard_field_value.empty() && |
680 StartsWith(creditcard_field_value, field_contents, false)) { | 679 StartsWith(creditcard_field_value, field_contents, false)) { |
681 if (type.server_type() == CREDIT_CARD_NUMBER) | 680 if (type.GetStorableType() == CREDIT_CARD_NUMBER) |
682 creditcard_field_value = credit_card->ObfuscatedNumber(); | 681 creditcard_field_value = credit_card->ObfuscatedNumber(); |
683 | 682 |
684 base::string16 label; | 683 base::string16 label; |
685 if (credit_card->number().empty()) { | 684 if (credit_card->number().empty()) { |
686 // If there is no CC number, return name to show something. | 685 // If there is no CC number, return name to show something. |
687 label = | 686 label = |
688 credit_card->GetInfo(AutofillType(CREDIT_CARD_NAME), app_locale_); | 687 credit_card->GetInfo(AutofillType(CREDIT_CARD_NAME), app_locale_); |
689 } else { | 688 } else { |
690 label = kCreditCardPrefix; | 689 label = kCreditCardPrefix; |
691 label.append(credit_card->LastFourDigits()); | 690 label.append(credit_card->LastFourDigits()); |
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1025 const AutofillMetrics* metric_logger) { | 1024 const AutofillMetrics* metric_logger) { |
1026 metric_logger_.reset(metric_logger); | 1025 metric_logger_.reset(metric_logger); |
1027 } | 1026 } |
1028 | 1027 |
1029 void PersonalDataManager::set_browser_context( | 1028 void PersonalDataManager::set_browser_context( |
1030 content::BrowserContext* context) { | 1029 content::BrowserContext* context) { |
1031 browser_context_ = context; | 1030 browser_context_ = context; |
1032 } | 1031 } |
1033 | 1032 |
1034 } // namespace autofill | 1033 } // namespace autofill |
OLD | NEW |