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

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: Comments pt 3 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 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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698