Chromium Code Reviews| 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> |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 298 } | 298 } |
| 299 | 299 |
| 300 private: | 300 private: |
| 301 ~AndroidAddressNormalizerDelegate() override {} | 301 ~AndroidAddressNormalizerDelegate() override {} |
| 302 | 302 |
| 303 ScopedJavaGlobalRef<jobject> jdelegate_; | 303 ScopedJavaGlobalRef<jobject> jdelegate_; |
| 304 | 304 |
| 305 DISALLOW_COPY_AND_ASSIGN(AndroidAddressNormalizerDelegate); | 305 DISALLOW_COPY_AND_ASSIGN(AndroidAddressNormalizerDelegate); |
| 306 }; | 306 }; |
| 307 | 307 |
| 308 class GetSubKeysRequester : public PersonalDataManagerAndroid::Delegate, | |
| 309 public base::SupportsWeakPtr<GetSubKeysRequester> { | |
| 310 public: | |
| 311 GetSubKeysRequester( | |
| 312 JNIEnv* env, | |
| 313 const base::android::JavaParamRef<jobject>& jdelegate, | |
| 314 const std::string& region_code, | |
| 315 base::WeakPtr<PersonalDataManagerAndroid> personal_data_manager_android) { | |
| 316 jdelegate_.Reset(env, jdelegate); | |
| 317 region_code_ = region_code; | |
| 318 personal_data_manager_android_ = personal_data_manager_android; | |
| 319 env_ = env; | |
| 320 } | |
| 321 | |
| 322 private: | |
| 323 ~GetSubKeysRequester() override {} | |
| 324 | |
| 325 void OnRulesSuccessfullyLoaded() override { | |
| 326 if (personal_data_manager_android_) { | |
| 327 JNIEnv* env = base::android::AttachCurrentThread(); | |
| 328 Java_GetSubKeysRequestDelegate_onSubKeysReceived( | |
| 329 env, jdelegate_, | |
| 330 personal_data_manager_android_->GetSubKeys(env, region_code_)); | |
| 331 } | |
| 332 } | |
| 333 | |
| 334 ScopedJavaGlobalRef<jobject> jdelegate_; | |
| 335 std::string region_code_; | |
| 336 base::WeakPtr<PersonalDataManagerAndroid> personal_data_manager_android_; | |
| 337 JNIEnv* env_; | |
| 338 | |
| 339 DISALLOW_COPY_AND_ASSIGN(GetSubKeysRequester); | |
| 340 }; | |
| 341 | |
| 308 } // namespace | 342 } // namespace |
| 309 | 343 |
| 310 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) | 344 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) |
| 311 : weak_java_obj_(env, obj), | 345 : weak_java_obj_(env, obj), |
| 312 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( | 346 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( |
| 313 ProfileManager::GetActiveUserProfile())), | 347 ProfileManager::GetActiveUserProfile())), |
| 314 address_normalizer_( | 348 address_normalizer_( |
| 315 std::unique_ptr<::i18n::addressinput::Source>( | 349 std::unique_ptr<::i18n::addressinput::Source>( |
| 316 new autofill::ChromeMetadataSource( | 350 new autofill::ChromeMetadataSource( |
| 317 I18N_ADDRESS_VALIDATION_DATA_URL, | 351 I18N_ADDRESS_VALIDATION_DATA_URL, |
| 318 personal_data_manager_->GetURLRequestContextGetter())), | 352 personal_data_manager_->GetURLRequestContextGetter())), |
| 319 ValidationRulesStorageFactory::CreateStorage()) { | 353 ValidationRulesStorageFactory::CreateStorage()), |
| 354 address_validator_( | |
| 355 std::unique_ptr<::i18n::addressinput::Source>( | |
| 356 new autofill::ChromeMetadataSource( | |
| 357 I18N_ADDRESS_VALIDATION_DATA_URL, | |
|
sebsg
2017/03/21 15:29:52
Can you open a bug and put a TODO here to re-use t
Parastoo
2017/03/21 20:05:51
Acknowledged.
| |
| 358 personal_data_manager_->GetURLRequestContextGetter())), | |
| 359 ValidationRulesStorageFactory::CreateStorage(), | |
| 360 this) { | |
| 320 personal_data_manager_->AddObserver(this); | 361 personal_data_manager_->AddObserver(this); |
| 321 } | 362 } |
| 322 | 363 |
| 323 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { | 364 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { |
| 324 personal_data_manager_->RemoveObserver(this); | 365 personal_data_manager_->RemoveObserver(this); |
| 325 } | 366 } |
| 326 | 367 |
| 327 jboolean PersonalDataManagerAndroid::IsDataLoaded( | 368 jboolean PersonalDataManagerAndroid::IsDataLoaded( |
| 328 JNIEnv* env, | 369 JNIEnv* env, |
| 329 const base::android::JavaParamRef<jobject>& unused_obj) const { | 370 const base::android::JavaParamRef<jobject>& unused_obj) const { |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 690 return card->use_date().ToTimeT(); | 731 return card->use_date().ToTimeT(); |
| 691 } | 732 } |
| 692 | 733 |
| 693 // TODO(crbug.com/629507): Use a mock clock for testing. | 734 // TODO(crbug.com/629507): Use a mock clock for testing. |
| 694 jlong PersonalDataManagerAndroid::GetCurrentDateForTesting( | 735 jlong PersonalDataManagerAndroid::GetCurrentDateForTesting( |
| 695 JNIEnv* env, | 736 JNIEnv* env, |
| 696 const base::android::JavaParamRef<jobject>& unused_obj) { | 737 const base::android::JavaParamRef<jobject>& unused_obj) { |
| 697 return base::Time::Now().ToTimeT(); | 738 return base::Time::Now().ToTimeT(); |
| 698 } | 739 } |
| 699 | 740 |
| 700 void PersonalDataManagerAndroid::LoadRulesForRegion( | 741 void PersonalDataManagerAndroid::LoadRulesForAddressNormalization( |
| 701 JNIEnv* env, | 742 JNIEnv* env, |
| 702 const base::android::JavaParamRef<jobject>& unused_obj, | 743 const base::android::JavaParamRef<jobject>& unused_obj, |
| 703 const base::android::JavaParamRef<jstring>& jregion_code) { | 744 const base::android::JavaParamRef<jstring>& jregion_code) { |
| 704 address_normalizer_.LoadRulesForRegion( | 745 address_normalizer_.LoadRulesForRegion( |
| 705 ConvertJavaStringToUTF8(env, jregion_code)); | 746 ConvertJavaStringToUTF8(env, jregion_code)); |
| 706 } | 747 } |
| 707 | 748 |
| 749 void PersonalDataManagerAndroid::LoadRulesForSubKeys( | |
| 750 JNIEnv* env, | |
| 751 const base::android::JavaParamRef<jobject>& unused_obj, | |
| 752 const base::android::JavaParamRef<jstring>& jregion_code) { | |
| 753 address_validator_.LoadRules(ConvertJavaStringToUTF8(env, jregion_code)); | |
| 754 } | |
| 755 | |
| 708 void PersonalDataManagerAndroid::StartAddressNormalization( | 756 void PersonalDataManagerAndroid::StartAddressNormalization( |
| 709 JNIEnv* env, | 757 JNIEnv* env, |
| 710 const JavaParamRef<jobject>& unused_obj, | 758 const JavaParamRef<jobject>& unused_obj, |
| 711 const JavaParamRef<jobject>& jprofile, | 759 const JavaParamRef<jobject>& jprofile, |
| 712 const JavaParamRef<jstring>& jregion_code, | 760 const JavaParamRef<jstring>& jregion_code, |
| 713 jint jtimeout_seconds, | 761 jint jtimeout_seconds, |
| 714 const JavaParamRef<jobject>& jdelegate) { | 762 const JavaParamRef<jobject>& jdelegate) { |
| 715 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); | 763 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); |
| 716 | 764 |
| 717 AutofillProfile profile; | 765 AutofillProfile profile; |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 731 const base::android::JavaParamRef<jobject>& unused_obj) { | 779 const base::android::JavaParamRef<jobject>& unused_obj) { |
| 732 return !personal_data_manager_->GetProfiles().empty(); | 780 return !personal_data_manager_->GetProfiles().empty(); |
| 733 } | 781 } |
| 734 | 782 |
| 735 jboolean PersonalDataManagerAndroid::HasCreditCards( | 783 jboolean PersonalDataManagerAndroid::HasCreditCards( |
| 736 JNIEnv* env, | 784 JNIEnv* env, |
| 737 const base::android::JavaParamRef<jobject>& unused_obj) { | 785 const base::android::JavaParamRef<jobject>& unused_obj) { |
| 738 return !personal_data_manager_->GetCreditCards().empty(); | 786 return !personal_data_manager_->GetCreditCards().empty(); |
| 739 } | 787 } |
| 740 | 788 |
| 789 base::android::ScopedJavaLocalRef<jobjectArray> | |
| 790 PersonalDataManagerAndroid::GetSubKeys(JNIEnv* env, | |
| 791 const std::string& region_code) { | |
| 792 std::vector<std::string> sub_keys = | |
| 793 address_validator_.GetRegionSubKeys(region_code); | |
| 794 return base::android::ToJavaArrayOfStrings(env, sub_keys); | |
| 795 } | |
| 796 | |
| 797 void PersonalDataManagerAndroid::OnAddressRulesLoaded( | |
| 798 const std::string& region_code, | |
| 799 bool success) { | |
| 800 // Check if there is any sub-key request. | |
|
sebsg
2017/03/21 15:29:51
please add "for that region code" to the comment.
Parastoo
2017/03/21 20:05:51
Done.
| |
| 801 if (!pending_subkey_region_code_.compare(region_code)) | |
| 802 pending_subkey_request_->OnRulesSuccessfullyLoaded(); | |
| 803 pending_subkey_region_code_ = ""; | |
|
sebsg
2017/03/21 15:29:51
You should probably delete the delegate too.
Parastoo
2017/03/21 20:05:51
Done.
| |
| 804 } | |
| 805 | |
| 806 void PersonalDataManagerAndroid::StartGettingRegionSubKeys( | |
| 807 JNIEnv* env, | |
| 808 const JavaParamRef<jobject>& unused_obj, | |
| 809 const JavaParamRef<jstring>& jregion_code, | |
| 810 const JavaParamRef<jobject>& jdelegate) { | |
| 811 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); | |
| 812 std::unique_ptr<Delegate> requester( | |
| 813 new GetSubKeysRequester(env, jdelegate, region_code, AsWeakPtr())); | |
| 814 | |
| 815 if (AreRulesLoadedForRegion(region_code)) { | |
| 816 requester->OnRulesSuccessfullyLoaded(); | |
| 817 } else { | |
| 818 // Setup the variables so that the sub-keys request is sent, when the rules | |
| 819 // are loaded. | |
| 820 pending_subkey_region_code_ = region_code; | |
| 821 pending_subkey_request_ = std::move(requester); | |
| 822 } | |
| 823 } | |
| 824 | |
| 825 void PersonalDataManagerAndroid::CancelPendingGetSubKeys( | |
| 826 JNIEnv* env, | |
| 827 const base::android::JavaParamRef<jobject>& unused_obj) { | |
| 828 pending_subkey_region_code_ = ""; | |
| 829 } | |
| 830 | |
| 741 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( | 831 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( |
| 742 JNIEnv* env, | 832 JNIEnv* env, |
| 743 const std::vector<AutofillProfile*>& profiles) { | 833 const std::vector<AutofillProfile*>& profiles) { |
| 744 std::vector<base::string16> guids; | 834 std::vector<base::string16> guids; |
| 745 for (AutofillProfile* profile : profiles) | 835 for (AutofillProfile* profile : profiles) |
| 746 guids.push_back(base::UTF8ToUTF16(profile->guid())); | 836 guids.push_back(base::UTF8ToUTF16(profile->guid())); |
| 747 | 837 |
| 748 return base::android::ToJavaArrayOfStrings(env, guids); | 838 return base::android::ToJavaArrayOfStrings(env, guids); |
| 749 } | 839 } |
| 750 | 840 |
| 751 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs( | 841 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs( |
| 752 JNIEnv* env, | 842 JNIEnv* env, |
| 753 const std::vector<CreditCard*>& credit_cards) { | 843 const std::vector<CreditCard*>& credit_cards) { |
| 754 std::vector<base::string16> guids; | 844 std::vector<base::string16> guids; |
| 755 for (CreditCard* credit_card : credit_cards) | 845 for (CreditCard* credit_card : credit_cards) |
| 756 guids.push_back(base::UTF8ToUTF16(credit_card->guid())); | 846 guids.push_back(base::UTF8ToUTF16(credit_card->guid())); |
| 757 | 847 |
| 758 return base::android::ToJavaArrayOfStrings(env, guids); | 848 return base::android::ToJavaArrayOfStrings(env, guids); |
| 759 } | 849 } |
| 760 | 850 |
| 761 bool PersonalDataManagerAndroid::AreRulesLoadedForRegion( | 851 bool PersonalDataManagerAndroid::AreRulesLoadedForRegion( |
| 762 const std::string& region_code) { | 852 const std::string& region_code) { |
| 763 return address_normalizer_.AreRulesLoadedForRegion(region_code); | 853 return address_validator_.AreRulesLoadedForRegion(region_code); |
| 764 } | 854 } |
| 765 | 855 |
| 766 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( | 856 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( |
| 767 JNIEnv* env, | 857 JNIEnv* env, |
| 768 bool address_only, | 858 bool address_only, |
| 769 bool include_name_in_label, | 859 bool include_name_in_label, |
| 770 bool include_organization_in_label, | 860 bool include_organization_in_label, |
| 771 bool include_country_in_label, | 861 bool include_country_in_label, |
| 772 std::vector<AutofillProfile*> profiles) { | 862 std::vector<AutofillProfile*> profiles) { |
| 773 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields; | 863 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields; |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 873 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); | 963 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); |
| 874 } | 964 } |
| 875 | 965 |
| 876 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 966 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 877 PersonalDataManagerAndroid* personal_data_manager_android = | 967 PersonalDataManagerAndroid* personal_data_manager_android = |
| 878 new PersonalDataManagerAndroid(env, obj); | 968 new PersonalDataManagerAndroid(env, obj); |
| 879 return reinterpret_cast<intptr_t>(personal_data_manager_android); | 969 return reinterpret_cast<intptr_t>(personal_data_manager_android); |
| 880 } | 970 } |
| 881 | 971 |
| 882 } // namespace autofill | 972 } // namespace autofill |
| OLD | NEW |