Index: chrome/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java |
index e603ddaf31d76ff42e0dfbc6198546a1dca660c5..27ebb39168efc059501533209d83a9b13f1dac3c 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java |
@@ -12,6 +12,7 @@ import org.chromium.base.annotations.CalledByNative; |
import org.chromium.base.annotations.JNINamespace; |
import org.chromium.chrome.R; |
import org.chromium.chrome.browser.ResourceId; |
+import org.chromium.content_public.browser.WebContents; |
import java.util.ArrayList; |
import java.util.List; |
@@ -39,6 +40,24 @@ public class PersonalDataManager { |
} |
/** |
+ * Callback for full card request. |
+ */ |
+ public interface FullCardRequestDelegate { |
+ /** |
+ * Called when user provided the full card details, including the CVC and the full PAN. |
+ * |
+ * @param card The full card. |
+ * @param cvc The CVC for the card. |
+ */ |
+ public abstract void onFullCardDetails(CreditCard card, String cvc); |
+ |
+ /** |
+ * Called when user did not provide full card details. |
+ */ |
+ public abstract void onFullCardError(); |
+ } |
+ |
+ /** |
* Autofill address information. |
*/ |
public static class AutofillProfile { |
@@ -415,6 +434,7 @@ public class PersonalDataManager { |
private final long mPersonalDataManagerAndroid; |
private final List<PersonalDataManagerObserver> mDataObservers = |
new ArrayList<PersonalDataManagerObserver>(); |
+ private FullCardRequestDelegate mFullCardRequestDelegate; |
private PersonalDataManager() { |
// Note that this technically leaks the native object, however, PersonalDataManager |
@@ -512,6 +532,32 @@ public class PersonalDataManager { |
nativeClearUnmaskedCache(mPersonalDataManagerAndroid, guid); |
} |
+ public void unmaskCard(WebContents webContents, String guid, FullCardRequestDelegate delegate) { |
+ if (mFullCardRequestDelegate != null) { |
+ delegate.onFullCardError(); |
+ return; |
+ } |
+ |
+ mFullCardRequestDelegate = delegate; |
+ nativeGetFullCardForPaymentRequest(mPersonalDataManagerAndroid, webContents, guid); |
+ } |
+ |
+ @CalledByNative |
+ private void onFullCardDetails(CreditCard card, String cvc) { |
+ ThreadUtils.assertOnUiThread(); |
+ assert mFullCardRequestDelegate != null; |
+ mFullCardRequestDelegate.onFullCardDetails(card, cvc); |
+ mFullCardRequestDelegate = null; |
+ } |
+ |
+ @CalledByNative |
+ private void onFullCardError() { |
+ ThreadUtils.assertOnUiThread(); |
+ assert mFullCardRequestDelegate != null; |
+ mFullCardRequestDelegate.onFullCardError(); |
+ mFullCardRequestDelegate = null; |
+ } |
+ |
/** |
* @return Whether the Autofill feature is enabled. |
*/ |
@@ -568,6 +614,8 @@ public class PersonalDataManager { |
private native void nativeRemoveByGUID(long nativePersonalDataManagerAndroid, String guid); |
private native void nativeClearUnmaskedCache( |
long nativePersonalDataManagerAndroid, String guid); |
+ private native void nativeGetFullCardForPaymentRequest(long nativePersonalDataManagerAndroid, |
+ WebContents webContents, String guid); |
private static native boolean nativeIsAutofillEnabled(); |
private static native void nativeSetAutofillEnabled(boolean enable); |
private static native boolean nativeIsAutofillManaged(); |