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