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 |