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

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

Issue 2866643004: [Reland] Use dropdown list for admin areas in pr form. (Closed)
Patch Set: 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>
11 11
12 #include "base/android/jni_array.h" 12 #include "base/android/jni_array.h"
13 #include "base/android/jni_string.h" 13 #include "base/android/jni_string.h"
14 #include "base/command_line.h" 14 #include "base/command_line.h"
15 #include "base/format_macros.h" 15 #include "base/format_macros.h"
16 #include "base/memory/ptr_util.h"
16 #include "base/strings/utf_string_conversions.h" 17 #include "base/strings/utf_string_conversions.h"
17 #include "base/time/time.h" 18 #include "base/time/time.h"
18 #include "chrome/browser/android/resource_mapper.h" 19 #include "chrome/browser/android/resource_mapper.h"
19 #include "chrome/browser/autofill/personal_data_manager_factory.h" 20 #include "chrome/browser/autofill/personal_data_manager_factory.h"
20 #include "chrome/browser/autofill/validation_rules_storage_factory.h" 21 #include "chrome/browser/autofill/validation_rules_storage_factory.h"
21 #include "chrome/browser/browser_process.h" 22 #include "chrome/browser/browser_process.h"
22 #include "chrome/browser/profiles/profile.h" 23 #include "chrome/browser/profiles/profile.h"
23 #include "chrome/browser/profiles/profile_manager.h" 24 #include "chrome/browser/profiles/profile_manager.h"
24 #include "chrome/common/pref_names.h" 25 #include "chrome/common/pref_names.h"
25 #include "components/autofill/content/browser/content_autofill_driver.h" 26 #include "components/autofill/content/browser/content_autofill_driver.h"
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 } 300 }
300 301
301 private: 302 private:
302 ~AndroidAddressNormalizerDelegate() override {} 303 ~AndroidAddressNormalizerDelegate() override {}
303 304
304 ScopedJavaGlobalRef<jobject> jdelegate_; 305 ScopedJavaGlobalRef<jobject> jdelegate_;
305 306
306 DISALLOW_COPY_AND_ASSIGN(AndroidAddressNormalizerDelegate); 307 DISALLOW_COPY_AND_ASSIGN(AndroidAddressNormalizerDelegate);
307 }; 308 };
308 309
310 class AndroidSubKeyRequesterDelegate
311 : public PersonalDataManagerAndroid::SubKeyRequestDelegate,
312 public base::SupportsWeakPtr<AndroidSubKeyRequesterDelegate> {
313 public:
314 AndroidSubKeyRequesterDelegate(
315 JNIEnv* env,
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
309 } // namespace 344 } // namespace
310 345
311 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) 346 PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj)
312 : weak_java_obj_(env, obj), 347 : weak_java_obj_(env, obj),
313 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( 348 personal_data_manager_(PersonalDataManagerFactory::GetForProfile(
314 ProfileManager::GetActiveUserProfile())), 349 ProfileManager::GetActiveUserProfile())),
315 address_normalizer_( 350 address_normalizer_(
316 std::unique_ptr<::i18n::addressinput::Source>( 351 std::unique_ptr<::i18n::addressinput::Source>(
317 new autofill::ChromeMetadataSource( 352 new autofill::ChromeMetadataSource(
318 I18N_ADDRESS_VALIDATION_DATA_URL, 353 I18N_ADDRESS_VALIDATION_DATA_URL,
319 personal_data_manager_->GetURLRequestContextGetter())), 354 personal_data_manager_->GetURLRequestContextGetter())),
320 ValidationRulesStorageFactory::CreateStorage()) { 355 ValidationRulesStorageFactory::CreateStorage()),
356 address_validator_(
357 base::MakeUnique<autofill::ChromeMetadataSource>(
358 I18N_ADDRESS_VALIDATION_DATA_URL,
359 personal_data_manager_->GetURLRequestContextGetter()),
360 ValidationRulesStorageFactory::CreateStorage(),
361 this) {
321 personal_data_manager_->AddObserver(this); 362 personal_data_manager_->AddObserver(this);
322 } 363 }
323 364
324 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { 365 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() {
325 personal_data_manager_->RemoveObserver(this); 366 personal_data_manager_->RemoveObserver(this);
326 } 367 }
327 368
328 jboolean PersonalDataManagerAndroid::IsDataLoaded( 369 jboolean PersonalDataManagerAndroid::IsDataLoaded(
329 JNIEnv* env, 370 JNIEnv* env,
330 const base::android::JavaParamRef<jobject>& unused_obj) const { 371 const base::android::JavaParamRef<jobject>& unused_obj) const {
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 return card->use_date().ToTimeT(); 733 return card->use_date().ToTimeT();
693 } 734 }
694 735
695 // TODO(crbug.com/629507): Use a mock clock for testing. 736 // TODO(crbug.com/629507): Use a mock clock for testing.
696 jlong PersonalDataManagerAndroid::GetCurrentDateForTesting( 737 jlong PersonalDataManagerAndroid::GetCurrentDateForTesting(
697 JNIEnv* env, 738 JNIEnv* env,
698 const base::android::JavaParamRef<jobject>& unused_obj) { 739 const base::android::JavaParamRef<jobject>& unused_obj) {
699 return base::Time::Now().ToTimeT(); 740 return base::Time::Now().ToTimeT();
700 } 741 }
701 742
702 void PersonalDataManagerAndroid::LoadRulesForRegion( 743 void PersonalDataManagerAndroid::LoadRulesForAddressNormalization(
703 JNIEnv* env, 744 JNIEnv* env,
704 const base::android::JavaParamRef<jobject>& unused_obj, 745 const base::android::JavaParamRef<jobject>& unused_obj,
705 const base::android::JavaParamRef<jstring>& jregion_code) { 746 const base::android::JavaParamRef<jstring>& jregion_code) {
706 address_normalizer_.LoadRulesForRegion( 747 address_normalizer_.LoadRulesForRegion(
707 ConvertJavaStringToUTF8(env, jregion_code)); 748 ConvertJavaStringToUTF8(env, jregion_code));
708 } 749 }
709 750
751 void PersonalDataManagerAndroid::LoadRulesForSubKeys(
752 JNIEnv* env,
753 const base::android::JavaParamRef<jobject>& unused_obj,
754 const base::android::JavaParamRef<jstring>& jregion_code) {
755 address_validator_.LoadRules(ConvertJavaStringToUTF8(env, jregion_code));
756 }
757
710 void PersonalDataManagerAndroid::StartAddressNormalization( 758 void PersonalDataManagerAndroid::StartAddressNormalization(
711 JNIEnv* env, 759 JNIEnv* env,
712 const JavaParamRef<jobject>& unused_obj, 760 const JavaParamRef<jobject>& unused_obj,
713 const JavaParamRef<jobject>& jprofile, 761 const JavaParamRef<jobject>& jprofile,
714 const JavaParamRef<jstring>& jregion_code, 762 const JavaParamRef<jstring>& jregion_code,
715 jint jtimeout_seconds, 763 jint jtimeout_seconds,
716 const JavaParamRef<jobject>& jdelegate) { 764 const JavaParamRef<jobject>& jdelegate) {
717 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); 765 const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code);
718 766
719 AutofillProfile profile; 767 AutofillProfile profile;
(...skipping 13 matching lines...) Expand all
733 const base::android::JavaParamRef<jobject>& unused_obj) { 781 const base::android::JavaParamRef<jobject>& unused_obj) {
734 return !personal_data_manager_->GetProfiles().empty(); 782 return !personal_data_manager_->GetProfiles().empty();
735 } 783 }
736 784
737 jboolean PersonalDataManagerAndroid::HasCreditCards( 785 jboolean PersonalDataManagerAndroid::HasCreditCards(
738 JNIEnv* env, 786 JNIEnv* env,
739 const base::android::JavaParamRef<jobject>& unused_obj) { 787 const base::android::JavaParamRef<jobject>& unused_obj) {
740 return !personal_data_manager_->GetCreditCards().empty(); 788 return !personal_data_manager_->GetCreditCards().empty();
741 } 789 }
742 790
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(
812 JNIEnv* env,
813 const JavaParamRef<jobject>& unused_obj,
814 const JavaParamRef<jstring>& jregion_code,
815 const JavaParamRef<jobject>& jdelegate) {
816 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
821 if (AreRulesLoadedForRegion(region_code)) {
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 }
830
831 void PersonalDataManagerAndroid::CancelPendingGetSubKeys(
832 JNIEnv* env,
833 const base::android::JavaParamRef<jobject>& unused_obj) {
834 pending_subkey_region_code_.clear();
835 pending_subkey_request_.reset();
836 }
837
743 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( 838 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs(
744 JNIEnv* env, 839 JNIEnv* env,
745 const std::vector<AutofillProfile*>& profiles) { 840 const std::vector<AutofillProfile*>& profiles) {
746 std::vector<base::string16> guids; 841 std::vector<base::string16> guids;
747 for (AutofillProfile* profile : profiles) 842 for (AutofillProfile* profile : profiles)
748 guids.push_back(base::UTF8ToUTF16(profile->guid())); 843 guids.push_back(base::UTF8ToUTF16(profile->guid()));
749 844
750 return base::android::ToJavaArrayOfStrings(env, guids); 845 return base::android::ToJavaArrayOfStrings(env, guids);
751 } 846 }
752 847
753 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs( 848 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs(
754 JNIEnv* env, 849 JNIEnv* env,
755 const std::vector<CreditCard*>& credit_cards) { 850 const std::vector<CreditCard*>& credit_cards) {
756 std::vector<base::string16> guids; 851 std::vector<base::string16> guids;
757 for (CreditCard* credit_card : credit_cards) 852 for (CreditCard* credit_card : credit_cards)
758 guids.push_back(base::UTF8ToUTF16(credit_card->guid())); 853 guids.push_back(base::UTF8ToUTF16(credit_card->guid()));
759 854
760 return base::android::ToJavaArrayOfStrings(env, guids); 855 return base::android::ToJavaArrayOfStrings(env, guids);
761 } 856 }
762 857
763 bool PersonalDataManagerAndroid::AreRulesLoadedForRegion( 858 bool PersonalDataManagerAndroid::AreRulesLoadedForRegion(
764 const std::string& region_code) { 859 const std::string& region_code) {
765 return address_normalizer_.AreRulesLoadedForRegion(region_code); 860 return address_validator_.AreRulesLoadedForRegion(region_code);
766 } 861 }
767 862
768 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( 863 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels(
769 JNIEnv* env, 864 JNIEnv* env,
770 bool address_only, 865 bool address_only,
771 bool include_name_in_label, 866 bool include_name_in_label,
772 bool include_organization_in_label, 867 bool include_organization_in_label,
773 bool include_country_in_label, 868 bool include_country_in_label,
774 std::vector<AutofillProfile*> profiles) { 869 std::vector<AutofillProfile*> profiles) {
775 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields; 870 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); 970 base::android::ConvertJavaStringToUTF16(env, jcountry_name)));
876 } 971 }
877 972
878 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { 973 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
879 PersonalDataManagerAndroid* personal_data_manager_android = 974 PersonalDataManagerAndroid* personal_data_manager_android =
880 new PersonalDataManagerAndroid(env, obj); 975 new PersonalDataManagerAndroid(env, obj);
881 return reinterpret_cast<intptr_t>(personal_data_manager_android); 976 return reinterpret_cast<intptr_t>(personal_data_manager_android);
882 } 977 }
883 978
884 } // namespace autofill 979 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698