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

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: Add curly braces. 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
« no previous file with comments | « no previous file | components/autofill/core/browser/autofill_data_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/grit/components_scaled_resources.h" 39 #include "components/grit/components_scaled_resources.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 g_browser_process->GetApplicationLocale()); 125 g_browser_process->GetApplicationLocale());
125 } 126 }
126 MaybeSetRawInfo(profile, autofill::PHONE_HOME_WHOLE_NUMBER, 127 MaybeSetRawInfo(profile, autofill::PHONE_HOME_WHOLE_NUMBER,
127 Java_AutofillProfile_getPhoneNumber(env, jprofile)); 128 Java_AutofillProfile_getPhoneNumber(env, jprofile));
128 MaybeSetRawInfo(profile, autofill::EMAIL_ADDRESS, 129 MaybeSetRawInfo(profile, autofill::EMAIL_ADDRESS,
129 Java_AutofillProfile_getEmailAddress(env, jprofile)); 130 Java_AutofillProfile_getEmailAddress(env, jprofile));
130 profile->set_language_code(ConvertJavaStringToUTF8( 131 profile->set_language_code(ConvertJavaStringToUTF8(
131 Java_AutofillProfile_getLanguageCode(env, jprofile))); 132 Java_AutofillProfile_getLanguageCode(env, jprofile)));
132 } 133 }
133 134
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( 135 ScopedJavaLocalRef<jobject> CreateJavaCreditCardFromNative(
165 JNIEnv* env, 136 JNIEnv* env,
166 const CreditCard& card) { 137 const CreditCard& card) {
167 const PaymentRequestData& payment_request_data = 138 const data_util::PaymentRequestData& payment_request_data =
168 GetPaymentRequestData(card.type()); 139 data_util::GetPaymentRequestData(card.type());
169 return Java_CreditCard_create( 140 return Java_CreditCard_create(
170 env, ConvertUTF8ToJavaString(env, card.guid()), 141 env, ConvertUTF8ToJavaString(env, card.guid()),
171 ConvertUTF8ToJavaString(env, card.origin()), 142 ConvertUTF8ToJavaString(env, card.origin()),
172 card.record_type() == CreditCard::LOCAL_CARD, 143 card.record_type() == CreditCard::LOCAL_CARD,
173 card.record_type() == CreditCard::FULL_SERVER_CARD, 144 card.record_type() == CreditCard::FULL_SERVER_CARD,
174 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NAME_FULL)), 145 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NAME_FULL)),
175 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)), 146 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)),
176 ConvertUTF16ToJavaString(env, card.TypeAndLastFourDigits()), 147 ConvertUTF16ToJavaString(env, card.TypeAndLastFourDigits()),
177 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_EXP_MONTH)), 148 ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_EXP_MONTH)),
178 ConvertUTF16ToJavaString(env, 149 ConvertUTF16ToJavaString(env,
179 card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)), 150 card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)),
180 ConvertUTF8ToJavaString(env, 151 ConvertUTF8ToJavaString(env,
181 payment_request_data.basic_card_payment_type), 152 payment_request_data.basic_card_payment_type),
182 ResourceMapper::MapFromChromiumId(payment_request_data.icon_resource_id), 153 ResourceMapper::MapFromChromiumId(payment_request_data.icon_resource_id),
183 ConvertUTF8ToJavaString(env, card.billing_address_id()), 154 ConvertUTF8ToJavaString(env, card.billing_address_id()),
184 ConvertUTF8ToJavaString(env, card.server_id())); 155 ConvertUTF8ToJavaString(env, card.server_id()));
185 } 156 }
186 157
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( 158 void PopulateNativeCreditCardFromJava(
198 const jobject& jcard, 159 const jobject& jcard,
199 JNIEnv* env, 160 JNIEnv* env,
200 CreditCard* card) { 161 CreditCard* card) {
201 card->set_origin( 162 card->set_origin(
202 ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard))); 163 ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard)));
203 card->SetRawInfo( 164 card->SetRawInfo(
204 CREDIT_CARD_NAME_FULL, 165 CREDIT_CARD_NAME_FULL,
205 ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard))); 166 ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard)));
206 card->SetRawInfo( 167 card->SetRawInfo(
(...skipping 11 matching lines...) Expand all
218 ConvertJavaStringToUTF8(Java_CreditCard_getServerId(env, jcard))); 179 ConvertJavaStringToUTF8(Java_CreditCard_getServerId(env, jcard)));
219 180
220 if (Java_CreditCard_getIsLocal(env, jcard)) { 181 if (Java_CreditCard_getIsLocal(env, jcard)) {
221 card->set_record_type(CreditCard::LOCAL_CARD); 182 card->set_record_type(CreditCard::LOCAL_CARD);
222 } else { 183 } else {
223 if (Java_CreditCard_getIsCached(env, jcard)) { 184 if (Java_CreditCard_getIsCached(env, jcard)) {
224 card->set_record_type(CreditCard::FULL_SERVER_CARD); 185 card->set_record_type(CreditCard::FULL_SERVER_CARD);
225 } else { 186 } else {
226 card->set_record_type(CreditCard::MASKED_SERVER_CARD); 187 card->set_record_type(CreditCard::MASKED_SERVER_CARD);
227 card->SetTypeForMaskedCard( 188 card->SetTypeForMaskedCard(
228 GetCardTypeForBasicCardPaymentType( 189 data_util::GetCardTypeForBasicCardPaymentType(ConvertJavaStringToUTF8(
229 ConvertJavaStringToUTF8( 190 env, Java_CreditCard_getBasicCardPaymentType(env, jcard))));
230 env, Java_CreditCard_getBasicCardPaymentType(env, jcard))));
231 } 191 }
232 } 192 }
233 } 193 }
234 194
235 // Self-deleting requester of full card details, including full PAN and the CVC 195 // Self-deleting requester of full card details, including full PAN and the CVC
236 // number. 196 // number.
237 class FullCardRequester : public payments::FullCardRequest::Delegate, 197 class FullCardRequester : public payments::FullCardRequest::Delegate,
238 public base::SupportsWeakPtr<FullCardRequester> { 198 public base::SupportsWeakPtr<FullCardRequester> {
239 public: 199 public:
240 FullCardRequester() {} 200 FullCardRequester() {}
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 personal_data_manager_->UpdateServerCardBillingAddress(card); 435 personal_data_manager_->UpdateServerCardBillingAddress(card);
476 } 436 }
477 437
478 ScopedJavaLocalRef<jstring> 438 ScopedJavaLocalRef<jstring>
479 PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid( 439 PersonalDataManagerAndroid::GetBasicCardPaymentTypeIfValid(
480 JNIEnv* env, 440 JNIEnv* env,
481 const JavaParamRef<jobject>& unused_obj, 441 const JavaParamRef<jobject>& unused_obj,
482 const JavaParamRef<jstring>& jcard_number) { 442 const JavaParamRef<jstring>& jcard_number) {
483 base::string16 card_number = ConvertJavaStringToUTF16(env, jcard_number); 443 base::string16 card_number = ConvertJavaStringToUTF16(env, jcard_number);
484 return ConvertUTF8ToJavaString( 444 return ConvertUTF8ToJavaString(
485 env, 445 env, IsValidCreditCardNumber(card_number)
486 IsValidCreditCardNumber(card_number) 446 ? data_util::GetPaymentRequestData(
487 ? GetPaymentRequestData(CreditCard::GetCreditCardType(card_number)) 447 CreditCard::GetCreditCardType(card_number))
488 .basic_card_payment_type 448 .basic_card_payment_type
489 : ""); 449 : "");
490 } 450 }
491 451
492 void PersonalDataManagerAndroid::AddServerCreditCardForTest( 452 void PersonalDataManagerAndroid::AddServerCreditCardForTest(
493 JNIEnv* env, 453 JNIEnv* env,
494 const base::android::JavaParamRef<jobject>& unused_obj, 454 const base::android::JavaParamRef<jobject>& unused_obj,
495 const base::android::JavaParamRef<jobject>& jcard) { 455 const base::android::JavaParamRef<jobject>& jcard) {
496 std::unique_ptr<CreditCard> card(new CreditCard); 456 std::unique_ptr<CreditCard> card(new CreditCard);
497 PopulateNativeCreditCardFromJava(jcard, env, card.get()); 457 PopulateNativeCreditCardFromJava(jcard, env, card.get());
498 card->set_record_type(CreditCard::MASKED_SERVER_CARD); 458 card->set_record_type(CreditCard::MASKED_SERVER_CARD);
499 personal_data_manager_->AddServerCreditCardForTest(std::move(card)); 459 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))); 686 base::android::ConvertJavaStringToUTF16(env, jcountry_name)));
727 } 687 }
728 688
729 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { 689 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
730 PersonalDataManagerAndroid* personal_data_manager_android = 690 PersonalDataManagerAndroid* personal_data_manager_android =
731 new PersonalDataManagerAndroid(env, obj); 691 new PersonalDataManagerAndroid(env, obj);
732 return reinterpret_cast<intptr_t>(personal_data_manager_android); 692 return reinterpret_cast<intptr_t>(personal_data_manager_android);
733 } 693 }
734 694
735 } // namespace autofill 695 } // namespace autofill
OLDNEW
« no previous file with comments | « no previous file | components/autofill/core/browser/autofill_data_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698