Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(298)

Side by Side Diff: components/autofill/browser/webdata/autofill_webdata_service.cc

Issue 14679005: Create an AutofillBackend interface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix WIN Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
OLDNEW
« no previous file with comments | « components/autofill/browser/webdata/autofill_webdata_service.h ('k') | components/webdata/common/web_data_service_backend.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698