Index: chrome/browser/autofill/android/personal_data_manager_android.cc |
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.cc b/chrome/browser/autofill/android/personal_data_manager_android.cc |
index f270be28607deaa9cfac1d3c9b76968904209d46..7e4ed1ccded19bde9ce4fb18138bde9831d1538c 100644 |
--- a/chrome/browser/autofill/android/personal_data_manager_android.cc |
+++ b/chrome/browser/autofill/android/personal_data_manager_android.cc |
@@ -305,6 +305,41 @@ class AndroidAddressNormalizerDelegate |
DISALLOW_COPY_AND_ASSIGN(AndroidAddressNormalizerDelegate); |
}; |
+class AndroidSubKeyRequesterDelegate |
+ : public PersonalDataManagerAndroid::SubKeyRequestDelegate, |
+ public base::SupportsWeakPtr<AndroidSubKeyRequesterDelegate> { |
+ public: |
+ AndroidSubKeyRequesterDelegate( |
+ JNIEnv* env, |
+ const base::android::JavaParamRef<jobject>& jdelegate, |
+ const std::string& region_code, |
+ base::WeakPtr<PersonalDataManagerAndroid> personal_data_manager_android) { |
+ jdelegate_.Reset(env, jdelegate); |
+ region_code_ = region_code; |
+ personal_data_manager_android_ = personal_data_manager_android; |
+ env_ = env; |
+ } |
+ |
+ private: |
+ ~AndroidSubKeyRequesterDelegate() override {} |
please use gerrit instead
2017/03/30 18:48:58
This object has a private destructor and never del
Parastoo
2017/03/31 15:44:14
Done.
|
+ |
+ void OnRulesSuccessfullyLoaded() override { |
please use gerrit instead
2017/03/30 18:48:58
Add a comment that indicates which class you're ov
Parastoo
2017/03/31 15:44:14
Done.
|
+ if (personal_data_manager_android_) { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_GetSubKeysRequestDelegate_onSubKeysReceived( |
+ env, jdelegate_, |
+ personal_data_manager_android_->GetSubKeys(env, region_code_)); |
+ } |
+ } |
+ |
+ ScopedJavaGlobalRef<jobject> jdelegate_; |
+ std::string region_code_; |
+ base::WeakPtr<PersonalDataManagerAndroid> personal_data_manager_android_; |
+ JNIEnv* env_; |
please use gerrit instead
2017/03/30 18:48:58
No need to save this. You should get new ones from
Parastoo
2017/03/31 15:44:14
Done.
|
+ |
+ DISALLOW_COPY_AND_ASSIGN(AndroidSubKeyRequesterDelegate); |
+}; |
+ |
} // namespace |
PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) |
@@ -316,7 +351,14 @@ PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) |
new autofill::ChromeMetadataSource( |
I18N_ADDRESS_VALIDATION_DATA_URL, |
personal_data_manager_->GetURLRequestContextGetter())), |
- ValidationRulesStorageFactory::CreateStorage()) { |
+ ValidationRulesStorageFactory::CreateStorage()), |
+ address_validator_( |
+ std::unique_ptr<::i18n::addressinput::Source>( |
please use gerrit instead
2017/03/30 18:48:58
Use base::MakeUnique.
Parastoo
2017/03/31 15:44:14
Done.
|
+ new autofill::ChromeMetadataSource( |
+ I18N_ADDRESS_VALIDATION_DATA_URL, |
+ personal_data_manager_->GetURLRequestContextGetter())), |
+ ValidationRulesStorageFactory::CreateStorage(), |
+ this) { |
personal_data_manager_->AddObserver(this); |
} |
@@ -697,7 +739,7 @@ jlong PersonalDataManagerAndroid::GetCurrentDateForTesting( |
return base::Time::Now().ToTimeT(); |
} |
-void PersonalDataManagerAndroid::LoadRulesForRegion( |
+void PersonalDataManagerAndroid::LoadRulesForAddressNormalization( |
JNIEnv* env, |
const base::android::JavaParamRef<jobject>& unused_obj, |
const base::android::JavaParamRef<jstring>& jregion_code) { |
@@ -705,6 +747,13 @@ void PersonalDataManagerAndroid::LoadRulesForRegion( |
ConvertJavaStringToUTF8(env, jregion_code)); |
} |
+void PersonalDataManagerAndroid::LoadRulesForSubKeys( |
+ JNIEnv* env, |
+ const base::android::JavaParamRef<jobject>& unused_obj, |
+ const base::android::JavaParamRef<jstring>& jregion_code) { |
+ address_validator_.LoadRules(ConvertJavaStringToUTF8(env, jregion_code)); |
+} |
+ |
void PersonalDataManagerAndroid::StartAddressNormalization( |
JNIEnv* env, |
const JavaParamRef<jobject>& unused_obj, |
@@ -738,6 +787,51 @@ jboolean PersonalDataManagerAndroid::HasCreditCards( |
return !personal_data_manager_->GetCreditCards().empty(); |
} |
+base::android::ScopedJavaLocalRef<jobjectArray> |
+PersonalDataManagerAndroid::GetSubKeys(JNIEnv* env, |
+ const std::string& region_code) { |
+ std::vector<std::string> sub_keys = |
+ address_validator_.GetRegionSubKeys(region_code); |
+ return base::android::ToJavaArrayOfStrings(env, sub_keys); |
+} |
+ |
+void PersonalDataManagerAndroid::OnAddressRulesLoaded( |
+ const std::string& region_code, |
+ bool success) { |
+ // Check if there is any sub-key request for that region code. |
+ if (!pending_subkey_region_code_.compare(region_code)) |
+ pending_subkey_request_->OnRulesSuccessfullyLoaded(); |
please use gerrit instead
2017/03/30 18:48:58
Need to check for |success| == false.
Parastoo
2017/03/31 15:44:14
An empty vector will be returned, even if false. =
please use gerrit instead
2017/03/31 16:06:20
This is not immediately clear from reading the cod
Parastoo
2017/04/03 16:18:23
Done.
|
+ pending_subkey_region_code_ = ""; |
+ pending_subkey_request_.reset(); |
+} |
+ |
+void PersonalDataManagerAndroid::StartRegionSubKeysRequest( |
+ JNIEnv* env, |
+ const JavaParamRef<jobject>& unused_obj, |
+ const JavaParamRef<jstring>& jregion_code, |
+ const JavaParamRef<jobject>& jdelegate) { |
+ const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code); |
+ std::unique_ptr<SubKeyRequestDelegate> requester( |
+ new AndroidSubKeyRequesterDelegate(env, jdelegate, |
please use gerrit instead
2017/03/30 18:48:58
use base::MakeUnique.
Parastoo
2017/03/31 15:44:14
Done.
|
+ region_code, AsWeakPtr())); |
+ |
+ if (AreRulesLoadedForRegion(region_code)) { |
+ requester->OnRulesSuccessfullyLoaded(); |
+ } else { |
+ // Setup the variables so that the sub-keys request is sent, when the rules |
+ // are loaded. |
+ pending_subkey_region_code_ = region_code; |
+ pending_subkey_request_ = std::move(requester); |
+ } |
+} |
+ |
+void PersonalDataManagerAndroid::CancelPendingGetSubKeys( |
+ JNIEnv* env, |
+ const base::android::JavaParamRef<jobject>& unused_obj) { |
+ pending_subkey_region_code_ = ""; |
please use gerrit instead
2017/03/30 18:48:58
.clear();
Parastoo
2017/03/31 15:44:14
Done.
|
+ pending_subkey_request_.reset(); |
+} |
+ |
ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( |
JNIEnv* env, |
const std::vector<AutofillProfile*>& profiles) { |
@@ -760,7 +854,7 @@ ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs( |
bool PersonalDataManagerAndroid::AreRulesLoadedForRegion( |
const std::string& region_code) { |
- return address_normalizer_.AreRulesLoadedForRegion(region_code); |
+ return address_validator_.AreRulesLoadedForRegion(region_code); |
} |
ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( |