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

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

Issue 2285523002: Add support for method selection in the Payment Request UI on iOS. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clear dictionaries before parsing. Created 4 years, 3 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>
11 11
12 #include "base/android/jni_array.h" 12 #include "base/android/jni_array.h"
13 #include "base/android/jni_string.h" 13 #include "base/android/jni_string.h"
14 #include "base/command_line.h" 14 #include "base/command_line.h"
15 #include "base/format_macros.h" 15 #include "base/format_macros.h"
16 #include "base/memory/weak_ptr.h" 16 #include "base/memory/weak_ptr.h"
17 #include "base/strings/stringprintf.h" 17 #include "base/strings/stringprintf.h"
18 #include "base/strings/utf_string_conversions.h" 18 #include "base/strings/utf_string_conversions.h"
19 #include "base/time/time.h" 19 #include "base/time/time.h"
20 #include "chrome/browser/android/resource_mapper.h" 20 #include "chrome/browser/android/resource_mapper.h"
21 #include "chrome/browser/autofill/personal_data_manager_factory.h" 21 #include "chrome/browser/autofill/personal_data_manager_factory.h"
22 #include "chrome/browser/browser_process.h" 22 #include "chrome/browser/browser_process.h"
23 #include "chrome/browser/profiles/profile.h" 23 #include "chrome/browser/profiles/profile.h"
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_data_util.h"
29 #include "components/autofill/core/browser/autofill_type.h" 30 #include "components/autofill/core/browser/autofill_type.h"
30 #include "components/autofill/core/browser/country_names.h" 31 #include "components/autofill/core/browser/country_names.h"
31 #include "components/autofill/core/browser/field_types.h" 32 #include "components/autofill/core/browser/field_types.h"
32 #include "components/autofill/core/browser/payments/full_card_request.h" 33 #include "components/autofill/core/browser/payments/full_card_request.h"
33 #include "components/autofill/core/browser/personal_data_manager.h" 34 #include "components/autofill/core/browser/personal_data_manager.h"
34 #include "components/autofill/core/browser/validation.h" 35 #include "components/autofill/core/browser/validation.h"
35 #include "components/autofill/core/common/autofill_constants.h" 36 #include "components/autofill/core/common/autofill_constants.h"
36 #include "components/autofill/core/common/autofill_pref_names.h" 37 #include "components/autofill/core/common/autofill_pref_names.h"
37 #include "components/autofill/core/common/autofill_switches.h" 38 #include "components/autofill/core/common/autofill_switches.h"
38 #include "components/prefs/pref_service.h" 39 #include "components/prefs/pref_service.h"
39 #include "content/public/browser/web_contents.h" 40 #include "content/public/browser/web_contents.h"
40 #include "grit/components_scaled_resources.h"
41 #include "jni/PersonalDataManager_jni.h" 41 #include "jni/PersonalDataManager_jni.h"
42 42
43 using base::android::ConvertJavaStringToUTF8; 43 using base::android::ConvertJavaStringToUTF8;
44 using base::android::ConvertUTF16ToJavaString; 44 using base::android::ConvertUTF16ToJavaString;
45 using base::android::ConvertUTF8ToJavaString; 45 using base::android::ConvertUTF8ToJavaString;
46 using base::android::JavaParamRef; 46 using base::android::JavaParamRef;
47 using base::android::ScopedJavaGlobalRef; 47 using base::android::ScopedJavaGlobalRef;
48 using base::android::ScopedJavaLocalRef; 48 using base::android::ScopedJavaLocalRef;
49 49
50 namespace autofill { 50 namespace autofill {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 g_browser_process->GetApplicationLocale()); 124 g_browser_process->GetApplicationLocale());
125 } 125 }
126 MaybeSetRawInfo(profile, autofill::PHONE_HOME_WHOLE_NUMBER, 126 MaybeSetRawInfo(profile, autofill::PHONE_HOME_WHOLE_NUMBER,
127 Java_AutofillProfile_getPhoneNumber(env, jprofile)); 127 Java_AutofillProfile_getPhoneNumber(env, jprofile));
128 MaybeSetRawInfo(profile, autofill::EMAIL_ADDRESS, 128 MaybeSetRawInfo(profile, autofill::EMAIL_ADDRESS,
129 Java_AutofillProfile_getEmailAddress(env, jprofile)); 129 Java_AutofillProfile_getEmailAddress(env, jprofile));
130 profile->set_language_code(ConvertJavaStringToUTF8( 130 profile->set_language_code(ConvertJavaStringToUTF8(
131 Java_AutofillProfile_getLanguageCode(env, jprofile))); 131 Java_AutofillProfile_getLanguageCode(env, jprofile)));
132 } 132 }
133 133
134 // Mapping from Chrome card types to PaymentRequest basic card payment spec and
135 // icons. Note that "generic" is not in the spec.
136 // https://w3c.github.io/webpayments-methods-card/#method-id
137 const struct PaymentRequestData {
138 const char* card_type;
139 const char* basic_card_payment_type;
140 const int icon_resource_id;
141 } kPaymentRequestData[] {
142 {"genericCC", "generic", IDR_AUTOFILL_PR_GENERIC},
143
144 {"americanExpressCC", "amex", IDR_AUTOFILL_PR_AMEX},
145 {"dinersCC", "diners", IDR_AUTOFILL_PR_DINERS},
146 {"discoverCC", "discover", IDR_AUTOFILL_PR_DISCOVER},
147 {"jcbCC", "jcb", IDR_AUTOFILL_PR_JCB},
148 {"masterCardCC", "mastercard", IDR_AUTOFILL_PR_MASTERCARD},
149 {"unionPayCC", "unionpay", IDR_AUTOFILL_PR_UNIONPAY},
150 {"visaCC", "visa", IDR_AUTOFILL_PR_VISA},
151 };
152
153 // Converts the card type into PaymentRequest type according to the basic card
154 // payment spec and an icon. Will set the type and the icon to "generic" for
155 // unrecognized card type.
156 const PaymentRequestData& GetPaymentRequestData(const std::string& type) {
157 for (size_t i = 0; i < arraysize(kPaymentRequestData); ++i) {
158 if (type == kPaymentRequestData[i].card_type)
159 return kPaymentRequestData[i];
160 }
161 return kPaymentRequestData[0];
162 }
163
164 ScopedJavaLocalRef<jobject> CreateJavaCreditCardFromNative( 134 ScopedJavaLocalRef<jobject> CreateJavaCreditCardFromNative(
165 JNIEnv* env, 135 JNIEnv* env,
166 const CreditCard& card) { 136 const CreditCard& card) {
167 const PaymentRequestData& payment_request_data = 137 const data_util::PaymentRequestData& payment_request_data =
168 GetPaymentRequestData(card.type()); 138 data_util::GetPaymentRequestData(card.type());
169 return Java_CreditCard_create( 139 return Java_CreditCard_create(
170 env, ConvertUTF8ToJavaString(env, card.guid()), 140 env, ConvertUTF8ToJavaString(env, card.guid()),
171 ConvertUTF8ToJavaString(env, card.origin()), 141 ConvertUTF8ToJavaString(env, card.origin()),
172 card.record_type() == CreditCard::LOCAL_CARD, 142 card.record_type() == CreditCard::LOCAL_CARD,
173 card.record_type() == CreditCard::FULL_SERVER_CARD, 143 card.record_type() == CreditCard::FULL_SERVER_CARD,
174 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NAME_FULL)), 144 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NAME_FULL)),
175 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)), 145 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)),
176 ConvertUTF16ToJavaString(env, card.TypeAndLastFourDigits()), 146 ConvertUTF16ToJavaString(env, card.TypeAndLastFourDigits()),
177 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_EXP_MONTH)), 147 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_EXP_MONTH)),
178 ConvertUTF16ToJavaString(env, 148 ConvertUTF16ToJavaString(env,
179 card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)), 149 card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)),
180 ConvertUTF8ToJavaString(env, 150 ConvertUTF8ToJavaString(env,
181 payment_request_data.basic_card_payment_type), 151 payment_request_data.basic_card_payment_type),
182 ResourceMapper::MapFromChromiumId(payment_request_data.icon_resource_id), 152 ResourceMapper::MapFromChromiumId(payment_request_data.icon_resource_id),
183 ConvertUTF8ToJavaString(env, card.billing_address_id()), 153 ConvertUTF8ToJavaString(env, card.billing_address_id()),
184 ConvertUTF8ToJavaString(env, card.server_id())); 154 ConvertUTF8ToJavaString(env, card.server_id()));
185 } 155 }
186 156
187 const char* GetCardTypeForBasicCardPaymentType(
188 const std::string& basic_card_payment_type) {
189 for (size_t i = 0; i < arraysize(kPaymentRequestData); ++i) {
190 if (basic_card_payment_type ==
191 kPaymentRequestData[i].basic_card_payment_type)
192 return kPaymentRequestData[i].card_type;
193 }
194 return kPaymentRequestData[0].card_type;
195 }
196
197 void PopulateNativeCreditCardFromJava( 157 void PopulateNativeCreditCardFromJava(
198 const jobject& jcard, 158 const jobject& jcard,
199 JNIEnv* env, 159 JNIEnv* env,
200 CreditCard* card) { 160 CreditCard* card) {
201 card->set_origin( 161 card->set_origin(
202 ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard))); 162 ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard)));
203 card->SetRawInfo( 163 card->SetRawInfo(
204 CREDIT_CARD_NAME_FULL, 164 CREDIT_CARD_NAME_FULL,
205 ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard))); 165 ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard)));
206 card->SetRawInfo( 166 card->SetRawInfo(
(...skipping 11 matching lines...) Expand all
218 ConvertJavaStringToUTF8(Java_CreditCard_getServerId(env, jcard))); 178 ConvertJavaStringToUTF8(Java_CreditCard_getServerId(env, jcard)));
219 179
220 if (Java_CreditCard_getIsLocal(env, jcard)) { 180 if (Java_CreditCard_getIsLocal(env, jcard)) {
221 card->set_record_type(CreditCard::LOCAL_CARD); 181 card->set_record_type(CreditCard::LOCAL_CARD);
222 } else { 182 } else {
223 if (Java_CreditCard_getIsCached(env, jcard)) { 183 if (Java_CreditCard_getIsCached(env, jcard)) {
224 card->set_record_type(CreditCard::FULL_SERVER_CARD); 184 card->set_record_type(CreditCard::FULL_SERVER_CARD);
225 } else { 185 } else {
226 card->set_record_type(CreditCard::MASKED_SERVER_CARD); 186 card->set_record_type(CreditCard::MASKED_SERVER_CARD);
227 card->SetTypeForMaskedCard( 187 card->SetTypeForMaskedCard(
228 GetCardTypeForBasicCardPaymentType( 188 data_util::GetCardTypeForBasicCardPaymentType(ConvertJavaStringToUTF8(
229 ConvertJavaStringToUTF8( 189 env, Java_CreditCard_getBasicCardPaymentType(env, jcard))));
230 env, Java_CreditCard_getBasicCardPaymentType(env, jcard))));
231 } 190 }
232 } 191 }
233 } 192 }
234 193
235 // Self-deleting requester of full card details, including full PAN and the CVC 194 // Self-deleting requester of full card details, including full PAN and the CVC
236 // number. 195 // number.
237 class FullCardRequester : public payments::FullCardRequest::Delegate, 196 class FullCardRequester : public payments::FullCardRequest::Delegate,
238 public base::SupportsWeakPtr<FullCardRequester> { 197 public base::SupportsWeakPtr<FullCardRequester> {
239 public: 198 public:
240 FullCardRequester() {} 199 FullCardRequester() {}
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 personal_data_manager_->UpdateServerCardBillingAddress(card); 434 personal_data_manager_->UpdateServerCardBillingAddress(card);
476 } 435 }
477 436
478 ScopedJavaLocalRef<jstring> 437 ScopedJavaLocalRef<jstring>
479 PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid( 438 PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid(
480 JNIEnv* env, 439 JNIEnv* env,
481 const JavaParamRef<jobject>& unused_obj, 440 const JavaParamRef<jobject>& unused_obj,
482 const JavaParamRef<jstring>& jcard_number) { 441 const JavaParamRef<jstring>& jcard_number) {
483 base::string16 card_number = ConvertJavaStringToUTF16(env, jcard_number); 442 base::string16 card_number = ConvertJavaStringToUTF16(env, jcard_number);
484 return ConvertUTF8ToJavaString( 443 return ConvertUTF8ToJavaString(
485 env, 444 env, IsValidCreditCardNumber(card_number)
486 IsValidCreditCardNumber(card_number) 445 ? data_util::GetPaymentRequestData(
487 ? GetPaymentRequestData(CreditCard::GetCreditCardType(card_number)) 446 CreditCard::GetCreditCardType(card_number))
488 .basic_card_payment_type 447 .basic_card_payment_type
489 : ""); 448 : "");
490 } 449 }
491 450
492 void PersonalDataManagerAndroid::AddServerCreditCardForTest( 451 void PersonalDataManagerAndroid::AddServerCreditCardForTest(
493 JNIEnv* env, 452 JNIEnv* env,
494 const base::android::JavaParamRef<jobject>& unused_obj, 453 const base::android::JavaParamRef<jobject>& unused_obj,
495 const base::android::JavaParamRef<jobject>& jcard) { 454 const base::android::JavaParamRef<jobject>& jcard) {
496 std::unique_ptr<CreditCard> card(new CreditCard); 455 std::unique_ptr<CreditCard> card(new CreditCard);
497 PopulateNativeCreditCardFromJava(jcard, env, card.get()); 456 PopulateNativeCreditCardFromJava(jcard, env, card.get());
498 card->set_record_type(CreditCard::MASKED_SERVER_CARD); 457 card->set_record_type(CreditCard::MASKED_SERVER_CARD);
499 personal_data_manager_->AddServerCreditCardForTest(std::move(card)); 458 personal_data_manager_->AddServerCreditCardForTest(std::move(card));
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); 685 base::android::ConvertJavaStringToUTF16(env, jcountry_name)));
727 } 686 }
728 687
729 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { 688 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
730 PersonalDataManagerAndroid* personal_data_manager_android = 689 PersonalDataManagerAndroid* personal_data_manager_android =
731 new PersonalDataManagerAndroid(env, obj); 690 new PersonalDataManagerAndroid(env, obj);
732 return reinterpret_cast<intptr_t>(personal_data_manager_android); 691 return reinterpret_cast<intptr_t>(personal_data_manager_android);
733 } 692 }
734 693
735 } // namespace autofill 694 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698