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> |
(...skipping 13 matching lines...) Expand all Loading... |
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_type.h" | 29 #include "components/autofill/core/browser/autofill_type.h" |
30 #include "components/autofill/core/browser/country_names.h" | 30 #include "components/autofill/core/browser/country_names.h" |
31 #include "components/autofill/core/browser/field_types.h" | 31 #include "components/autofill/core/browser/field_types.h" |
32 #include "components/autofill/core/browser/payments/full_card_request.h" | 32 #include "components/autofill/core/browser/payments/full_card_request.h" |
33 #include "components/autofill/core/browser/personal_data_manager.h" | 33 #include "components/autofill/core/browser/personal_data_manager.h" |
34 #include "components/autofill/core/browser/validation.h" | |
35 #include "components/autofill/core/common/autofill_constants.h" | 34 #include "components/autofill/core/common/autofill_constants.h" |
36 #include "components/autofill/core/common/autofill_pref_names.h" | 35 #include "components/autofill/core/common/autofill_pref_names.h" |
37 #include "components/autofill/core/common/autofill_switches.h" | 36 #include "components/autofill/core/common/autofill_switches.h" |
38 #include "components/prefs/pref_service.h" | 37 #include "components/prefs/pref_service.h" |
39 #include "content/public/browser/web_contents.h" | 38 #include "content/public/browser/web_contents.h" |
40 #include "grit/components_scaled_resources.h" | 39 #include "grit/components_scaled_resources.h" |
41 #include "jni/PersonalDataManager_jni.h" | 40 #include "jni/PersonalDataManager_jni.h" |
42 | 41 |
43 using base::android::ConvertJavaStringToUTF8; | 42 using base::android::ConvertJavaStringToUTF8; |
44 using base::android::ConvertUTF16ToJavaString; | 43 using base::android::ConvertUTF16ToJavaString; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 Java_AutofillProfile_getPhoneNumber(env, jprofile.obj())); | 130 Java_AutofillProfile_getPhoneNumber(env, jprofile.obj())); |
132 MaybeSetRawInfo(profile, autofill::EMAIL_ADDRESS, | 131 MaybeSetRawInfo(profile, autofill::EMAIL_ADDRESS, |
133 Java_AutofillProfile_getEmailAddress(env, jprofile.obj())); | 132 Java_AutofillProfile_getEmailAddress(env, jprofile.obj())); |
134 profile->set_language_code( | 133 profile->set_language_code( |
135 ConvertJavaStringToUTF8( | 134 ConvertJavaStringToUTF8( |
136 Java_AutofillProfile_getLanguageCode(env, jprofile.obj()))); | 135 Java_AutofillProfile_getLanguageCode(env, jprofile.obj()))); |
137 } | 136 } |
138 | 137 |
139 // Mapping from Chrome card types to PaymentRequest basic card payment spec and | 138 // Mapping from Chrome card types to PaymentRequest basic card payment spec and |
140 // icons. Note that "generic" is not in the spec. | 139 // icons. Note that "generic" is not in the spec. |
141 // https://w3c.github.io/webpayments-methods-card/#method-id | 140 // https://w3c.github.io/browser-payment-api/specs/basic-card-payment.html#metho
d-id |
142 const struct PaymentRequestData { | 141 const struct PaymentRequestData { |
143 const char* card_type; | 142 const char* card_type; |
144 const char* basic_card_payment_type; | 143 const char* basic_card_payment_type; |
145 const int icon_resource_id; | 144 const int icon_resource_id; |
146 } kPaymentRequestData[] { | 145 } kPaymentRequestData[] { |
147 {"genericCC", "generic", IDR_AUTOFILL_PR_GENERIC}, | 146 {"genericCC", "generic", IDR_AUTOFILL_PR_GENERIC}, |
148 | |
149 {"americanExpressCC", "amex", IDR_AUTOFILL_PR_AMEX}, | 147 {"americanExpressCC", "amex", IDR_AUTOFILL_PR_AMEX}, |
150 {"dinersCC", "diners", IDR_AUTOFILL_PR_DINERS}, | 148 {"dinersCC", "diners", IDR_AUTOFILL_PR_GENERIC}, |
151 {"discoverCC", "discover", IDR_AUTOFILL_PR_DISCOVER}, | 149 {"discoverCC", "discover", IDR_AUTOFILL_PR_DISCOVER}, |
152 {"jcbCC", "jcb", IDR_AUTOFILL_PR_JCB}, | 150 {"jcbCC", "jcb", IDR_AUTOFILL_PR_GENERIC}, |
153 {"masterCardCC", "mastercard", IDR_AUTOFILL_PR_MASTERCARD}, | 151 {"masterCardCC", "mastercard", IDR_AUTOFILL_PR_MASTERCARD}, |
154 {"unionPayCC", "unionpay", IDR_AUTOFILL_PR_UNIONPAY}, | 152 {"visaCC", "visa", IDR_AUTOFILL_PR_VISA} |
155 {"visaCC", "visa", IDR_AUTOFILL_PR_VISA}, | |
156 }; | 153 }; |
157 | 154 |
158 // Converts the card type into PaymentRequest type according to the basic card | 155 // Converts the card type into PaymentRequest type according to the basic card |
159 // payment spec and an icon. Will set the type and the icon to "generic" for | 156 // payment spec and an icon. Will set the type and the icon to "generic" for |
160 // unrecognized card type. | 157 // unrecognized card type. |
161 const PaymentRequestData& GetPaymentRequestData(const std::string& type) { | 158 const PaymentRequestData& GetPaymentRequestData(const std::string& type) { |
162 for (size_t i = 0; i < arraysize(kPaymentRequestData); ++i) { | 159 for (size_t i = 0; i < arraysize(kPaymentRequestData); ++i) { |
163 if (type == kPaymentRequestData[i].card_type) | 160 if (type == kPaymentRequestData[i].card_type) |
164 return kPaymentRequestData[i]; | 161 return kPaymentRequestData[i]; |
165 } | 162 } |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 ConvertJavaStringToUTF8(Java_CreditCard_getBillingAddressId(env, jcard))); | 210 ConvertJavaStringToUTF8(Java_CreditCard_getBillingAddressId(env, jcard))); |
214 } | 211 } |
215 | 212 |
216 // Self-deleting requester of full card details, including full PAN and the CVC | 213 // Self-deleting requester of full card details, including full PAN and the CVC |
217 // number. | 214 // number. |
218 class FullCardRequester : public payments::FullCardRequest::Delegate, | 215 class FullCardRequester : public payments::FullCardRequest::Delegate, |
219 public base::SupportsWeakPtr<FullCardRequester> { | 216 public base::SupportsWeakPtr<FullCardRequester> { |
220 public: | 217 public: |
221 FullCardRequester() {} | 218 FullCardRequester() {} |
222 | 219 |
223 // Takes ownership of |card|. | |
224 void GetFullCard(JNIEnv* env, | 220 void GetFullCard(JNIEnv* env, |
225 const base::android::JavaParamRef<jobject>& jweb_contents, | 221 const base::android::JavaParamRef<jobject>& jweb_contents, |
226 const base::android::JavaParamRef<jobject>& jdelegate, | 222 const base::android::JavaParamRef<jobject>& jdelegate, |
227 std::unique_ptr<CreditCard> card) { | 223 CreditCard* card) { |
228 card_ = std::move(card); | |
229 GetFullCard(env, jweb_contents, jdelegate, card_.get()); | |
230 } | |
231 | |
232 // Does not take ownership of |card|. | |
233 void GetFullCard(JNIEnv* env, | |
234 const base::android::JavaParamRef<jobject>& jweb_contents, | |
235 const base::android::JavaParamRef<jobject>& jdelegate, | |
236 const CreditCard* card) { | |
237 jdelegate_.Reset(env, jdelegate); | 224 jdelegate_.Reset(env, jdelegate); |
238 | 225 |
239 if (!card) { | 226 if (!card) { |
240 OnFullCardError(); | 227 OnFullCardError(); |
241 return; | 228 return; |
242 } | 229 } |
243 | 230 |
244 content::WebContents* contents = | 231 content::WebContents* contents = |
245 content::WebContents::FromJavaWebContents(jweb_contents); | 232 content::WebContents::FromJavaWebContents(jweb_contents); |
246 if (!contents) { | 233 if (!contents) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 delete this; | 266 delete this; |
280 } | 267 } |
281 | 268 |
282 // payments::FullCardRequest::Delegate: | 269 // payments::FullCardRequest::Delegate: |
283 void OnFullCardError() override { | 270 void OnFullCardError() override { |
284 JNIEnv* env = base::android::AttachCurrentThread(); | 271 JNIEnv* env = base::android::AttachCurrentThread(); |
285 Java_FullCardRequestDelegate_onFullCardError(env, jdelegate_.obj()); | 272 Java_FullCardRequestDelegate_onFullCardError(env, jdelegate_.obj()); |
286 delete this; | 273 delete this; |
287 } | 274 } |
288 | 275 |
289 std::unique_ptr<CreditCard> card_; | |
290 ScopedJavaGlobalRef<jobject> jdelegate_; | 276 ScopedJavaGlobalRef<jobject> jdelegate_; |
291 | 277 |
292 DISALLOW_COPY_AND_ASSIGN(FullCardRequester); | 278 DISALLOW_COPY_AND_ASSIGN(FullCardRequester); |
293 }; | 279 }; |
294 | 280 |
295 } // namespace | 281 } // namespace |
296 | 282 |
297 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, | 283 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, |
298 jobject obj) | 284 jobject obj) |
299 : weak_java_obj_(env, obj), | 285 : weak_java_obj_(env, obj), |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 const JavaParamRef<jobject>& unused_obj, | 400 const JavaParamRef<jobject>& unused_obj, |
415 const JavaParamRef<jstring>& jguid) { | 401 const JavaParamRef<jstring>& jguid) { |
416 CreditCard* card = personal_data_manager_->GetCreditCardByGUID( | 402 CreditCard* card = personal_data_manager_->GetCreditCardByGUID( |
417 ConvertJavaStringToUTF8(env, jguid)); | 403 ConvertJavaStringToUTF8(env, jguid)); |
418 if (!card) | 404 if (!card) |
419 return ScopedJavaLocalRef<jobject>(); | 405 return ScopedJavaLocalRef<jobject>(); |
420 | 406 |
421 return CreateJavaCreditCardFromNative(env, *card); | 407 return CreateJavaCreditCardFromNative(env, *card); |
422 } | 408 } |
423 | 409 |
424 ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetCreditCardForNumber( | |
425 JNIEnv* env, | |
426 const JavaParamRef<jobject>& unused_obj, | |
427 const JavaParamRef<jstring>& jcard_number) { | |
428 // A local card with empty GUID. | |
429 CreditCard card("", ""); | |
430 card.SetNumber(ConvertJavaStringToUTF16(env, jcard_number)); | |
431 return CreateJavaCreditCardFromNative(env, card); | |
432 } | |
433 | |
434 ScopedJavaLocalRef<jstring> PersonalDataManagerAndroid::SetCreditCard( | 410 ScopedJavaLocalRef<jstring> PersonalDataManagerAndroid::SetCreditCard( |
435 JNIEnv* env, | 411 JNIEnv* env, |
436 const JavaParamRef<jobject>& unused_obj, | 412 const JavaParamRef<jobject>& unused_obj, |
437 const JavaParamRef<jobject>& jcard) { | 413 const JavaParamRef<jobject>& jcard) { |
438 std::string guid = ConvertJavaStringToUTF8( | 414 std::string guid = ConvertJavaStringToUTF8( |
439 env, | 415 env, |
440 Java_CreditCard_getGUID(env, jcard).obj()); | 416 Java_CreditCard_getGUID(env, jcard).obj()); |
441 | 417 |
442 CreditCard card; | 418 CreditCard card; |
443 PopulateNativeCreditCardFromJava(jcard, env, &card); | 419 PopulateNativeCreditCardFromJava(jcard, env, &card); |
(...skipping 13 matching lines...) Expand all Loading... |
457 const JavaParamRef<jobject>& unused_obj, | 433 const JavaParamRef<jobject>& unused_obj, |
458 const JavaParamRef<jstring>& jguid, | 434 const JavaParamRef<jstring>& jguid, |
459 const JavaParamRef<jstring>& jbilling_address_id) { | 435 const JavaParamRef<jstring>& jbilling_address_id) { |
460 CreditCard card(ConvertJavaStringToUTF8(env, jguid), kSettingsOrigin); | 436 CreditCard card(ConvertJavaStringToUTF8(env, jguid), kSettingsOrigin); |
461 card.set_record_type(CreditCard::MASKED_SERVER_CARD); | 437 card.set_record_type(CreditCard::MASKED_SERVER_CARD); |
462 card.set_billing_address_id(ConvertJavaStringToUTF8(env, | 438 card.set_billing_address_id(ConvertJavaStringToUTF8(env, |
463 jbilling_address_id)); | 439 jbilling_address_id)); |
464 personal_data_manager_->UpdateServerCardBillingAddress(card); | 440 personal_data_manager_->UpdateServerCardBillingAddress(card); |
465 } | 441 } |
466 | 442 |
467 ScopedJavaLocalRef<jstring> | |
468 PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid( | |
469 JNIEnv* env, | |
470 const JavaParamRef<jobject>& unused_obj, | |
471 const JavaParamRef<jstring>& jcard_number) { | |
472 base::string16 card_number = ConvertJavaStringToUTF16(env, jcard_number); | |
473 return ConvertUTF8ToJavaString( | |
474 env, | |
475 IsValidCreditCardNumber(card_number) | |
476 ? GetPaymentRequestData(CreditCard::GetCreditCardType(card_number)) | |
477 .basic_card_payment_type | |
478 : ""); | |
479 } | |
480 | |
481 void PersonalDataManagerAndroid::AddServerCreditCardForTest( | 443 void PersonalDataManagerAndroid::AddServerCreditCardForTest( |
482 JNIEnv* env, | 444 JNIEnv* env, |
483 const base::android::JavaParamRef<jobject>& unused_obj, | 445 const base::android::JavaParamRef<jobject>& unused_obj, |
484 const base::android::JavaParamRef<jobject>& jcard) { | 446 const base::android::JavaParamRef<jobject>& jcard) { |
485 std::unique_ptr<CreditCard> card(new CreditCard); | 447 std::unique_ptr<CreditCard> card(new CreditCard); |
486 PopulateNativeCreditCardFromJava(jcard, env, card.get()); | 448 PopulateNativeCreditCardFromJava(jcard, env, card.get()); |
487 card->set_record_type(CreditCard::MASKED_SERVER_CARD); | 449 card->set_record_type(CreditCard::MASKED_SERVER_CARD); |
488 personal_data_manager_->AddServerCreditCardForTest(std::move(card)); | 450 personal_data_manager_->AddServerCreditCardForTest(std::move(card)); |
489 } | 451 } |
490 | 452 |
(...skipping 11 matching lines...) Expand all Loading... |
502 personal_data_manager_->ResetFullServerCard( | 464 personal_data_manager_->ResetFullServerCard( |
503 ConvertJavaStringToUTF8(env, guid)); | 465 ConvertJavaStringToUTF8(env, guid)); |
504 } | 466 } |
505 | 467 |
506 void PersonalDataManagerAndroid::GetFullCardForPaymentRequest( | 468 void PersonalDataManagerAndroid::GetFullCardForPaymentRequest( |
507 JNIEnv* env, | 469 JNIEnv* env, |
508 const JavaParamRef<jobject>& unused_obj, | 470 const JavaParamRef<jobject>& unused_obj, |
509 const JavaParamRef<jobject>& jweb_contents, | 471 const JavaParamRef<jobject>& jweb_contents, |
510 const JavaParamRef<jstring>& jguid, | 472 const JavaParamRef<jstring>& jguid, |
511 const JavaParamRef<jobject>& jdelegate) { | 473 const JavaParamRef<jobject>& jdelegate) { |
512 // Self-deleting object that does not take ownership of the CreditCard from | 474 // Self-deleting object. |
513 // the PersonalDataManager. The PersonalDataManager owns that CreditCard. | |
514 (new FullCardRequester()) | 475 (new FullCardRequester()) |
515 ->GetFullCard(env, jweb_contents, jdelegate, | 476 ->GetFullCard(env, jweb_contents, jdelegate, |
516 personal_data_manager_->GetCreditCardByGUID( | 477 personal_data_manager_->GetCreditCardByGUID( |
517 ConvertJavaStringToUTF8(env, jguid))); | 478 ConvertJavaStringToUTF8(env, jguid))); |
518 } | 479 } |
519 | 480 |
520 void PersonalDataManagerAndroid::GetFullTemporaryCardForPaymentRequest( | |
521 JNIEnv* env, | |
522 const JavaParamRef<jobject>& unused_obj, | |
523 const JavaParamRef<jobject>& jweb_contents, | |
524 const JavaParamRef<jstring>& jcard_number, | |
525 const JavaParamRef<jstring>& jname_on_card, | |
526 const JavaParamRef<jstring>& jexpiration_month, | |
527 const JavaParamRef<jstring>& jexpiration_year, | |
528 const JavaParamRef<jobject>& jdelegate) { | |
529 // FullCardRequest will not attempt to save a card with an empty GUID. | |
530 std::unique_ptr<CreditCard> card(new CreditCard("", "")); | |
531 card->SetNumber(ConvertJavaStringToUTF16(env, jcard_number)); | |
532 card->SetRawInfo( | |
533 CREDIT_CARD_NAME_FULL, | |
534 ConvertJavaStringToUTF16(env, jname_on_card)); | |
535 card->SetRawInfo( | |
536 CREDIT_CARD_EXP_MONTH, | |
537 ConvertJavaStringToUTF16(env, jexpiration_month)); | |
538 card->SetRawInfo( | |
539 CREDIT_CARD_EXP_4_DIGIT_YEAR, | |
540 ConvertJavaStringToUTF16(env, jexpiration_year)); | |
541 | |
542 // Self-deleting object that takes ownership of the CreditCard. | |
543 (new FullCardRequester()) | |
544 ->GetFullCard(env, jweb_contents, jdelegate, std::move(card)); | |
545 } | |
546 | |
547 void PersonalDataManagerAndroid::OnPersonalDataChanged() { | 481 void PersonalDataManagerAndroid::OnPersonalDataChanged() { |
548 JNIEnv* env = base::android::AttachCurrentThread(); | 482 JNIEnv* env = base::android::AttachCurrentThread(); |
549 if (weak_java_obj_.get(env).is_null()) | 483 if (weak_java_obj_.get(env).is_null()) |
550 return; | 484 return; |
551 | 485 |
552 Java_PersonalDataManager_personalDataChanged(env, | 486 Java_PersonalDataManager_personalDataChanged(env, |
553 weak_java_obj_.get(env).obj()); | 487 weak_java_obj_.get(env).obj()); |
554 } | 488 } |
555 | 489 |
556 // static | 490 // static |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); | 619 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); |
686 } | 620 } |
687 | 621 |
688 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 622 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
689 PersonalDataManagerAndroid* personal_data_manager_android = | 623 PersonalDataManagerAndroid* personal_data_manager_android = |
690 new PersonalDataManagerAndroid(env, obj); | 624 new PersonalDataManagerAndroid(env, obj); |
691 return reinterpret_cast<intptr_t>(personal_data_manager_android); | 625 return reinterpret_cast<intptr_t>(personal_data_manager_android); |
692 } | 626 } |
693 | 627 |
694 } // namespace autofill | 628 } // namespace autofill |
OLD | NEW |