| 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 void AutofillWebDataService::RemoveFormElementsAddedBetween( | 87 void AutofillWebDataService::RemoveFormElementsAddedBetween( |
| 76 const Time& delete_begin, const Time& delete_end) { | 88 const Time& delete_begin, const Time& delete_end) { |
| 77 wdbs_->ScheduleDBTask(FROM_HERE, | 89 wdbs_->ScheduleDBTask(FROM_HERE, |
| 78 Bind(&AutofillWebDataBackend::RemoveFormElementsAddedBetween, | 90 Bind(&AutofillWebDataBackendImpl::RemoveFormElementsAddedBetween, |
| 79 autofill_backend_, delete_begin, delete_end)); | 91 autofill_backend_, delete_begin, delete_end)); |
| 80 } | 92 } |
| 81 | 93 |
| 82 void AutofillWebDataService::RemoveExpiredFormElements() { | 94 void AutofillWebDataService::RemoveExpiredFormElements() { |
| 83 wdbs_->ScheduleDBTask(FROM_HERE, | 95 wdbs_->ScheduleDBTask(FROM_HERE, |
| 84 Bind(&AutofillWebDataBackend::RemoveExpiredFormElements, | 96 Bind(&AutofillWebDataBackendImpl::RemoveExpiredFormElements, |
| 85 autofill_backend_)); | 97 autofill_backend_)); |
| 86 } | 98 } |
| 87 | 99 |
| 88 void AutofillWebDataService::RemoveFormValueForElementName( | 100 void AutofillWebDataService::RemoveFormValueForElementName( |
| 89 const base::string16& name, const base::string16& value) { | 101 const base::string16& name, const base::string16& value) { |
| 90 wdbs_->ScheduleDBTask(FROM_HERE, | 102 wdbs_->ScheduleDBTask(FROM_HERE, |
| 91 Bind(&AutofillWebDataBackend::RemoveFormValueForElementName, | 103 Bind(&AutofillWebDataBackendImpl::RemoveFormValueForElementName, |
| 92 autofill_backend_, name, value)); | 104 autofill_backend_, name, value)); |
| 93 } | 105 } |
| 94 | 106 |
| 95 void AutofillWebDataService::AddAutofillProfile( | 107 void AutofillWebDataService::AddAutofillProfile( |
| 96 const AutofillProfile& profile) { | 108 const AutofillProfile& profile) { |
| 97 wdbs_->ScheduleDBTask(FROM_HERE, | 109 wdbs_->ScheduleDBTask(FROM_HERE, |
| 98 Bind(&AutofillWebDataBackend::AddAutofillProfile, | 110 Bind(&AutofillWebDataBackendImpl::AddAutofillProfile, |
| 99 autofill_backend_, profile)); | 111 autofill_backend_, profile)); |
| 100 } | 112 } |
| 101 | 113 |
| 102 void AutofillWebDataService::UpdateAutofillProfile( | 114 void AutofillWebDataService::UpdateAutofillProfile( |
| 103 const AutofillProfile& profile) { | 115 const AutofillProfile& profile) { |
| 104 wdbs_->ScheduleDBTask(FROM_HERE, | 116 wdbs_->ScheduleDBTask(FROM_HERE, |
| 105 Bind(&AutofillWebDataBackend::UpdateAutofillProfile, | 117 Bind(&AutofillWebDataBackendImpl::UpdateAutofillProfile, |
| 106 autofill_backend_, profile)); | 118 autofill_backend_, profile)); |
| 107 } | 119 } |
| 108 | 120 |
| 109 void AutofillWebDataService::RemoveAutofillProfile( | 121 void AutofillWebDataService::RemoveAutofillProfile( |
| 110 const std::string& guid) { | 122 const std::string& guid) { |
| 111 wdbs_->ScheduleDBTask(FROM_HERE, | 123 wdbs_->ScheduleDBTask(FROM_HERE, |
| 112 Bind(&AutofillWebDataBackend::RemoveAutofillProfile, | 124 Bind(&AutofillWebDataBackendImpl::RemoveAutofillProfile, |
| 113 autofill_backend_, guid)); | 125 autofill_backend_, guid)); |
| 114 } | 126 } |
| 115 | 127 |
| 116 WebDataServiceBase::Handle AutofillWebDataService::GetAutofillProfiles( | 128 WebDataServiceBase::Handle AutofillWebDataService::GetAutofillProfiles( |
| 117 WebDataServiceConsumer* consumer) { | 129 WebDataServiceConsumer* consumer) { |
| 118 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, | 130 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, |
| 119 Bind(&AutofillWebDataBackend::GetAutofillProfiles, autofill_backend_), | 131 Bind(&AutofillWebDataBackendImpl::GetAutofillProfiles, autofill_backend_), |
| 120 consumer); | 132 consumer); |
| 121 } | 133 } |
| 122 | 134 |
| 123 void AutofillWebDataService::AddCreditCard(const CreditCard& credit_card) { | 135 void AutofillWebDataService::AddCreditCard(const CreditCard& credit_card) { |
| 124 wdbs_->ScheduleDBTask( | 136 wdbs_->ScheduleDBTask( |
| 125 FROM_HERE, | 137 FROM_HERE, |
| 126 Bind(&AutofillWebDataBackend::AddCreditCard, | 138 Bind(&AutofillWebDataBackendImpl::AddCreditCard, |
| 127 autofill_backend_, credit_card)); | 139 autofill_backend_, credit_card)); |
| 128 } | 140 } |
| 129 | 141 |
| 130 void AutofillWebDataService::UpdateCreditCard( | 142 void AutofillWebDataService::UpdateCreditCard( |
| 131 const CreditCard& credit_card) { | 143 const CreditCard& credit_card) { |
| 132 wdbs_->ScheduleDBTask( | 144 wdbs_->ScheduleDBTask( |
| 133 FROM_HERE, | 145 FROM_HERE, |
| 134 Bind(&AutofillWebDataBackend::UpdateCreditCard, | 146 Bind(&AutofillWebDataBackendImpl::UpdateCreditCard, |
| 135 autofill_backend_, credit_card)); | 147 autofill_backend_, credit_card)); |
| 136 } | 148 } |
| 137 | 149 |
| 138 void AutofillWebDataService::RemoveCreditCard(const std::string& guid) { | 150 void AutofillWebDataService::RemoveCreditCard(const std::string& guid) { |
| 139 wdbs_->ScheduleDBTask( | 151 wdbs_->ScheduleDBTask( |
| 140 FROM_HERE, | 152 FROM_HERE, |
| 141 Bind(&AutofillWebDataBackend::RemoveCreditCard, autofill_backend_, guid)); | 153 Bind(&AutofillWebDataBackendImpl::RemoveCreditCard, |
| 154 autofill_backend_, guid)); |
| 142 } | 155 } |
| 143 | 156 |
| 144 WebDataServiceBase::Handle AutofillWebDataService::GetCreditCards( | 157 WebDataServiceBase::Handle AutofillWebDataService::GetCreditCards( |
| 145 WebDataServiceConsumer* consumer) { | 158 WebDataServiceConsumer* consumer) { |
| 146 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, | 159 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, |
| 147 Bind(&AutofillWebDataBackend::GetCreditCards, autofill_backend_), | 160 Bind(&AutofillWebDataBackendImpl::GetCreditCards, autofill_backend_), |
| 148 consumer); | 161 consumer); |
| 149 } | 162 } |
| 150 | 163 |
| 151 void AutofillWebDataService::RemoveAutofillDataModifiedBetween( | 164 void AutofillWebDataService::RemoveAutofillDataModifiedBetween( |
| 152 const Time& delete_begin, | 165 const Time& delete_begin, |
| 153 const Time& delete_end) { | 166 const Time& delete_end) { |
| 154 wdbs_->ScheduleDBTask( | 167 wdbs_->ScheduleDBTask( |
| 155 FROM_HERE, | 168 FROM_HERE, |
| 156 Bind(&AutofillWebDataBackend::RemoveAutofillDataModifiedBetween, | 169 Bind(&AutofillWebDataBackendImpl::RemoveAutofillDataModifiedBetween, |
| 157 autofill_backend_, delete_begin, delete_end)); | 170 autofill_backend_, delete_begin, delete_end)); |
| 158 } | 171 } |
| 159 | 172 |
| 160 void AutofillWebDataService::AddObserver( | 173 void AutofillWebDataService::AddObserver( |
| 161 AutofillWebDataServiceObserverOnDBThread* observer) { | 174 AutofillWebDataServiceObserverOnDBThread* observer) { |
| 162 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 175 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 163 if (autofill_backend_) | 176 if (autofill_backend_) |
| 164 autofill_backend_->AddObserver(observer); | 177 autofill_backend_->AddObserver(observer); |
| 165 } | 178 } |
| 166 | 179 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 183 ui_observer_list_.RemoveObserver(observer); | 196 ui_observer_list_.RemoveObserver(observer); |
| 184 } | 197 } |
| 185 | 198 |
| 186 base::SupportsUserData* AutofillWebDataService::GetDBUserData() { | 199 base::SupportsUserData* AutofillWebDataService::GetDBUserData() { |
| 187 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 200 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 188 if (!db_thread_user_data_) | 201 if (!db_thread_user_data_) |
| 189 db_thread_user_data_.reset(new SupportsUserDataAggregatable()); | 202 db_thread_user_data_.reset(new SupportsUserDataAggregatable()); |
| 190 return db_thread_user_data_.get(); | 203 return db_thread_user_data_.get(); |
| 191 } | 204 } |
| 192 | 205 |
| 206 void AutofillWebDataService::GetAutofillBackend( |
| 207 const base::Callback<void(AutofillWebDataBackend*)>& callback) { |
| 208 BrowserThread::PostTask(BrowserThread::DB, |
| 209 FROM_HERE, |
| 210 base::Bind(callback, autofill_backend_)); |
| 211 } |
| 212 |
| 193 void AutofillWebDataService::ShutdownOnDBThread() { | 213 void AutofillWebDataService::ShutdownOnDBThread() { |
| 194 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 214 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 195 db_thread_user_data_.reset(); | 215 db_thread_user_data_.reset(); |
| 196 } | 216 } |
| 197 | 217 |
| 198 AutofillWebDataService::~AutofillWebDataService() { | 218 AutofillWebDataService::~AutofillWebDataService() { |
| 199 DCHECK(!db_thread_user_data_.get()) << "Forgot to call ShutdownOnUIThread?"; | 219 DCHECK(!db_thread_user_data_.get()) << "Forgot to call ShutdownOnUIThread?"; |
| 200 } | 220 } |
| 201 | 221 |
| 202 void AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread() { | 222 void AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread() { |
| 203 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 223 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 204 FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnUIThread, | 224 FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnUIThread, |
| 205 ui_observer_list_, | 225 ui_observer_list_, |
| 206 AutofillMultipleChanged()); | 226 AutofillMultipleChanged()); |
| 207 } | 227 } |
| 208 | 228 |
| 209 } // namespace autofill | 229 } // namespace autofill |
| OLD | NEW |