Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/browser/autofill_manager.h" | 5 #include "components/autofill/browser/autofill_manager.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 316 } | 316 } |
| 317 | 317 |
| 318 bool AutofillManager::OnFormSubmitted(const FormData& form, | 318 bool AutofillManager::OnFormSubmitted(const FormData& form, |
| 319 const TimeTicks& timestamp) { | 319 const TimeTicks& timestamp) { |
| 320 // Let AutoComplete know as well. | 320 // Let AutoComplete know as well. |
| 321 autocomplete_history_manager_.OnFormSubmitted(form); | 321 autocomplete_history_manager_.OnFormSubmitted(form); |
| 322 | 322 |
| 323 if (!IsAutofillEnabled()) | 323 if (!IsAutofillEnabled()) |
| 324 return false; | 324 return false; |
| 325 | 325 |
| 326 if (web_contents()->GetBrowserContext()->IsOffTheRecord()) | 326 if (external_delegate_ && external_delegate_->ShouldIgnoreFormData()) |
|
Ilya Sherman
2013/06/03 23:22:19
Should this check just be part of the IsAutofillEn
sgurun-gerrit only
2013/06/13 01:13:31
Agreed. much less error prone.
On 2013/06/03 23:2
| |
| 327 return false; | 327 return false; |
| 328 | 328 |
| 329 // Don't save data that was submitted through JavaScript. | 329 // Don't save data that was submitted through JavaScript. |
| 330 if (!form.user_submitted) | 330 if (!form.user_submitted) |
| 331 return false; | 331 return false; |
| 332 | 332 |
| 333 // If there is no personal_data_, nothing to do. | |
| 334 if (!personal_data_) | |
| 335 return false; | |
| 336 | |
| 333 // Grab a copy of the form data. | 337 // Grab a copy of the form data. |
| 334 scoped_ptr<FormStructure> submitted_form( | 338 scoped_ptr<FormStructure> submitted_form( |
| 335 new FormStructure(form, GetAutocheckoutURLPrefix())); | 339 new FormStructure(form, GetAutocheckoutURLPrefix())); |
| 336 | 340 |
| 337 // Disregard forms that we wouldn't ever autofill in the first place. | 341 // Disregard forms that we wouldn't ever autofill in the first place. |
| 338 if (!submitted_form->ShouldBeParsed(true)) | 342 if (!submitted_form->ShouldBeParsed(true)) |
| 339 return false; | 343 return false; |
| 340 | 344 |
| 341 // Ignore forms not present in our cache. These are typically forms with | 345 // Ignore forms not present in our cache. These are typically forms with |
| 342 // wonky JavaScript that also makes them not auto-fillable. | 346 // wonky JavaScript that also makes them not auto-fillable. |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 418 if (has_more_forms) | 422 if (has_more_forms) |
| 419 return; | 423 return; |
| 420 } | 424 } |
| 421 | 425 |
| 422 autocheckout_manager_.OnFormsSeen(); | 426 autocheckout_manager_.OnFormsSeen(); |
| 423 bool enabled = IsAutofillEnabled(); | 427 bool enabled = IsAutofillEnabled(); |
| 424 if (!has_logged_autofill_enabled_) { | 428 if (!has_logged_autofill_enabled_) { |
| 425 metric_logger_->LogIsAutofillEnabledAtPageLoad(enabled); | 429 metric_logger_->LogIsAutofillEnabledAtPageLoad(enabled); |
| 426 has_logged_autofill_enabled_ = true; | 430 has_logged_autofill_enabled_ = true; |
| 427 } | 431 } |
| 428 | |
|
Ilya Sherman
2013/06/03 23:22:19
nit: Spurious diff.
sgurun-gerrit only
2013/06/13 01:13:31
Done.
| |
| 429 if (!enabled) | 432 if (!enabled) |
| 430 return; | 433 return; |
| 431 | 434 |
| 432 forms_loaded_timestamp_ = timestamp; | 435 forms_loaded_timestamp_ = timestamp; |
| 433 ParseForms(forms); | 436 ParseForms(forms); |
| 434 } | 437 } |
| 435 | 438 |
| 436 void AutofillManager::OnTextFieldDidChange(const FormData& form, | 439 void AutofillManager::OnTextFieldDidChange(const FormData& form, |
| 437 const FormFieldData& field, | 440 const FormFieldData& field, |
| 438 const TimeTicks& timestamp) { | 441 const TimeTicks& timestamp) { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 475 std::vector<int> unique_ids; | 478 std::vector<int> unique_ids; |
| 476 | 479 |
| 477 if (external_delegate_) { | 480 if (external_delegate_) { |
| 478 external_delegate_->OnQuery(query_id, | 481 external_delegate_->OnQuery(query_id, |
| 479 form, | 482 form, |
| 480 field, | 483 field, |
| 481 bounding_box, | 484 bounding_box, |
| 482 display_warning); | 485 display_warning); |
| 483 } | 486 } |
| 484 | 487 |
| 488 if (personal_data_) { | |
|
Ilya Sherman
2013/06/03 23:22:19
Please move this check into the wrapped method.
sgurun-gerrit only
2013/06/13 01:13:31
Done. Actually this seems redundant since wrapped
| |
| 489 OnQueryFormFieldAutofillPersonalData(query_id, | |
| 490 form, | |
| 491 field, | |
| 492 &values, | |
| 493 &labels, | |
| 494 &icons, | |
| 495 &unique_ids); | |
| 496 } | |
|
Ilya Sherman
2013/06/03 23:22:19
nit: Please add a newline after this one.
sgurun-gerrit only
2013/06/13 01:13:31
Done.
| |
| 497 // Add the results from AutoComplete. They come back asynchronously, so we | |
| 498 // hand off what we generated and they will send the results back to the | |
| 499 // renderer. | |
| 500 autocomplete_history_manager_.OnGetAutocompleteSuggestions( | |
| 501 query_id, field.name, field.value, values, labels, icons, unique_ids); | |
| 502 } | |
| 503 | |
| 504 void AutofillManager::OnQueryFormFieldAutofillPersonalData( | |
| 505 int query_id, | |
|
Ilya Sherman
2013/06/03 23:22:19
This parameter doesn't seem to be used.
sgurun-gerrit only
2013/06/13 01:13:31
Done.
| |
| 506 const FormData& form, | |
| 507 const FormFieldData& field, | |
| 508 std::vector<base::string16>* values, | |
| 509 std::vector<base::string16>* labels, | |
| 510 std::vector<string16>* icons, | |
| 511 std::vector<int>* unique_ids) { | |
| 485 RenderViewHost* host = NULL; | 512 RenderViewHost* host = NULL; |
| 486 FormStructure* form_structure = NULL; | 513 FormStructure* form_structure = NULL; |
| 487 AutofillField* autofill_field = NULL; | 514 AutofillField* autofill_field = NULL; |
| 488 if (GetHost(&host) && | 515 if (GetHost(&host) && |
| 489 GetCachedFormAndField(form, field, &form_structure, &autofill_field) && | 516 GetCachedFormAndField(form, field, &form_structure, &autofill_field) && |
| 490 // Don't send suggestions for forms that aren't auto-fillable. | 517 // Don't send suggestions for forms that aren't auto-fillable. |
| 491 form_structure->IsAutofillable(false)) { | 518 form_structure->IsAutofillable(false)) { |
| 492 AutofillFieldType type = autofill_field->type(); | 519 AutofillFieldType type = autofill_field->type(); |
| 493 bool is_filling_credit_card = | 520 bool is_filling_credit_card = |
| 494 (AutofillType(type).group() == AutofillType::CREDIT_CARD); | 521 (AutofillType(type).group() == AutofillType::CREDIT_CARD); |
| 495 if (is_filling_credit_card) { | 522 if (is_filling_credit_card) { |
| 496 GetCreditCardSuggestions( | 523 GetCreditCardSuggestions( |
| 497 field, type, &values, &labels, &icons, &unique_ids); | 524 field, type, values, labels, icons, unique_ids); |
| 498 } else { | 525 } else { |
| 499 GetProfileSuggestions( | 526 GetProfileSuggestions( |
| 500 form_structure, field, type, &values, &labels, &icons, &unique_ids); | 527 form_structure, field, type, values, labels, icons, unique_ids); |
| 501 } | 528 } |
| 502 | 529 |
| 503 DCHECK_EQ(values.size(), labels.size()); | 530 DCHECK_EQ(values->size(), labels->size()); |
| 504 DCHECK_EQ(values.size(), icons.size()); | 531 DCHECK_EQ(values->size(), icons->size()); |
| 505 DCHECK_EQ(values.size(), unique_ids.size()); | 532 DCHECK_EQ(values->size(), unique_ids->size()); |
| 506 | 533 |
| 507 if (!values.empty()) { | 534 if (!values->empty()) { |
| 508 // Don't provide Autofill suggestions when Autofill is disabled, and don't | 535 // Don't provide Autofill suggestions when Autofill is disabled, and don't |
| 509 // provide credit card suggestions for non-HTTPS pages. However, provide a | 536 // provide credit card suggestions for non-HTTPS pages. However, provide a |
| 510 // warning to the user in these cases. | 537 // warning to the user in these cases. |
| 511 int warning = 0; | 538 int warning = 0; |
| 512 if (!form_structure->IsAutofillable(true)) | 539 if (!form_structure->IsAutofillable(true)) |
| 513 warning = IDS_AUTOFILL_WARNING_FORM_DISABLED; | 540 warning = IDS_AUTOFILL_WARNING_FORM_DISABLED; |
| 514 else if (is_filling_credit_card && !FormIsHTTPS(*form_structure)) | 541 else if (is_filling_credit_card && !FormIsHTTPS(*form_structure)) |
| 515 warning = IDS_AUTOFILL_WARNING_INSECURE_CONNECTION; | 542 warning = IDS_AUTOFILL_WARNING_INSECURE_CONNECTION; |
| 516 if (warning) { | 543 if (warning) { |
| 517 values.assign(1, l10n_util::GetStringUTF16(warning)); | 544 values->assign(1, l10n_util::GetStringUTF16(warning)); |
| 518 labels.assign(1, base::string16()); | 545 labels->assign(1, base::string16()); |
| 519 icons.assign(1, base::string16()); | 546 icons->assign(1, base::string16()); |
| 520 unique_ids.assign(1, | 547 unique_ids->assign(1, |
| 521 WebKit::WebAutofillClient::MenuItemIDWarningMessage); | 548 WebKit::WebAutofillClient::MenuItemIDWarningMessage); |
| 522 } else { | 549 } else { |
| 523 bool section_is_autofilled = | 550 bool section_is_autofilled = |
| 524 SectionIsAutofilled(*form_structure, form, | 551 SectionIsAutofilled(*form_structure, form, |
| 525 autofill_field->section()); | 552 autofill_field->section()); |
| 526 if (section_is_autofilled) { | 553 if (section_is_autofilled) { |
| 527 // If the relevant section is auto-filled and the renderer is querying | 554 // If the relevant section is auto-filled and the renderer is querying |
| 528 // for suggestions, then the user is editing the value of a field. | 555 // for suggestions, then the user is editing the value of a field. |
| 529 // In this case, mimic autocomplete: don't display labels or icons, | 556 // In this case, mimic autocomplete: don't display labels or icons, |
| 530 // as that information is redundant. | 557 // as that information is redundant. |
| 531 labels.assign(labels.size(), base::string16()); | 558 labels->assign(labels->size(), base::string16()); |
| 532 icons.assign(icons.size(), base::string16()); | 559 icons->assign(icons->size(), base::string16()); |
| 533 } | 560 } |
| 534 | 561 |
| 535 // When filling credit card suggestions, the values and labels are | 562 // When filling credit card suggestions, the values and labels are |
| 536 // typically obfuscated, which makes detecting duplicates hard. Since | 563 // typically obfuscated, which makes detecting duplicates hard. Since |
| 537 // duplicates only tend to be a problem when filling address forms | 564 // duplicates only tend to be a problem when filling address forms |
| 538 // anyway, only don't de-dup credit card suggestions. | 565 // anyway, only don't de-dup credit card suggestions. |
| 539 if (!is_filling_credit_card) | 566 if (!is_filling_credit_card) |
| 540 RemoveDuplicateSuggestions(&values, &labels, &icons, &unique_ids); | 567 RemoveDuplicateSuggestions(values, labels, icons, unique_ids); |
| 541 | 568 |
| 542 // The first time we show suggestions on this page, log the number of | 569 // The first time we show suggestions on this page, log the number of |
| 543 // suggestions shown. | 570 // suggestions shown. |
| 544 if (!has_logged_address_suggestions_count_ && !section_is_autofilled) { | 571 if (!has_logged_address_suggestions_count_ && !section_is_autofilled) { |
| 545 metric_logger_->LogAddressSuggestionsCount(values.size()); | 572 metric_logger_->LogAddressSuggestionsCount(values->size()); |
| 546 has_logged_address_suggestions_count_ = true; | 573 has_logged_address_suggestions_count_ = true; |
| 547 } | 574 } |
| 548 } | 575 } |
| 549 } | 576 } |
| 550 } | 577 } |
| 551 | |
| 552 // Add the results from AutoComplete. They come back asynchronously, so we | |
| 553 // hand off what we generated and they will send the results back to the | |
| 554 // renderer. | |
| 555 autocomplete_history_manager_.OnGetAutocompleteSuggestions( | |
| 556 query_id, field.name, field.value, values, labels, icons, unique_ids); | |
| 557 } | 578 } |
| 558 | 579 |
| 559 void AutofillManager::OnFillAutofillFormData(int query_id, | 580 void AutofillManager::OnFillAutofillFormData(int query_id, |
| 560 const FormData& form, | 581 const FormData& form, |
| 561 const FormFieldData& field, | 582 const FormFieldData& field, |
| 562 int unique_id) { | 583 int unique_id) { |
| 563 RenderViewHost* host = NULL; | 584 RenderViewHost* host = NULL; |
| 564 const AutofillDataModel* data_model = NULL; | 585 const AutofillDataModel* data_model = NULL; |
| 565 size_t variant = 0; | 586 size_t variant = 0; |
| 566 FormStructure* form_structure = NULL; | 587 FormStructure* form_structure = NULL; |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 681 } | 702 } |
| 682 } | 703 } |
| 683 | 704 |
| 684 void AutofillManager::OnHideAutofillUi() { | 705 void AutofillManager::OnHideAutofillUi() { |
| 685 if (IsNativeUiEnabled()) | 706 if (IsNativeUiEnabled()) |
| 686 manager_delegate_->HideAutofillPopup(); | 707 manager_delegate_->HideAutofillPopup(); |
| 687 manager_delegate_->HideAutocheckoutBubble(); | 708 manager_delegate_->HideAutocheckoutBubble(); |
| 688 } | 709 } |
| 689 | 710 |
| 690 void AutofillManager::RemoveAutofillProfileOrCreditCard(int unique_id) { | 711 void AutofillManager::RemoveAutofillProfileOrCreditCard(int unique_id) { |
| 712 | |
|
Ilya Sherman
2013/06/03 23:22:19
nit: Spurious newline.
sgurun-gerrit only
2013/06/13 01:13:31
Done.
| |
| 713 if (!personal_data_) | |
| 714 return; | |
|
Ilya Sherman
2013/06/03 23:22:19
Why is this code reachable?
sgurun-gerrit only
2013/06/13 01:13:31
should not be reachable. removing.
| |
| 715 | |
| 691 const AutofillDataModel* data_model = NULL; | 716 const AutofillDataModel* data_model = NULL; |
| 692 size_t variant = 0; | 717 size_t variant = 0; |
| 693 if (!GetProfileOrCreditCard(unique_id, &data_model, &variant)) { | 718 if (!GetProfileOrCreditCard(unique_id, &data_model, &variant)) { |
| 694 NOTREACHED(); | 719 NOTREACHED(); |
| 695 return; | 720 return; |
| 696 } | 721 } |
| 697 | 722 |
| 698 // TODO(csharp): If we are dealing with a variant only the variant should | 723 // TODO(csharp): If we are dealing with a variant only the variant should |
| 699 // be deleted, instead of doing nothing. | 724 // be deleted, instead of doing nothing. |
| 700 // http://crbug.com/124211 | 725 // http://crbug.com/124211 |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 858 bounding_box); | 883 bounding_box); |
| 859 } | 884 } |
| 860 | 885 |
| 861 std::string AutofillManager::GetAutocheckoutURLPrefix() const { | 886 std::string AutofillManager::GetAutocheckoutURLPrefix() const { |
| 862 if (!web_contents()) | 887 if (!web_contents()) |
| 863 return std::string(); | 888 return std::string(); |
| 864 | 889 |
| 865 autofill::autocheckout::WhitelistManager* whitelist_manager = | 890 autofill::autocheckout::WhitelistManager* whitelist_manager = |
| 866 manager_delegate_->GetAutocheckoutWhitelistManager(); | 891 manager_delegate_->GetAutocheckoutWhitelistManager(); |
| 867 | 892 |
| 868 return whitelist_manager->GetMatchedURLPrefix(web_contents()->GetURL()); | 893 return whitelist_manager ? |
| 894 whitelist_manager->GetMatchedURLPrefix(web_contents()->GetURL()) : | |
| 895 std::string(); | |
| 869 } | 896 } |
| 870 | 897 |
| 871 bool AutofillManager::IsAutofillEnabled() const { | 898 bool AutofillManager::IsAutofillEnabled() const { |
| 872 return manager_delegate_->GetPrefs()->GetBoolean(prefs::kAutofillEnabled); | 899 return manager_delegate_->GetPrefs()->GetBoolean(prefs::kAutofillEnabled); |
| 873 } | 900 } |
| 874 | 901 |
| 875 void AutofillManager::SendAutofillTypePredictions( | 902 void AutofillManager::SendAutofillTypePredictions( |
| 876 const std::vector<FormStructure*>& forms) const { | 903 const std::vector<FormStructure*>& forms) const { |
| 877 if (!CommandLine::ForCurrentProcess()->HasSwitch( | 904 if (!CommandLine::ForCurrentProcess()->HasSwitch( |
| 878 switches::kShowAutofillTypePredictions)) | 905 switches::kShowAutofillTypePredictions)) |
| 879 return; | 906 return; |
| 880 | 907 |
| 881 RenderViewHost* host = web_contents()->GetRenderViewHost(); | 908 RenderViewHost* host = web_contents()->GetRenderViewHost(); |
| 882 if (!host) | 909 if (!host) |
| 883 return; | 910 return; |
| 884 | 911 |
| 885 std::vector<FormDataPredictions> type_predictions; | 912 std::vector<FormDataPredictions> type_predictions; |
| 886 FormStructure::GetFieldTypePredictions(forms, &type_predictions); | 913 FormStructure::GetFieldTypePredictions(forms, &type_predictions); |
| 887 host->Send( | 914 host->Send( |
| 888 new AutofillMsg_FieldTypePredictionsAvailable(host->GetRoutingID(), | 915 new AutofillMsg_FieldTypePredictionsAvailable(host->GetRoutingID(), |
| 889 type_predictions)); | 916 type_predictions)); |
| 890 } | 917 } |
| 891 | 918 |
| 892 void AutofillManager::ImportFormData(const FormStructure& submitted_form) { | 919 void AutofillManager::ImportFormData(const FormStructure& submitted_form) { |
| 893 const CreditCard* imported_credit_card; | 920 const CreditCard* imported_credit_card; |
|
Ilya Sherman
2013/06/03 23:22:19
nit: Please keep this just above line 925.
sgurun-gerrit only
2013/06/13 01:13:31
I think this code should also be unreachable?
| |
| 921 | |
| 922 if (!personal_data_) | |
| 923 return; | |
| 924 | |
| 894 if (!personal_data_->ImportFormData(submitted_form, &imported_credit_card)) | 925 if (!personal_data_->ImportFormData(submitted_form, &imported_credit_card)) |
| 895 return; | 926 return; |
| 896 | 927 |
| 897 // If credit card information was submitted, we need to confirm whether to | 928 // If credit card information was submitted, we need to confirm whether to |
| 898 // save it. | 929 // save it. |
| 899 if (imported_credit_card) { | 930 if (imported_credit_card) { |
| 900 manager_delegate_->ConfirmSaveCreditCard( | 931 manager_delegate_->ConfirmSaveCreditCard( |
| 901 *metric_logger_, | 932 *metric_logger_, |
| 902 *imported_credit_card, | 933 *imported_credit_card, |
| 903 base::Bind(&PersonalDataManager::SaveImportedCreditCard, | 934 base::Bind(&PersonalDataManager::SaveImportedCreditCard, |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 917 submitted_form->LogQualityMetrics(*metric_logger_, | 948 submitted_form->LogQualityMetrics(*metric_logger_, |
| 918 load_time, | 949 load_time, |
| 919 interaction_time, | 950 interaction_time, |
| 920 submission_time); | 951 submission_time); |
| 921 | 952 |
| 922 if (submitted_form->ShouldBeCrowdsourced()) | 953 if (submitted_form->ShouldBeCrowdsourced()) |
| 923 UploadFormData(*submitted_form); | 954 UploadFormData(*submitted_form); |
| 924 } | 955 } |
| 925 | 956 |
| 926 void AutofillManager::UploadFormData(const FormStructure& submitted_form) { | 957 void AutofillManager::UploadFormData(const FormStructure& submitted_form) { |
| 927 if (!download_manager_) | 958 if (!download_manager_ || !personal_data_) |
| 928 return; | 959 return; |
| 929 | 960 |
| 930 // Check if the form is among the forms that were recently auto-filled. | 961 // Check if the form is among the forms that were recently auto-filled. |
| 931 bool was_autofilled = false; | 962 bool was_autofilled = false; |
| 932 std::string form_signature = submitted_form.FormSignature(); | 963 std::string form_signature = submitted_form.FormSignature(); |
| 933 for (std::list<std::string>::const_iterator it = | 964 for (std::list<std::string>::const_iterator it = |
| 934 autofilled_form_signatures_.begin(); | 965 autofilled_form_signatures_.begin(); |
| 935 it != autofilled_form_signatures_.end() && !was_autofilled; | 966 it != autofilled_form_signatures_.end() && !was_autofilled; |
| 936 ++it) { | 967 ++it) { |
| 937 if (*it == form_signature) | 968 if (*it == form_signature) |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 984 } | 1015 } |
| 985 | 1016 |
| 986 void AutofillManager::set_metric_logger(const AutofillMetrics* metric_logger) { | 1017 void AutofillManager::set_metric_logger(const AutofillMetrics* metric_logger) { |
| 987 metric_logger_.reset(metric_logger); | 1018 metric_logger_.reset(metric_logger); |
| 988 } | 1019 } |
| 989 | 1020 |
| 990 bool AutofillManager::GetHost(RenderViewHost** host) const { | 1021 bool AutofillManager::GetHost(RenderViewHost** host) const { |
| 991 if (!IsAutofillEnabled()) | 1022 if (!IsAutofillEnabled()) |
| 992 return false; | 1023 return false; |
| 993 | 1024 |
| 1025 if (!personal_data_) | |
| 1026 return false; | |
|
Ilya Sherman
2013/06/03 23:22:19
Why is this code reachable?
sgurun-gerrit only
2013/06/13 01:13:31
it is eventually reachable via OnQueryFormFieldAut
| |
| 1027 | |
| 994 // No autofill data to return if the profiles are empty. | 1028 // No autofill data to return if the profiles are empty. |
| 995 if (personal_data_->GetProfiles().empty() && | 1029 if (personal_data_->GetProfiles().empty() && |
| 996 personal_data_->GetCreditCards().empty()) { | 1030 personal_data_->GetCreditCards().empty()) { |
| 997 return false; | 1031 return false; |
| 998 } | 1032 } |
| 999 | 1033 |
| 1000 *host = web_contents()->GetRenderViewHost(); | 1034 *host = web_contents()->GetRenderViewHost(); |
| 1001 if (!*host) | 1035 if (!*host) |
| 1002 return false; | 1036 return false; |
| 1003 | 1037 |
| 1004 return true; | 1038 return true; |
| 1005 } | 1039 } |
| 1006 | 1040 |
| 1007 bool AutofillManager::GetProfileOrCreditCard( | 1041 bool AutofillManager::GetProfileOrCreditCard( |
| 1008 int unique_id, | 1042 int unique_id, |
| 1009 const AutofillDataModel** data_model, | 1043 const AutofillDataModel** data_model, |
| 1010 size_t* variant) const { | 1044 size_t* variant) const { |
| 1045 if (!personal_data_) | |
| 1046 return false; | |
|
Ilya Sherman
2013/06/03 23:22:19
Why is this code reachable?
sgurun-gerrit only
2013/06/13 01:13:31
Done.
| |
| 1047 | |
| 1011 // Unpack the |unique_id| into component parts. | 1048 // Unpack the |unique_id| into component parts. |
| 1012 GUIDPair credit_card_guid; | 1049 GUIDPair credit_card_guid; |
| 1013 GUIDPair profile_guid; | 1050 GUIDPair profile_guid; |
| 1014 UnpackGUIDs(unique_id, &credit_card_guid, &profile_guid); | 1051 UnpackGUIDs(unique_id, &credit_card_guid, &profile_guid); |
| 1015 DCHECK(!base::IsValidGUID(credit_card_guid.first) || | 1052 DCHECK(!base::IsValidGUID(credit_card_guid.first) || |
| 1016 !base::IsValidGUID(profile_guid.first)); | 1053 !base::IsValidGUID(profile_guid.first)); |
| 1017 | 1054 |
| 1018 // Find the profile that matches the |profile_guid|, if one is specified. | 1055 // Find the profile that matches the |profile_guid|, if one is specified. |
| 1019 // Otherwise find the credit card that matches the |credit_card_guid|, | 1056 // Otherwise find the credit card that matches the |credit_card_guid|, |
| 1020 // if specified. | 1057 // if specified. |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1150 } | 1187 } |
| 1151 | 1188 |
| 1152 void AutofillManager::GetProfileSuggestions( | 1189 void AutofillManager::GetProfileSuggestions( |
| 1153 FormStructure* form, | 1190 FormStructure* form, |
| 1154 const FormFieldData& field, | 1191 const FormFieldData& field, |
| 1155 AutofillFieldType type, | 1192 AutofillFieldType type, |
| 1156 std::vector<base::string16>* values, | 1193 std::vector<base::string16>* values, |
| 1157 std::vector<base::string16>* labels, | 1194 std::vector<base::string16>* labels, |
| 1158 std::vector<base::string16>* icons, | 1195 std::vector<base::string16>* icons, |
| 1159 std::vector<int>* unique_ids) const { | 1196 std::vector<int>* unique_ids) const { |
| 1197 | |
|
Ilya Sherman
2013/06/03 23:22:19
nit: Spurious newline.
sgurun-gerrit only
2013/06/13 01:13:31
Done.
| |
| 1198 if (!personal_data_) | |
| 1199 return; | |
|
Ilya Sherman
2013/06/03 23:22:19
nit: Please add a newline after this line.
Ilya Sherman
2013/06/03 23:22:19
Why is this code reachable?
sgurun-gerrit only
2013/06/13 01:13:31
Done.
sgurun-gerrit only
2013/06/13 01:13:31
Done.
| |
| 1160 std::vector<AutofillFieldType> field_types(form->field_count()); | 1200 std::vector<AutofillFieldType> field_types(form->field_count()); |
| 1161 for (size_t i = 0; i < form->field_count(); ++i) { | 1201 for (size_t i = 0; i < form->field_count(); ++i) { |
| 1162 field_types[i] = form->field(i)->type(); | 1202 field_types[i] = form->field(i)->type(); |
| 1163 } | 1203 } |
| 1164 std::vector<GUIDPair> guid_pairs; | 1204 std::vector<GUIDPair> guid_pairs; |
| 1165 | 1205 |
| 1166 personal_data_->GetProfileSuggestions( | 1206 personal_data_->GetProfileSuggestions( |
| 1167 type, field.value, field.is_autofilled, field_types, | 1207 type, field.value, field.is_autofilled, field_types, |
| 1168 values, labels, icons, &guid_pairs); | 1208 values, labels, icons, &guid_pairs); |
| 1169 | 1209 |
| 1170 for (size_t i = 0; i < guid_pairs.size(); ++i) { | 1210 for (size_t i = 0; i < guid_pairs.size(); ++i) { |
| 1171 unique_ids->push_back(PackGUIDs(GUIDPair(std::string(), 0), | 1211 unique_ids->push_back(PackGUIDs(GUIDPair(std::string(), 0), |
| 1172 guid_pairs[i])); | 1212 guid_pairs[i])); |
| 1173 } | 1213 } |
| 1174 } | 1214 } |
| 1175 | 1215 |
| 1176 void AutofillManager::GetCreditCardSuggestions( | 1216 void AutofillManager::GetCreditCardSuggestions( |
| 1177 const FormFieldData& field, | 1217 const FormFieldData& field, |
| 1178 AutofillFieldType type, | 1218 AutofillFieldType type, |
| 1179 std::vector<base::string16>* values, | 1219 std::vector<base::string16>* values, |
| 1180 std::vector<base::string16>* labels, | 1220 std::vector<base::string16>* labels, |
| 1181 std::vector<base::string16>* icons, | 1221 std::vector<base::string16>* icons, |
| 1182 std::vector<int>* unique_ids) const { | 1222 std::vector<int>* unique_ids) const { |
| 1223 | |
|
Ilya Sherman
2013/06/03 23:22:19
nit: Spurious newline.
sgurun-gerrit only
2013/06/13 01:13:31
Done.
| |
| 1224 if (!personal_data_) | |
| 1225 return; | |
|
Ilya Sherman
2013/06/03 23:22:19
Why is this code reachable?
sgurun-gerrit only
2013/06/13 01:13:31
removed.
On 2013/06/03 23:22:19, Ilya Sherman wro
| |
| 1226 | |
| 1183 std::vector<GUIDPair> guid_pairs; | 1227 std::vector<GUIDPair> guid_pairs; |
| 1184 personal_data_->GetCreditCardSuggestions( | 1228 personal_data_->GetCreditCardSuggestions( |
| 1185 type, field.value, values, labels, icons, &guid_pairs); | 1229 type, field.value, values, labels, icons, &guid_pairs); |
| 1186 | 1230 |
| 1187 for (size_t i = 0; i < guid_pairs.size(); ++i) { | 1231 for (size_t i = 0; i < guid_pairs.size(); ++i) { |
| 1188 unique_ids->push_back(PackGUIDs(guid_pairs[i], GUIDPair(std::string(), 0))); | 1232 unique_ids->push_back(PackGUIDs(guid_pairs[i], GUIDPair(std::string(), 0))); |
| 1189 } | 1233 } |
| 1190 } | 1234 } |
| 1191 | 1235 |
| 1192 void AutofillManager::ParseForms(const std::vector<FormData>& forms) { | 1236 void AutofillManager::ParseForms(const std::vector<FormData>& forms) { |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1294 | 1338 |
| 1295 void AutofillManager::UpdateInitialInteractionTimestamp( | 1339 void AutofillManager::UpdateInitialInteractionTimestamp( |
| 1296 const TimeTicks& interaction_timestamp) { | 1340 const TimeTicks& interaction_timestamp) { |
| 1297 if (initial_interaction_timestamp_.is_null() || | 1341 if (initial_interaction_timestamp_.is_null() || |
| 1298 interaction_timestamp < initial_interaction_timestamp_) { | 1342 interaction_timestamp < initial_interaction_timestamp_) { |
| 1299 initial_interaction_timestamp_ = interaction_timestamp; | 1343 initial_interaction_timestamp_ = interaction_timestamp; |
| 1300 } | 1344 } |
| 1301 } | 1345 } |
| 1302 | 1346 |
| 1303 } // namespace autofill | 1347 } // namespace autofill |
| OLD | NEW |