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 |