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 b81fa8857ed5b9c6ad74d4d0cf78716336ad739b..f42bb67785377e20cafaca6984e7a90ed59e3baf 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 |
@@ -11,6 +11,7 @@ import android.text.TextUtils; |
import org.chromium.base.Callback; |
import org.chromium.base.Log; |
+import org.chromium.base.VisibleForTesting; |
import org.chromium.chrome.browser.autofill.PersonalDataManager; |
import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile; |
import org.chromium.chrome.browser.favicon.FaviconHelper; |
@@ -58,12 +59,24 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie |
PaymentApp.InstrumentsCallback, PaymentInstrument.DetailsCallback { |
/** |
+ * A test-only observer for the PaymentRequest service implementation. |
+ */ |
+ public interface PaymentRequestServiceObserverForTest { |
+ /** |
+ * Called when an abort request was denied. |
+ */ |
+ void onPaymentRequestServiceUnableToAbort(); |
+ } |
+ |
+ /** |
* The size for the favicon in density-independent pixels. |
*/ |
private static final int FAVICON_SIZE_DP = 24; |
private static final String TAG = "cr_PaymentRequest"; |
+ private static PaymentRequestServiceObserverForTest sObserverForTest; |
+ |
private final Handler mHandler = new Handler(); |
private Activity mContext; |
@@ -113,9 +126,10 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie |
private Callback<PaymentInformation> mPaymentInformationCallback; |
private Pattern mRegionCodePattern; |
private boolean mMerchantNeedsShippingAddress; |
+ private boolean mPaymentAppRunning; |
/** |
- * Builds the dialog. |
+ * Builds the PaymentRequest service implementation. |
* |
* @param webContents The web contents that have invoked the PaymentRequest API. |
*/ |
@@ -241,7 +255,7 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie |
mPaymentMethodsSection = new SectionInformation(PaymentRequestUI.TYPE_PAYMENT_METHODS); |
} |
- mUI = PaymentRequestUI.show(mContext, this, requestShipping, mMerchantName, mOrigin); |
+ mUI = new PaymentRequestUI(mContext, this, requestShipping, mMerchantName, mOrigin); |
if (mFavicon != null) mUI.setTitleBitmap(mFavicon); |
mFavicon = null; |
} |
@@ -557,6 +571,7 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie |
PaymentOption selectedShippingOption, PaymentOption selectedPaymentMethod) { |
assert selectedPaymentMethod instanceof PaymentInstrument; |
PaymentInstrument instrument = (PaymentInstrument) selectedPaymentMethod; |
+ mPaymentAppRunning = true; |
instrument.getDetails(mMerchantName, mOrigin, mRawTotal, mRawLineItems, |
mMethodData.get(instrument.getMethodName()), this); |
} |
@@ -577,8 +592,13 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie |
*/ |
@Override |
public void abort() { |
- closeClient(); |
- closeUI(false); |
+ mClient.onAbort(!mPaymentAppRunning); |
+ if (mPaymentAppRunning) { |
+ if (sObserverForTest != null) sObserverForTest.onPaymentRequestServiceUnableToAbort(); |
+ } else { |
+ closeClient(); |
+ closeUI(false); |
+ } |
} |
/** |
@@ -705,4 +725,9 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie |
if (mClient != null) mClient.close(); |
mClient = null; |
} |
+ |
+ @VisibleForTesting |
+ public static void setObserverForTest(PaymentRequestServiceObserverForTest observerForTest) { |
+ sObserverForTest = observerForTest; |
+ } |
} |