| 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 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)).obj(), | 181 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)).obj(), |
| 182 ConvertUTF16ToJavaString(env, card.TypeAndLastFourDigits()).obj(), | 182 ConvertUTF16ToJavaString(env, card.TypeAndLastFourDigits()).obj(), |
| 183 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_EXP_MONTH)) | 183 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_EXP_MONTH)) |
| 184 .obj(), | 184 .obj(), |
| 185 ConvertUTF16ToJavaString(env, | 185 ConvertUTF16ToJavaString(env, |
| 186 card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)) | 186 card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)) |
| 187 .obj(), | 187 .obj(), |
| 188 ConvertUTF8ToJavaString(env, payment_request_data.basic_card_payment_type) | 188 ConvertUTF8ToJavaString(env, payment_request_data.basic_card_payment_type) |
| 189 .obj(), | 189 .obj(), |
| 190 ResourceMapper::MapFromChromiumId(payment_request_data.icon_resource_id), | 190 ResourceMapper::MapFromChromiumId(payment_request_data.icon_resource_id), |
| 191 ConvertUTF8ToJavaString(env, card.billing_address_id()) .obj()); | 191 ConvertUTF8ToJavaString(env, card.billing_address_id()) .obj(), |
| 192 ConvertUTF8ToJavaString(env, card.server_id()) .obj()); |
| 193 } |
| 194 |
| 195 const char* GetCardTypeForBasicCardPaymentType( |
| 196 const std::string& basic_card_payment_type) { |
| 197 for (size_t i = 0; i < arraysize(kPaymentRequestData); ++i) { |
| 198 if (basic_card_payment_type == |
| 199 kPaymentRequestData[i].basic_card_payment_type) |
| 200 return kPaymentRequestData[i].card_type; |
| 201 } |
| 202 return kPaymentRequestData[0].card_type; |
| 192 } | 203 } |
| 193 | 204 |
| 194 void PopulateNativeCreditCardFromJava( | 205 void PopulateNativeCreditCardFromJava( |
| 195 const jobject& jcard, | 206 const jobject& jcard, |
| 196 JNIEnv* env, | 207 JNIEnv* env, |
| 197 CreditCard* card) { | 208 CreditCard* card) { |
| 198 card->set_origin( | 209 card->set_origin( |
| 199 ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard))); | 210 ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard))); |
| 200 card->SetRawInfo( | 211 card->SetRawInfo( |
| 201 CREDIT_CARD_NAME_FULL, | 212 CREDIT_CARD_NAME_FULL, |
| 202 ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard))); | 213 ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard))); |
| 203 card->SetRawInfo( | 214 card->SetRawInfo( |
| 204 CREDIT_CARD_NUMBER, | 215 CREDIT_CARD_NUMBER, |
| 205 ConvertJavaStringToUTF16(Java_CreditCard_getNumber(env, jcard))); | 216 ConvertJavaStringToUTF16(Java_CreditCard_getNumber(env, jcard))); |
| 206 card->SetRawInfo( | 217 card->SetRawInfo( |
| 207 CREDIT_CARD_EXP_MONTH, | 218 CREDIT_CARD_EXP_MONTH, |
| 208 ConvertJavaStringToUTF16(Java_CreditCard_getMonth(env, jcard))); | 219 ConvertJavaStringToUTF16(Java_CreditCard_getMonth(env, jcard))); |
| 209 card->SetRawInfo( | 220 card->SetRawInfo( |
| 210 CREDIT_CARD_EXP_4_DIGIT_YEAR, | 221 CREDIT_CARD_EXP_4_DIGIT_YEAR, |
| 211 ConvertJavaStringToUTF16(Java_CreditCard_getYear(env, jcard))); | 222 ConvertJavaStringToUTF16(Java_CreditCard_getYear(env, jcard))); |
| 212 card->set_billing_address_id( | 223 card->set_billing_address_id( |
| 213 ConvertJavaStringToUTF8(Java_CreditCard_getBillingAddressId(env, jcard))); | 224 ConvertJavaStringToUTF8(Java_CreditCard_getBillingAddressId(env, jcard))); |
| 225 card->set_server_id( |
| 226 ConvertJavaStringToUTF8(Java_CreditCard_getServerId(env, jcard))); |
| 227 |
| 228 if (Java_CreditCard_getIsLocal(env, jcard)) { |
| 229 card->set_record_type(CreditCard::LOCAL_CARD); |
| 230 } else { |
| 231 if (Java_CreditCard_getIsCached(env, jcard)) { |
| 232 card->set_record_type(CreditCard::FULL_SERVER_CARD); |
| 233 } else { |
| 234 card->set_record_type(CreditCard::MASKED_SERVER_CARD); |
| 235 card->SetTypeForMaskedCard( |
| 236 GetCardTypeForBasicCardPaymentType( |
| 237 ConvertJavaStringToUTF8( |
| 238 env, Java_CreditCard_getBasicCardPaymentType(env, jcard)))); |
| 239 } |
| 240 } |
| 214 } | 241 } |
| 215 | 242 |
| 216 // Self-deleting requester of full card details, including full PAN and the CVC | 243 // Self-deleting requester of full card details, including full PAN and the CVC |
| 217 // number. | 244 // number. |
| 218 class FullCardRequester : public payments::FullCardRequest::Delegate, | 245 class FullCardRequester : public payments::FullCardRequest::Delegate, |
| 219 public base::SupportsWeakPtr<FullCardRequester> { | 246 public base::SupportsWeakPtr<FullCardRequester> { |
| 220 public: | 247 public: |
| 221 FullCardRequester() {} | 248 FullCardRequester() {} |
| 222 | 249 |
| 223 // Takes ownership of |card|. | 250 // Takes ownership of |card|. |
| 224 void GetFullCard(JNIEnv* env, | 251 void GetFullCard(JNIEnv* env, |
| 225 const base::android::JavaParamRef<jobject>& jweb_contents, | 252 const base::android::JavaParamRef<jobject>& jweb_contents, |
| 226 const base::android::JavaParamRef<jobject>& jdelegate, | 253 const base::android::JavaParamRef<jobject>& jdelegate, |
| 227 std::unique_ptr<CreditCard> card) { | 254 std::unique_ptr<CreditCard> card) { |
| 228 card_ = std::move(card); | 255 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); | 256 jdelegate_.Reset(env, jdelegate); |
| 238 | 257 |
| 239 if (!card) { | 258 if (!card_) { |
| 240 OnFullCardError(); | 259 OnFullCardError(); |
| 241 return; | 260 return; |
| 242 } | 261 } |
| 243 | 262 |
| 244 content::WebContents* contents = | 263 content::WebContents* contents = |
| 245 content::WebContents::FromJavaWebContents(jweb_contents); | 264 content::WebContents::FromJavaWebContents(jweb_contents); |
| 246 if (!contents) { | 265 if (!contents) { |
| 247 OnFullCardError(); | 266 OnFullCardError(); |
| 248 return; | 267 return; |
| 249 } | 268 } |
| 250 | 269 |
| 251 ContentAutofillDriverFactory* factory = | 270 ContentAutofillDriverFactory* factory = |
| 252 ContentAutofillDriverFactory::FromWebContents(contents); | 271 ContentAutofillDriverFactory::FromWebContents(contents); |
| 253 if (!factory) { | 272 if (!factory) { |
| 254 OnFullCardError(); | 273 OnFullCardError(); |
| 255 return; | 274 return; |
| 256 } | 275 } |
| 257 | 276 |
| 258 ContentAutofillDriver* driver = | 277 ContentAutofillDriver* driver = |
| 259 factory->DriverForFrame(contents->GetMainFrame()); | 278 factory->DriverForFrame(contents->GetMainFrame()); |
| 260 if (!driver) { | 279 if (!driver) { |
| 261 OnFullCardError(); | 280 OnFullCardError(); |
| 262 return; | 281 return; |
| 263 } | 282 } |
| 264 | 283 |
| 265 driver->autofill_manager()->GetOrCreateFullCardRequest()->GetFullCard( | 284 driver->autofill_manager()->GetOrCreateFullCardRequest()->GetFullCard( |
| 266 *card, AutofillClient::UNMASK_FOR_PAYMENT_REQUEST, AsWeakPtr()); | 285 *card_, AutofillClient::UNMASK_FOR_PAYMENT_REQUEST, AsWeakPtr()); |
| 267 } | 286 } |
| 268 | 287 |
| 269 private: | 288 private: |
| 270 virtual ~FullCardRequester() {} | 289 virtual ~FullCardRequester() {} |
| 271 | 290 |
| 272 // payments::FullCardRequest::Delegate: | 291 // payments::FullCardRequest::Delegate: |
| 273 void OnFullCardDetails(const CreditCard& card, | 292 void OnFullCardDetails(const CreditCard& card, |
| 274 const base::string16& cvc) override { | 293 const base::string16& cvc) override { |
| 275 JNIEnv* env = base::android::AttachCurrentThread(); | 294 JNIEnv* env = base::android::AttachCurrentThread(); |
| 276 Java_FullCardRequestDelegate_onFullCardDetails( | 295 Java_FullCardRequestDelegate_onFullCardDetails( |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 card.set_guid(guid); | 466 card.set_guid(guid); |
| 448 personal_data_manager_->UpdateCreditCard(card); | 467 personal_data_manager_->UpdateCreditCard(card); |
| 449 } | 468 } |
| 450 return ConvertUTF8ToJavaString(env, card.guid()); | 469 return ConvertUTF8ToJavaString(env, card.guid()); |
| 451 } | 470 } |
| 452 | 471 |
| 453 | 472 |
| 454 void PersonalDataManagerAndroid::UpdateServerCardBillingAddress( | 473 void PersonalDataManagerAndroid::UpdateServerCardBillingAddress( |
| 455 JNIEnv* env, | 474 JNIEnv* env, |
| 456 const JavaParamRef<jobject>& unused_obj, | 475 const JavaParamRef<jobject>& unused_obj, |
| 457 const JavaParamRef<jstring>& jguid, | 476 const JavaParamRef<jstring>& jcard_server_id, |
| 458 const JavaParamRef<jstring>& jbilling_address_id) { | 477 const JavaParamRef<jstring>& jbilling_address_id) { |
| 459 CreditCard card(ConvertJavaStringToUTF8(env, jguid), kSettingsOrigin); | 478 CreditCard card("", kSettingsOrigin); |
| 460 card.set_record_type(CreditCard::MASKED_SERVER_CARD); | 479 card.set_record_type(CreditCard::MASKED_SERVER_CARD); |
| 480 card.set_server_id(ConvertJavaStringToUTF8(env, jcard_server_id)); |
| 461 card.set_billing_address_id(ConvertJavaStringToUTF8(env, | 481 card.set_billing_address_id(ConvertJavaStringToUTF8(env, |
| 462 jbilling_address_id)); | 482 jbilling_address_id)); |
| 463 personal_data_manager_->UpdateServerCardBillingAddress(card); | 483 personal_data_manager_->UpdateServerCardBillingAddress(card); |
| 464 } | 484 } |
| 465 | 485 |
| 466 ScopedJavaLocalRef<jstring> | 486 ScopedJavaLocalRef<jstring> |
| 467 PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid( | 487 PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid( |
| 468 JNIEnv* env, | 488 JNIEnv* env, |
| 469 const JavaParamRef<jobject>& unused_obj, | 489 const JavaParamRef<jobject>& unused_obj, |
| 470 const JavaParamRef<jstring>& jcard_number) { | 490 const JavaParamRef<jstring>& jcard_number) { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 500 const JavaParamRef<jobject>& unused_obj, | 520 const JavaParamRef<jobject>& unused_obj, |
| 501 const JavaParamRef<jstring>& guid) { | 521 const JavaParamRef<jstring>& guid) { |
| 502 personal_data_manager_->ResetFullServerCard( | 522 personal_data_manager_->ResetFullServerCard( |
| 503 ConvertJavaStringToUTF8(env, guid)); | 523 ConvertJavaStringToUTF8(env, guid)); |
| 504 } | 524 } |
| 505 | 525 |
| 506 void PersonalDataManagerAndroid::GetFullCardForPaymentRequest( | 526 void PersonalDataManagerAndroid::GetFullCardForPaymentRequest( |
| 507 JNIEnv* env, | 527 JNIEnv* env, |
| 508 const JavaParamRef<jobject>& unused_obj, | 528 const JavaParamRef<jobject>& unused_obj, |
| 509 const JavaParamRef<jobject>& jweb_contents, | 529 const JavaParamRef<jobject>& jweb_contents, |
| 510 const JavaParamRef<jstring>& jguid, | 530 const JavaParamRef<jobject>& jcard, |
| 511 const JavaParamRef<jobject>& jdelegate) { | 531 const JavaParamRef<jobject>& jdelegate) { |
| 512 // Self-deleting object that does not take ownership of the CreditCard from | 532 std::unique_ptr<CreditCard> card(new CreditCard); |
| 513 // the PersonalDataManager. The PersonalDataManager owns that CreditCard. | 533 PopulateNativeCreditCardFromJava(jcard, env, card.get()); |
| 514 (new FullCardRequester()) | 534 // Self-deleting object. |
| 515 ->GetFullCard(env, jweb_contents, jdelegate, | 535 (new FullCardRequester())->GetFullCard( |
| 516 personal_data_manager_->GetCreditCardByGUID( | 536 env, jweb_contents, jdelegate, std::move(card)); |
| 517 ConvertJavaStringToUTF8(env, jguid))); | |
| 518 } | |
| 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 } | 537 } |
| 546 | 538 |
| 547 void PersonalDataManagerAndroid::OnPersonalDataChanged() { | 539 void PersonalDataManagerAndroid::OnPersonalDataChanged() { |
| 548 JNIEnv* env = base::android::AttachCurrentThread(); | 540 JNIEnv* env = base::android::AttachCurrentThread(); |
| 549 if (weak_java_obj_.get(env).is_null()) | 541 if (weak_java_obj_.get(env).is_null()) |
| 550 return; | 542 return; |
| 551 | 543 |
| 552 Java_PersonalDataManager_personalDataChanged(env, | 544 Java_PersonalDataManager_personalDataChanged(env, |
| 553 weak_java_obj_.get(env).obj()); | 545 weak_java_obj_.get(env).obj()); |
| 554 } | 546 } |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 743 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); | 735 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); |
| 744 } | 736 } |
| 745 | 737 |
| 746 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 738 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 747 PersonalDataManagerAndroid* personal_data_manager_android = | 739 PersonalDataManagerAndroid* personal_data_manager_android = |
| 748 new PersonalDataManagerAndroid(env, obj); | 740 new PersonalDataManagerAndroid(env, obj); |
| 749 return reinterpret_cast<intptr_t>(personal_data_manager_android); | 741 return reinterpret_cast<intptr_t>(personal_data_manager_android); |
| 750 } | 742 } |
| 751 | 743 |
| 752 } // namespace autofill | 744 } // namespace autofill |
| OLD | NEW |