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 |