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

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: Changing a comment. 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 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 AndroidSubKeyRequesterDelegate
311 : public PersonalDataManagerAndroid::SubKeyRequestDelegate, 311 : public ::payments::SubKeyRequester::Delegate,
312 public base::SupportsWeakPtr<AndroidSubKeyRequesterDelegate> { 312 public base::SupportsWeakPtr<AndroidSubKeyRequesterDelegate> {
313 public: 313 public:
314 AndroidSubKeyRequesterDelegate( 314 AndroidSubKeyRequesterDelegate(
315 JNIEnv* env, 315 JNIEnv* env,
316 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); 317 jdelegate_.Reset(env, jdelegate);
320 region_code_ = region_code;
321 personal_data_manager_android_ = personal_data_manager_android;
322 } 318 }
323 319
320 void OnSubKeysReceived(std::vector<std::string> sub_keys) override {
321 JNIEnv* env = base::android::AttachCurrentThread();
322 Java_GetSubKeysRequestDelegate_onSubKeysReceived(
323 env, jdelegate_, base::android::ToJavaArrayOfStrings(env, sub_keys));
324 delete this;
325 }
326
327 private:
324 ~AndroidSubKeyRequesterDelegate() override {} 328 ~AndroidSubKeyRequesterDelegate() override {}
325 329
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_; 330 ScopedJavaGlobalRef<jobject> jdelegate_;
338 std::string region_code_;
339 base::WeakPtr<PersonalDataManagerAndroid> personal_data_manager_android_;
340 331
341 DISALLOW_COPY_AND_ASSIGN(AndroidSubKeyRequesterDelegate); 332 DISALLOW_COPY_AND_ASSIGN(AndroidSubKeyRequesterDelegate);
342 }; 333 };
343 334
344 } // namespace 335 } // namespace
345 336
346 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) 337 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj)
347 : weak_java_obj_(env, obj), 338 : weak_java_obj_(env, obj),
348 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( 339 personal_data_manager_(PersonalDataManagerFactory::GetForProfile(
349 ProfileManager::GetActiveUserProfile())), 340 ProfileManager::GetActiveUserProfile())),
350 address_normalizer_( 341 address_normalizer_(
351 std::unique_ptr<::i18n::addressinput::Source>( 342 std::unique_ptr<::i18n::addressinput::Source>(
352 new autofill::ChromeMetadataSource( 343 new autofill::ChromeMetadataSource(
353 I18N_ADDRESS_VALIDATION_DATA_URL, 344 I18N_ADDRESS_VALIDATION_DATA_URL,
354 personal_data_manager_->GetURLRequestContextGetter())), 345 personal_data_manager_->GetURLRequestContextGetter())),
355 ValidationRulesStorageFactory::CreateStorage()), 346 ValidationRulesStorageFactory::CreateStorage()),
356 address_validator_( 347 subkey_requester_(
357 base::MakeUnique<autofill::ChromeMetadataSource>( 348 base::MakeUnique<autofill::ChromeMetadataSource>(
358 I18N_ADDRESS_VALIDATION_DATA_URL, 349 I18N_ADDRESS_VALIDATION_DATA_URL,
359 personal_data_manager_->GetURLRequestContextGetter()), 350 personal_data_manager_->GetURLRequestContextGetter()),
360 ValidationRulesStorageFactory::CreateStorage(), 351 ValidationRulesStorageFactory::CreateStorage()) {
361 this) {
362 personal_data_manager_->AddObserver(this); 352 personal_data_manager_->AddObserver(this);
363 } 353 }
364 354
365 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { 355 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() {
366 personal_data_manager_->RemoveObserver(this); 356 personal_data_manager_->RemoveObserver(this);
367 } 357 }
368 358
369 jboolean PersonalDataManagerAndroid::IsDataLoaded( 359 jboolean PersonalDataManagerAndroid::IsDataLoaded(
370 JNIEnv* env, 360 JNIEnv* env,
371 const base::android::JavaParamRef<jobject>& unused_obj) const { 361 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, 735 const base::android::JavaParamRef<jobject>& unused_obj,
746 const base::android::JavaParamRef<jstring>& jregion_code) { 736 const base::android::JavaParamRef<jstring>& jregion_code) {
747 address_normalizer_.LoadRulesForRegion( 737 address_normalizer_.LoadRulesForRegion(
748 ConvertJavaStringToUTF8(env, jregion_code)); 738 ConvertJavaStringToUTF8(env, jregion_code));
749 } 739 }
750 740
751 void PersonalDataManagerAndroid::LoadRulesForSubKeys( 741 void PersonalDataManagerAndroid::LoadRulesForSubKeys(
752 JNIEnv* env, 742 JNIEnv* env,
753 const base::android::JavaParamRef<jobject>& unused_obj, 743 const base::android::JavaParamRef<jobject>& unused_obj,
754 const base::android::JavaParamRef<jstring>& jregion_code) { 744 const base::android::JavaParamRef<jstring>& jregion_code) {
755 address_validator_.LoadRules(ConvertJavaStringToUTF8(env, jregion_code)); 745 subkey_requester_.LoadRulesForRegion(
746 ConvertJavaStringToUTF8(env, jregion_code));
756 } 747 }
757 748
758 void PersonalDataManagerAndroid::StartAddressNormalization( 749 void PersonalDataManagerAndroid::StartAddressNormalization(
759 JNIEnv* env, 750 JNIEnv* env,
760 const JavaParamRef<jobject>& unused_obj, 751 const JavaParamRef<jobject>& unused_obj,
761 const JavaParamRef<jobject>& jprofile, 752 const JavaParamRef<jobject>& jprofile,
762 const JavaParamRef<jstring>& jregion_code, 753 const JavaParamRef<jstring>& jregion_code,
763 jint jtimeout_seconds, 754 jint jtimeout_seconds,
764 const JavaParamRef<jobject>& jdelegate) { 755 const JavaParamRef<jobject>& jdelegate) {
765 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); 756 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code);
(...skipping 15 matching lines...) Expand all
781 const base::android::JavaParamRef<jobject>& unused_obj) { 772 const base::android::JavaParamRef<jobject>& unused_obj) {
782 return !personal_data_manager_->GetProfiles().empty(); 773 return !personal_data_manager_->GetProfiles().empty();
783 } 774 }
784 775
785 jboolean PersonalDataManagerAndroid::HasCreditCards( 776 jboolean PersonalDataManagerAndroid::HasCreditCards(
786 JNIEnv* env, 777 JNIEnv* env,
787 const base::android::JavaParamRef<jobject>& unused_obj) { 778 const base::android::JavaParamRef<jobject>& unused_obj) {
788 return !personal_data_manager_->GetCreditCards().empty(); 779 return !personal_data_manager_->GetCreditCards().empty();
789 } 780 }
790 781
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( 782 void PersonalDataManagerAndroid::StartRegionSubKeysRequest(
812 JNIEnv* env, 783 JNIEnv* env,
813 const JavaParamRef<jobject>& unused_obj, 784 const JavaParamRef<jobject>& unused_obj,
814 const JavaParamRef<jstring>& jregion_code, 785 const JavaParamRef<jstring>& jregion_code,
786 jint jtimeout_seconds,
815 const JavaParamRef<jobject>& jdelegate) { 787 const JavaParamRef<jobject>& jdelegate) {
816 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); 788 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code);
817 std::unique_ptr<SubKeyRequestDelegate> requester = 789 // Self-deleting object.
818 base::MakeUnique<AndroidSubKeyRequesterDelegate>( 790 AndroidSubKeyRequesterDelegate* requester =
819 env, jdelegate, region_code, AsWeakPtr()); 791 new AndroidSubKeyRequesterDelegate(env, jdelegate);
David Trainor- moved to gerrit 2017/05/19 17:44:35 This feels scary (with the "delete this" in the ca
Parastoo 2017/05/23 18:09:52 Done.
820 792 subkey_requester_.StartRegionSubKeysRequest(region_code, jtimeout_seconds,
821 if (AreRulesLoadedForRegion(region_code)) { 793 requester);
822 requester->OnRulesSuccessfullyLoaded();
823 } else {
824 // Setup the variables so that the sub-keys request is sent, when the rules
825 // are loaded.
826 pending_subkey_region_code_ = region_code;
827 pending_subkey_request_ = std::move(requester);
828 }
829 } 794 }
830 795
831 void PersonalDataManagerAndroid::CancelPendingGetSubKeys( 796 void PersonalDataManagerAndroid::CancelPendingGetSubKeys(
832 JNIEnv* env, 797 JNIEnv* env,
833 const base::android::JavaParamRef<jobject>& unused_obj) { 798 const base::android::JavaParamRef<jobject>& unused_obj) {
834 pending_subkey_region_code_.clear(); 799 subkey_requester_.CancelPendingGetSubKeys();
835 pending_subkey_request_.reset();
836 } 800 }
837 801
838 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( 802 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs(
839 JNIEnv* env, 803 JNIEnv* env,
840 const std::vector<AutofillProfile*>& profiles) { 804 const std::vector<AutofillProfile*>& profiles) {
841 std::vector<base::string16> guids; 805 std::vector<base::string16> guids;
842 for (AutofillProfile* profile : profiles) 806 for (AutofillProfile* profile : profiles)
843 guids.push_back(base::UTF8ToUTF16(profile->guid())); 807 guids.push_back(base::UTF8ToUTF16(profile->guid()));
844 808
845 return base::android::ToJavaArrayOfStrings(env, guids); 809 return base::android::ToJavaArrayOfStrings(env, guids);
846 } 810 }
847 811
848 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs( 812 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs(
849 JNIEnv* env, 813 JNIEnv* env,
850 const std::vector<CreditCard*>& credit_cards) { 814 const std::vector<CreditCard*>& credit_cards) {
851 std::vector<base::string16> guids; 815 std::vector<base::string16> guids;
852 for (CreditCard* credit_card : credit_cards) 816 for (CreditCard* credit_card : credit_cards)
853 guids.push_back(base::UTF8ToUTF16(credit_card->guid())); 817 guids.push_back(base::UTF8ToUTF16(credit_card->guid()));
854 818
855 return base::android::ToJavaArrayOfStrings(env, guids); 819 return base::android::ToJavaArrayOfStrings(env, guids);
856 } 820 }
857 821
858 bool PersonalDataManagerAndroid::AreRulesLoadedForRegion(
859 const std::string& region_code) {
860 return address_validator_.AreRulesLoadedForRegion(region_code);
861 }
862
863 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( 822 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels(
864 JNIEnv* env, 823 JNIEnv* env,
865 bool address_only, 824 bool address_only,
866 bool include_name_in_label, 825 bool include_name_in_label,
867 bool include_organization_in_label, 826 bool include_organization_in_label,
868 bool include_country_in_label, 827 bool include_country_in_label,
869 std::vector<AutofillProfile*> profiles) { 828 std::vector<AutofillProfile*> profiles) {
870 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields; 829 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields;
871 size_t minimal_fields_shown = 2; 830 size_t minimal_fields_shown = 2;
872 if (address_only) { 831 if (address_only) {
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); 929 base::android::ConvertJavaStringToUTF16(env, jcountry_name)));
971 } 930 }
972 931
973 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { 932 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
974 PersonalDataManagerAndroid* personal_data_manager_android = 933 PersonalDataManagerAndroid* personal_data_manager_android =
975 new PersonalDataManagerAndroid(env, obj); 934 new PersonalDataManagerAndroid(env, obj);
976 return reinterpret_cast<intptr_t>(personal_data_manager_android); 935 return reinterpret_cast<intptr_t>(personal_data_manager_android);
977 } 936 }
978 937
979 } // namespace autofill 938 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698