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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentResponseHelper.java

Issue 2413533003: [Payments] Normalize billing address before sending to the merchant. (Closed)
Patch Set: Addressed comments Created 4 years, 2 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 package org.chromium.chrome.browser.payments;
6
7 import android.os.Handler;
8
9 import org.chromium.chrome.browser.autofill.PersonalDataManager;
10 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
11 import org.chromium.chrome.browser.autofill.PersonalDataManager.NormalizedAddres sRequestDelegate;
12 import org.chromium.chrome.browser.payments.ui.PaymentOption;
13 import org.chromium.payments.mojom.PaymentResponse;
14
15 /**
16 * The helper class to create and prepare a PaymentResponse.
17 */
18 public class PaymentResponseHelper implements NormalizedAddressRequestDelegate {
19 /**
20 * Observer to be notified when the payment response is completed.
21 */
22 public interface PaymentResponseRequesterDelegate {
23 /*
24 * Called when the payment response is ready to be sent to the merchant.
25 *
26 * @param response The payment response to send to the merchant.
27 */
28 void onPaymentResponseReady(PaymentResponse response);
29 }
30
31 private final Handler mHandler = new Handler();
32
33 private PaymentResponse mPaymentResponse;
34 private PaymentResponseRequesterDelegate mDelegate;
35 private boolean mIsWaitingForShippingNormalization;
36 private boolean mIsWaitingForPaymentsDetails = true;
37
38 /**
39 * Builds a helper to contruct and fill a PaymentResponse.
40 *
41 * @param selectedShippingAddress The shipping address picked by the user.
42 * @param selectedShippingOption The shipping option picked by the user.
43 * @param selectedContact The contact info picked by the user.
44 * @param delegate The object that will recieve the completed PaymentResponse.
45 */
46 public PaymentResponseHelper(PaymentOption selectedShippingAddress,
47 PaymentOption selectedShippingOption, PaymentOption selectedContact,
48 PaymentResponseRequesterDelegate delegate) {
49 mPaymentResponse = new PaymentResponse();
50
51 mDelegate = delegate;
52
53 // Set up the contact section of the response.
54 if (selectedContact != null) {
55 // Contacts are created in PaymentRequestImpl.init(). These should a ll be instances of
56 // AutofillContact.
57 assert selectedContact instanceof AutofillContact;
58 mPaymentResponse.payerPhone = ((AutofillContact) selectedContact).ge tPayerPhone();
59 mPaymentResponse.payerEmail = ((AutofillContact) selectedContact).ge tPayerEmail();
60 }
61
62 // Set up the shipping section of the response.
63 if (selectedShippingOption != null && selectedShippingOption.getIdentifi er() != null) {
64 mPaymentResponse.shippingOption = selectedShippingOption.getIdentifi er();
65 }
66
67 // Set up the shipping address section of the response.
68 if (selectedShippingAddress != null) {
69 // Shipping addresses are created in PaymentRequestImpl.init(). Thes e should all be
70 // instances of AutofillAddress.
71 assert selectedShippingAddress instanceof AutofillAddress;
72 AutofillAddress selectedAutofillAddress = (AutofillAddress) selected ShippingAddress;
73
74 // Addresses to be sent to the merchant should always be complete.
75 assert selectedAutofillAddress.isComplete();
76
77 // Record the use of the profile.
78 PersonalDataManager.getInstance().recordAndLogProfileUse(
79 selectedAutofillAddress.getProfile().getGUID());
80
81 mPaymentResponse.shippingAddress = selectedAutofillAddress.toPayment Address();
82
83 // The shipping address needs to be normalized before sending the re sponse to the
84 // merchant.
85 mIsWaitingForShippingNormalization = true;
86 mIsWaitingForShippingNormalization = PersonalDataManager.getInstance ().normalizeAddress(
87 selectedAutofillAddress.getProfile().getGUID(),
88 AutofillAddress.getCountryCode(selectedAutofillAddress.getPr ofile()), this);
89 if (mIsWaitingForShippingNormalization) {
please use gerrit instead 2016/10/19 19:10:59 Same comment as in AutofillPaymentInstrument: gett
sebsg 2016/10/20 17:06:52 The only problem with this one is that the normali
90 // If the normalization was not done synchronously, start a time r to cancel the
91 // asynchronous normalization if it takes too long.
92 mHandler.postDelayed(new Runnable() {
93 @Override
94 public void run() {
95 onAddressNormalized(null);
96 }
97 }, PersonalDataManager.getInstance().getNormalizationTimeoutMS() );
98 }
99 }
100 }
101
102 /**
103 * Called after the payment instrument's details were received.
104 *
105 * @param methodName The method name of the payment instrument.
106 * @param stringifiedDetails A string containing all the details of the pay ment instrument's
107 * details.
108 */
109 public void onInstrumentDetailsReceived(String methodName, String stringifie dDetails) {
110 mPaymentResponse.methodName = methodName;
111 mPaymentResponse.stringifiedDetails = stringifiedDetails;
112
113 mIsWaitingForPaymentsDetails = false;
114
115 // Wait for the shipping address normalization before sending the respon se.
116 if (!mIsWaitingForShippingNormalization) mDelegate.onPaymentResponseRead y(mPaymentResponse);
117 }
118
119 @Override
120 public void onAddressNormalized(AutofillProfile profile) {
121 // Check if a normalization is still required.
122 if (!mIsWaitingForShippingNormalization) return;
123 mIsWaitingForShippingNormalization = false;
124
125 if (profile != null) {
126 // The normalization finished first: use the normalized address.
127 mPaymentResponse.shippingAddress =
128 new AutofillAddress(profile, true /* isComplete */).toPaymen tAddress();
129 }
130
131 // Wait for the payment details before sending the response.
132 if (!mIsWaitingForPaymentsDetails) mDelegate.onPaymentResponseReady(mPay mentResponse);
133 }
134 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698