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 11123a68fd063c5c0ac93a8897e808d3b4d9c0b5..43bae505f857ec5ccbc8fa02dc5de3cfd48d1cd4 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 |
@@ -69,7 +69,7 @@ import java.util.Set; |
* third_party/WebKit/public/platform/modules/payments/payment_request.mojom. |
*/ |
public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Client, |
- PaymentApp.InstrumentsCallback, PaymentInstrument.DetailsCallback, |
+ PaymentApp.InstrumentsCallback, PaymentInstrument.InstrumentDetailsCallback, |
NormalizedAddressRequestDelegate { |
/** |
* Observer to be notified when PaymentRequest UI has been dismissed. |
@@ -454,28 +454,41 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie |
mPendingInstruments = new ArrayList<>(); |
mPendingAutofillInstruments = new ArrayList<>(); |
- Map<PaymentApp, JSONObject> queryApps = new HashMap<>(); |
+ Map<PaymentApp, Map<String, JSONObject>> queryApps = new HashMap<>(); |
for (int i = 0; i < mApps.size(); i++) { |
PaymentApp app = mApps.get(i); |
- Set<String> appMethods = app.getSupportedMethodNames(); |
- appMethods.retainAll(mMethodData.keySet()); |
- if (appMethods.isEmpty()) { |
+ Map<String, JSONObject> appMethods = |
+ filterMerchantMethodData(mMethodData, app.getAppMethodNames()); |
+ if (appMethods == null) { |
mPendingApps.remove(app); |
} else { |
mArePaymentMethodsSupported = true; |
mMerchantSupportsAutofillPaymentInstruments |= app instanceof AutofillPaymentApp; |
- queryApps.put(app, mMethodData.get(appMethods.iterator().next())); |
+ queryApps.put(app, appMethods); |
} |
} |
// Query instruments after mMerchantSupportsAutofillPaymentInstruments has been initialized, |
// so a fast response from a non-autofill payment app at the front of the app list does not |
// cause NOT_SUPPORTED payment rejection. |
- for (Map.Entry<PaymentApp, JSONObject> q : queryApps.entrySet()) { |
+ for (Map.Entry<PaymentApp, Map<String, JSONObject>> q : queryApps.entrySet()) { |
q.getKey().getInstruments(q.getValue(), this); |
} |
} |
+ /** Filter out merchant method data that's not relevant to a payment app. Can return null. */ |
+ private static Map<String, JSONObject> filterMerchantMethodData( |
+ Map<String, JSONObject> merchantMethodData, Set<String> appMethods) { |
+ Map<String, JSONObject> result = null; |
+ for (String method : appMethods) { |
+ if (merchantMethodData.containsKey(method)) { |
+ if (result == null) result = new HashMap<>(); |
+ result.put(method, merchantMethodData.get(method)); |
+ } |
+ } |
+ return result; |
+ } |
+ |
/** |
* Called by merchant to update the shipping options and line items after the user has selected |
* their shipping address or shipping option. |
@@ -877,8 +890,8 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie |
assert selectedPaymentMethod instanceof PaymentInstrument; |
PaymentInstrument instrument = (PaymentInstrument) selectedPaymentMethod; |
mPaymentAppRunning = true; |
- instrument.getDetails(mMerchantName, mOrigin, mRawTotal, mRawLineItems, |
- mMethodData.get(instrument.getMethodName()), this); |
+ instrument.getInstrumentDetails(mMerchantName, mOrigin, mRawTotal, mRawLineItems, |
+ mMethodData.get(instrument.getInstrumentMethodName()), this); |
recordSuccessFunnelHistograms("PayClicked"); |
return !(instrument instanceof AutofillPaymentInstrument); |
} |
@@ -962,10 +975,10 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie |
if (instruments != null) { |
for (int i = 0; i < instruments.size(); i++) { |
PaymentInstrument instrument = instruments.get(i); |
- if (mMethodData.containsKey(instrument.getMethodName())) { |
+ if (mMethodData.containsKey(instrument.getInstrumentMethodName())) { |
addPendingInstrument(instrument); |
} else { |
- instrument.dismiss(); |
+ instrument.dismissInstrument(); |
} |
} |
} |
@@ -1223,7 +1236,7 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie |
for (int i = 0; i < mPaymentMethodsSection.getSize(); i++) { |
PaymentOption option = mPaymentMethodsSection.getItem(i); |
assert option instanceof PaymentInstrument; |
- ((PaymentInstrument) option).dismiss(); |
+ ((PaymentInstrument) option).dismissInstrument(); |
} |
mPaymentMethodsSection = null; |
} |