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

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: Remove Delegate 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 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698