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 cb0fd68edb0a9db0dd545dee9180b59f419fb884..755fa6f0fbee8de4b9611a97cec34a6bcd79f74a 100644 |
--- a/chrome/browser/autofill/android/personal_data_manager_android.cc |
+++ b/chrome/browser/autofill/android/personal_data_manager_android.cc |
@@ -188,7 +188,18 @@ ScopedJavaLocalRef<jobject> CreateJavaCreditCardFromNative( |
ConvertUTF8ToJavaString(env, payment_request_data.basic_card_payment_type) |
.obj(), |
ResourceMapper::MapFromChromiumId(payment_request_data.icon_resource_id), |
- ConvertUTF8ToJavaString(env, card.billing_address_id()) .obj()); |
+ ConvertUTF8ToJavaString(env, card.billing_address_id()) .obj(), |
+ ConvertUTF8ToJavaString(env, card.server_id()) .obj()); |
+} |
+ |
+const char* GetCardTypeForBasicCardPaymentType( |
+ const std::string& basic_card_payment_type) { |
+ for (size_t i = 0; i < arraysize(kPaymentRequestData); ++i) { |
+ if (basic_card_payment_type == |
+ kPaymentRequestData[i].basic_card_payment_type) |
+ return kPaymentRequestData[i].card_type; |
+ } |
+ return kPaymentRequestData[0].card_type; |
} |
void PopulateNativeCreditCardFromJava( |
@@ -211,6 +222,22 @@ void PopulateNativeCreditCardFromJava( |
ConvertJavaStringToUTF16(Java_CreditCard_getYear(env, jcard))); |
card->set_billing_address_id( |
ConvertJavaStringToUTF8(Java_CreditCard_getBillingAddressId(env, jcard))); |
+ card->set_server_id( |
+ ConvertJavaStringToUTF8(Java_CreditCard_getServerId(env, jcard))); |
+ |
+ if (Java_CreditCard_getIsLocal(env, jcard)) { |
+ card->set_record_type(CreditCard::LOCAL_CARD); |
+ } else { |
+ if (Java_CreditCard_getIsCached(env, jcard)) { |
+ card->set_record_type(CreditCard::FULL_SERVER_CARD); |
+ } else { |
+ card->set_record_type(CreditCard::MASKED_SERVER_CARD); |
+ card->SetTypeForMaskedCard( |
+ GetCardTypeForBasicCardPaymentType( |
+ ConvertJavaStringToUTF8( |
+ env, Java_CreditCard_getBasicCardPaymentType(env, jcard)))); |
+ } |
+ } |
} |
// Self-deleting requester of full card details, including full PAN and the CVC |
@@ -226,17 +253,9 @@ class FullCardRequester : public payments::FullCardRequest::Delegate, |
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, |
- const CreditCard* card) { |
jdelegate_.Reset(env, jdelegate); |
- if (!card) { |
+ if (!card_) { |
OnFullCardError(); |
return; |
} |
@@ -263,7 +282,7 @@ class FullCardRequester : public payments::FullCardRequest::Delegate, |
} |
driver->autofill_manager()->GetOrCreateFullCardRequest()->GetFullCard( |
- *card, AutofillClient::UNMASK_FOR_PAYMENT_REQUEST, AsWeakPtr()); |
+ *card_, AutofillClient::UNMASK_FOR_PAYMENT_REQUEST, AsWeakPtr()); |
} |
private: |
@@ -454,10 +473,11 @@ ScopedJavaLocalRef<jstring> PersonalDataManagerAndroid::SetCreditCard( |
void PersonalDataManagerAndroid::UpdateServerCardBillingAddress( |
JNIEnv* env, |
const JavaParamRef<jobject>& unused_obj, |
- const JavaParamRef<jstring>& jguid, |
+ const JavaParamRef<jstring>& jcard_server_id, |
const JavaParamRef<jstring>& jbilling_address_id) { |
- CreditCard card(ConvertJavaStringToUTF8(env, jguid), kSettingsOrigin); |
+ CreditCard card("", kSettingsOrigin); |
card.set_record_type(CreditCard::MASKED_SERVER_CARD); |
+ card.set_server_id(ConvertJavaStringToUTF8(env, jcard_server_id)); |
card.set_billing_address_id(ConvertJavaStringToUTF8(env, |
jbilling_address_id)); |
personal_data_manager_->UpdateServerCardBillingAddress(card); |
@@ -507,41 +527,13 @@ void PersonalDataManagerAndroid::GetFullCardForPaymentRequest( |
JNIEnv* env, |
const JavaParamRef<jobject>& unused_obj, |
const JavaParamRef<jobject>& jweb_contents, |
- const JavaParamRef<jstring>& jguid, |
- const JavaParamRef<jobject>& jdelegate) { |
- // 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>& jcard, |
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)); |
+ std::unique_ptr<CreditCard> card(new CreditCard); |
+ PopulateNativeCreditCardFromJava(jcard, env, card.get()); |
+ // Self-deleting object. |
+ (new FullCardRequester())->GetFullCard( |
+ env, jweb_contents, jdelegate, std::move(card)); |
} |
void PersonalDataManagerAndroid::OnPersonalDataChanged() { |