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

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

Issue 1899893002: Card unmasking without form filling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moar tests 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/autofill/core/browser/full_card_request.h"
6
7 #include "base/bind.h"
8 #include "base/logging.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "components/autofill/core/browser/autofill_client.h"
11 #include "components/autofill/core/browser/autofill_metrics.h"
12 #include "components/autofill/core/browser/credit_card.h"
13 #include "components/autofill/core/browser/personal_data_manager.h"
14
15 namespace autofill {
16
17 FullCardRequest::FullCardRequest(net::URLRequestContextGetter* url_getter,
18 AutofillClient* autofill_client,
19 PersonalDataManager* personal_data_manager)
20 : autofill_client_(autofill_client),
21 personal_data_manager_(personal_data_manager),
22 delegate_(nullptr),
23 payments_client_(url_getter, this),
Mathieu 2016/04/22 17:58:35 could PaymentsClient be an argument to the constru
please use gerrit instead 2016/04/22 20:50:18 Done.
24 weak_ptr_factory_(this) {
25 DCHECK(autofill_client_);
26 DCHECK(personal_data_manager_);
27 }
28
29 FullCardRequest::~FullCardRequest() {}
30
31 void FullCardRequest::GetFullCard(const CreditCard& card,
32 AutofillClient::UnmaskCardReason reason,
33 base::WeakPtr<Delegate> delegate) {
34 DCHECK(delegate);
35 if (delegate_) {
Mathieu 2016/04/22 17:58:35 Please add a comment since this is not immediately
please use gerrit instead 2016/04/22 20:50:18 Done.
36 delegate->OnFullCardError();
37 return;
38 }
39
40 delegate_ = delegate;
41 request_.reset(new payments::PaymentsClient::UnmaskRequestDetails);
42 request_->card = card;
43 bool is_masked = card.record_type() == CreditCard::MASKED_SERVER_CARD;
44 if (is_masked)
45 payments_client_.Prepare();
46
47 autofill_client_->ShowUnmaskPrompt(request_->card, reason,
48 weak_ptr_factory_.GetWeakPtr());
49
50 if (is_masked) {
51 autofill_client_->LoadRiskData(
52 base::Bind(&FullCardRequest::OnDidGetUnmaskRiskData,
53 weak_ptr_factory_.GetWeakPtr()));
54 }
55 }
56
57 bool FullCardRequest::IsGettingFullCard() const {
58 return !!request_;
59 }
60
61 void FullCardRequest::OnDidGetUnmaskRiskData(const std::string& risk_data) {
62 request_->risk_data = risk_data;
63 if (!request_->user_response.cvc.empty()) {
64 real_pan_request_timestamp_ = base::Time::Now();
65 payments_client_.UnmaskCard(*request_);
66 }
67 }
68
69 void FullCardRequest::OnUnmaskResponse(const UnmaskResponse& response) {
70 if (!response.exp_month.empty())
71 request_->card.SetRawInfo(CREDIT_CARD_EXP_MONTH, response.exp_month);
72
73 if (!response.exp_year.empty())
74 request_->card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, response.exp_year);
75
76 if (request_->card.record_type() != CreditCard::MASKED_SERVER_CARD) {
77 if (delegate_)
78 delegate_->OnFullCardDetails(request_->card, response.cvc);
79 delegate_ = nullptr;
80 autofill_client_->OnUnmaskVerificationResult(AutofillClient::SUCCESS);
81 request_.reset();
82 return;
83 }
84
85 request_->user_response = response;
86 if (!request_->risk_data.empty()) {
87 real_pan_request_timestamp_ = base::Time::Now();
88 payments_client_.UnmaskCard(*request_);
89 }
90 }
91
92 void FullCardRequest::OnUnmaskPromptClosed() {
93 if (delegate_)
94 delegate_->OnFullCardError();
95
96 delegate_ = nullptr;
97 payments_client_.CancelRequest();
98 request_.reset();
99 }
100
101 IdentityProvider* FullCardRequest::GetIdentityProvider() {
102 return autofill_client_->GetIdentityProvider();
103 }
104
105 void FullCardRequest::OnDidGetRealPan(AutofillClient::PaymentsRpcResult result,
106 const std::string& real_pan) {
107 AutofillMetrics::LogRealPanDuration(
108 base::Time::Now() - real_pan_request_timestamp_, result);
109
110 if (!real_pan.empty()) {
111 DCHECK_EQ(AutofillClient::SUCCESS, result);
112 request_->card.set_record_type(CreditCard::FULL_SERVER_CARD);
113 request_->card.SetNumber(base::UTF8ToUTF16(real_pan));
114
115 if (request_->user_response.should_store_pan)
116 personal_data_manager_->UpdateServerCreditCard(request_->card);
117
118 if (delegate_)
119 delegate_->OnFullCardDetails(request_->card, request_->user_response.cvc);
120 } else {
121 if (delegate_)
122 delegate_->OnFullCardError();
123 }
124
125 delegate_ = nullptr;
126 autofill_client_->OnUnmaskVerificationResult(result);
127 request_.reset();
128 }
129
130 void FullCardRequest::OnDidGetUploadDetails(
131 AutofillClient::PaymentsRpcResult result,
132 const base::string16& context_token,
133 std::unique_ptr<base::DictionaryValue> legal_message) {
134 NOTREACHED();
135 }
136
137 void FullCardRequest::OnDidUploadCard(
138 AutofillClient::PaymentsRpcResult result) {
139 NOTREACHED();
140 }
141
142 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698