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