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 |