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