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 |