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

Unified Diff: chrome/browser/autofill/android/personal_data_manager_android.cc

Issue 2163693002: [Merge M-53] Credit card editor for PaymentRequest UI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2785
Patch Set: Created 4 years, 5 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/browser/autofill/android/personal_data_manager_android.cc
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.cc b/chrome/browser/autofill/android/personal_data_manager_android.cc
index 03e9be0c33efe120a6e8ac66e4819050459f635c..3cdc3b513b7a1e0a05921ec107845e693be2ba35 100644
--- a/chrome/browser/autofill/android/personal_data_manager_android.cc
+++ b/chrome/browser/autofill/android/personal_data_manager_android.cc
@@ -31,6 +31,7 @@
#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/payments/full_card_request.h"
#include "components/autofill/core/browser/personal_data_manager.h"
+#include "components/autofill/core/browser/validation.h"
#include "components/autofill/core/common/autofill_constants.h"
#include "components/autofill/core/common/autofill_pref_names.h"
#include "components/autofill/core/common/autofill_switches.h"
@@ -137,19 +138,21 @@ void PopulateNativeProfileFromJava(
// Mapping from Chrome card types to PaymentRequest basic card payment spec and
// icons. Note that "generic" is not in the spec.
-// https://w3c.github.io/browser-payment-api/specs/basic-card-payment.html#method-id
+// https://w3c.github.io/webpayments-methods-card/#method-id
const struct PaymentRequestData {
const char* card_type;
const char* basic_card_payment_type;
const int icon_resource_id;
} kPaymentRequestData[] {
{"genericCC", "generic", IDR_AUTOFILL_PR_GENERIC},
+
{"americanExpressCC", "amex", IDR_AUTOFILL_PR_AMEX},
- {"dinersCC", "diners", IDR_AUTOFILL_PR_GENERIC},
+ {"dinersCC", "diners", IDR_AUTOFILL_PR_DINERS},
{"discoverCC", "discover", IDR_AUTOFILL_PR_DISCOVER},
- {"jcbCC", "jcb", IDR_AUTOFILL_PR_GENERIC},
+ {"jcbCC", "jcb", IDR_AUTOFILL_PR_JCB},
{"masterCardCC", "mastercard", IDR_AUTOFILL_PR_MASTERCARD},
- {"visaCC", "visa", IDR_AUTOFILL_PR_VISA}
+ {"unionPayCC", "unionpay", IDR_AUTOFILL_PR_UNIONPAY},
+ {"visaCC", "visa", IDR_AUTOFILL_PR_VISA},
};
// Converts the card type into PaymentRequest type according to the basic card
@@ -217,10 +220,20 @@ class FullCardRequester : public payments::FullCardRequest::Delegate,
public:
FullCardRequester() {}
+ // Takes ownership of |card|.
+ void GetFullCard(JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jweb_contents,
+ const base::android::JavaParamRef<jobject>& jdelegate,
+ std::unique_ptr<CreditCard> card) {
+ card_ = std::move(card);
+ GetFullCard(env, jweb_contents, jdelegate, card_.get());
+ }
+
+ // Does not take ownership of |card|.
void GetFullCard(JNIEnv* env,
const base::android::JavaParamRef<jobject>& jweb_contents,
const base::android::JavaParamRef<jobject>& jdelegate,
- CreditCard* card) {
+ const CreditCard* card) {
jdelegate_.Reset(env, jdelegate);
if (!card) {
@@ -273,6 +286,7 @@ class FullCardRequester : public payments::FullCardRequest::Delegate,
delete this;
}
+ std::unique_ptr<CreditCard> card_;
ScopedJavaGlobalRef<jobject> jdelegate_;
DISALLOW_COPY_AND_ASSIGN(FullCardRequester);
@@ -407,6 +421,16 @@ ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetCreditCardByGUID(
return CreateJavaCreditCardFromNative(env, *card);
}
+ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetCreditCardForNumber(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& unused_obj,
+ const JavaParamRef<jstring>& jcard_number) {
+ // A local card with empty GUID.
+ CreditCard card("", "");
+ card.SetNumber(ConvertJavaStringToUTF16(env, jcard_number));
+ return CreateJavaCreditCardFromNative(env, card);
+}
+
ScopedJavaLocalRef<jstring> PersonalDataManagerAndroid::SetCreditCard(
JNIEnv* env,
const JavaParamRef<jobject>& unused_obj,
@@ -440,6 +464,20 @@ void PersonalDataManagerAndroid::UpdateServerCardBillingAddress(
personal_data_manager_->UpdateServerCardBillingAddress(card);
}
+ScopedJavaLocalRef<jstring>
+PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& unused_obj,
+ const JavaParamRef<jstring>& jcard_number) {
+ base::string16 card_number = ConvertJavaStringToUTF16(env, jcard_number);
+ return ConvertUTF8ToJavaString(
+ env,
+ IsValidCreditCardNumber(card_number)
+ ? GetPaymentRequestData(CreditCard::GetCreditCardType(card_number))
+ .basic_card_payment_type
+ : "");
+}
+
void PersonalDataManagerAndroid::AddServerCreditCardForTest(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& unused_obj,
@@ -471,13 +509,41 @@ void PersonalDataManagerAndroid::GetFullCardForPaymentRequest(
const JavaParamRef<jobject>& jweb_contents,
const JavaParamRef<jstring>& jguid,
const JavaParamRef<jobject>& jdelegate) {
- // Self-deleting object.
+ // Self-deleting object that does not take ownership of the CreditCard from
+ // the PersonalDataManager. The PersonalDataManager owns that CreditCard.
(new FullCardRequester())
->GetFullCard(env, jweb_contents, jdelegate,
personal_data_manager_->GetCreditCardByGUID(
ConvertJavaStringToUTF8(env, jguid)));
}
+void PersonalDataManagerAndroid::GetFullTemporaryCardForPaymentRequest(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& unused_obj,
+ const JavaParamRef<jobject>& jweb_contents,
+ const JavaParamRef<jstring>& jcard_number,
+ const JavaParamRef<jstring>& jname_on_card,
+ const JavaParamRef<jstring>& jexpiration_month,
+ const JavaParamRef<jstring>& jexpiration_year,
+ const JavaParamRef<jobject>& jdelegate) {
+ // FullCardRequest will not attempt to save a card with an empty GUID.
+ std::unique_ptr<CreditCard> card(new CreditCard("", ""));
+ card->SetNumber(ConvertJavaStringToUTF16(env, jcard_number));
+ card->SetRawInfo(
+ CREDIT_CARD_NAME_FULL,
+ ConvertJavaStringToUTF16(env, jname_on_card));
+ card->SetRawInfo(
+ CREDIT_CARD_EXP_MONTH,
+ ConvertJavaStringToUTF16(env, jexpiration_month));
+ card->SetRawInfo(
+ CREDIT_CARD_EXP_4_DIGIT_YEAR,
+ ConvertJavaStringToUTF16(env, jexpiration_year));
+
+ // Self-deleting object that takes ownership of the CreditCard.
+ (new FullCardRequester())
+ ->GetFullCard(env, jweb_contents, jdelegate, std::move(card));
+}
+
void PersonalDataManagerAndroid::OnPersonalDataChanged() {
JNIEnv* env = base::android::AttachCurrentThread();
if (weak_java_obj_.get(env).is_null())
« no previous file with comments | « chrome/browser/autofill/android/personal_data_manager_android.h ('k') | chrome/test/data/android/payments/no_shipping.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698