| OLD | NEW | 
|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "chrome/browser/autofill/android/personal_data_manager_android.h" | 5 #include "chrome/browser/autofill/android/personal_data_manager_android.h" | 
| 6 | 6 | 
| 7 #include <stddef.h> | 7 #include <stddef.h> | 
| 8 #include <algorithm> | 8 #include <algorithm> | 
| 9 #include <memory> | 9 #include <memory> | 
| 10 #include <utility> | 10 #include <utility> | 
| 11 | 11 | 
| 12 #include "base/android/jni_array.h" | 12 #include "base/android/jni_array.h" | 
| 13 #include "base/android/jni_string.h" | 13 #include "base/android/jni_string.h" | 
| 14 #include "base/command_line.h" | 14 #include "base/command_line.h" | 
| 15 #include "base/format_macros.h" | 15 #include "base/format_macros.h" | 
| 16 #include "base/memory/weak_ptr.h" | 16 #include "base/memory/weak_ptr.h" | 
| 17 #include "base/strings/stringprintf.h" | 17 #include "base/strings/stringprintf.h" | 
| 18 #include "base/strings/utf_string_conversions.h" | 18 #include "base/strings/utf_string_conversions.h" | 
| 19 #include "base/time/time.h" | 19 #include "base/time/time.h" | 
| 20 #include "chrome/browser/android/resource_mapper.h" | 20 #include "chrome/browser/android/resource_mapper.h" | 
| 21 #include "chrome/browser/autofill/personal_data_manager_factory.h" | 21 #include "chrome/browser/autofill/personal_data_manager_factory.h" | 
| 22 #include "chrome/browser/browser_process.h" | 22 #include "chrome/browser/browser_process.h" | 
| 23 #include "chrome/browser/profiles/profile.h" | 23 #include "chrome/browser/profiles/profile.h" | 
| 24 #include "chrome/browser/profiles/profile_manager.h" | 24 #include "chrome/browser/profiles/profile_manager.h" | 
| 25 #include "chrome/common/pref_names.h" | 25 #include "chrome/common/pref_names.h" | 
| 26 #include "components/autofill/content/browser/content_autofill_driver.h" | 26 #include "components/autofill/content/browser/content_autofill_driver.h" | 
| 27 #include "components/autofill/content/browser/content_autofill_driver_factory.h" | 27 #include "components/autofill/content/browser/content_autofill_driver_factory.h" | 
| 28 #include "components/autofill/core/browser/autofill_country.h" | 28 #include "components/autofill/core/browser/autofill_country.h" | 
| 29 #include "components/autofill/core/browser/autofill_data_util.h" |  | 
| 30 #include "components/autofill/core/browser/autofill_type.h" | 29 #include "components/autofill/core/browser/autofill_type.h" | 
| 31 #include "components/autofill/core/browser/country_names.h" | 30 #include "components/autofill/core/browser/country_names.h" | 
| 32 #include "components/autofill/core/browser/field_types.h" | 31 #include "components/autofill/core/browser/field_types.h" | 
| 33 #include "components/autofill/core/browser/payments/full_card_request.h" | 32 #include "components/autofill/core/browser/payments/full_card_request.h" | 
| 34 #include "components/autofill/core/browser/personal_data_manager.h" | 33 #include "components/autofill/core/browser/personal_data_manager.h" | 
| 35 #include "components/autofill/core/browser/validation.h" | 34 #include "components/autofill/core/browser/validation.h" | 
| 36 #include "components/autofill/core/common/autofill_constants.h" | 35 #include "components/autofill/core/common/autofill_constants.h" | 
| 37 #include "components/autofill/core/common/autofill_pref_names.h" | 36 #include "components/autofill/core/common/autofill_pref_names.h" | 
| 38 #include "components/autofill/core/common/autofill_switches.h" | 37 #include "components/autofill/core/common/autofill_switches.h" | 
| 39 #include "components/grit/components_scaled_resources.h" | 38 #include "components/grit/components_scaled_resources.h" | 
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 125                      g_browser_process->GetApplicationLocale()); | 124                      g_browser_process->GetApplicationLocale()); | 
| 126   } | 125   } | 
| 127   MaybeSetRawInfo(profile, autofill::PHONE_HOME_WHOLE_NUMBER, | 126   MaybeSetRawInfo(profile, autofill::PHONE_HOME_WHOLE_NUMBER, | 
| 128                   Java_AutofillProfile_getPhoneNumber(env, jprofile)); | 127                   Java_AutofillProfile_getPhoneNumber(env, jprofile)); | 
| 129   MaybeSetRawInfo(profile, autofill::EMAIL_ADDRESS, | 128   MaybeSetRawInfo(profile, autofill::EMAIL_ADDRESS, | 
| 130                   Java_AutofillProfile_getEmailAddress(env, jprofile)); | 129                   Java_AutofillProfile_getEmailAddress(env, jprofile)); | 
| 131   profile->set_language_code(ConvertJavaStringToUTF8( | 130   profile->set_language_code(ConvertJavaStringToUTF8( | 
| 132       Java_AutofillProfile_getLanguageCode(env, jprofile))); | 131       Java_AutofillProfile_getLanguageCode(env, jprofile))); | 
| 133 } | 132 } | 
| 134 | 133 | 
|  | 134 // Mapping from Chrome card types to PaymentRequest basic card payment spec and | 
|  | 135 // icons. Note that "generic" is not in the spec. | 
|  | 136 // https://w3c.github.io/webpayments-methods-card/#method-id | 
|  | 137 const struct PaymentRequestData { | 
|  | 138   const char* card_type; | 
|  | 139   const char* basic_card_payment_type; | 
|  | 140   const int icon_resource_id; | 
|  | 141 } kPaymentRequestData[] { | 
|  | 142   {"genericCC", "generic", IDR_AUTOFILL_PR_GENERIC}, | 
|  | 143 | 
|  | 144   {"americanExpressCC", "amex", IDR_AUTOFILL_PR_AMEX}, | 
|  | 145   {"dinersCC", "diners", IDR_AUTOFILL_PR_DINERS}, | 
|  | 146   {"discoverCC", "discover", IDR_AUTOFILL_PR_DISCOVER}, | 
|  | 147   {"jcbCC", "jcb", IDR_AUTOFILL_PR_JCB}, | 
|  | 148   {"masterCardCC", "mastercard", IDR_AUTOFILL_PR_MASTERCARD}, | 
|  | 149   {"unionPayCC", "unionpay", IDR_AUTOFILL_PR_UNIONPAY}, | 
|  | 150   {"visaCC", "visa", IDR_AUTOFILL_PR_VISA}, | 
|  | 151 }; | 
|  | 152 | 
|  | 153 // Converts the card type into PaymentRequest type according to the basic card | 
|  | 154 // payment spec and an icon. Will set the type and the icon to "generic" for | 
|  | 155 // unrecognized card type. | 
|  | 156 const PaymentRequestData& GetPaymentRequestData(const std::string& type) { | 
|  | 157   for (size_t i = 0; i < arraysize(kPaymentRequestData); ++i) { | 
|  | 158     if (type == kPaymentRequestData[i].card_type) | 
|  | 159       return kPaymentRequestData[i]; | 
|  | 160   } | 
|  | 161   return kPaymentRequestData[0]; | 
|  | 162 } | 
|  | 163 | 
| 135 ScopedJavaLocalRef<jobject> CreateJavaCreditCardFromNative( | 164 ScopedJavaLocalRef<jobject> CreateJavaCreditCardFromNative( | 
| 136     JNIEnv* env, | 165     JNIEnv* env, | 
| 137     const CreditCard& card) { | 166     const CreditCard& card) { | 
| 138   const data_util::PaymentRequestData& payment_request_data = | 167   const PaymentRequestData& payment_request_data = | 
| 139       data_util::GetPaymentRequestData(card.type()); | 168       GetPaymentRequestData(card.type()); | 
| 140   return Java_CreditCard_create( | 169   return Java_CreditCard_create( | 
| 141       env, ConvertUTF8ToJavaString(env, card.guid()), | 170       env, ConvertUTF8ToJavaString(env, card.guid()), | 
| 142       ConvertUTF8ToJavaString(env, card.origin()), | 171       ConvertUTF8ToJavaString(env, card.origin()), | 
| 143       card.record_type() == CreditCard::LOCAL_CARD, | 172       card.record_type() == CreditCard::LOCAL_CARD, | 
| 144       card.record_type() == CreditCard::FULL_SERVER_CARD, | 173       card.record_type() == CreditCard::FULL_SERVER_CARD, | 
| 145       ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NAME_FULL)), | 174       ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NAME_FULL)), | 
| 146       ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)), | 175       ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)), | 
| 147       ConvertUTF16ToJavaString(env, card.TypeAndLastFourDigits()), | 176       ConvertUTF16ToJavaString(env, card.TypeAndLastFourDigits()), | 
| 148       ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_EXP_MONTH)), | 177       ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_EXP_MONTH)), | 
| 149       ConvertUTF16ToJavaString(env, | 178       ConvertUTF16ToJavaString(env, | 
| 150                                card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)), | 179                                card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)), | 
| 151       ConvertUTF8ToJavaString(env, | 180       ConvertUTF8ToJavaString(env, | 
| 152                               payment_request_data.basic_card_payment_type), | 181                               payment_request_data.basic_card_payment_type), | 
| 153       ResourceMapper::MapFromChromiumId(payment_request_data.icon_resource_id), | 182       ResourceMapper::MapFromChromiumId(payment_request_data.icon_resource_id), | 
| 154       ConvertUTF8ToJavaString(env, card.billing_address_id()), | 183       ConvertUTF8ToJavaString(env, card.billing_address_id()), | 
| 155       ConvertUTF8ToJavaString(env, card.server_id())); | 184       ConvertUTF8ToJavaString(env, card.server_id())); | 
| 156 } | 185 } | 
| 157 | 186 | 
|  | 187 const char* GetCardTypeForBasicCardPaymentType( | 
|  | 188     const std::string& basic_card_payment_type) { | 
|  | 189   for (size_t i = 0; i < arraysize(kPaymentRequestData); ++i) { | 
|  | 190     if (basic_card_payment_type == | 
|  | 191         kPaymentRequestData[i].basic_card_payment_type) | 
|  | 192       return kPaymentRequestData[i].card_type; | 
|  | 193   } | 
|  | 194   return kPaymentRequestData[0].card_type; | 
|  | 195 } | 
|  | 196 | 
| 158 void PopulateNativeCreditCardFromJava( | 197 void PopulateNativeCreditCardFromJava( | 
| 159     const jobject& jcard, | 198     const jobject& jcard, | 
| 160     JNIEnv* env, | 199     JNIEnv* env, | 
| 161     CreditCard* card) { | 200     CreditCard* card) { | 
| 162   card->set_origin( | 201   card->set_origin( | 
| 163       ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard))); | 202       ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard))); | 
| 164   card->SetRawInfo( | 203   card->SetRawInfo( | 
| 165       CREDIT_CARD_NAME_FULL, | 204       CREDIT_CARD_NAME_FULL, | 
| 166       ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard))); | 205       ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard))); | 
| 167   card->SetRawInfo( | 206   card->SetRawInfo( | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 179       ConvertJavaStringToUTF8(Java_CreditCard_getServerId(env, jcard))); | 218       ConvertJavaStringToUTF8(Java_CreditCard_getServerId(env, jcard))); | 
| 180 | 219 | 
| 181   if (Java_CreditCard_getIsLocal(env, jcard)) { | 220   if (Java_CreditCard_getIsLocal(env, jcard)) { | 
| 182     card->set_record_type(CreditCard::LOCAL_CARD); | 221     card->set_record_type(CreditCard::LOCAL_CARD); | 
| 183   } else { | 222   } else { | 
| 184     if (Java_CreditCard_getIsCached(env, jcard)) { | 223     if (Java_CreditCard_getIsCached(env, jcard)) { | 
| 185       card->set_record_type(CreditCard::FULL_SERVER_CARD); | 224       card->set_record_type(CreditCard::FULL_SERVER_CARD); | 
| 186     } else { | 225     } else { | 
| 187       card->set_record_type(CreditCard::MASKED_SERVER_CARD); | 226       card->set_record_type(CreditCard::MASKED_SERVER_CARD); | 
| 188       card->SetTypeForMaskedCard( | 227       card->SetTypeForMaskedCard( | 
| 189           data_util::GetCardTypeForBasicCardPaymentType(ConvertJavaStringToUTF8( | 228           GetCardTypeForBasicCardPaymentType( | 
| 190               env, Java_CreditCard_getBasicCardPaymentType(env, jcard)))); | 229               ConvertJavaStringToUTF8( | 
|  | 230                   env, Java_CreditCard_getBasicCardPaymentType(env, jcard)))); | 
| 191     } | 231     } | 
| 192   } | 232   } | 
| 193 } | 233 } | 
| 194 | 234 | 
| 195 // Self-deleting requester of full card details, including full PAN and the CVC | 235 // Self-deleting requester of full card details, including full PAN and the CVC | 
| 196 // number. | 236 // number. | 
| 197 class FullCardRequester : public payments::FullCardRequest::Delegate, | 237 class FullCardRequester : public payments::FullCardRequest::Delegate, | 
| 198                           public base::SupportsWeakPtr<FullCardRequester> { | 238                           public base::SupportsWeakPtr<FullCardRequester> { | 
| 199  public: | 239  public: | 
| 200   FullCardRequester() {} | 240   FullCardRequester() {} | 
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 435   personal_data_manager_->UpdateServerCardBillingAddress(card); | 475   personal_data_manager_->UpdateServerCardBillingAddress(card); | 
| 436 } | 476 } | 
| 437 | 477 | 
| 438 ScopedJavaLocalRef<jstring> | 478 ScopedJavaLocalRef<jstring> | 
| 439 PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid( | 479 PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid( | 
| 440     JNIEnv* env, | 480     JNIEnv* env, | 
| 441     const JavaParamRef<jobject>& unused_obj, | 481     const JavaParamRef<jobject>& unused_obj, | 
| 442     const JavaParamRef<jstring>& jcard_number) { | 482     const JavaParamRef<jstring>& jcard_number) { | 
| 443   base::string16 card_number = ConvertJavaStringToUTF16(env, jcard_number); | 483   base::string16 card_number = ConvertJavaStringToUTF16(env, jcard_number); | 
| 444   return ConvertUTF8ToJavaString( | 484   return ConvertUTF8ToJavaString( | 
| 445       env, IsValidCreditCardNumber(card_number) | 485       env, | 
| 446                ? data_util::GetPaymentRequestData( | 486       IsValidCreditCardNumber(card_number) | 
| 447                      CreditCard::GetCreditCardType(card_number)) | 487           ? GetPaymentRequestData(CreditCard::GetCreditCardType(card_number)) | 
| 448                      .basic_card_payment_type | 488                 .basic_card_payment_type | 
| 449                : ""); | 489           : ""); | 
| 450 } | 490 } | 
| 451 | 491 | 
| 452 void PersonalDataManagerAndroid::AddServerCreditCardForTest( | 492 void PersonalDataManagerAndroid::AddServerCreditCardForTest( | 
| 453     JNIEnv* env, | 493     JNIEnv* env, | 
| 454     const base::android::JavaParamRef<jobject>& unused_obj, | 494     const base::android::JavaParamRef<jobject>& unused_obj, | 
| 455     const base::android::JavaParamRef<jobject>& jcard) { | 495     const base::android::JavaParamRef<jobject>& jcard) { | 
| 456   std::unique_ptr<CreditCard> card(new CreditCard); | 496   std::unique_ptr<CreditCard> card(new CreditCard); | 
| 457   PopulateNativeCreditCardFromJava(jcard, env, card.get()); | 497   PopulateNativeCreditCardFromJava(jcard, env, card.get()); | 
| 458   card->set_record_type(CreditCard::MASKED_SERVER_CARD); | 498   card->set_record_type(CreditCard::MASKED_SERVER_CARD); | 
| 459   personal_data_manager_->AddServerCreditCardForTest(std::move(card)); | 499   personal_data_manager_->AddServerCreditCardForTest(std::move(card)); | 
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 686                base::android::ConvertJavaStringToUTF16(env, jcountry_name))); | 726                base::android::ConvertJavaStringToUTF16(env, jcountry_name))); | 
| 687 } | 727 } | 
| 688 | 728 | 
| 689 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 729 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 
| 690   PersonalDataManagerAndroid* personal_data_manager_android = | 730   PersonalDataManagerAndroid* personal_data_manager_android = | 
| 691       new PersonalDataManagerAndroid(env, obj); | 731       new PersonalDataManagerAndroid(env, obj); | 
| 692   return reinterpret_cast<intptr_t>(personal_data_manager_android); | 732   return reinterpret_cast<intptr_t>(personal_data_manager_android); | 
| 693 } | 733 } | 
| 694 | 734 | 
| 695 }  // namespace autofill | 735 }  // namespace autofill | 
| OLD | NEW | 
|---|