| 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)
|
|
|