| 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> |
| 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/ptr_util.h" |
| 16 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
| 17 #include "base/time/time.h" | 18 #include "base/time/time.h" |
| 18 #include "chrome/browser/android/resource_mapper.h" | 19 #include "chrome/browser/android/resource_mapper.h" |
| 19 #include "chrome/browser/autofill/personal_data_manager_factory.h" | 20 #include "chrome/browser/autofill/personal_data_manager_factory.h" |
| 20 #include "chrome/browser/autofill/validation_rules_storage_factory.h" | 21 #include "chrome/browser/autofill/validation_rules_storage_factory.h" |
| 21 #include "chrome/browser/browser_process.h" | 22 #include "chrome/browser/browser_process.h" |
| 22 #include "chrome/browser/profiles/profile.h" | 23 #include "chrome/browser/profiles/profile.h" |
| 23 #include "chrome/browser/profiles/profile_manager.h" | 24 #include "chrome/browser/profiles/profile_manager.h" |
| 24 #include "chrome/common/pref_names.h" | 25 #include "chrome/common/pref_names.h" |
| 25 #include "components/autofill/content/browser/content_autofill_driver.h" | 26 #include "components/autofill/content/browser/content_autofill_driver.h" |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 } | 300 } |
| 300 | 301 |
| 301 private: | 302 private: |
| 302 ~AndroidAddressNormalizerDelegate() override {} | 303 ~AndroidAddressNormalizerDelegate() override {} |
| 303 | 304 |
| 304 ScopedJavaGlobalRef<jobject> jdelegate_; | 305 ScopedJavaGlobalRef<jobject> jdelegate_; |
| 305 | 306 |
| 306 DISALLOW_COPY_AND_ASSIGN(AndroidAddressNormalizerDelegate); | 307 DISALLOW_COPY_AND_ASSIGN(AndroidAddressNormalizerDelegate); |
| 307 }; | 308 }; |
| 308 | 309 |
| 310 class AndroidSubKeyRequesterDelegate |
| 311 : public PersonalDataManagerAndroid::SubKeyRequestDelegate, |
| 312 public base::SupportsWeakPtr<AndroidSubKeyRequesterDelegate> { |
| 313 public: |
| 314 AndroidSubKeyRequesterDelegate( |
| 315 JNIEnv* env, |
| 316 const base::android::JavaParamRef<jobject>& jdelegate, |
| 317 const std::string& region_code, |
| 318 base::WeakPtr<PersonalDataManagerAndroid> personal_data_manager_android) { |
| 319 jdelegate_.Reset(env, jdelegate); |
| 320 region_code_ = region_code; |
| 321 personal_data_manager_android_ = personal_data_manager_android; |
| 322 } |
| 323 |
| 324 ~AndroidSubKeyRequesterDelegate() override {} |
| 325 |
| 326 private: |
| 327 // PersonalDataManagerAndroid::SubKeyRequestDelegate: |
| 328 void OnRulesSuccessfullyLoaded() override { |
| 329 if (personal_data_manager_android_) { |
| 330 JNIEnv* env = base::android::AttachCurrentThread(); |
| 331 Java_GetSubKeysRequestDelegate_onSubKeysReceived( |
| 332 env, jdelegate_, |
| 333 personal_data_manager_android_->GetSubKeys(env, region_code_)); |
| 334 } |
| 335 } |
| 336 |
| 337 ScopedJavaGlobalRef<jobject> jdelegate_; |
| 338 std::string region_code_; |
| 339 base::WeakPtr<PersonalDataManagerAndroid> personal_data_manager_android_; |
| 340 |
| 341 DISALLOW_COPY_AND_ASSIGN(AndroidSubKeyRequesterDelegate); |
| 342 }; |
| 343 |
| 309 } // namespace | 344 } // namespace |
| 310 | 345 |
| 311 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) | 346 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) |
| 312 : weak_java_obj_(env, obj), | 347 : weak_java_obj_(env, obj), |
| 313 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( | 348 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( |
| 314 ProfileManager::GetActiveUserProfile())), | 349 ProfileManager::GetActiveUserProfile())), |
| 315 address_normalizer_( | 350 address_normalizer_( |
| 316 std::unique_ptr<::i18n::addressinput::Source>( | 351 std::unique_ptr<::i18n::addressinput::Source>( |
| 317 new autofill::ChromeMetadataSource( | 352 new autofill::ChromeMetadataSource( |
| 318 I18N_ADDRESS_VALIDATION_DATA_URL, | 353 I18N_ADDRESS_VALIDATION_DATA_URL, |
| 319 personal_data_manager_->GetURLRequestContextGetter())), | 354 personal_data_manager_->GetURLRequestContextGetter())), |
| 320 ValidationRulesStorageFactory::CreateStorage()) { | 355 ValidationRulesStorageFactory::CreateStorage()), |
| 356 address_validator_( |
| 357 base::MakeUnique<autofill::ChromeMetadataSource>( |
| 358 I18N_ADDRESS_VALIDATION_DATA_URL, |
| 359 personal_data_manager_->GetURLRequestContextGetter()), |
| 360 ValidationRulesStorageFactory::CreateStorage(), |
| 361 this) { |
| 321 personal_data_manager_->AddObserver(this); | 362 personal_data_manager_->AddObserver(this); |
| 322 } | 363 } |
| 323 | 364 |
| 324 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { | 365 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { |
| 325 personal_data_manager_->RemoveObserver(this); | 366 personal_data_manager_->RemoveObserver(this); |
| 326 } | 367 } |
| 327 | 368 |
| 328 jboolean PersonalDataManagerAndroid::IsDataLoaded( | 369 jboolean PersonalDataManagerAndroid::IsDataLoaded( |
| 329 JNIEnv* env, | 370 JNIEnv* env, |
| 330 const base::android::JavaParamRef<jobject>& unused_obj) const { | 371 const base::android::JavaParamRef<jobject>& unused_obj) const { |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 692 return card->use_date().ToTimeT(); | 733 return card->use_date().ToTimeT(); |
| 693 } | 734 } |
| 694 | 735 |
| 695 // TODO(crbug.com/629507): Use a mock clock for testing. | 736 // TODO(crbug.com/629507): Use a mock clock for testing. |
| 696 jlong PersonalDataManagerAndroid::GetCurrentDateForTesting( | 737 jlong PersonalDataManagerAndroid::GetCurrentDateForTesting( |
| 697 JNIEnv* env, | 738 JNIEnv* env, |
| 698 const base::android::JavaParamRef<jobject>& unused_obj) { | 739 const base::android::JavaParamRef<jobject>& unused_obj) { |
| 699 return base::Time::Now().ToTimeT(); | 740 return base::Time::Now().ToTimeT(); |
| 700 } | 741 } |
| 701 | 742 |
| 702 void PersonalDataManagerAndroid::LoadRulesForRegion( | 743 void PersonalDataManagerAndroid::LoadRulesForAddressNormalization( |
| 703 JNIEnv* env, | 744 JNIEnv* env, |
| 704 const base::android::JavaParamRef<jobject>& unused_obj, | 745 const base::android::JavaParamRef<jobject>& unused_obj, |
| 705 const base::android::JavaParamRef<jstring>& jregion_code) { | 746 const base::android::JavaParamRef<jstring>& jregion_code) { |
| 706 address_normalizer_.LoadRulesForRegion( | 747 address_normalizer_.LoadRulesForRegion( |
| 707 ConvertJavaStringToUTF8(env, jregion_code)); | 748 ConvertJavaStringToUTF8(env, jregion_code)); |
| 708 } | 749 } |
| 709 | 750 |
| 751 void PersonalDataManagerAndroid::LoadRulesForSubKeys( |
| 752 JNIEnv* env, |
| 753 const base::android::JavaParamRef<jobject>& unused_obj, |
| 754 const base::android::JavaParamRef<jstring>& jregion_code) { |
| 755 address_validator_.LoadRules(ConvertJavaStringToUTF8(env, jregion_code)); |
| 756 } |
| 757 |
| 710 void PersonalDataManagerAndroid::StartAddressNormalization( | 758 void PersonalDataManagerAndroid::StartAddressNormalization( |
| 711 JNIEnv* env, | 759 JNIEnv* env, |
| 712 const JavaParamRef<jobject>& unused_obj, | 760 const JavaParamRef<jobject>& unused_obj, |
| 713 const JavaParamRef<jobject>& jprofile, | 761 const JavaParamRef<jobject>& jprofile, |
| 714 const JavaParamRef<jstring>& jregion_code, | 762 const JavaParamRef<jstring>& jregion_code, |
| 715 jint jtimeout_seconds, | 763 jint jtimeout_seconds, |
| 716 const JavaParamRef<jobject>& jdelegate) { | 764 const JavaParamRef<jobject>& jdelegate) { |
| 717 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); | 765 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); |
| 718 | 766 |
| 719 AutofillProfile profile; | 767 AutofillProfile profile; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 733 const base::android::JavaParamRef<jobject>& unused_obj) { | 781 const base::android::JavaParamRef<jobject>& unused_obj) { |
| 734 return !personal_data_manager_->GetProfiles().empty(); | 782 return !personal_data_manager_->GetProfiles().empty(); |
| 735 } | 783 } |
| 736 | 784 |
| 737 jboolean PersonalDataManagerAndroid::HasCreditCards( | 785 jboolean PersonalDataManagerAndroid::HasCreditCards( |
| 738 JNIEnv* env, | 786 JNIEnv* env, |
| 739 const base::android::JavaParamRef<jobject>& unused_obj) { | 787 const base::android::JavaParamRef<jobject>& unused_obj) { |
| 740 return !personal_data_manager_->GetCreditCards().empty(); | 788 return !personal_data_manager_->GetCreditCards().empty(); |
| 741 } | 789 } |
| 742 | 790 |
| 791 base::android::ScopedJavaLocalRef<jobjectArray> |
| 792 PersonalDataManagerAndroid::GetSubKeys(JNIEnv* env, |
| 793 const std::string& region_code) { |
| 794 std::vector<std::string> sub_keys = |
| 795 address_validator_.GetRegionSubKeys(region_code); |
| 796 return base::android::ToJavaArrayOfStrings(env, sub_keys); |
| 797 } |
| 798 |
| 799 void PersonalDataManagerAndroid::OnAddressValidationRulesLoaded( |
| 800 const std::string& region_code, |
| 801 bool success) { |
| 802 // if |success| == false, AddressValidator::GetRegionSubKeys will return an |
| 803 // empty list of sub-keys. => No need to check for |success|. |
| 804 // Check if there is any sub-key request for that region code. |
| 805 if (!pending_subkey_region_code_.compare(region_code)) |
| 806 pending_subkey_request_->OnRulesSuccessfullyLoaded(); |
| 807 pending_subkey_region_code_.clear(); |
| 808 pending_subkey_request_.reset(); |
| 809 } |
| 810 |
| 811 void PersonalDataManagerAndroid::StartRegionSubKeysRequest( |
| 812 JNIEnv* env, |
| 813 const JavaParamRef<jobject>& unused_obj, |
| 814 const JavaParamRef<jstring>& jregion_code, |
| 815 const JavaParamRef<jobject>& jdelegate) { |
| 816 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); |
| 817 std::unique_ptr<SubKeyRequestDelegate> requester = |
| 818 base::MakeUnique<AndroidSubKeyRequesterDelegate>( |
| 819 env, jdelegate, region_code, AsWeakPtr()); |
| 820 |
| 821 if (AreRulesLoadedForRegion(region_code)) { |
| 822 requester->OnRulesSuccessfullyLoaded(); |
| 823 } else { |
| 824 // Setup the variables so that the sub-keys request is sent, when the rules |
| 825 // are loaded. |
| 826 pending_subkey_region_code_ = region_code; |
| 827 pending_subkey_request_ = std::move(requester); |
| 828 } |
| 829 } |
| 830 |
| 831 void PersonalDataManagerAndroid::CancelPendingGetSubKeys( |
| 832 JNIEnv* env, |
| 833 const base::android::JavaParamRef<jobject>& unused_obj) { |
| 834 pending_subkey_region_code_.clear(); |
| 835 pending_subkey_request_.reset(); |
| 836 } |
| 837 |
| 743 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( | 838 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( |
| 744 JNIEnv* env, | 839 JNIEnv* env, |
| 745 const std::vector<AutofillProfile*>& profiles) { | 840 const std::vector<AutofillProfile*>& profiles) { |
| 746 std::vector<base::string16> guids; | 841 std::vector<base::string16> guids; |
| 747 for (AutofillProfile* profile : profiles) | 842 for (AutofillProfile* profile : profiles) |
| 748 guids.push_back(base::UTF8ToUTF16(profile->guid())); | 843 guids.push_back(base::UTF8ToUTF16(profile->guid())); |
| 749 | 844 |
| 750 return base::android::ToJavaArrayOfStrings(env, guids); | 845 return base::android::ToJavaArrayOfStrings(env, guids); |
| 751 } | 846 } |
| 752 | 847 |
| 753 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs( | 848 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs( |
| 754 JNIEnv* env, | 849 JNIEnv* env, |
| 755 const std::vector<CreditCard*>& credit_cards) { | 850 const std::vector<CreditCard*>& credit_cards) { |
| 756 std::vector<base::string16> guids; | 851 std::vector<base::string16> guids; |
| 757 for (CreditCard* credit_card : credit_cards) | 852 for (CreditCard* credit_card : credit_cards) |
| 758 guids.push_back(base::UTF8ToUTF16(credit_card->guid())); | 853 guids.push_back(base::UTF8ToUTF16(credit_card->guid())); |
| 759 | 854 |
| 760 return base::android::ToJavaArrayOfStrings(env, guids); | 855 return base::android::ToJavaArrayOfStrings(env, guids); |
| 761 } | 856 } |
| 762 | 857 |
| 763 bool PersonalDataManagerAndroid::AreRulesLoadedForRegion( | 858 bool PersonalDataManagerAndroid::AreRulesLoadedForRegion( |
| 764 const std::string& region_code) { | 859 const std::string& region_code) { |
| 765 return address_normalizer_.AreRulesLoadedForRegion(region_code); | 860 return address_validator_.AreRulesLoadedForRegion(region_code); |
| 766 } | 861 } |
| 767 | 862 |
| 768 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( | 863 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( |
| 769 JNIEnv* env, | 864 JNIEnv* env, |
| 770 bool address_only, | 865 bool address_only, |
| 771 bool include_name_in_label, | 866 bool include_name_in_label, |
| 772 bool include_organization_in_label, | 867 bool include_organization_in_label, |
| 773 bool include_country_in_label, | 868 bool include_country_in_label, |
| 774 std::vector<AutofillProfile*> profiles) { | 869 std::vector<AutofillProfile*> profiles) { |
| 775 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields; | 870 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields; |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 875 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); | 970 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); |
| 876 } | 971 } |
| 877 | 972 |
| 878 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 973 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 879 PersonalDataManagerAndroid* personal_data_manager_android = | 974 PersonalDataManagerAndroid* personal_data_manager_android = |
| 880 new PersonalDataManagerAndroid(env, obj); | 975 new PersonalDataManagerAndroid(env, obj); |
| 881 return reinterpret_cast<intptr_t>(personal_data_manager_android); | 976 return reinterpret_cast<intptr_t>(personal_data_manager_android); |
| 882 } | 977 } |
| 883 | 978 |
| 884 } // namespace autofill | 979 } // namespace autofill |
| OLD | NEW |