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

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

Issue 2097713002: Specify billing address for autofill cards in PaymentRequest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 4 years, 6 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 2016 The Chromium Authors. All rights reserved. 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 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 package org.chromium.chrome.browser.payments; 5 package org.chromium.chrome.browser.payments;
6 6
7 import android.text.TextUtils;
7 import android.util.JsonWriter; 8 import android.util.JsonWriter;
8 9
9 import org.chromium.chrome.browser.autofill.PersonalDataManager; 10 import org.chromium.chrome.browser.autofill.PersonalDataManager;
11 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
10 import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard; 12 import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard;
11 import org.chromium.chrome.browser.autofill.PersonalDataManager.FullCardRequestD elegate; 13 import org.chromium.chrome.browser.autofill.PersonalDataManager.FullCardRequestD elegate;
12 import org.chromium.content_public.browser.WebContents; 14 import org.chromium.content_public.browser.WebContents;
13 import org.chromium.mojom.payments.PaymentItem; 15 import org.chromium.mojom.payments.PaymentItem;
14 16
15 import org.json.JSONObject; 17 import org.json.JSONObject;
16 18
17 import java.io.IOException; 19 import java.io.IOException;
18 import java.io.StringWriter; 20 import java.io.StringWriter;
19 import java.util.List; 21 import java.util.List;
20 22
23 import javax.annotation.Nullable;
24
21 /** 25 /**
22 * The locally stored credit card payment instrument. 26 * The locally stored credit card payment instrument.
23 */ 27 */
24 public class AutofillPaymentInstrument 28 public class AutofillPaymentInstrument
25 extends PaymentInstrument implements FullCardRequestDelegate { 29 extends PaymentInstrument implements FullCardRequestDelegate {
26 private final WebContents mWebContents; 30 private final WebContents mWebContents;
27 private final CreditCard mCard; 31 private final CreditCard mCard;
28 private DetailsCallback mCallback; 32 @Nullable private AutofillProfile mBillingAddress;
33 @Nullable private DetailsCallback mCallback;
29 34
30 /** 35 /**
31 * Builds a payment instrument for the given credit card. 36 * Builds a payment instrument for the given credit card.
32 * 37 *
33 * @param webContents The web contents where PaymentRequest was invoked. 38 * @param webContents The web contents where PaymentRequest was invoked.
34 * @param card The autofill card that can be used for payment. 39 * @param card The autofill card that can be used for payment.
40 * @param billingAddress The optional billing address for the card.
35 */ 41 */
36 public AutofillPaymentInstrument(WebContents webContents, CreditCard card) { 42 public AutofillPaymentInstrument(
43 WebContents webContents, CreditCard card, @Nullable AutofillProfile billingAddress) {
37 super(card.getGUID(), card.getObfuscatedNumber(), card.getName(), 44 super(card.getGUID(), card.getObfuscatedNumber(), card.getName(),
38 card.getIssuerIconDrawableId()); 45 card.getIssuerIconDrawableId());
39 mWebContents = webContents; 46 mWebContents = webContents;
40 mCard = card; 47 mCard = card;
48 mBillingAddress = billingAddress;
41 } 49 }
42 50
43 @Override 51 @Override
44 public String getMethodName() { 52 public String getMethodName() {
45 return mCard.getBasicCardPaymentType(); 53 return mCard.getBasicCardPaymentType();
46 } 54 }
47 55
48 @Override 56 @Override
49 public void getDetails(String unusedMerchantName, String unusedOrigin, Payme ntItem unusedTotal, 57 public void getDetails(String unusedMerchantName, String unusedOrigin, Payme ntItem unusedTotal,
50 List<PaymentItem> unusedCart, JSONObject unusedDetails, DetailsCallb ack callback) { 58 List<PaymentItem> unusedCart, JSONObject unusedDetails, DetailsCallb ack callback) {
51 assert mCallback == null; 59 assert mCallback == null;
52 mCallback = callback; 60 mCallback = callback;
53 PersonalDataManager.getInstance().getFullCard(mWebContents, mCard.getGUI D(), this); 61 PersonalDataManager.getInstance().getFullCard(mWebContents, mCard.getGUI D(), this);
54 } 62 }
55 63
56 @Override 64 @Override
57 public void onFullCardDetails(CreditCard card, String cvc) { 65 public void onFullCardDetails(CreditCard card, String cvc) {
58 StringWriter stringWriter = new StringWriter(); 66 StringWriter stringWriter = new StringWriter();
59 JsonWriter json = new JsonWriter(stringWriter); 67 JsonWriter json = new JsonWriter(stringWriter);
60 try { 68 try {
61 json.beginObject(); 69 json.beginObject();
70
62 json.name("cardholderName").value(card.getName()); 71 json.name("cardholderName").value(card.getName());
63 json.name("cardNumber").value(card.getNumber()); 72 json.name("cardNumber").value(card.getNumber());
64 json.name("expiryMonth").value(card.getMonth()); 73 json.name("expiryMonth").value(card.getMonth());
65 json.name("expiryYear").value(card.getYear()); 74 json.name("expiryYear").value(card.getYear());
66 json.name("cardSecurityCode").value(cvc); 75 json.name("cardSecurityCode").value(cvc);
76
77 if (mBillingAddress != null) {
78 json.name("billingAddress").beginObject();
79
80 json.name("country").value(ensureNotNull(mBillingAddress.getCoun tryCode()));
81 json.name("region").value(ensureNotNull(mBillingAddress.getRegio n()));
82 json.name("city").value(ensureNotNull(mBillingAddress.getLocalit y()));
83 json.name("dependentLocality")
84 .value(ensureNotNull(mBillingAddress.getDependentLocalit y()));
85
86 json.name("addressLine").beginArray();
87 String multipleLines = ensureNotNull(mBillingAddress.getStreetAd dress());
88 if (!TextUtils.isEmpty(multipleLines)) {
89 String[] lines = multipleLines.split("\n");
90 for (int i = 0; i < lines.length; i++) {
91 json.value(lines[i]);
92 }
93 }
94 json.endArray();
95
96 json.name("postalCode").value(ensureNotNull(mBillingAddress.getP ostalCode()));
97 json.name("sortingCode").value(ensureNotNull(mBillingAddress.get SortingCode()));
98 json.name("languageCode").value(ensureNotNull(mBillingAddress.ge tLanguageCode()));
99 json.name("organization").value(ensureNotNull(mBillingAddress.ge tCompanyName()));
100 json.name("recipient").value(ensureNotNull(mBillingAddress.getFu llName()));
101 json.name("careOf").value("");
102 json.name("phone").value(ensureNotNull(mBillingAddress.getPhoneN umber()));
103
104 json.endObject();
105 }
106
67 json.endObject(); 107 json.endObject();
68 } catch (IOException e) { 108 } catch (IOException e) {
69 mCallback.onInstrumentDetailsError(); 109 mCallback.onInstrumentDetailsError();
70 return; 110 return;
71 } 111 }
72 112
73 mCallback.onInstrumentDetailsReady(card.getBasicCardPaymentType(), strin gWriter.toString()); 113 mCallback.onInstrumentDetailsReady(card.getBasicCardPaymentType(), strin gWriter.toString());
74 } 114 }
75 115
116 private static String ensureNotNull(@Nullable String value) {
117 return value == null ? "" : value;
118 }
119
76 @Override 120 @Override
77 public void onFullCardError() { 121 public void onFullCardError() {
78 mCallback.onInstrumentDetailsError(); 122 mCallback.onInstrumentDetailsError();
79 } 123 }
80 124
81 @Override 125 @Override
82 public void dismiss() {} 126 public void dismiss() {}
83 } 127 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698