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 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
300 } | 300 } |
301 | 301 |
302 private: | 302 private: |
303 ~AndroidAddressNormalizerDelegate() override {} | 303 ~AndroidAddressNormalizerDelegate() override {} |
304 | 304 |
305 ScopedJavaGlobalRef<jobject> jdelegate_; | 305 ScopedJavaGlobalRef<jobject> jdelegate_; |
306 | 306 |
307 DISALLOW_COPY_AND_ASSIGN(AndroidAddressNormalizerDelegate); | 307 DISALLOW_COPY_AND_ASSIGN(AndroidAddressNormalizerDelegate); |
308 }; | 308 }; |
309 | 309 |
310 class AndroidSubKeyRequesterDelegate | 310 class AndroidSubKeyReceiver { |
David Trainor- moved to gerrit
2017/05/23 21:03:59
Don't even need this now :). Remove the class and
Parastoo
2017/05/24 14:57:20
Then we would need to have the definition of the n
Parastoo
2017/05/24 14:59:15
Correcting a typo: we should NOT deal with the Sco
David Trainor- moved to gerrit
2017/05/24 15:29:37
Look at "Partial Binding Of Parameters" at https:/
Parastoo
2017/05/24 18:53:57
Cool! Thank you.
Done.
| |
311 : public PersonalDataManagerAndroid::SubKeyRequestDelegate, | |
312 public base::SupportsWeakPtr<AndroidSubKeyRequesterDelegate> { | |
313 public: | 311 public: |
314 AndroidSubKeyRequesterDelegate( | 312 AndroidSubKeyReceiver(JNIEnv* env, |
315 JNIEnv* env, | 313 const base::android::JavaParamRef<jobject>& jdelegate) { |
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); | 314 jdelegate_.Reset(env, jdelegate); |
320 region_code_ = region_code; | |
321 personal_data_manager_android_ = personal_data_manager_android; | |
322 } | 315 } |
323 | 316 |
324 ~AndroidSubKeyRequesterDelegate() override {} | 317 void OnSubKeysReceived(std::vector<std::string> sub_keys) { |
318 JNIEnv* env = base::android::AttachCurrentThread(); | |
319 Java_GetSubKeysRequestDelegate_onSubKeysReceived( | |
320 env, jdelegate_, base::android::ToJavaArrayOfStrings(env, sub_keys)); | |
321 } | |
325 | 322 |
326 private: | 323 private: |
327 // PersonalDataManagerAndroid::SubKeyRequestDelegate: | 324 ScopedJavaGlobalRef<jobject> jdelegate_; |
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 | 325 |
337 ScopedJavaGlobalRef<jobject> jdelegate_; | 326 DISALLOW_COPY_AND_ASSIGN(AndroidSubKeyReceiver); |
338 std::string region_code_; | |
339 base::WeakPtr<PersonalDataManagerAndroid> personal_data_manager_android_; | |
340 | |
341 DISALLOW_COPY_AND_ASSIGN(AndroidSubKeyRequesterDelegate); | |
342 }; | 327 }; |
343 | 328 |
344 } // namespace | 329 } // namespace |
345 | 330 |
346 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) | 331 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) |
347 : weak_java_obj_(env, obj), | 332 : weak_java_obj_(env, obj), |
348 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( | 333 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( |
349 ProfileManager::GetActiveUserProfile())), | 334 ProfileManager::GetActiveUserProfile())), |
350 address_normalizer_( | 335 address_normalizer_( |
351 std::unique_ptr<::i18n::addressinput::Source>( | 336 std::unique_ptr<::i18n::addressinput::Source>( |
352 new autofill::ChromeMetadataSource( | 337 new autofill::ChromeMetadataSource( |
353 I18N_ADDRESS_VALIDATION_DATA_URL, | 338 I18N_ADDRESS_VALIDATION_DATA_URL, |
354 personal_data_manager_->GetURLRequestContextGetter())), | 339 personal_data_manager_->GetURLRequestContextGetter())), |
355 ValidationRulesStorageFactory::CreateStorage()), | 340 ValidationRulesStorageFactory::CreateStorage()), |
356 address_validator_( | 341 subkey_requester_( |
357 base::MakeUnique<autofill::ChromeMetadataSource>( | 342 base::MakeUnique<autofill::ChromeMetadataSource>( |
358 I18N_ADDRESS_VALIDATION_DATA_URL, | 343 I18N_ADDRESS_VALIDATION_DATA_URL, |
359 personal_data_manager_->GetURLRequestContextGetter()), | 344 personal_data_manager_->GetURLRequestContextGetter()), |
360 ValidationRulesStorageFactory::CreateStorage(), | 345 ValidationRulesStorageFactory::CreateStorage()) { |
361 this) { | |
362 personal_data_manager_->AddObserver(this); | 346 personal_data_manager_->AddObserver(this); |
363 } | 347 } |
364 | 348 |
365 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { | 349 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { |
366 personal_data_manager_->RemoveObserver(this); | 350 personal_data_manager_->RemoveObserver(this); |
367 } | 351 } |
368 | 352 |
369 jboolean PersonalDataManagerAndroid::IsDataLoaded( | 353 jboolean PersonalDataManagerAndroid::IsDataLoaded( |
370 JNIEnv* env, | 354 JNIEnv* env, |
371 const base::android::JavaParamRef<jobject>& unused_obj) const { | 355 const base::android::JavaParamRef<jobject>& unused_obj) const { |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
745 const base::android::JavaParamRef<jobject>& unused_obj, | 729 const base::android::JavaParamRef<jobject>& unused_obj, |
746 const base::android::JavaParamRef<jstring>& jregion_code) { | 730 const base::android::JavaParamRef<jstring>& jregion_code) { |
747 address_normalizer_.LoadRulesForRegion( | 731 address_normalizer_.LoadRulesForRegion( |
748 ConvertJavaStringToUTF8(env, jregion_code)); | 732 ConvertJavaStringToUTF8(env, jregion_code)); |
749 } | 733 } |
750 | 734 |
751 void PersonalDataManagerAndroid::LoadRulesForSubKeys( | 735 void PersonalDataManagerAndroid::LoadRulesForSubKeys( |
752 JNIEnv* env, | 736 JNIEnv* env, |
753 const base::android::JavaParamRef<jobject>& unused_obj, | 737 const base::android::JavaParamRef<jobject>& unused_obj, |
754 const base::android::JavaParamRef<jstring>& jregion_code) { | 738 const base::android::JavaParamRef<jstring>& jregion_code) { |
755 address_validator_.LoadRules(ConvertJavaStringToUTF8(env, jregion_code)); | 739 subkey_requester_.LoadRulesForRegion( |
740 ConvertJavaStringToUTF8(env, jregion_code)); | |
756 } | 741 } |
757 | 742 |
758 void PersonalDataManagerAndroid::StartAddressNormalization( | 743 void PersonalDataManagerAndroid::StartAddressNormalization( |
759 JNIEnv* env, | 744 JNIEnv* env, |
760 const JavaParamRef<jobject>& unused_obj, | 745 const JavaParamRef<jobject>& unused_obj, |
761 const JavaParamRef<jobject>& jprofile, | 746 const JavaParamRef<jobject>& jprofile, |
762 const JavaParamRef<jstring>& jregion_code, | 747 const JavaParamRef<jstring>& jregion_code, |
763 jint jtimeout_seconds, | 748 jint jtimeout_seconds, |
764 const JavaParamRef<jobject>& jdelegate) { | 749 const JavaParamRef<jobject>& jdelegate) { |
765 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); | 750 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); |
(...skipping 15 matching lines...) Expand all Loading... | |
781 const base::android::JavaParamRef<jobject>& unused_obj) { | 766 const base::android::JavaParamRef<jobject>& unused_obj) { |
782 return !personal_data_manager_->GetProfiles().empty(); | 767 return !personal_data_manager_->GetProfiles().empty(); |
783 } | 768 } |
784 | 769 |
785 jboolean PersonalDataManagerAndroid::HasCreditCards( | 770 jboolean PersonalDataManagerAndroid::HasCreditCards( |
786 JNIEnv* env, | 771 JNIEnv* env, |
787 const base::android::JavaParamRef<jobject>& unused_obj) { | 772 const base::android::JavaParamRef<jobject>& unused_obj) { |
788 return !personal_data_manager_->GetCreditCards().empty(); | 773 return !personal_data_manager_->GetCreditCards().empty(); |
789 } | 774 } |
790 | 775 |
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( | 776 void PersonalDataManagerAndroid::StartRegionSubKeysRequest( |
812 JNIEnv* env, | 777 JNIEnv* env, |
813 const JavaParamRef<jobject>& unused_obj, | 778 const JavaParamRef<jobject>& unused_obj, |
814 const JavaParamRef<jstring>& jregion_code, | 779 const JavaParamRef<jstring>& jregion_code, |
780 jint jtimeout_seconds, | |
815 const JavaParamRef<jobject>& jdelegate) { | 781 const JavaParamRef<jobject>& jdelegate) { |
816 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); | 782 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 | 783 |
821 if (AreRulesLoadedForRegion(region_code)) { | 784 std::unique_ptr<AndroidSubKeyReceiver> android_subkey_receiver_( |
822 requester->OnRulesSuccessfullyLoaded(); | 785 base::MakeUnique<AndroidSubKeyReceiver>(env, jdelegate)); |
823 } else { | 786 |
824 // Setup the variables so that the sub-keys request is sent, when the rules | 787 base::OnceCallback<void(std::vector<std::string>)> cb = |
825 // are loaded. | 788 base::BindOnce(&AndroidSubKeyReceiver::OnSubKeysReceived, |
826 pending_subkey_region_code_ = region_code; | 789 std::move(android_subkey_receiver_)); |
827 pending_subkey_request_ = std::move(requester); | 790 |
828 } | 791 subkey_requester_.StartRegionSubKeysRequest(region_code, jtimeout_seconds, |
792 std::move(cb)); | |
829 } | 793 } |
830 | 794 |
831 void PersonalDataManagerAndroid::CancelPendingGetSubKeys( | 795 void PersonalDataManagerAndroid::CancelPendingGetSubKeys( |
832 JNIEnv* env, | 796 JNIEnv* env, |
833 const base::android::JavaParamRef<jobject>& unused_obj) { | 797 const base::android::JavaParamRef<jobject>& unused_obj) { |
834 pending_subkey_region_code_.clear(); | 798 subkey_requester_.CancelPendingGetSubKeys(); |
835 pending_subkey_request_.reset(); | |
836 } | 799 } |
837 | 800 |
838 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( | 801 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( |
839 JNIEnv* env, | 802 JNIEnv* env, |
840 const std::vector<AutofillProfile*>& profiles) { | 803 const std::vector<AutofillProfile*>& profiles) { |
841 std::vector<base::string16> guids; | 804 std::vector<base::string16> guids; |
842 for (AutofillProfile* profile : profiles) | 805 for (AutofillProfile* profile : profiles) |
843 guids.push_back(base::UTF8ToUTF16(profile->guid())); | 806 guids.push_back(base::UTF8ToUTF16(profile->guid())); |
844 | 807 |
845 return base::android::ToJavaArrayOfStrings(env, guids); | 808 return base::android::ToJavaArrayOfStrings(env, guids); |
846 } | 809 } |
847 | 810 |
848 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs( | 811 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs( |
849 JNIEnv* env, | 812 JNIEnv* env, |
850 const std::vector<CreditCard*>& credit_cards) { | 813 const std::vector<CreditCard*>& credit_cards) { |
851 std::vector<base::string16> guids; | 814 std::vector<base::string16> guids; |
852 for (CreditCard* credit_card : credit_cards) | 815 for (CreditCard* credit_card : credit_cards) |
853 guids.push_back(base::UTF8ToUTF16(credit_card->guid())); | 816 guids.push_back(base::UTF8ToUTF16(credit_card->guid())); |
854 | 817 |
855 return base::android::ToJavaArrayOfStrings(env, guids); | 818 return base::android::ToJavaArrayOfStrings(env, guids); |
856 } | 819 } |
857 | 820 |
858 bool PersonalDataManagerAndroid::AreRulesLoadedForRegion( | |
859 const std::string& region_code) { | |
860 return address_validator_.AreRulesLoadedForRegion(region_code); | |
861 } | |
862 | |
863 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( | 821 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( |
864 JNIEnv* env, | 822 JNIEnv* env, |
865 bool address_only, | 823 bool address_only, |
866 bool include_name_in_label, | 824 bool include_name_in_label, |
867 bool include_organization_in_label, | 825 bool include_organization_in_label, |
868 bool include_country_in_label, | 826 bool include_country_in_label, |
869 std::vector<AutofillProfile*> profiles) { | 827 std::vector<AutofillProfile*> profiles) { |
870 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields; | 828 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields; |
871 size_t minimal_fields_shown = 2; | 829 size_t minimal_fields_shown = 2; |
872 if (address_only) { | 830 if (address_only) { |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
970 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); | 928 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); |
971 } | 929 } |
972 | 930 |
973 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 931 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
974 PersonalDataManagerAndroid* personal_data_manager_android = | 932 PersonalDataManagerAndroid* personal_data_manager_android = |
975 new PersonalDataManagerAndroid(env, obj); | 933 new PersonalDataManagerAndroid(env, obj); |
976 return reinterpret_cast<intptr_t>(personal_data_manager_android); | 934 return reinterpret_cast<intptr_t>(personal_data_manager_android); |
977 } | 935 } |
978 | 936 |
979 } // namespace autofill | 937 } // namespace autofill |
OLD | NEW |