Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: chrome/browser/autofill/android/personal_data_manager_android.cc

Issue 2163693002: [Merge M-53] Credit card editor for PaymentRequest UI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2785
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/autofill/android/personal_data_manager_android.h ('k') | chrome/test/data/android/payments/no_shipping.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698