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

Unified 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: Use the credit card number field in metrics tests, because ios single-field form fill will not requ… 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 side-by-side diff with in-line comments
Download patch
Index: components/autofill/core/browser/autofill_manager.cc
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
index 205b7f6b228553bfd414cc2834e893a84e925557..c1e219eeb455e198b60b6cd2b0ceed66acb72bde 100644
--- a/components/autofill/core/browser/autofill_manager.cc
+++ b/components/autofill/core/browser/autofill_manager.cc
@@ -608,16 +608,13 @@ void AutofillManager::FillOrPreviewCreditCardForm(
if (action == AutofillDriver::FORM_DATA_ACTION_FILL) {
if (credit_card.record_type() == CreditCard::MASKED_SERVER_CARD &&
WillFillCreditCardNumber(form, field)) {
- unmask_request_.card = credit_card;
unmasking_query_id_ = query_id;
unmasking_form_ = form;
unmasking_field_ = field;
- payments_client_->Prepare();
- client_->ShowUnmaskPrompt(unmask_request_.card,
- AutofillClient::UNMASK_FOR_AUTOFILL,
- weak_ptr_factory_.GetWeakPtr());
- client_->LoadRiskData(base::Bind(&AutofillManager::OnDidGetUnmaskRiskData,
- weak_ptr_factory_.GetWeakPtr()));
+ masked_card_ = credit_card;
+ GetOrCreateFullCardRequest()->GetFullCard(
+ masked_card_, AutofillClient::UNMASK_FOR_AUTOFILL,
+ weak_ptr_factory_.GetWeakPtr());
credit_card_form_event_logger_->OnDidSelectMaskedServerCardSuggestion();
return;
}
@@ -625,7 +622,8 @@ void AutofillManager::FillOrPreviewCreditCardForm(
}
FillOrPreviewDataModelForm(action, query_id, form, field, credit_card,
- true /* is_credit_card */);
+ true /* is_credit_card */,
+ base::string16() /* cvc */);
}
void AutofillManager::FillOrPreviewProfileForm(
@@ -638,7 +636,8 @@ void AutofillManager::FillOrPreviewProfileForm(
address_form_event_logger_->OnDidFillSuggestion(profile);
FillOrPreviewDataModelForm(action, query_id, form, field, profile,
- false /* is_credit_card */);
+ false /* is_credit_card */,
+ base::string16() /* cvc */);
}
void AutofillManager::FillOrPreviewForm(
@@ -667,14 +666,15 @@ void AutofillManager::FillOrPreviewForm(
void AutofillManager::FillCreditCardForm(int query_id,
const FormData& form,
const FormFieldData& field,
- const CreditCard& credit_card) {
+ const CreditCard& credit_card,
+ const base::string16& cvc) {
if (!IsValidFormData(form) || !IsValidFormFieldData(field) ||
!driver_->RendererIsAvailable()) {
return;
}
FillOrPreviewDataModelForm(AutofillDriver::FORM_DATA_ACTION_FILL, query_id,
- form, field, credit_card, true);
+ form, field, credit_card, true, cvc);
}
void AutofillManager::OnFocusNoLongerOnForm() {
@@ -822,13 +822,22 @@ void AutofillManager::RemoveAutocompleteEntry(const base::string16& name,
}
bool AutofillManager::IsShowingUnmaskPrompt() {
- return unmask_request_.card.Compare(CreditCard()) != 0;
+ return full_card_request_ && full_card_request_->IsGettingFullCard();
}
const std::vector<FormStructure*>& AutofillManager::GetFormStructures() {
return form_structures_.get();
}
+payments::FullCardRequest* AutofillManager::GetOrCreateFullCardRequest() {
+ if (!full_card_request_) {
+ full_card_request_.reset(new payments::FullCardRequest(
+ client_, payments_client_.get(), personal_data_));
+ }
+
+ return full_card_request_.get();
+}
+
void AutofillManager::SetTestDelegate(AutofillManagerTestDelegate* delegate) {
test_delegate_ = delegate;
}
@@ -877,49 +886,14 @@ void AutofillManager::OnLoadedServerPredictions(
driver_->SendAutofillTypePredictionsToRenderer(queried_forms);
}
-void AutofillManager::OnUnmaskResponse(const UnmaskResponse& response) {
- unmask_request_.user_response = response;
- if (!unmask_request_.risk_data.empty()) {
- real_pan_request_timestamp_ = base::Time::Now();
- payments_client_->UnmaskCard(unmask_request_);
- }
-}
-
-void AutofillManager::OnUnmaskPromptClosed() {
- payments_client_->CancelRequest();
- driver_->RendererShouldClearPreviewedForm();
- unmask_request_ = payments::PaymentsClient::UnmaskRequestDetails();
-}
-
IdentityProvider* AutofillManager::GetIdentityProvider() {
return client_->GetIdentityProvider();
}
void AutofillManager::OnDidGetRealPan(AutofillClient::PaymentsRpcResult result,
const std::string& real_pan) {
- AutofillMetrics::LogRealPanDuration(
- base::Time::Now() - real_pan_request_timestamp_, result);
- if (!real_pan.empty()) {
- DCHECK_EQ(AutofillClient::SUCCESS, result);
- credit_card_form_event_logger_->OnDidFillSuggestion(unmask_request_.card);
- unmask_request_.card.set_record_type(CreditCard::FULL_SERVER_CARD);
- unmask_request_.card.SetNumber(base::UTF8ToUTF16(real_pan));
- if (!unmask_request_.user_response.exp_month.empty()) {
- unmask_request_.card.SetRawInfo(CREDIT_CARD_EXP_MONTH,
- unmask_request_.user_response.exp_month);
- }
- if (!unmask_request_.user_response.exp_year.empty()) {
- unmask_request_.card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR,
- unmask_request_.user_response.exp_year);
- }
- if (unmask_request_.user_response.should_store_pan)
- personal_data_->UpdateServerCreditCard(unmask_request_.card);
-
- FillCreditCardForm(unmasking_query_id_, unmasking_form_, unmasking_field_,
- unmask_request_.card);
- }
-
- client_->OnUnmaskVerificationResult(result);
+ DCHECK(full_card_request_);
+ full_card_request_->OnDidGetRealPan(result, real_pan);
}
void AutofillManager::OnDidGetUploadDetails(
@@ -968,12 +942,16 @@ void AutofillManager::OnDidUploadCard(
// TODO(jdonnelly): Log duration.
}
-void AutofillManager::OnDidGetUnmaskRiskData(const std::string& risk_data) {
- unmask_request_.risk_data = risk_data;
- if (!unmask_request_.user_response.cvc.empty()) {
- real_pan_request_timestamp_ = base::Time::Now();
- payments_client_->UnmaskCard(unmask_request_);
- }
+void AutofillManager::OnFullCardDetails(const CreditCard& card,
+ const base::string16& cvc) {
+ credit_card_form_event_logger_->OnDidFillSuggestion(masked_card_);
+ FillCreditCardForm(unmasking_query_id_, unmasking_form_, unmasking_field_,
+ card, cvc);
+ masked_card_ = CreditCard();
+}
+
+void AutofillManager::OnFullCardError() {
+ driver_->RendererShouldClearPreviewedForm();
}
void AutofillManager::OnUserDidAcceptUpload() {
@@ -1260,7 +1238,7 @@ void AutofillManager::Reset() {
user_did_type_ = false;
user_did_autofill_ = false;
user_did_edit_autofilled_field_ = false;
- unmask_request_ = payments::PaymentsClient::UnmaskRequestDetails();
+ masked_card_ = CreditCard();
unmasking_query_id_ = -1;
unmasking_form_ = FormData();
unmasking_field_ = FormFieldData();
@@ -1384,7 +1362,8 @@ void AutofillManager::FillOrPreviewDataModelForm(
const FormData& form,
const FormFieldData& field,
const AutofillDataModel& data_model,
- bool is_credit_card) {
+ bool is_credit_card,
+ const base::string16& cvc) {
FormStructure* form_structure = NULL;
AutofillField* autofill_field = NULL;
if (!GetCachedFormAndField(form, field, &form_structure, &autofill_field))
@@ -1459,10 +1438,7 @@ void AutofillManager::FillOrPreviewDataModelForm(
if (is_credit_card &&
cached_field->Type().GetStorableType() ==
CREDIT_CARD_VERIFICATION_CODE) {
- // If this is |unmask_request_.card|, |unmask_request_.user_response.cvc|
- // should be non-empty and vice versa.
- value = unmask_request_.user_response.cvc;
- DCHECK_EQ(&unmask_request_.card == &data_model, !value.empty());
+ value = cvc;
} else if (is_credit_card && IsCreditCardExpirationType(
cached_field->Type().GetStorableType()) &&
static_cast<const CreditCard*>(&data_model)
« no previous file with comments | « components/autofill/core/browser/autofill_manager.h ('k') | components/autofill/core/browser/autofill_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698