| 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/webdata/autofill_webdata_service.h" | 5 #include "components/autofill/browser/webdata/autofill_webdata_service.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "components/autofill/browser/autofill_country.h" | 9 #include "components/autofill/browser/autofill_country.h" |
| 10 #include "components/autofill/browser/autofill_profile.h" | 10 #include "components/autofill/browser/autofill_profile.h" |
| 11 #include "components/autofill/browser/credit_card.h" | 11 #include "components/autofill/browser/credit_card.h" |
| 12 #include "components/autofill/browser/webdata/autofill_change.h" | 12 #include "components/autofill/browser/webdata/autofill_change.h" |
| 13 #include "components/autofill/browser/webdata/autofill_entry.h" | 13 #include "components/autofill/browser/webdata/autofill_entry.h" |
| 14 #include "components/autofill/browser/webdata/autofill_table.h" | 14 #include "components/autofill/browser/webdata/autofill_table.h" |
| 15 #include "components/autofill/browser/webdata/autofill_webdata_backend.h" | 15 #include "components/autofill/browser/webdata/autofill_webdata_backend_impl.h" |
| 16 #include "components/autofill/browser/webdata/autofill_webdata_service_observer.
h" | 16 #include "components/autofill/browser/webdata/autofill_webdata_service_observer.
h" |
| 17 #include "components/autofill/common/form_field_data.h" | 17 #include "components/autofill/common/form_field_data.h" |
| 18 #include "components/webdata/common/web_data_service_backend.h" |
| 18 #include "components/webdata/common/web_database_service.h" | 19 #include "components/webdata/common/web_database_service.h" |
| 19 | 20 |
| 20 using base::Bind; | 21 using base::Bind; |
| 21 using base::Time; | 22 using base::Time; |
| 22 using content::BrowserThread; | 23 using content::BrowserThread; |
| 23 | 24 |
| 24 namespace autofill { | 25 namespace autofill { |
| 25 | 26 |
| 26 // static | 27 // static |
| 27 void AutofillWebDataService::NotifyOfMultipleAutofillChanges( | 28 void AutofillWebDataService::NotifyOfMultipleAutofillChanges( |
| 28 AutofillWebDataService* web_data_service) { | 29 AutofillWebDataService* web_data_service) { |
| 29 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 30 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 30 | 31 |
| 31 if (!web_data_service) | 32 if (!web_data_service) |
| 32 return; | 33 return; |
| 33 | 34 |
| 34 BrowserThread::PostTask( | 35 BrowserThread::PostTask( |
| 35 BrowserThread::UI, FROM_HERE, | 36 BrowserThread::UI, FROM_HERE, |
| 36 Bind(&AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread, | 37 Bind(&AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread, |
| 37 make_scoped_refptr(web_data_service))); | 38 make_scoped_refptr(web_data_service))); |
| 38 } | 39 } |
| 39 | 40 |
| 40 AutofillWebDataService::AutofillWebDataService( | 41 AutofillWebDataService::AutofillWebDataService( |
| 41 scoped_refptr<WebDatabaseService> wdbs, | 42 scoped_refptr<WebDatabaseService> wdbs, |
| 42 const ProfileErrorCallback& callback) | 43 const ProfileErrorCallback& callback) |
| 43 : WebDataServiceBase(wdbs, callback), | 44 : WebDataServiceBase(wdbs, callback), |
| 44 autofill_backend_(new AutofillWebDataBackend()) { | 45 weak_ptr_factory_(this), |
| 46 autofill_backend_(NULL) { |
| 47 |
| 48 base::Closure on_changed_callback = Bind( |
| 49 &AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread, |
| 50 weak_ptr_factory_.GetWeakPtr()); |
| 51 |
| 52 autofill_backend_ = new AutofillWebDataBackendImpl( |
| 53 wdbs_->GetBackend(), |
| 54 on_changed_callback); |
| 45 } | 55 } |
| 46 | 56 |
| 47 AutofillWebDataService::AutofillWebDataService() | 57 AutofillWebDataService::AutofillWebDataService() |
| 48 : WebDataServiceBase(NULL, | 58 : WebDataServiceBase(NULL, |
| 49 WebDataServiceBase::ProfileErrorCallback()), | 59 WebDataServiceBase::ProfileErrorCallback()), |
| 50 autofill_backend_(new AutofillWebDataBackend()) { | 60 weak_ptr_factory_(this), |
| 61 autofill_backend_(new AutofillWebDataBackendImpl(NULL, base::Closure())) { |
| 51 } | 62 } |
| 52 | 63 |
| 53 void AutofillWebDataService::ShutdownOnUIThread() { | 64 void AutofillWebDataService::ShutdownOnUIThread() { |
| 65 weak_ptr_factory_.InvalidateWeakPtrs(); |
| 54 BrowserThread::PostTask( | 66 BrowserThread::PostTask( |
| 55 BrowserThread::DB, FROM_HERE, | 67 BrowserThread::DB, FROM_HERE, |
| 56 base::Bind(&AutofillWebDataService::ShutdownOnDBThread, this)); | 68 base::Bind(&AutofillWebDataService::ShutdownOnDBThread, this)); |
| 57 WebDataServiceBase::ShutdownOnUIThread(); | 69 WebDataServiceBase::ShutdownOnUIThread(); |
| 58 } | 70 } |
| 59 | 71 |
| 60 void AutofillWebDataService::AddFormFields( | 72 void AutofillWebDataService::AddFormFields( |
| 61 const std::vector<FormFieldData>& fields) { | 73 const std::vector<FormFieldData>& fields) { |
| 62 wdbs_->ScheduleDBTask(FROM_HERE, | 74 wdbs_->ScheduleDBTask(FROM_HERE, |
| 63 Bind(&AutofillWebDataBackend::AddFormElements, | 75 Bind(&AutofillWebDataBackendImpl::AddFormElements, |
| 64 autofill_backend_, fields)); | 76 autofill_backend_, fields)); |
| 65 } | 77 } |
| 66 | 78 |
| 67 WebDataServiceBase::Handle AutofillWebDataService::GetFormValuesForElementName( | 79 WebDataServiceBase::Handle AutofillWebDataService::GetFormValuesForElementName( |
| 68 const base::string16& name, const base::string16& prefix, int limit, | 80 const base::string16& name, const base::string16& prefix, int limit, |
| 69 WebDataServiceConsumer* consumer) { | 81 WebDataServiceConsumer* consumer) { |
| 70 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, | 82 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, |
| 71 Bind(&AutofillWebDataBackend::GetFormValuesForElementName, | 83 Bind(&AutofillWebDataBackendImpl::GetFormValuesForElementName, |
| 72 autofill_backend_, name, prefix, limit), consumer); | 84 autofill_backend_, name, prefix, limit), consumer); |
| 73 } | 85 } |
| 74 | 86 |
| 75 WebDataServiceBase::Handle AutofillWebDataService::HasFormElements( | 87 WebDataServiceBase::Handle AutofillWebDataService::HasFormElements( |
| 76 WebDataServiceConsumer* consumer) { | 88 WebDataServiceConsumer* consumer) { |
| 77 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, | 89 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, |
| 78 Bind(&AutofillWebDataBackend::HasFormElements, autofill_backend_), | 90 Bind(&AutofillWebDataBackendImpl::HasFormElements, autofill_backend_), |
| 79 consumer); | 91 consumer); |
| 80 } | 92 } |
| 81 | 93 |
| 82 void AutofillWebDataService::RemoveFormElementsAddedBetween( | 94 void AutofillWebDataService::RemoveFormElementsAddedBetween( |
| 83 const Time& delete_begin, const Time& delete_end) { | 95 const Time& delete_begin, const Time& delete_end) { |
| 84 wdbs_->ScheduleDBTask(FROM_HERE, | 96 wdbs_->ScheduleDBTask(FROM_HERE, |
| 85 Bind(&AutofillWebDataBackend::RemoveFormElementsAddedBetween, | 97 Bind(&AutofillWebDataBackendImpl::RemoveFormElementsAddedBetween, |
| 86 autofill_backend_, delete_begin, delete_end)); | 98 autofill_backend_, delete_begin, delete_end)); |
| 87 } | 99 } |
| 88 | 100 |
| 89 void AutofillWebDataService::RemoveExpiredFormElements() { | 101 void AutofillWebDataService::RemoveExpiredFormElements() { |
| 90 wdbs_->ScheduleDBTask(FROM_HERE, | 102 wdbs_->ScheduleDBTask(FROM_HERE, |
| 91 Bind(&AutofillWebDataBackend::RemoveExpiredFormElements, | 103 Bind(&AutofillWebDataBackendImpl::RemoveExpiredFormElements, |
| 92 autofill_backend_)); | 104 autofill_backend_)); |
| 93 } | 105 } |
| 94 | 106 |
| 95 void AutofillWebDataService::RemoveFormValueForElementName( | 107 void AutofillWebDataService::RemoveFormValueForElementName( |
| 96 const base::string16& name, const base::string16& value) { | 108 const base::string16& name, const base::string16& value) { |
| 97 wdbs_->ScheduleDBTask(FROM_HERE, | 109 wdbs_->ScheduleDBTask(FROM_HERE, |
| 98 Bind(&AutofillWebDataBackend::RemoveFormValueForElementName, | 110 Bind(&AutofillWebDataBackendImpl::RemoveFormValueForElementName, |
| 99 autofill_backend_, name, value)); | 111 autofill_backend_, name, value)); |
| 100 } | 112 } |
| 101 | 113 |
| 102 void AutofillWebDataService::AddAutofillProfile( | 114 void AutofillWebDataService::AddAutofillProfile( |
| 103 const AutofillProfile& profile) { | 115 const AutofillProfile& profile) { |
| 104 wdbs_->ScheduleDBTask(FROM_HERE, | 116 wdbs_->ScheduleDBTask(FROM_HERE, |
| 105 Bind(&AutofillWebDataBackend::AddAutofillProfile, | 117 Bind(&AutofillWebDataBackendImpl::AddAutofillProfile, |
| 106 autofill_backend_, profile)); | 118 autofill_backend_, profile)); |
| 107 } | 119 } |
| 108 | 120 |
| 109 void AutofillWebDataService::UpdateAutofillProfile( | 121 void AutofillWebDataService::UpdateAutofillProfile( |
| 110 const AutofillProfile& profile) { | 122 const AutofillProfile& profile) { |
| 111 wdbs_->ScheduleDBTask(FROM_HERE, | 123 wdbs_->ScheduleDBTask(FROM_HERE, |
| 112 Bind(&AutofillWebDataBackend::UpdateAutofillProfile, | 124 Bind(&AutofillWebDataBackendImpl::UpdateAutofillProfile, |
| 113 autofill_backend_, profile)); | 125 autofill_backend_, profile)); |
| 114 } | 126 } |
| 115 | 127 |
| 116 void AutofillWebDataService::RemoveAutofillProfile( | 128 void AutofillWebDataService::RemoveAutofillProfile( |
| 117 const std::string& guid) { | 129 const std::string& guid) { |
| 118 wdbs_->ScheduleDBTask(FROM_HERE, | 130 wdbs_->ScheduleDBTask(FROM_HERE, |
| 119 Bind(&AutofillWebDataBackend::RemoveAutofillProfile, | 131 Bind(&AutofillWebDataBackendImpl::RemoveAutofillProfile, |
| 120 autofill_backend_, guid)); | 132 autofill_backend_, guid)); |
| 121 } | 133 } |
| 122 | 134 |
| 123 WebDataServiceBase::Handle AutofillWebDataService::GetAutofillProfiles( | 135 WebDataServiceBase::Handle AutofillWebDataService::GetAutofillProfiles( |
| 124 WebDataServiceConsumer* consumer) { | 136 WebDataServiceConsumer* consumer) { |
| 125 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, | 137 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, |
| 126 Bind(&AutofillWebDataBackend::GetAutofillProfiles, autofill_backend_), | 138 Bind(&AutofillWebDataBackendImpl::GetAutofillProfiles, autofill_backend_), |
| 127 consumer); | 139 consumer); |
| 128 } | 140 } |
| 129 | 141 |
| 130 void AutofillWebDataService::AddCreditCard(const CreditCard& credit_card) { | 142 void AutofillWebDataService::AddCreditCard(const CreditCard& credit_card) { |
| 131 wdbs_->ScheduleDBTask( | 143 wdbs_->ScheduleDBTask( |
| 132 FROM_HERE, | 144 FROM_HERE, |
| 133 Bind(&AutofillWebDataBackend::AddCreditCard, | 145 Bind(&AutofillWebDataBackendImpl::AddCreditCard, |
| 134 autofill_backend_, credit_card)); | 146 autofill_backend_, credit_card)); |
| 135 } | 147 } |
| 136 | 148 |
| 137 void AutofillWebDataService::UpdateCreditCard( | 149 void AutofillWebDataService::UpdateCreditCard( |
| 138 const CreditCard& credit_card) { | 150 const CreditCard& credit_card) { |
| 139 wdbs_->ScheduleDBTask( | 151 wdbs_->ScheduleDBTask( |
| 140 FROM_HERE, | 152 FROM_HERE, |
| 141 Bind(&AutofillWebDataBackend::UpdateCreditCard, | 153 Bind(&AutofillWebDataBackendImpl::UpdateCreditCard, |
| 142 autofill_backend_, credit_card)); | 154 autofill_backend_, credit_card)); |
| 143 } | 155 } |
| 144 | 156 |
| 145 void AutofillWebDataService::RemoveCreditCard(const std::string& guid) { | 157 void AutofillWebDataService::RemoveCreditCard(const std::string& guid) { |
| 146 wdbs_->ScheduleDBTask( | 158 wdbs_->ScheduleDBTask( |
| 147 FROM_HERE, | 159 FROM_HERE, |
| 148 Bind(&AutofillWebDataBackend::RemoveCreditCard, autofill_backend_, guid)); | 160 Bind(&AutofillWebDataBackendImpl::RemoveCreditCard, |
| 161 autofill_backend_, guid)); |
| 149 } | 162 } |
| 150 | 163 |
| 151 WebDataServiceBase::Handle AutofillWebDataService::GetCreditCards( | 164 WebDataServiceBase::Handle AutofillWebDataService::GetCreditCards( |
| 152 WebDataServiceConsumer* consumer) { | 165 WebDataServiceConsumer* consumer) { |
| 153 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, | 166 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, |
| 154 Bind(&AutofillWebDataBackend::GetCreditCards, autofill_backend_), | 167 Bind(&AutofillWebDataBackendImpl::GetCreditCards, autofill_backend_), |
| 155 consumer); | 168 consumer); |
| 156 } | 169 } |
| 157 | 170 |
| 158 void AutofillWebDataService::RemoveAutofillDataModifiedBetween( | 171 void AutofillWebDataService::RemoveAutofillDataModifiedBetween( |
| 159 const Time& delete_begin, | 172 const Time& delete_begin, |
| 160 const Time& delete_end) { | 173 const Time& delete_end) { |
| 161 wdbs_->ScheduleDBTask( | 174 wdbs_->ScheduleDBTask( |
| 162 FROM_HERE, | 175 FROM_HERE, |
| 163 Bind(&AutofillWebDataBackend::RemoveAutofillDataModifiedBetween, | 176 Bind(&AutofillWebDataBackendImpl::RemoveAutofillDataModifiedBetween, |
| 164 autofill_backend_, delete_begin, delete_end)); | 177 autofill_backend_, delete_begin, delete_end)); |
| 165 } | 178 } |
| 166 | 179 |
| 167 void AutofillWebDataService::AddObserver( | 180 void AutofillWebDataService::AddObserver( |
| 168 AutofillWebDataServiceObserverOnDBThread* observer) { | 181 AutofillWebDataServiceObserverOnDBThread* observer) { |
| 169 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 182 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 170 if (autofill_backend_) | 183 if (autofill_backend_) |
| 171 autofill_backend_->AddObserver(observer); | 184 autofill_backend_->AddObserver(observer); |
| 172 } | 185 } |
| 173 | 186 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 190 ui_observer_list_.RemoveObserver(observer); | 203 ui_observer_list_.RemoveObserver(observer); |
| 191 } | 204 } |
| 192 | 205 |
| 193 base::SupportsUserData* AutofillWebDataService::GetDBUserData() { | 206 base::SupportsUserData* AutofillWebDataService::GetDBUserData() { |
| 194 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 207 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 195 if (!db_thread_user_data_) | 208 if (!db_thread_user_data_) |
| 196 db_thread_user_data_.reset(new SupportsUserDataAggregatable()); | 209 db_thread_user_data_.reset(new SupportsUserDataAggregatable()); |
| 197 return db_thread_user_data_.get(); | 210 return db_thread_user_data_.get(); |
| 198 } | 211 } |
| 199 | 212 |
| 213 void AutofillWebDataService::GetAutofillBackend( |
| 214 const base::Callback<void(AutofillWebDataBackend*)>& callback) { |
| 215 BrowserThread::PostTask(BrowserThread::DB, |
| 216 FROM_HERE, |
| 217 base::Bind(callback, autofill_backend_)); |
| 218 } |
| 219 |
| 200 void AutofillWebDataService::ShutdownOnDBThread() { | 220 void AutofillWebDataService::ShutdownOnDBThread() { |
| 201 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 221 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 202 db_thread_user_data_.reset(); | 222 db_thread_user_data_.reset(); |
| 203 } | 223 } |
| 204 | 224 |
| 205 AutofillWebDataService::~AutofillWebDataService() { | 225 AutofillWebDataService::~AutofillWebDataService() { |
| 206 DCHECK(!db_thread_user_data_.get()) << "Forgot to call ShutdownOnUIThread?"; | 226 DCHECK(!db_thread_user_data_.get()) << "Forgot to call ShutdownOnUIThread?"; |
| 207 } | 227 } |
| 208 | 228 |
| 209 void AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread() { | 229 void AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread() { |
| 210 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 230 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 211 FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnUIThread, | 231 FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnUIThread, |
| 212 ui_observer_list_, | 232 ui_observer_list_, |
| 213 AutofillMultipleChanged()); | 233 AutofillMultipleChanged()); |
| 214 } | 234 } |
| 215 | 235 |
| 216 } // namespace autofill | 236 } // namespace autofill |
| OLD | NEW |