Index: chrome/browser/autofill/personal_data_manager.cc |
diff --git a/chrome/browser/autofill/personal_data_manager.cc b/chrome/browser/autofill/personal_data_manager.cc |
index c138e5c8f67e9e158f54ff5017618c878a621635..3253bf7e7bf07dcc0baedf87cb9ab493148b860d 100644 |
--- a/chrome/browser/autofill/personal_data_manager.cc |
+++ b/chrome/browser/autofill/personal_data_manager.cc |
@@ -59,16 +59,7 @@ void PersonalDataManager::OnWebDataServiceRequestDone( |
// If both requests have responded, then all personal data is loaded. |
if (pending_profiles_query_ == 0 && pending_creditcards_query_ == 0) { |
is_data_loaded_ = true; |
- // Copy is needed as observer can unsubscribe itself when notified. |
- std::vector<PersonalDataManager::Observer*> temporary_copy; |
- temporary_copy.resize(observers_.size()); |
- std::copy(observers_.begin(), observers_.end(), temporary_copy.begin()); |
- for (std::vector<PersonalDataManager::Observer*>::iterator |
- iter = temporary_copy.begin(); |
- iter != temporary_copy.end(); |
- ++iter) { |
- (*iter)->OnPersonalDataLoaded(); |
- } |
+ FOR_EACH_OBSERVER(Observer, observers_, OnPersonalDataLoaded()); |
} |
} |
@@ -91,29 +82,15 @@ void PersonalDataManager::OnAutoFillDialogApply( |
} |
void PersonalDataManager::SetObserver(PersonalDataManager::Observer* observer) { |
- for (std::vector<PersonalDataManager::Observer*>::iterator |
- iter = observers_.begin(); |
- iter != observers_.end(); |
- ++iter) { |
- if (*iter == observer) { |
- // Already have this observer. |
- return; |
- } |
- } |
- observers_.push_back(observer); |
+ // TODO: RemoveObserver is for compatability with old code, it should be |
+ // nuked. |
+ observers_.RemoveObserver(observer); |
+ observers_.AddObserver(observer); |
} |
void PersonalDataManager::RemoveObserver( |
PersonalDataManager::Observer* observer) { |
- for (std::vector<PersonalDataManager::Observer*>::iterator |
- iter = observers_.begin(); |
- iter != observers_.end(); |
- ++iter) { |
- if (*iter == observer) { |
- observers_.erase(iter); |
- return; |
- } |
- } |
+ observers_.RemoveObserver(observer); |
} |
bool PersonalDataManager::ImportFormData( |
@@ -298,6 +275,8 @@ void PersonalDataManager::SetProfiles(std::vector<AutoFillProfile>* profiles) { |
// Read our writes to ensure consistency with the database. |
Refresh(); |
+ |
+ FOR_EACH_OBSERVER(Observer, observers_, OnPersonalDataChanged()); |
} |
void PersonalDataManager::SetCreditCards( |
@@ -361,6 +340,8 @@ void PersonalDataManager::SetCreditCards( |
iter != credit_cards->end(); ++iter) { |
credit_cards_.push_back(new CreditCard(*iter)); |
} |
+ |
+ FOR_EACH_OBSERVER(Observer, observers_, OnPersonalDataChanged()); |
} |
void PersonalDataManager::GetPossibleFieldTypes(const string16& text, |