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 3a5ad199fa1ab9d30acf74e136fa25c8d6858177..9751a917f3d5a5525514361b821f28da7fde5dbc 100644 |
| --- a/chrome/browser/autofill/android/personal_data_manager_android.cc |
| +++ b/chrome/browser/autofill/android/personal_data_manager_android.cc |
| @@ -310,6 +310,40 @@ class AddressNormalizationRequester |
| DISALLOW_COPY_AND_ASSIGN(AddressNormalizationRequester); |
| }; |
| +class GetSubKeysRequester : public PersonalDataManagerAndroid::Delegate, |
| + public base::SupportsWeakPtr<GetSubKeysRequester> { |
| + public: |
| + GetSubKeysRequester( |
| + 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: |
| + ~GetSubKeysRequester() override {} |
| + |
| + 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_; |
| + JNIEnv* env_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(GetSubKeysRequester); |
| +}; |
| + |
| } // namespace |
| PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj) |
| @@ -792,6 +826,59 @@ void PersonalDataManagerAndroid::CancelPendingAddressNormalizations( |
| pending_normalization_.clear(); |
| } |
| +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::OnGettingSubKeysRulesLoaded( |
|
sebsg
2017/02/10 16:00:32
You probably don't need a second function here. Wh
Parastoo
2017/02/13 21:57:23
As discussed, we will keep the functions separated
|
| + const std::string& region_code, |
| + bool success) { |
| + // Check if there is any sub-key request. |
| + auto it = pending_subkeys_request_.find(region_code); |
| + if (it != pending_subkeys_request_.end()) { |
| + for (size_t i = 0; i < it->second.size(); ++i) { |
| + it->second[i]->OnRulesSuccessfullyLoaded(); |
| + } |
| + pending_subkeys_request_.erase(it); |
| + } |
| +} |
| + |
| +void PersonalDataManagerAndroid::StartGettingRegionSubKeys( |
| + 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<Delegate> requester( |
| + new GetSubKeysRequester(env, jdelegate, region_code, AsWeakPtr())); |
| + |
| + if (AreRulesLoadedForRegion(region_code)) { |
| + requester->OnRulesSuccessfullyLoaded(); |
|
sebsg
2017/02/10 16:00:32
Since both RegionSubKeys and ValidationRules reque
Parastoo
2017/02/13 21:57:23
Same here.
|
| + } else { |
| + // Setup the variables so that the sub-keys request is sent, when the rules |
| + // are loaded. |
| + auto it = pending_subkeys_request_.find(region_code); |
| + if (it == pending_subkeys_request_.end()) { |
| + // If no entry exists, create the entry and assign it to |it|. |
| + it = pending_subkeys_request_ |
| + .insert(std::make_pair(region_code, |
| + std::vector<std::unique_ptr<Delegate>>())) |
| + .first; |
| + } |
| + it->second.push_back(std::move(requester)); |
| + } |
| +} |
| + |
| +void PersonalDataManagerAndroid::CancelPendingGetSubKeys( |
| + JNIEnv* env, |
| + const base::android::JavaParamRef<jobject>& unused_obj) { |
| + pending_subkeys_request_.clear(); |
| +} |
| + |
| ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( |
| JNIEnv* env, |
| const std::vector<AutofillProfile*>& profiles) { |