| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/autofill/browser/personal_data_manager.h" | 5 #include "components/autofill/browser/personal_data_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <functional> | 8 #include <functional> |
| 9 #include <iterator> | 9 #include <iterator> |
| 10 | 10 |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/memory/ref_counted.h" |
| 12 #include "base/prefs/pref_service.h" | 13 #include "base/prefs/pref_service.h" |
| 13 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
| 14 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
| 15 #include "chrome/browser/webdata/autofill_web_data_service.h" | 16 #include "chrome/browser/webdata/autofill_web_data_service.h" |
| 16 #include "chrome/common/chrome_notification_types.h" | 17 #include "chrome/common/chrome_notification_types.h" |
| 17 #include "components/autofill/browser/autofill-inl.h" | 18 #include "components/autofill/browser/autofill-inl.h" |
| 18 #include "components/autofill/browser/autofill_country.h" | 19 #include "components/autofill/browser/autofill_country.h" |
| 19 #include "components/autofill/browser/autofill_field.h" | 20 #include "components/autofill/browser/autofill_field.h" |
| 20 #include "components/autofill/browser/autofill_metrics.h" | 21 #include "components/autofill/browser/autofill_metrics.h" |
| 21 #include "components/autofill/browser/form_group.h" | 22 #include "components/autofill/browser/form_group.h" |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 scoped_refptr<AutofillWebDataService> autofill_data( | 125 scoped_refptr<AutofillWebDataService> autofill_data( |
| 125 AutofillWebDataService::FromBrowserContext(browser_context_)); | 126 AutofillWebDataService::FromBrowserContext(browser_context_)); |
| 126 | 127 |
| 127 // WebDataService may not be available in tests. | 128 // WebDataService may not be available in tests. |
| 128 if (!autofill_data.get()) | 129 if (!autofill_data.get()) |
| 129 return; | 130 return; |
| 130 | 131 |
| 131 LoadProfiles(); | 132 LoadProfiles(); |
| 132 LoadCreditCards(); | 133 LoadCreditCards(); |
| 133 | 134 |
| 134 notification_registrar_.Add( | 135 autofill_data->AddObserver(this); |
| 135 this, | |
| 136 chrome::NOTIFICATION_AUTOFILL_MULTIPLE_CHANGED, | |
| 137 autofill_data->GetNotificationSource()); | |
| 138 } | 136 } |
| 139 | 137 |
| 140 PersonalDataManager::~PersonalDataManager() { | 138 PersonalDataManager::~PersonalDataManager() { |
| 141 CancelPendingQuery(&pending_profiles_query_); | 139 CancelPendingQuery(&pending_profiles_query_); |
| 142 CancelPendingQuery(&pending_creditcards_query_); | 140 CancelPendingQuery(&pending_creditcards_query_); |
| 141 |
| 142 if (!browser_context_) |
| 143 return; |
| 144 |
| 145 scoped_refptr<AutofillWebDataService> autofill_data( |
| 146 AutofillWebDataService::FromBrowserContext(browser_context_)); |
| 147 if (autofill_data.get()) |
| 148 autofill_data->RemoveObserver(this); |
| 143 } | 149 } |
| 144 | 150 |
| 145 void PersonalDataManager::OnWebDataServiceRequestDone( | 151 void PersonalDataManager::OnWebDataServiceRequestDone( |
| 146 WebDataServiceBase::Handle h, | 152 WebDataServiceBase::Handle h, |
| 147 const WDTypedResult* result) { | 153 const WDTypedResult* result) { |
| 148 DCHECK(pending_profiles_query_ || pending_creditcards_query_); | 154 DCHECK(pending_profiles_query_ || pending_creditcards_query_); |
| 149 | 155 |
| 150 if (!result) { | 156 if (!result) { |
| 151 // Error from the web database. | 157 // Error from the web database. |
| 152 if (h == pending_creditcards_query_) | 158 if (h == pending_creditcards_query_) |
| (...skipping 22 matching lines...) Expand all Loading... |
| 175 is_data_loaded_ = true; | 181 is_data_loaded_ = true; |
| 176 std::vector<AutofillProfile*> profile_pointers(web_profiles_.size()); | 182 std::vector<AutofillProfile*> profile_pointers(web_profiles_.size()); |
| 177 std::copy(web_profiles_.begin(), web_profiles_.end(), | 183 std::copy(web_profiles_.begin(), web_profiles_.end(), |
| 178 profile_pointers.begin()); | 184 profile_pointers.begin()); |
| 179 AutofillProfile::AdjustInferredLabels(&profile_pointers); | 185 AutofillProfile::AdjustInferredLabels(&profile_pointers); |
| 180 FOR_EACH_OBSERVER(PersonalDataManagerObserver, observers_, | 186 FOR_EACH_OBSERVER(PersonalDataManagerObserver, observers_, |
| 181 OnPersonalDataChanged()); | 187 OnPersonalDataChanged()); |
| 182 } | 188 } |
| 183 } | 189 } |
| 184 | 190 |
| 191 void PersonalDataManager::AutofillMultipleChanged() { |
| 192 Refresh(); |
| 193 } |
| 194 |
| 185 void PersonalDataManager::AddObserver(PersonalDataManagerObserver* observer) { | 195 void PersonalDataManager::AddObserver(PersonalDataManagerObserver* observer) { |
| 186 observers_.AddObserver(observer); | 196 observers_.AddObserver(observer); |
| 187 } | 197 } |
| 188 | 198 |
| 189 void PersonalDataManager::RemoveObserver( | 199 void PersonalDataManager::RemoveObserver( |
| 190 PersonalDataManagerObserver* observer) { | 200 PersonalDataManagerObserver* observer) { |
| 191 observers_.RemoveObserver(observer); | 201 observers_.RemoveObserver(observer); |
| 192 } | 202 } |
| 193 | 203 |
| 194 void PersonalDataManager::Observe(int type, | |
| 195 const content::NotificationSource& source, | |
| 196 const content::NotificationDetails& details) { | |
| 197 DCHECK_EQ(type, chrome::NOTIFICATION_AUTOFILL_MULTIPLE_CHANGED); | |
| 198 | |
| 199 if (DCHECK_IS_ON()) { | |
| 200 scoped_refptr<AutofillWebDataService> autofill_data( | |
| 201 AutofillWebDataService::FromBrowserContext(browser_context_)); | |
| 202 | |
| 203 DCHECK(autofill_data.get() && | |
| 204 autofill_data->GetNotificationSource() == source); | |
| 205 } | |
| 206 | |
| 207 Refresh(); | |
| 208 } | |
| 209 | |
| 210 bool PersonalDataManager::ImportFormData( | 204 bool PersonalDataManager::ImportFormData( |
| 211 const FormStructure& form, | 205 const FormStructure& form, |
| 212 const CreditCard** imported_credit_card) { | 206 const CreditCard** imported_credit_card) { |
| 213 scoped_ptr<AutofillProfile> imported_profile(new AutofillProfile); | 207 scoped_ptr<AutofillProfile> imported_profile(new AutofillProfile); |
| 214 scoped_ptr<CreditCard> local_imported_credit_card(new CreditCard); | 208 scoped_ptr<CreditCard> local_imported_credit_card(new CreditCard); |
| 215 | 209 |
| 216 // Parse the form and construct a profile based on the information that is | 210 // Parse the form and construct a profile based on the information that is |
| 217 // possible to import. | 211 // possible to import. |
| 218 int importable_credit_card_fields = 0; | 212 int importable_credit_card_fields = 0; |
| 219 | 213 |
| (...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 963 | 957 |
| 964 void PersonalDataManager::set_metric_logger( | 958 void PersonalDataManager::set_metric_logger( |
| 965 const AutofillMetrics* metric_logger) { | 959 const AutofillMetrics* metric_logger) { |
| 966 metric_logger_.reset(metric_logger); | 960 metric_logger_.reset(metric_logger); |
| 967 } | 961 } |
| 968 | 962 |
| 969 void PersonalDataManager::set_browser_context( | 963 void PersonalDataManager::set_browser_context( |
| 970 content::BrowserContext* context) { | 964 content::BrowserContext* context) { |
| 971 browser_context_ = context; | 965 browser_context_ = context; |
| 972 } | 966 } |
| OLD | NEW |