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

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

Issue 1899893002: Card unmasking without form filling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use the credit card number field in metrics tests, because ios single-field form fill will not requ… Created 4 years, 8 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 8
9 #include "base/android/jni_array.h" 9 #include "base/android/jni_array.h"
10 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/format_macros.h" 12 #include "base/format_macros.h"
13 #include "base/memory/weak_ptr.h"
13 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
14 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
15 #include "chrome/browser/android/resource_mapper.h" 16 #include "chrome/browser/android/resource_mapper.h"
16 #include "chrome/browser/autofill/personal_data_manager_factory.h" 17 #include "chrome/browser/autofill/personal_data_manager_factory.h"
17 #include "chrome/browser/browser_process.h" 18 #include "chrome/browser/browser_process.h"
18 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/profiles/profile_manager.h" 20 #include "chrome/browser/profiles/profile_manager.h"
20 #include "chrome/common/pref_names.h" 21 #include "chrome/common/pref_names.h"
22 #include "components/autofill/content/browser/content_autofill_driver.h"
23 #include "components/autofill/content/browser/content_autofill_driver_factory.h"
21 #include "components/autofill/core/browser/autofill_country.h" 24 #include "components/autofill/core/browser/autofill_country.h"
22 #include "components/autofill/core/browser/autofill_type.h" 25 #include "components/autofill/core/browser/autofill_type.h"
23 #include "components/autofill/core/browser/country_names.h" 26 #include "components/autofill/core/browser/country_names.h"
24 #include "components/autofill/core/browser/field_types.h" 27 #include "components/autofill/core/browser/field_types.h"
28 #include "components/autofill/core/browser/payments/full_card_request.h"
25 #include "components/autofill/core/browser/personal_data_manager.h" 29 #include "components/autofill/core/browser/personal_data_manager.h"
26 #include "components/autofill/core/common/autofill_pref_names.h" 30 #include "components/autofill/core/common/autofill_pref_names.h"
27 #include "components/autofill/core/common/autofill_switches.h" 31 #include "components/autofill/core/common/autofill_switches.h"
28 #include "components/prefs/pref_service.h" 32 #include "components/prefs/pref_service.h"
33 #include "content/public/browser/web_contents.h"
29 #include "jni/PersonalDataManager_jni.h" 34 #include "jni/PersonalDataManager_jni.h"
30 35
31 using base::android::ConvertJavaStringToUTF8; 36 using base::android::ConvertJavaStringToUTF8;
32 using base::android::ConvertUTF16ToJavaString; 37 using base::android::ConvertUTF16ToJavaString;
33 using base::android::ConvertUTF8ToJavaString; 38 using base::android::ConvertUTF8ToJavaString;
39 using base::android::ScopedJavaGlobalRef;
34 using base::android::ScopedJavaLocalRef; 40 using base::android::ScopedJavaLocalRef;
35 41
36 namespace autofill { 42 namespace autofill {
37 namespace { 43 namespace {
38 44
39 Profile* GetProfile() { 45 Profile* GetProfile() {
40 return ProfileManager::GetActiveUserProfile()->GetOriginalProfile(); 46 return ProfileManager::GetActiveUserProfile()->GetOriginalProfile();
41 } 47 }
42 48
43 PrefService* GetPrefs() { 49 PrefService* GetPrefs() {
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 CREDIT_CARD_NUMBER, 191 CREDIT_CARD_NUMBER,
186 ConvertJavaStringToUTF16(Java_CreditCard_getNumber(env, jcard))); 192 ConvertJavaStringToUTF16(Java_CreditCard_getNumber(env, jcard)));
187 card->SetRawInfo( 193 card->SetRawInfo(
188 CREDIT_CARD_EXP_MONTH, 194 CREDIT_CARD_EXP_MONTH,
189 ConvertJavaStringToUTF16(Java_CreditCard_getMonth(env, jcard))); 195 ConvertJavaStringToUTF16(Java_CreditCard_getMonth(env, jcard)));
190 card->SetRawInfo( 196 card->SetRawInfo(
191 CREDIT_CARD_EXP_4_DIGIT_YEAR, 197 CREDIT_CARD_EXP_4_DIGIT_YEAR,
192 ConvertJavaStringToUTF16(Java_CreditCard_getYear(env, jcard))); 198 ConvertJavaStringToUTF16(Java_CreditCard_getYear(env, jcard)));
193 } 199 }
194 200
201 // Self-deleting requester of full card details, including full PAN and the CVC
202 // number.
203 class FullCardRequester : public payments::FullCardRequest::Delegate,
204 public base::SupportsWeakPtr<FullCardRequester> {
205 public:
206 FullCardRequester() {}
207
208 void GetFullCard(JNIEnv* env,
209 const base::android::JavaParamRef<jobject>& jweb_contents,
210 const base::android::JavaParamRef<jobject>& jdelegate,
211 CreditCard* card) {
212 jdelegate_.Reset(env, jdelegate);
213
214 if (!card) {
215 OnFullCardError();
216 return;
217 }
218
219 content::WebContents* contents =
220 content::WebContents::FromJavaWebContents(jweb_contents);
221 if (!contents) {
222 OnFullCardError();
223 return;
224 }
225
226 ContentAutofillDriverFactory* factory =
227 ContentAutofillDriverFactory::FromWebContents(contents);
228 if (!factory) {
229 OnFullCardError();
230 return;
231 }
232
233 ContentAutofillDriver* driver =
234 factory->DriverForFrame(contents->GetMainFrame());
235 if (!driver) {
236 OnFullCardError();
237 return;
238 }
239
240 driver->autofill_manager()->GetOrCreateFullCardRequest()->GetFullCard(
241 *card, AutofillClient::UNMASK_FOR_PAYMENT_REQUEST, AsWeakPtr());
242 }
243
244 private:
245 virtual ~FullCardRequester() {}
246
247 // payments::FullCardRequest::Delegate:
248 void OnFullCardDetails(const CreditCard& card,
249 const base::string16& cvc) override {
250 JNIEnv* env = base::android::AttachCurrentThread();
251 Java_FullCardRequestDelegate_onFullCardDetails(
252 env, jdelegate_.obj(), CreateJavaCreditCardFromNative(env, card).obj(),
253 base::android::ConvertUTF16ToJavaString(env, cvc).obj());
254 delete this;
255 }
256
257 // payments::FullCardRequest::Delegate:
258 void OnFullCardError() override {
259 JNIEnv* env = base::android::AttachCurrentThread();
260 Java_FullCardRequestDelegate_onFullCardError(env, jdelegate_.obj());
261 delete this;
262 }
263
264 ScopedJavaGlobalRef<jobject> jdelegate_;
265
266 DISALLOW_COPY_AND_ASSIGN(FullCardRequester);
267 };
268
195 } // namespace 269 } // namespace
196 270
197 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, 271 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env,
198 jobject obj) 272 jobject obj)
199 : weak_java_obj_(env, obj), 273 : weak_java_obj_(env, obj),
200 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( 274 personal_data_manager_(PersonalDataManagerFactory::GetForProfile(
201 ProfileManager::GetActiveUserProfile())) { 275 ProfileManager::GetActiveUserProfile())) {
202 personal_data_manager_->AddObserver(this); 276 personal_data_manager_->AddObserver(this);
203 } 277 }
204 278
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 } 398 }
325 399
326 void PersonalDataManagerAndroid::ClearUnmaskedCache( 400 void PersonalDataManagerAndroid::ClearUnmaskedCache(
327 JNIEnv* env, 401 JNIEnv* env,
328 const JavaParamRef<jobject>& unused_obj, 402 const JavaParamRef<jobject>& unused_obj,
329 const JavaParamRef<jstring>& guid) { 403 const JavaParamRef<jstring>& guid) {
330 personal_data_manager_->ResetFullServerCard( 404 personal_data_manager_->ResetFullServerCard(
331 ConvertJavaStringToUTF8(env, guid)); 405 ConvertJavaStringToUTF8(env, guid));
332 } 406 }
333 407
408 void PersonalDataManagerAndroid::GetFullCardForPaymentRequest(
409 JNIEnv* env,
410 const JavaParamRef<jobject>& unused_obj,
411 const JavaParamRef<jobject>& jweb_contents,
412 const JavaParamRef<jstring>& jguid,
413 const JavaParamRef<jobject>& jdelegate) {
414 // Self-deleting object.
415 (new FullCardRequester())
416 ->GetFullCard(env, jweb_contents, jdelegate,
417 personal_data_manager_->GetCreditCardByGUID(
418 ConvertJavaStringToUTF8(env, jguid)));
419 }
420
334 void PersonalDataManagerAndroid::OnPersonalDataChanged() { 421 void PersonalDataManagerAndroid::OnPersonalDataChanged() {
335 JNIEnv* env = base::android::AttachCurrentThread(); 422 JNIEnv* env = base::android::AttachCurrentThread();
336 if (weak_java_obj_.get(env).is_null()) 423 if (weak_java_obj_.get(env).is_null())
337 return; 424 return;
338 425
339 Java_PersonalDataManager_personalDataChanged(env, 426 Java_PersonalDataManager_personalDataChanged(env,
340 weak_java_obj_.get(env).obj()); 427 weak_java_obj_.get(env).obj());
341 } 428 }
342 429
343 // static 430 // static
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); 476 base::android::ConvertJavaStringToUTF16(env, jcountry_name)));
390 } 477 }
391 478
392 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { 479 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
393 PersonalDataManagerAndroid* personal_data_manager_android = 480 PersonalDataManagerAndroid* personal_data_manager_android =
394 new PersonalDataManagerAndroid(env, obj); 481 new PersonalDataManagerAndroid(env, obj);
395 return reinterpret_cast<intptr_t>(personal_data_manager_android); 482 return reinterpret_cast<intptr_t>(personal_data_manager_android);
396 } 483 }
397 484
398 } // namespace autofill 485 } // namespace autofill
OLDNEW
« no previous file with comments | « chrome/browser/autofill/android/personal_data_manager_android.h ('k') | components/autofill.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698