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

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

Issue 2645813006: Download web payment manifests. (Closed)
Patch Set: Address more comments Created 3 years, 10 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 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 328686f33227531bc4c87d57cf3281174fa68391..88e17b922b582781f72fd6913c074d2b0e800294 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
@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.autofill.PersonalDataManager;
import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
import org.chromium.chrome.browser.favicon.FaviconHelper;
import org.chromium.chrome.browser.pageinfo.CertificateChainHelper;
+import org.chromium.chrome.browser.payments.PaymentAppFactory.PaymentManifestParser;
import org.chromium.chrome.browser.payments.ui.Completable;
import org.chromium.chrome.browser.payments.ui.ContactDetailsSection;
import org.chromium.chrome.browser.payments.ui.LineItem;
@@ -57,6 +58,7 @@ import org.chromium.payments.mojom.PaymentMethodData;
import org.chromium.payments.mojom.PaymentOptions;
import org.chromium.payments.mojom.PaymentRequest;
import org.chromium.payments.mojom.PaymentRequestClient;
+import org.chromium.payments.mojom.PaymentRequestClient.ParsePaymentManifestResponse;
import org.chromium.payments.mojom.PaymentResponse;
import org.chromium.payments.mojom.PaymentShippingOption;
import org.chromium.payments.mojom.PaymentShippingType;
@@ -78,11 +80,12 @@ 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,
- PaymentAppFactory.PaymentAppCreatedCallback,
- PaymentResponseHelper.PaymentResponseRequesterDelegate, FocusChangedObserver {
+public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Client,
+ PaymentApp.InstrumentsCallback,
+ PaymentInstrument.InstrumentDetailsCallback,
+ PaymentAppFactory.PaymentAppCreatedCallback,
+ PaymentResponseHelper.PaymentResponseRequesterDelegate,
+ FocusChangedObserver, PaymentManifestParser {
/**
* A test-only observer for the PaymentRequest service implementation.
*/
@@ -383,8 +386,9 @@ public class PaymentRequestImpl
if (!parseAndValidateDetailsOrDisconnectFromClient(details)) return;
- PaymentAppFactory.getInstance().create(
- mWebContents, Collections.unmodifiableSet(mMethodData.keySet()), this);
+ PaymentAppFactory.getInstance().create(mWebContents,
+ Collections.unmodifiableSet(mMethodData.keySet()), this /* parser */,
+ this /* callback */);
mRequestShipping = options != null && options.requestShipping;
mRequestPayerName = options != null && options.requestPayerName;
@@ -611,6 +615,13 @@ public class PaymentRequestImpl
}
}
+ if (queryApps.isEmpty()) {
+ CanMakePaymentQuery query = sCanMakePaymentQueries.get(mOrigin);
+ if (query != null) query.setResponse(false);
+ }
+
+ if (disconnectIfNoPaymentMethodsSupported()) return;
+
// 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.
@@ -1254,6 +1265,7 @@ public class PaymentRequestImpl
}
private void respondCanMakePaymentQuery(boolean response) {
+ if (mClient == null) return;
mClient.onCanMakePayment(response ? CanMakePaymentQueryResult.CAN_MAKE_PAYMENT
: CanMakePaymentQueryResult.CANNOT_MAKE_PAYMENT);
mJourneyLogger.setCanMakePaymentValue(mCanMakePayment);
@@ -1396,15 +1408,14 @@ public class PaymentRequestImpl
* @return True if no payment methods are supported
*/
private boolean disconnectIfNoPaymentMethodsSupported() {
- if (!isFinishedQueryingPaymentApps()) return false;
+ if (!isFinishedQueryingPaymentApps() || !mIsCurrentPaymentRequestShowing) return false;
boolean foundPaymentMethods = mPaymentMethodsSection != null
&& !mPaymentMethodsSection.isEmpty();
boolean userCanAddCreditCard = mMerchantSupportsAutofillPaymentInstruments
&& !ChromeFeatureList.isEnabled(ChromeFeatureList.NO_CREDIT_CARD_ABORT);
- if (!mArePaymentMethodsSupported || (mIsCurrentPaymentRequestShowing && !foundPaymentMethods
- && !userCanAddCreditCard)) {
+ if (!mArePaymentMethodsSupported || (!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.
@@ -1482,6 +1493,16 @@ public class PaymentRequestImpl
}
@Override
+ public void parsePaymentManifest(String content, ParsePaymentManifestResponse callback) {
+ if (mClient == null) {
+ callback.call(null);
+ return;
+ }
+
+ mClient.parsePaymentManifest(content, callback);
+ }
+
+ @Override
public void onFocusChanged(@PaymentRequestUI.DataType int dataType, boolean willFocus) {
assert dataType == PaymentRequestUI.TYPE_SHIPPING_ADDRESSES;

Powered by Google App Engine
This is Rietveld 408576698