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

Side by Side Diff: components/autofill/core/browser/autofill_manager.cc

Issue 1899893002: Card unmasking without form filling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
OLDNEW
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/autofill_manager.h" 5 #include "components/autofill/core/browser/autofill_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 // work if the delegate has a pointer to the AutofillManager, but 237 // work if the delegate has a pointer to the AutofillManager, but
238 // future directions may not need such a pointer. 238 // future directions may not need such a pointer.
239 external_delegate_ = delegate; 239 external_delegate_ = delegate;
240 autocomplete_history_manager_->SetExternalDelegate(delegate); 240 autocomplete_history_manager_->SetExternalDelegate(delegate);
241 } 241 }
242 242
243 void AutofillManager::ShowAutofillSettings() { 243 void AutofillManager::ShowAutofillSettings() {
244 client_->ShowAutofillSettings(); 244 client_->ShowAutofillSettings();
245 } 245 }
246 246
247 void AutofillManager::UnmaskCardForPayment(const CreditCard& maybe_masked_card,
248 const UnmaskCallback& callback) {
249 if (unmask_callback_) {
250 callback.Run(false, maybe_masked_card, maybe_masked_card, base::string16());
251 return;
252 }
253
254 unmask_callback_.reset(new UnmaskCallback(callback));
255 unmask_request_.card = maybe_masked_card;
256 bool is_masked =
257 maybe_masked_card.record_type() == CreditCard::MASKED_SERVER_CARD;
258
259 if (is_masked)
260 payments_client_->Prepare();
261
262 client_->ShowUnmaskPrompt(unmask_request_.card,
Mathieu 2016/04/19 13:24:25 can you mention why we're calling ShowUnmaskPrompt
263 weak_ptr_factory_.GetWeakPtr());
264
265 if (is_masked) {
266 client_->LoadRiskData(base::Bind(&AutofillManager::OnDidGetUnmaskRiskData,
267 weak_ptr_factory_.GetWeakPtr()));
268 }
269 }
270
247 bool AutofillManager::ShouldShowScanCreditCard(const FormData& form, 271 bool AutofillManager::ShouldShowScanCreditCard(const FormData& form,
248 const FormFieldData& field) { 272 const FormFieldData& field) {
249 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 273 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
250 switches::kDisableCreditCardScan)) { 274 switches::kDisableCreditCardScan)) {
251 return false; 275 return false;
252 } 276 }
253 277
254 if (base::FieldTrialList::FindFullName("CreditCardScan") == "Control" && 278 if (base::FieldTrialList::FindFullName("CreditCardScan") == "Control" &&
255 !base::CommandLine::ForCurrentProcess()->HasSwitch( 279 !base::CommandLine::ForCurrentProcess()->HasSwitch(
256 switches::kEnableCreditCardScan)) { 280 switches::kEnableCreditCardScan)) {
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 624
601 void AutofillManager::FillOrPreviewCreditCardForm( 625 void AutofillManager::FillOrPreviewCreditCardForm(
602 AutofillDriver::RendererFormDataAction action, 626 AutofillDriver::RendererFormDataAction action,
603 int query_id, 627 int query_id,
604 const FormData& form, 628 const FormData& form,
605 const FormFieldData& field, 629 const FormFieldData& field,
606 const CreditCard& credit_card) { 630 const CreditCard& credit_card) {
607 if (action == AutofillDriver::FORM_DATA_ACTION_FILL) { 631 if (action == AutofillDriver::FORM_DATA_ACTION_FILL) {
608 if (credit_card.record_type() == CreditCard::MASKED_SERVER_CARD && 632 if (credit_card.record_type() == CreditCard::MASKED_SERVER_CARD &&
609 WillFillCreditCardNumber(form, field)) { 633 WillFillCreditCardNumber(form, field)) {
610 unmask_request_.card = credit_card;
611 unmasking_query_id_ = query_id; 634 unmasking_query_id_ = query_id;
612 unmasking_form_ = form; 635 unmasking_form_ = form;
613 unmasking_field_ = field; 636 unmasking_field_ = field;
614 payments_client_->Prepare(); 637 UnmaskCardForPayment(credit_card,
615 client_->ShowUnmaskPrompt(unmask_request_.card, 638 base::Bind(&AutofillManager::OnCardUnmasked,
616 weak_ptr_factory_.GetWeakPtr()); 639 weak_ptr_factory_.GetWeakPtr()));
617 client_->LoadRiskData(base::Bind(&AutofillManager::OnDidGetUnmaskRiskData,
618 weak_ptr_factory_.GetWeakPtr()));
619 credit_card_form_event_logger_->OnDidSelectMaskedServerCardSuggestion(); 640 credit_card_form_event_logger_->OnDidSelectMaskedServerCardSuggestion();
620 return; 641 return;
621 } 642 }
622 credit_card_form_event_logger_->OnDidFillSuggestion(credit_card); 643 credit_card_form_event_logger_->OnDidFillSuggestion(credit_card);
623 } 644 }
624 645
625 FillOrPreviewDataModelForm(action, query_id, form, field, credit_card, 646 FillOrPreviewDataModelForm(action, query_id, form, field, credit_card,
626 true /* is_credit_card */); 647 true /* is_credit_card */);
627 } 648 }
628 649
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 890
870 // Forward form structures to the password generation manager to detect 891 // Forward form structures to the password generation manager to detect
871 // account creation forms. 892 // account creation forms.
872 driver_->PropagateAutofillPredictions(queried_forms); 893 driver_->PropagateAutofillPredictions(queried_forms);
873 894
874 // If the corresponding flag is set, annotate forms with the predicted types. 895 // If the corresponding flag is set, annotate forms with the predicted types.
875 driver_->SendAutofillTypePredictionsToRenderer(queried_forms); 896 driver_->SendAutofillTypePredictionsToRenderer(queried_forms);
876 } 897 }
877 898
878 void AutofillManager::OnUnmaskResponse(const UnmaskResponse& response) { 899 void AutofillManager::OnUnmaskResponse(const UnmaskResponse& response) {
900 DCHECK(unmask_callback_);
901
902 if (unmask_request_.card.record_type() != CreditCard::MASKED_SERVER_CARD) {
903 unmask_callback_->Run(true, unmask_request_.card, unmask_request_.card,
904 response.cvc);
905 unmask_callback_.reset();
906 client_->OnUnmaskVerificationResult(AutofillClient::SUCCESS);
907 return;
908 }
909
879 unmask_request_.user_response = response; 910 unmask_request_.user_response = response;
880 if (!unmask_request_.risk_data.empty()) { 911 if (!unmask_request_.risk_data.empty()) {
881 real_pan_request_timestamp_ = base::Time::Now(); 912 real_pan_request_timestamp_ = base::Time::Now();
882 payments_client_->UnmaskCard(unmask_request_); 913 payments_client_->UnmaskCard(unmask_request_);
883 } 914 }
884 } 915 }
885 916
886 void AutofillManager::OnUnmaskPromptClosed() { 917 void AutofillManager::OnUnmaskPromptClosed() {
918 if (unmask_callback_) {
919 unmask_callback_->Run(false, unmask_request_.card, unmask_request_.card,
920 base::string16());
921 unmask_callback_.reset();
922 }
887 payments_client_->CancelRequest(); 923 payments_client_->CancelRequest();
888 driver_->RendererShouldClearPreviewedForm();
889 unmask_request_ = payments::PaymentsClient::UnmaskRequestDetails(); 924 unmask_request_ = payments::PaymentsClient::UnmaskRequestDetails();
890 } 925 }
891 926
892 IdentityProvider* AutofillManager::GetIdentityProvider() { 927 IdentityProvider* AutofillManager::GetIdentityProvider() {
893 return client_->GetIdentityProvider(); 928 return client_->GetIdentityProvider();
894 } 929 }
895 930
896 void AutofillManager::OnDidGetRealPan(AutofillClient::PaymentsRpcResult result, 931 void AutofillManager::OnDidGetRealPan(AutofillClient::PaymentsRpcResult result,
897 const std::string& real_pan) { 932 const std::string& real_pan) {
933 DCHECK(unmask_callback_);
898 AutofillMetrics::LogRealPanDuration( 934 AutofillMetrics::LogRealPanDuration(
899 base::Time::Now() - real_pan_request_timestamp_, result); 935 base::Time::Now() - real_pan_request_timestamp_, result);
936 CreditCard original = unmask_request_.card;
900 if (!real_pan.empty()) { 937 if (!real_pan.empty()) {
901 DCHECK_EQ(AutofillClient::SUCCESS, result); 938 DCHECK_EQ(AutofillClient::SUCCESS, result);
902 credit_card_form_event_logger_->OnDidFillSuggestion(unmask_request_.card);
903 unmask_request_.card.set_record_type(CreditCard::FULL_SERVER_CARD); 939 unmask_request_.card.set_record_type(CreditCard::FULL_SERVER_CARD);
904 unmask_request_.card.SetNumber(base::UTF8ToUTF16(real_pan)); 940 unmask_request_.card.SetNumber(base::UTF8ToUTF16(real_pan));
905 if (!unmask_request_.user_response.exp_month.empty()) { 941 if (!unmask_request_.user_response.exp_month.empty()) {
906 unmask_request_.card.SetRawInfo(CREDIT_CARD_EXP_MONTH, 942 unmask_request_.card.SetRawInfo(CREDIT_CARD_EXP_MONTH,
907 unmask_request_.user_response.exp_month); 943 unmask_request_.user_response.exp_month);
908 } 944 }
909 if (!unmask_request_.user_response.exp_year.empty()) { 945 if (!unmask_request_.user_response.exp_year.empty()) {
910 unmask_request_.card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, 946 unmask_request_.card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR,
911 unmask_request_.user_response.exp_year); 947 unmask_request_.user_response.exp_year);
912 } 948 }
913 if (unmask_request_.user_response.should_store_pan) 949 if (unmask_request_.user_response.should_store_pan)
914 personal_data_->UpdateServerCreditCard(unmask_request_.card); 950 personal_data_->UpdateServerCreditCard(unmask_request_.card);
951 }
915 952
916 FillCreditCardForm(unmasking_query_id_, unmasking_form_, unmasking_field_, 953 unmask_callback_->Run(!real_pan.empty() && result == AutofillClient::SUCCESS,
917 unmask_request_.card); 954 original, unmask_request_.card,
918 } 955 unmask_request_.user_response.cvc);
956 unmask_callback_.reset();
919 957
920 client_->OnUnmaskVerificationResult(result); 958 client_->OnUnmaskVerificationResult(result);
921 } 959 }
922 960
923 void AutofillManager::OnDidGetUploadDetails( 961 void AutofillManager::OnDidGetUploadDetails(
924 AutofillClient::PaymentsRpcResult result, 962 AutofillClient::PaymentsRpcResult result,
925 const base::string16& context_token, 963 const base::string16& context_token,
926 std::unique_ptr<base::DictionaryValue> legal_message) { 964 std::unique_ptr<base::DictionaryValue> legal_message) {
927 // TODO(jdonnelly): Log duration. 965 // TODO(jdonnelly): Log duration.
928 if (result == AutofillClient::SUCCESS) { 966 if (result == AutofillClient::SUCCESS) {
(...skipping 30 matching lines...) Expand all
959 AutofillMetrics::UPLOAD_NOT_OFFERED_GET_UPLOAD_DETAILS_FAILED); 997 AutofillMetrics::UPLOAD_NOT_OFFERED_GET_UPLOAD_DETAILS_FAILED);
960 } 998 }
961 } 999 }
962 1000
963 void AutofillManager::OnDidUploadCard( 1001 void AutofillManager::OnDidUploadCard(
964 AutofillClient::PaymentsRpcResult result) { 1002 AutofillClient::PaymentsRpcResult result) {
965 // We don't do anything user-visible if the upload attempt fails. 1003 // We don't do anything user-visible if the upload attempt fails.
966 // TODO(jdonnelly): Log duration. 1004 // TODO(jdonnelly): Log duration.
967 } 1005 }
968 1006
1007 void AutofillManager::OnCardUnmasked(bool success,
1008 const CreditCard& original_card,
1009 const CreditCard& unmasked_card,
1010 const base::string16& unused_cvc) {
1011 if (success) {
1012 credit_card_form_event_logger_->OnDidFillSuggestion(original_card);
1013 FillCreditCardForm(unmasking_query_id_, unmasking_form_, unmasking_field_,
Mathieu 2016/04/19 13:24:24 curious, if the CVC is unused here, where is it ta
1014 unmasked_card);
1015 } else {
1016 driver_->RendererShouldClearPreviewedForm();
1017 }
1018 }
1019
969 void AutofillManager::OnDidGetUnmaskRiskData(const std::string& risk_data) { 1020 void AutofillManager::OnDidGetUnmaskRiskData(const std::string& risk_data) {
970 unmask_request_.risk_data = risk_data; 1021 unmask_request_.risk_data = risk_data;
971 if (!unmask_request_.user_response.cvc.empty()) { 1022 if (!unmask_request_.user_response.cvc.empty()) {
972 real_pan_request_timestamp_ = base::Time::Now(); 1023 real_pan_request_timestamp_ = base::Time::Now();
973 payments_client_->UnmaskCard(unmask_request_); 1024 payments_client_->UnmaskCard(unmask_request_);
974 } 1025 }
975 } 1026 }
976 1027
977 void AutofillManager::OnUserDidAcceptUpload() { 1028 void AutofillManager::OnUserDidAcceptUpload() {
978 user_did_accept_upload_prompt_ = true; 1029 user_did_accept_upload_prompt_ = true;
(...skipping 1038 matching lines...) Expand 10 before | Expand all | Expand 10 after
2017 if (i > 0) 2068 if (i > 0)
2018 fputs("Next oldest form:\n", file); 2069 fputs("Next oldest form:\n", file);
2019 } 2070 }
2020 fputs("\n", file); 2071 fputs("\n", file);
2021 2072
2022 fclose(file); 2073 fclose(file);
2023 } 2074 }
2024 #endif // ENABLE_FORM_DEBUG_DUMP 2075 #endif // ENABLE_FORM_DEBUG_DUMP
2025 2076
2026 } // namespace autofill 2077 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698