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

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

Issue 2559153002: PaymentApp: Make the PaymentAppFactory asynchronous (Closed)
Patch Set: Rebase onto latest master 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 c2ad56591af45fdefd3a5bb6d9d60d22527e818c..9d2977d8e30c611b71a56e20c6eaa4a1395e4c5f 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
@@ -70,9 +70,11 @@ import javax.annotation.Nullable;
* Android implementation of the PaymentRequest service defined in
* components/payments/payment_request.mojom.
*/
-public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Client,
- PaymentApp.InstrumentsCallback, PaymentInstrument.InstrumentDetailsCallback,
- PaymentResponseHelper.PaymentResponseRequesterDelegate, FocusChangedObserver {
+public class PaymentRequestImpl
+ implements PaymentRequest, PaymentRequestUI.Client, PaymentApp.InstrumentsCallback,
+ PaymentInstrument.InstrumentDetailsCallback,
+ PaymentAppFactory.PaymentAppCreatedCallback,
+ PaymentResponseHelper.PaymentResponseRequesterDelegate, FocusChangedObserver {
/**
* A test-only observer for the PaymentRequest service implementation.
*/
@@ -202,7 +204,6 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
private final ChromeActivity mContext;
private final String mMerchantName;
private final String mOrigin;
- private final List<PaymentApp> mApps;
private final AddressEditor mAddressEditor;
private final CardEditor mCardEditor;
private final PaymentRequestJourneyLogger mJourneyLogger = new PaymentRequestJourneyLogger();
@@ -244,6 +245,8 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
private Map<String, PaymentMethodData> mMethodData;
private SectionInformation mShippingAddressesSection;
private SectionInformation mContactSection;
+ private List<PaymentApp> mApps;
+ private boolean mAllAppsCreated;
private List<PaymentApp> mPendingApps;
private List<PaymentInstrument> mPendingInstruments;
private List<PaymentInstrument> mPendingAutofillInstruments;
@@ -298,7 +301,8 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
}
});
- mApps = PaymentAppFactory.create(mContext, webContents);
+ mApps = new ArrayList<>();
+ PaymentAppFactory.getInstance().create(mContext, webContents, this);
mAddressEditor = new AddressEditor();
mCardEditor = new CardEditor(webContents, mAddressEditor, sObserverForTest);
@@ -517,8 +521,20 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
return Collections.unmodifiableMap(result);
}
+ @Override
+ public void onPaymentAppCreated(PaymentApp paymentApp) {
+ mApps.add(paymentApp);
+ }
+
+ @Override
+ public void onAllPaymentAppsCreated() {
+ mAllAppsCreated = true;
+ getMatchingPaymentInstruments();
+ }
+
/** Queries the installed payment apps for their instruments that merchant supports. */
private void getMatchingPaymentInstruments() {
+ if (!mAllAppsCreated || mClient == null || mPendingApps != null) return;
mPendingApps = new ArrayList<>(mApps);
mPendingInstruments = new ArrayList<>();
mPendingAutofillInstruments = new ArrayList<>();
@@ -1208,15 +1224,18 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
* @return True if no payment methods are supported
*/
private boolean disconnectIfNoPaymentMethodsSupported() {
- boolean waitingForPaymentApps = !mPendingApps.isEmpty() || !mPendingInstruments.isEmpty();
+ if (mPendingApps == null || !mPendingApps.isEmpty() || !mPendingInstruments.isEmpty()) {
+ // Waiting for pending apps and instruments.
+ return false;
+ }
+
boolean foundPaymentMethods = mPaymentMethodsSection != null
&& !mPaymentMethodsSection.isEmpty();
boolean userCanAddCreditCard = mMerchantSupportsAutofillPaymentInstruments
&& !ChromeFeatureList.isEnabled(ChromeFeatureList.NO_CREDIT_CARD_ABORT);
if (!mArePaymentMethodsSupported
- || (getIsShowing() && !waitingForPaymentApps && !foundPaymentMethods
- && !userCanAddCreditCard)) {
+ || (getIsShowing() && !foundPaymentMethods && !userCanAddCreditCard)) {
// All payment apps have responded, but none of them have instruments. It's possible to
// add credit cards, but the merchant does not support them either. The payment request
// must be rejected.

Powered by Google App Engine
This is Rietveld 408576698