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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java

Issue 2558993003: Billing address not required for canMakePayment(). (Closed)
Patch Set: gogerald comments Created 4 years 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: chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
index 90a8c8e276eed9aea80206a6d381087f4da562c8..e1c98792c3dd5ee2e77d073f3f223c4cd6ef84ff 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
@@ -183,7 +183,7 @@ public class PaymentRequestImpl
/**
* In-memory mapping of the origins of websites that have recently called canMakePayment()
- * to the list of the payment methods that were been queried. Used for throttling the usage of
+ * to the list of the payment methods that were being queried. Used for throttling the usage of
* this call. The mapping is shared among all instances of PaymentRequestImpl in the browser
* process on UI thread. The user can reset the throttling mechanism by restarting the browser.
*/
@@ -268,6 +268,12 @@ public class PaymentRequestImpl
/** True if any of the requested payment methods are supported. */
private boolean mArePaymentMethodsSupported;
+ /**
+ * True after at least one usable payment instrument has been found. Should be read only after
+ * all payment apps have been queried.
+ */
+ private boolean mCanMakePayment;
+
/** The helper to create and fill the response to send to the merchant. */
private PaymentResponseHelper mPaymentResponseHelper;
@@ -1174,10 +1180,7 @@ public class PaymentRequestImpl
}
query.addObserver(this);
- if (mPendingApps.isEmpty() && mPendingInstruments.isEmpty()) {
- query.setResponse(mPaymentMethodsSection != null
- && mPaymentMethodsSection.getSelectedItem() != null);
- }
+ if (isFinishedQueryingPaymentApps()) query.setResponse(mCanMakePayment);
}
private void respondCanMakePaymentQuery(boolean response) {
@@ -1240,18 +1243,22 @@ public class PaymentRequestImpl
if (disconnectIfNoPaymentMethodsSupported()) return;
// Load the validation rules for each unique region code in the credit card billing
- // addresses.
+ // addresses and check for validity.
Set<String> uniqueCountryCodes = new HashSet<>();
for (int i = 0; i < mPendingAutofillInstruments.size(); ++i) {
assert mPendingAutofillInstruments.get(i) instanceof AutofillPaymentInstrument;
+ AutofillPaymentInstrument creditCard =
+ (AutofillPaymentInstrument) mPendingAutofillInstruments.get(i);
- String countryCode = AutofillAddress
- .getCountryCode(((AutofillPaymentInstrument) mPendingAutofillInstruments.get(
- i)).getBillingAddress());
+ String countryCode = AutofillAddress.getCountryCode(creditCard.getBillingAddress());
if (!uniqueCountryCodes.contains(countryCode)) {
uniqueCountryCodes.add(countryCode);
PersonalDataManager.getInstance().loadRulesForRegion(countryCode);
}
+
+ // If there's a card on file with a valid number and a name, then
+ // PaymentRequest.canMakePayment() returns true.
+ mCanMakePayment |= creditCard.isValid();
}
// List order:
@@ -1267,18 +1274,22 @@ public class PaymentRequestImpl
mPendingAutofillInstruments.clear();
- // Pre-select the first instrument on the list, if it is complete.
+ // Possibly pre-select the first instrument on the list.
int selection = SectionInformation.NO_SELECTION;
if (!mPendingInstruments.isEmpty()) {
PaymentInstrument first = mPendingInstruments.get(0);
- if (!(first instanceof AutofillPaymentInstrument)
- || ((AutofillPaymentInstrument) first).isComplete()) {
+ if (first instanceof AutofillPaymentInstrument) {
+ AutofillPaymentInstrument creditCard = (AutofillPaymentInstrument) first;
+ if (creditCard.isComplete()) selection = 0;
+ } else {
+ // If a payment app is available, then PaymentRequest.canMakePayment() returns true.
+ mCanMakePayment = true;
selection = 0;
}
}
CanMakePaymentQuery query = sCanMakePaymentQueries.get(mOrigin);
- if (query != null) query.setResponse(selection == 0);
+ if (query != null) query.setResponse(mCanMakePayment);
// The list of payment instruments is ready to display.
mPaymentMethodsSection = new SectionInformation(PaymentRequestUI.TYPE_PAYMENT_METHODS,
@@ -1298,10 +1309,7 @@ public class PaymentRequestImpl
* @return True if no payment methods are supported
*/
private boolean disconnectIfNoPaymentMethodsSupported() {
- if (mPendingApps == null || !mPendingApps.isEmpty() || !mPendingInstruments.isEmpty()) {
- // Waiting for pending apps and instruments.
- return false;
- }
+ if (!isFinishedQueryingPaymentApps()) return false;
boolean foundPaymentMethods = mPaymentMethodsSection != null
&& !mPaymentMethodsSection.isEmpty();
@@ -1325,6 +1333,11 @@ public class PaymentRequestImpl
return false;
}
+ /** @return True after payment apps have been queried. */
+ private boolean isFinishedQueryingPaymentApps() {
+ return mPendingApps != null && mPendingApps.isEmpty() && mPendingInstruments.isEmpty();
+ }
+
/**
* Saves the given instrument in either "autofill" or "non-autofill" list. The separation
* enables placing autofill instruments on the bottom of the list.

Powered by Google App Engine
This is Rietveld 408576698