| 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 f71b114e14e5a8bc69fe86b4feb2da772b05afc0..95d8ac67491b49c0c3f02b47a8806c061dc9e3b4 100644
|
| --- a/chrome/browser/autofill/android/personal_data_manager_android.cc
|
| +++ b/chrome/browser/autofill/android/personal_data_manager_android.cc
|
| @@ -266,7 +266,6 @@ class FullCardRequester : public payments::FullCardRequest::Delegate,
|
| DISALLOW_COPY_AND_ASSIGN(FullCardRequester);
|
| };
|
|
|
| -// Self-deleting requester of address normalization.
|
| class AddressNormalizationRequester
|
| : public PersonalDataManagerAndroid::Delegate,
|
| public base::SupportsWeakPtr<AddressNormalizationRequester> {
|
| @@ -285,7 +284,7 @@ class AddressNormalizationRequester
|
| }
|
|
|
| private:
|
| - virtual ~AddressNormalizationRequester() {}
|
| + ~AddressNormalizationRequester() override {}
|
|
|
| void OnRulesSuccessfullyLoaded() override {
|
| if (personal_data_manager_android_) {
|
| @@ -294,8 +293,6 @@ class AddressNormalizationRequester
|
| env, jdelegate_, personal_data_manager_android_->NormalizeAddress(
|
| guid_, region_code_, env));
|
| }
|
| -
|
| - delete this;
|
| }
|
|
|
| ScopedJavaGlobalRef<jobject> jdelegate_;
|
| @@ -580,6 +577,7 @@ void PersonalDataManagerAndroid::SetProfileUseStatsForTesting(
|
| ConvertJavaStringToUTF8(env, jguid));
|
| profile->set_use_count(static_cast<size_t>(count));
|
| profile->set_use_date(base::Time::FromTimeT(date));
|
| +
|
| personal_data_manager_->NotifyPersonalDataChangedForTest();
|
| }
|
|
|
| @@ -623,6 +621,7 @@ void PersonalDataManagerAndroid::SetCreditCardUseStatsForTesting(
|
| ConvertJavaStringToUTF8(env, jguid));
|
| card->set_use_count(static_cast<size_t>(count));
|
| card->set_use_date(base::Time::FromTimeT(date));
|
| +
|
| personal_data_manager_->NotifyPersonalDataChangedForTest();
|
| }
|
|
|
| @@ -662,11 +661,10 @@ void PersonalDataManagerAndroid::OnAddressValidationRulesLoaded(
|
| const std::string& region_code,
|
| bool success) {
|
| // Check if an address normalization is pending.
|
| - std::map<std::string, Delegate*>::iterator it =
|
| - pending_normalization_.find(region_code);
|
| + auto it = pending_normalization_.find(region_code);
|
| if (it != pending_normalization_.end()) {
|
| - // The Delegate will self delete after normalizing.
|
| - it->second->OnRulesSuccessfullyLoaded();
|
| + for (size_t i = 0; i < it->second.size(); ++i)
|
| + it->second[i]->OnRulesSuccessfullyLoaded();
|
| pending_normalization_.erase(it);
|
| }
|
| }
|
| @@ -680,8 +678,8 @@ jboolean PersonalDataManagerAndroid::StartAddressNormalization(
|
| const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code);
|
| const std::string guid = ConvertJavaStringToUTF8(env, jguid);
|
|
|
| - Delegate* requester = new AddressNormalizationRequester(
|
| - env, jdelegate, region_code, guid, AsWeakPtr());
|
| + std::unique_ptr<Delegate> requester(new AddressNormalizationRequester(
|
| + env, jdelegate, region_code, guid, AsWeakPtr()));
|
|
|
| // Check if the rules are already loaded.
|
| if (AreRulesLoadedForRegion(region_code)) {
|
| @@ -690,8 +688,17 @@ jboolean PersonalDataManagerAndroid::StartAddressNormalization(
|
| } else {
|
| // Setup the variables so the profile gets normalized when the rules have
|
| // finished loading.
|
| - pending_normalization_.insert(
|
| - std::pair<std::string, Delegate*>(region_code, requester));
|
| + auto it = pending_normalization_.find(region_code);
|
| + if (it == pending_normalization_.end()) {
|
| + // If no entry exists yet, create the entry and assign it to |it|.
|
| + it = pending_normalization_
|
| + .insert(std::make_pair(region_code,
|
| + std::vector<std::unique_ptr<Delegate>>()))
|
| + .first;
|
| + }
|
| +
|
| + it->second.push_back(std::move(requester));
|
| +
|
| return true;
|
| }
|
| }
|
| @@ -723,7 +730,7 @@ ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::NormalizeAddress(
|
| return CreateJavaProfileFromNative(env, *profile);
|
| }
|
|
|
| -void PersonalDataManagerAndroid::CancelPendingAddressNormalization(
|
| +void PersonalDataManagerAndroid::CancelPendingAddressNormalizations(
|
| JNIEnv* env,
|
| const base::android::JavaParamRef<jobject>& unused_obj) {
|
| pending_normalization_.clear();
|
|
|