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 |