| 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" |
| 29 #include "components/autofill/core/browser/autofill_type.h" | 30 #include "components/autofill/core/browser/autofill_type.h" |
| 30 #include "components/autofill/core/browser/country_names.h" | 31 #include "components/autofill/core/browser/country_names.h" |
| 31 #include "components/autofill/core/browser/field_types.h" | 32 #include "components/autofill/core/browser/field_types.h" |
| 32 #include "components/autofill/core/browser/payments/full_card_request.h" | 33 #include "components/autofill/core/browser/payments/full_card_request.h" |
| 33 #include "components/autofill/core/browser/personal_data_manager.h" | 34 #include "components/autofill/core/browser/personal_data_manager.h" |
| 34 #include "components/autofill/core/browser/validation.h" | 35 #include "components/autofill/core/browser/validation.h" |
| 35 #include "components/autofill/core/common/autofill_constants.h" | 36 #include "components/autofill/core/common/autofill_constants.h" |
| 36 #include "components/autofill/core/common/autofill_pref_names.h" | 37 #include "components/autofill/core/common/autofill_pref_names.h" |
| 37 #include "components/autofill/core/common/autofill_switches.h" | 38 #include "components/autofill/core/common/autofill_switches.h" |
| 38 #include "components/prefs/pref_service.h" | 39 #include "components/prefs/pref_service.h" |
| 39 #include "content/public/browser/web_contents.h" | 40 #include "content/public/browser/web_contents.h" |
| 40 #include "grit/components_scaled_resources.h" | |
| 41 #include "jni/PersonalDataManager_jni.h" | 41 #include "jni/PersonalDataManager_jni.h" |
| 42 | 42 |
| 43 using base::android::ConvertJavaStringToUTF8; | 43 using base::android::ConvertJavaStringToUTF8; |
| 44 using base::android::ConvertUTF16ToJavaString; | 44 using base::android::ConvertUTF16ToJavaString; |
| 45 using base::android::ConvertUTF8ToJavaString; | 45 using base::android::ConvertUTF8ToJavaString; |
| 46 using base::android::JavaParamRef; | 46 using base::android::JavaParamRef; |
| 47 using base::android::ScopedJavaGlobalRef; | 47 using base::android::ScopedJavaGlobalRef; |
| 48 using base::android::ScopedJavaLocalRef; | 48 using base::android::ScopedJavaLocalRef; |
| 49 | 49 |
| 50 namespace autofill { | 50 namespace autofill { |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 g_browser_process->GetApplicationLocale()); | 124 g_browser_process->GetApplicationLocale()); |
| 125 } | 125 } |
| 126 MaybeSetRawInfo(profile, autofill::PHONE_HOME_WHOLE_NUMBER, | 126 MaybeSetRawInfo(profile, autofill::PHONE_HOME_WHOLE_NUMBER, |
| 127 Java_AutofillProfile_getPhoneNumber(env, jprofile)); | 127 Java_AutofillProfile_getPhoneNumber(env, jprofile)); |
| 128 MaybeSetRawInfo(profile, autofill::EMAIL_ADDRESS, | 128 MaybeSetRawInfo(profile, autofill::EMAIL_ADDRESS, |
| 129 Java_AutofillProfile_getEmailAddress(env, jprofile)); | 129 Java_AutofillProfile_getEmailAddress(env, jprofile)); |
| 130 profile->set_language_code(ConvertJavaStringToUTF8( | 130 profile->set_language_code(ConvertJavaStringToUTF8( |
| 131 Java_AutofillProfile_getLanguageCode(env, jprofile))); | 131 Java_AutofillProfile_getLanguageCode(env, jprofile))); |
| 132 } | 132 } |
| 133 | 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 | |
| 164 ScopedJavaLocalRef<jobject> CreateJavaCreditCardFromNative( | 134 ScopedJavaLocalRef<jobject> CreateJavaCreditCardFromNative( |
| 165 JNIEnv* env, | 135 JNIEnv* env, |
| 166 const CreditCard& card) { | 136 const CreditCard& card) { |
| 167 const PaymentRequestData& payment_request_data = | 137 const data_util::PaymentRequestData& payment_request_data = |
| 168 GetPaymentRequestData(card.type()); | 138 data_util::GetPaymentRequestData(card.type()); |
| 169 return Java_CreditCard_create( | 139 return Java_CreditCard_create( |
| 170 env, ConvertUTF8ToJavaString(env, card.guid()), | 140 env, ConvertUTF8ToJavaString(env, card.guid()), |
| 171 ConvertUTF8ToJavaString(env, card.origin()), | 141 ConvertUTF8ToJavaString(env, card.origin()), |
| 172 card.record_type() == CreditCard::LOCAL_CARD, | 142 card.record_type() == CreditCard::LOCAL_CARD, |
| 173 card.record_type() == CreditCard::FULL_SERVER_CARD, | 143 card.record_type() == CreditCard::FULL_SERVER_CARD, |
| 174 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NAME_FULL)), | 144 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NAME_FULL)), |
| 175 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)), | 145 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)), |
| 176 ConvertUTF16ToJavaString(env, card.TypeAndLastFourDigits()), | 146 ConvertUTF16ToJavaString(env, card.TypeAndLastFourDigits()), |
| 177 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_EXP_MONTH)), | 147 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_EXP_MONTH)), |
| 178 ConvertUTF16ToJavaString(env, | 148 ConvertUTF16ToJavaString(env, |
| 179 card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)), | 149 card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)), |
| 180 ConvertUTF8ToJavaString(env, | 150 ConvertUTF8ToJavaString(env, |
| 181 payment_request_data.basic_card_payment_type), | 151 payment_request_data.basic_card_payment_type), |
| 182 ResourceMapper::MapFromChromiumId(payment_request_data.icon_resource_id), | 152 ResourceMapper::MapFromChromiumId(payment_request_data.icon_resource_id), |
| 183 ConvertUTF8ToJavaString(env, card.billing_address_id()), | 153 ConvertUTF8ToJavaString(env, card.billing_address_id()), |
| 184 ConvertUTF8ToJavaString(env, card.server_id())); | 154 ConvertUTF8ToJavaString(env, card.server_id())); |
| 185 } | 155 } |
| 186 | 156 |
| 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 | |
| 197 void PopulateNativeCreditCardFromJava( | 157 void PopulateNativeCreditCardFromJava( |
| 198 const jobject& jcard, | 158 const jobject& jcard, |
| 199 JNIEnv* env, | 159 JNIEnv* env, |
| 200 CreditCard* card) { | 160 CreditCard* card) { |
| 201 card->set_origin( | 161 card->set_origin( |
| 202 ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard))); | 162 ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard))); |
| 203 card->SetRawInfo( | 163 card->SetRawInfo( |
| 204 CREDIT_CARD_NAME_FULL, | 164 CREDIT_CARD_NAME_FULL, |
| 205 ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard))); | 165 ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard))); |
| 206 card->SetRawInfo( | 166 card->SetRawInfo( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 218 ConvertJavaStringToUTF8(Java_CreditCard_getServerId(env, jcard))); | 178 ConvertJavaStringToUTF8(Java_CreditCard_getServerId(env, jcard))); |
| 219 | 179 |
| 220 if (Java_CreditCard_getIsLocal(env, jcard)) { | 180 if (Java_CreditCard_getIsLocal(env, jcard)) { |
| 221 card->set_record_type(CreditCard::LOCAL_CARD); | 181 card->set_record_type(CreditCard::LOCAL_CARD); |
| 222 } else { | 182 } else { |
| 223 if (Java_CreditCard_getIsCached(env, jcard)) { | 183 if (Java_CreditCard_getIsCached(env, jcard)) { |
| 224 card->set_record_type(CreditCard::FULL_SERVER_CARD); | 184 card->set_record_type(CreditCard::FULL_SERVER_CARD); |
| 225 } else { | 185 } else { |
| 226 card->set_record_type(CreditCard::MASKED_SERVER_CARD); | 186 card->set_record_type(CreditCard::MASKED_SERVER_CARD); |
| 227 card->SetTypeForMaskedCard( | 187 card->SetTypeForMaskedCard( |
| 228 GetCardTypeForBasicCardPaymentType( | 188 data_util::GetCardTypeForBasicCardPaymentType(ConvertJavaStringToUTF8( |
| 229 ConvertJavaStringToUTF8( | 189 env, Java_CreditCard_getBasicCardPaymentType(env, jcard)))); |
| 230 env, Java_CreditCard_getBasicCardPaymentType(env, jcard)))); | |
| 231 } | 190 } |
| 232 } | 191 } |
| 233 } | 192 } |
| 234 | 193 |
| 235 // Self-deleting requester of full card details, including full PAN and the CVC | 194 // Self-deleting requester of full card details, including full PAN and the CVC |
| 236 // number. | 195 // number. |
| 237 class FullCardRequester : public payments::FullCardRequest::Delegate, | 196 class FullCardRequester : public payments::FullCardRequest::Delegate, |
| 238 public base::SupportsWeakPtr<FullCardRequester> { | 197 public base::SupportsWeakPtr<FullCardRequester> { |
| 239 public: | 198 public: |
| 240 FullCardRequester() {} | 199 FullCardRequester() {} |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 personal_data_manager_->UpdateServerCardBillingAddress(card); | 434 personal_data_manager_->UpdateServerCardBillingAddress(card); |
| 476 } | 435 } |
| 477 | 436 |
| 478 ScopedJavaLocalRef<jstring> | 437 ScopedJavaLocalRef<jstring> |
| 479 PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid( | 438 PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid( |
| 480 JNIEnv* env, | 439 JNIEnv* env, |
| 481 const JavaParamRef<jobject>& unused_obj, | 440 const JavaParamRef<jobject>& unused_obj, |
| 482 const JavaParamRef<jstring>& jcard_number) { | 441 const JavaParamRef<jstring>& jcard_number) { |
| 483 base::string16 card_number = ConvertJavaStringToUTF16(env, jcard_number); | 442 base::string16 card_number = ConvertJavaStringToUTF16(env, jcard_number); |
| 484 return ConvertUTF8ToJavaString( | 443 return ConvertUTF8ToJavaString( |
| 485 env, | 444 env, IsValidCreditCardNumber(card_number) |
| 486 IsValidCreditCardNumber(card_number) | 445 ? data_util::GetPaymentRequestData( |
| 487 ? GetPaymentRequestData(CreditCard::GetCreditCardType(card_number)) | 446 CreditCard::GetCreditCardType(card_number)) |
| 488 .basic_card_payment_type | 447 .basic_card_payment_type |
| 489 : ""); | 448 : ""); |
| 490 } | 449 } |
| 491 | 450 |
| 492 void PersonalDataManagerAndroid::AddServerCreditCardForTest( | 451 void PersonalDataManagerAndroid::AddServerCreditCardForTest( |
| 493 JNIEnv* env, | 452 JNIEnv* env, |
| 494 const base::android::JavaParamRef<jobject>& unused_obj, | 453 const base::android::JavaParamRef<jobject>& unused_obj, |
| 495 const base::android::JavaParamRef<jobject>& jcard) { | 454 const base::android::JavaParamRef<jobject>& jcard) { |
| 496 std::unique_ptr<CreditCard> card(new CreditCard); | 455 std::unique_ptr<CreditCard> card(new CreditCard); |
| 497 PopulateNativeCreditCardFromJava(jcard, env, card.get()); | 456 PopulateNativeCreditCardFromJava(jcard, env, card.get()); |
| 498 card->set_record_type(CreditCard::MASKED_SERVER_CARD); | 457 card->set_record_type(CreditCard::MASKED_SERVER_CARD); |
| 499 personal_data_manager_->AddServerCreditCardForTest(std::move(card)); | 458 personal_data_manager_->AddServerCreditCardForTest(std::move(card)); |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 726 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); | 685 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); |
| 727 } | 686 } |
| 728 | 687 |
| 729 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 688 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 730 PersonalDataManagerAndroid* personal_data_manager_android = | 689 PersonalDataManagerAndroid* personal_data_manager_android = |
| 731 new PersonalDataManagerAndroid(env, obj); | 690 new PersonalDataManagerAndroid(env, obj); |
| 732 return reinterpret_cast<intptr_t>(personal_data_manager_android); | 691 return reinterpret_cast<intptr_t>(personal_data_manager_android); |
| 733 } | 692 } |
| 734 | 693 |
| 735 } // namespace autofill | 694 } // namespace autofill |
| OLD | NEW |