Chromium Code Reviews| 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..64dbb2e64ea5869f3b0b7c93760b884572725ad0 100644 |
| --- a/chrome/browser/autofill/android/personal_data_manager_android.cc |
| +++ b/chrome/browser/autofill/android/personal_data_manager_android.cc |
| @@ -13,6 +13,7 @@ |
| #include "base/android/jni_string.h" |
| #include "base/command_line.h" |
| #include "base/format_macros.h" |
| +#include "base/memory/ptr_util.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "base/time/time.h" |
| #include "chrome/browser/android/resource_mapper.h" |
| @@ -305,6 +306,40 @@ 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; |
| + } |
| + |
| + ~AndroidSubKeyRequesterDelegate() override {} |
| + |
| + private: |
| + // PersonalDataManagerAndroid::SubKeyRequestDelegate: |
| + void OnRulesSuccessfullyLoaded() override { |
| + 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_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(AndroidSubKeyRequesterDelegate); |
| +}; |
| + |
| } // namespace |
| PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) |
| @@ -316,7 +351,13 @@ PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) |
| new autofill::ChromeMetadataSource( |
| I18N_ADDRESS_VALIDATION_DATA_URL, |
| personal_data_manager_->GetURLRequestContextGetter())), |
| - ValidationRulesStorageFactory::CreateStorage()) { |
| + ValidationRulesStorageFactory::CreateStorage()), |
| + address_validator_( |
| + base::MakeUnique<autofill::ChromeMetadataSource>( |
| + I18N_ADDRESS_VALIDATION_DATA_URL, |
| + personal_data_manager_->GetURLRequestContextGetter()), |
| + ValidationRulesStorageFactory::CreateStorage(), |
| + this) { |
| personal_data_manager_->AddObserver(this); |
| } |
| @@ -697,7 +738,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 +746,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 +786,53 @@ 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) { |
| + // if |success| == false, an empty list of sub-keys will be returned. |
|
please use gerrit instead
2017/04/03 18:47:39
Clarify the comment by naming the method that retu
Parastoo
2017/04/03 18:55:05
Done.
|
| + // => No need to check for |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(); |
| + pending_subkey_region_code_.clear(); |
| + 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 = |
| + base::MakeUnique<AndroidSubKeyRequesterDelegate>( |
| + env, jdelegate, 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_.clear(); |
| + pending_subkey_request_.reset(); |
| +} |
| + |
| ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( |
| JNIEnv* env, |
| const std::vector<AutofillProfile*>& profiles) { |
| @@ -760,7 +855,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( |