Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: chrome/browser/autofill/android/personal_data_manager_android.cc

Issue 2879853003: [Payments] Code Refactoring for the Subkey Request (Closed)
Patch Set: Final nit Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 void OnSubKeysReceived(ScopedJavaGlobalRef<jobject> jdelegate,
311 : public PersonalDataManagerAndroid::SubKeyRequestDelegate, 311 const std::vector<std::string>& sub_keys) {
312 public base::SupportsWeakPtr<AndroidSubKeyRequesterDelegate> { 312 JNIEnv* env = base::android::AttachCurrentThread();
313 public: 313 Java_GetSubKeysRequestDelegate_onSubKeysReceived(
314 AndroidSubKeyRequesterDelegate( 314 env, jdelegate, base::android::ToJavaArrayOfStrings(env, sub_keys));
315 JNIEnv* env, 315 }
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 316
344 } // namespace 317 } // namespace
345 318
346 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) 319 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj)
347 : weak_java_obj_(env, obj), 320 : weak_java_obj_(env, obj),
348 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( 321 personal_data_manager_(PersonalDataManagerFactory::GetForProfile(
349 ProfileManager::GetActiveUserProfile())), 322 ProfileManager::GetActiveUserProfile())),
350 address_normalizer_( 323 address_normalizer_(
351 std::unique_ptr<::i18n::addressinput::Source>( 324 std::unique_ptr<::i18n::addressinput::Source>(
352 new autofill::ChromeMetadataSource( 325 new autofill::ChromeMetadataSource(
353 I18N_ADDRESS_VALIDATION_DATA_URL, 326 I18N_ADDRESS_VALIDATION_DATA_URL,
354 personal_data_manager_->GetURLRequestContextGetter())), 327 personal_data_manager_->GetURLRequestContextGetter())),
355 ValidationRulesStorageFactory::CreateStorage()), 328 ValidationRulesStorageFactory::CreateStorage()),
356 address_validator_( 329 subkey_requester_(
357 base::MakeUnique<autofill::ChromeMetadataSource>( 330 base::MakeUnique<autofill::ChromeMetadataSource>(
358 I18N_ADDRESS_VALIDATION_DATA_URL, 331 I18N_ADDRESS_VALIDATION_DATA_URL,
359 personal_data_manager_->GetURLRequestContextGetter()), 332 personal_data_manager_->GetURLRequestContextGetter()),
360 ValidationRulesStorageFactory::CreateStorage(), 333 ValidationRulesStorageFactory::CreateStorage()) {
361 this) {
362 personal_data_manager_->AddObserver(this); 334 personal_data_manager_->AddObserver(this);
363 } 335 }
364 336
365 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { 337 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() {
366 personal_data_manager_->RemoveObserver(this); 338 personal_data_manager_->RemoveObserver(this);
367 } 339 }
368 340
369 jboolean PersonalDataManagerAndroid::IsDataLoaded( 341 jboolean PersonalDataManagerAndroid::IsDataLoaded(
370 JNIEnv* env, 342 JNIEnv* env,
371 const base::android::JavaParamRef<jobject>& unused_obj) const { 343 const base::android::JavaParamRef<jobject>& unused_obj) const {
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 const base::android::JavaParamRef<jobject>& unused_obj, 717 const base::android::JavaParamRef<jobject>& unused_obj,
746 const base::android::JavaParamRef<jstring>& jregion_code) { 718 const base::android::JavaParamRef<jstring>& jregion_code) {
747 address_normalizer_.LoadRulesForRegion( 719 address_normalizer_.LoadRulesForRegion(
748 ConvertJavaStringToUTF8(env, jregion_code)); 720 ConvertJavaStringToUTF8(env, jregion_code));
749 } 721 }
750 722
751 void PersonalDataManagerAndroid::LoadRulesForSubKeys( 723 void PersonalDataManagerAndroid::LoadRulesForSubKeys(
752 JNIEnv* env, 724 JNIEnv* env,
753 const base::android::JavaParamRef<jobject>& unused_obj, 725 const base::android::JavaParamRef<jobject>& unused_obj,
754 const base::android::JavaParamRef<jstring>& jregion_code) { 726 const base::android::JavaParamRef<jstring>& jregion_code) {
755 address_validator_.LoadRules(ConvertJavaStringToUTF8(env, jregion_code)); 727 subkey_requester_.LoadRulesForRegion(
728 ConvertJavaStringToUTF8(env, jregion_code));
756 } 729 }
757 730
758 void PersonalDataManagerAndroid::StartAddressNormalization( 731 void PersonalDataManagerAndroid::StartAddressNormalization(
759 JNIEnv* env, 732 JNIEnv* env,
760 const JavaParamRef<jobject>& unused_obj, 733 const JavaParamRef<jobject>& unused_obj,
761 const JavaParamRef<jobject>& jprofile, 734 const JavaParamRef<jobject>& jprofile,
762 const JavaParamRef<jstring>& jregion_code, 735 const JavaParamRef<jstring>& jregion_code,
763 jint jtimeout_seconds, 736 jint jtimeout_seconds,
764 const JavaParamRef<jobject>& jdelegate) { 737 const JavaParamRef<jobject>& jdelegate) {
765 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); 738 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code);
(...skipping 15 matching lines...) Expand all
781 const base::android::JavaParamRef<jobject>& unused_obj) { 754 const base::android::JavaParamRef<jobject>& unused_obj) {
782 return !personal_data_manager_->GetProfiles().empty(); 755 return !personal_data_manager_->GetProfiles().empty();
783 } 756 }
784 757
785 jboolean PersonalDataManagerAndroid::HasCreditCards( 758 jboolean PersonalDataManagerAndroid::HasCreditCards(
786 JNIEnv* env, 759 JNIEnv* env,
787 const base::android::JavaParamRef<jobject>& unused_obj) { 760 const base::android::JavaParamRef<jobject>& unused_obj) {
788 return !personal_data_manager_->GetCreditCards().empty(); 761 return !personal_data_manager_->GetCreditCards().empty();
789 } 762 }
790 763
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( 764 void PersonalDataManagerAndroid::StartRegionSubKeysRequest(
812 JNIEnv* env, 765 JNIEnv* env,
813 const JavaParamRef<jobject>& unused_obj, 766 const JavaParamRef<jobject>& unused_obj,
814 const JavaParamRef<jstring>& jregion_code, 767 const JavaParamRef<jstring>& jregion_code,
768 jint jtimeout_seconds,
815 const JavaParamRef<jobject>& jdelegate) { 769 const JavaParamRef<jobject>& jdelegate) {
816 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); 770 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 771
821 if (AreRulesLoadedForRegion(region_code)) { 772 ScopedJavaGlobalRef<jobject> my_jdelegate;
822 requester->OnRulesSuccessfullyLoaded(); 773 my_jdelegate.Reset(env, jdelegate);
823 } else { 774
824 // Setup the variables so that the sub-keys request is sent, when the rules 775 ::payments::SubKeyReceiverCallback cb = base::BindOnce(
825 // are loaded. 776 &OnSubKeysReceived, ScopedJavaGlobalRef<jobject>(my_jdelegate));
826 pending_subkey_region_code_ = region_code; 777
827 pending_subkey_request_ = std::move(requester); 778 subkey_requester_.StartRegionSubKeysRequest(region_code, jtimeout_seconds,
828 } 779 std::move(cb));
829 } 780 }
830 781
831 void PersonalDataManagerAndroid::CancelPendingGetSubKeys( 782 void PersonalDataManagerAndroid::CancelPendingGetSubKeys(
832 JNIEnv* env, 783 JNIEnv* env,
833 const base::android::JavaParamRef<jobject>& unused_obj) { 784 const base::android::JavaParamRef<jobject>& unused_obj) {
834 pending_subkey_region_code_.clear(); 785 subkey_requester_.CancelPendingGetSubKeys();
835 pending_subkey_request_.reset();
836 } 786 }
837 787
838 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( 788 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs(
839 JNIEnv* env, 789 JNIEnv* env,
840 const std::vector<AutofillProfile*>& profiles) { 790 const std::vector<AutofillProfile*>& profiles) {
841 std::vector<base::string16> guids; 791 std::vector<base::string16> guids;
842 for (AutofillProfile* profile : profiles) 792 for (AutofillProfile* profile : profiles)
843 guids.push_back(base::UTF8ToUTF16(profile->guid())); 793 guids.push_back(base::UTF8ToUTF16(profile->guid()));
844 794
845 return base::android::ToJavaArrayOfStrings(env, guids); 795 return base::android::ToJavaArrayOfStrings(env, guids);
846 } 796 }
847 797
848 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs( 798 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs(
849 JNIEnv* env, 799 JNIEnv* env,
850 const std::vector<CreditCard*>& credit_cards) { 800 const std::vector<CreditCard*>& credit_cards) {
851 std::vector<base::string16> guids; 801 std::vector<base::string16> guids;
852 for (CreditCard* credit_card : credit_cards) 802 for (CreditCard* credit_card : credit_cards)
853 guids.push_back(base::UTF8ToUTF16(credit_card->guid())); 803 guids.push_back(base::UTF8ToUTF16(credit_card->guid()));
854 804
855 return base::android::ToJavaArrayOfStrings(env, guids); 805 return base::android::ToJavaArrayOfStrings(env, guids);
856 } 806 }
857 807
858 bool PersonalDataManagerAndroid::AreRulesLoadedForRegion(
859 const std::string& region_code) {
860 return address_validator_.AreRulesLoadedForRegion(region_code);
861 }
862
863 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( 808 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels(
864 JNIEnv* env, 809 JNIEnv* env,
865 bool address_only, 810 bool address_only,
866 bool include_name_in_label, 811 bool include_name_in_label,
867 bool include_organization_in_label, 812 bool include_organization_in_label,
868 bool include_country_in_label, 813 bool include_country_in_label,
869 std::vector<AutofillProfile*> profiles) { 814 std::vector<AutofillProfile*> profiles) {
870 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields; 815 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields;
871 size_t minimal_fields_shown = 2; 816 size_t minimal_fields_shown = 2;
872 if (address_only) { 817 if (address_only) {
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); 915 base::android::ConvertJavaStringToUTF16(env, jcountry_name)));
971 } 916 }
972 917
973 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { 918 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
974 PersonalDataManagerAndroid* personal_data_manager_android = 919 PersonalDataManagerAndroid* personal_data_manager_android =
975 new PersonalDataManagerAndroid(env, obj); 920 new PersonalDataManagerAndroid(env, obj);
976 return reinterpret_cast<intptr_t>(personal_data_manager_android); 921 return reinterpret_cast<intptr_t>(personal_data_manager_android);
977 } 922 }
978 923
979 } // namespace autofill 924 } // namespace autofill
OLDNEW
« no previous file with comments | « chrome/browser/autofill/android/personal_data_manager_android.h ('k') | components/payments/core/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698