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 | 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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |