OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 <set> | 5 #include <set> |
6 #include <string> | 6 #include <string> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
137 return (profile.Compare(arg) == 0); | 137 return (profile.Compare(arg) == 0); |
138 } | 138 } |
139 | 139 |
140 class WebDatabaseFake : public WebDatabase { | 140 class WebDatabaseFake : public WebDatabase { |
141 public: | 141 public: |
142 explicit WebDatabaseFake(AutofillTable* autofill_table) { | 142 explicit WebDatabaseFake(AutofillTable* autofill_table) { |
143 AddTable(autofill_table); | 143 AddTable(autofill_table); |
144 } | 144 } |
145 }; | 145 }; |
146 | 146 |
147 class MockAutofillBackend : public autofill::AutofillWebDataBackend { | |
148 public: | |
149 MockAutofillBackend( | |
150 WebDatabase* web_database, | |
151 const base::Closure& on_changed) | |
152 : web_database_(web_database), | |
Ilya Sherman
2013/05/13 23:44:47
nit: Indent each of these three two more spaces.
Cait (Slow)
2013/05/14 22:30:08
Done.
| |
153 on_changed_(on_changed) { | |
154 } | |
Ilya Sherman
2013/05/13 23:44:47
nit: De-indent this line two spaces, or move it to
Cait (Slow)
2013/05/14 22:30:08
Done.
| |
155 | |
156 virtual ~MockAutofillBackend() {} | |
157 virtual WebDatabase* GetDatabase() OVERRIDE { return web_database_; } | |
158 virtual void AddObserver( | |
159 autofill::AutofillWebDataServiceObserverOnDBThread* observer) OVERRIDE {} | |
160 virtual void RemoveObserver( | |
161 autofill::AutofillWebDataServiceObserverOnDBThread* observer) OVERRIDE {} | |
162 virtual void RemoveExpiredFormElementsWrapper() OVERRIDE {} | |
163 virtual void NotifyOfMultipleAutofillChanges() OVERRIDE { | |
164 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | |
165 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, on_changed_); | |
166 } | |
167 | |
168 private: | |
169 WebDatabase* web_database_; | |
170 base::Closure on_changed_; | |
171 }; | |
172 | |
147 class ProfileSyncServiceAutofillTest; | 173 class ProfileSyncServiceAutofillTest; |
148 | 174 |
149 template<class AutofillProfile> | 175 template<class AutofillProfile> |
150 syncer::ModelType GetModelType() { | 176 syncer::ModelType GetModelType() { |
151 return syncer::UNSPECIFIED; | 177 return syncer::UNSPECIFIED; |
152 } | 178 } |
153 | 179 |
154 template<> | 180 template<> |
155 syncer::ModelType GetModelType<AutofillEntry>() { | 181 syncer::ModelType GetModelType<AutofillEntry>() { |
156 return syncer::AUTOFILL; | 182 return syncer::AUTOFILL; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
199 syncable_service_created_or_destroyed_(false, false) { | 225 syncable_service_created_or_destroyed_(false, false) { |
200 } | 226 } |
201 | 227 |
202 void SetDatabase(WebDatabase* web_database) { | 228 void SetDatabase(WebDatabase* web_database) { |
203 web_database_ = web_database; | 229 web_database_ = web_database; |
204 } | 230 } |
205 | 231 |
206 void StartSyncableService() { | 232 void StartSyncableService() { |
207 // The |autofill_profile_syncable_service_| must be constructed on the DB | 233 // The |autofill_profile_syncable_service_| must be constructed on the DB |
208 // thread. | 234 // thread. |
235 const base::Closure& on_changed_callback = base::Bind( | |
236 &AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread, | |
237 AsWeakPtr()); | |
238 | |
209 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, | 239 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, |
210 base::Bind(&WebDataServiceFake::CreateSyncableService, | 240 base::Bind(&WebDataServiceFake::CreateSyncableService, |
211 base::Unretained(this))); | 241 base::Unretained(this), |
242 on_changed_callback)); | |
212 syncable_service_created_or_destroyed_.Wait(); | 243 syncable_service_created_or_destroyed_.Wait(); |
213 } | 244 } |
214 | 245 |
215 void ShutdownSyncableService() { | 246 void ShutdownSyncableService() { |
216 // The |autofill_profile_syncable_service_| must be destructed on the DB | 247 // The |autofill_profile_syncable_service_| must be destructed on the DB |
217 // thread. | 248 // thread. |
218 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, | 249 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, |
219 base::Bind(&WebDataServiceFake::DestroySyncableService, | 250 base::Bind(&WebDataServiceFake::DestroySyncableService, |
220 base::Unretained(this))); | 251 base::Unretained(this))); |
221 syncable_service_created_or_destroyed_.Wait(); | 252 syncable_service_created_or_destroyed_.Wait(); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
255 BrowserThread::PostTask( | 286 BrowserThread::PostTask( |
256 BrowserThread::DB, | 287 BrowserThread::DB, |
257 FROM_HERE, | 288 FROM_HERE, |
258 base::Bind(&RunAndSignal, notify_cb, &event)); | 289 base::Bind(&RunAndSignal, notify_cb, &event)); |
259 event.Wait(); | 290 event.Wait(); |
260 } | 291 } |
261 | 292 |
262 private: | 293 private: |
263 virtual ~WebDataServiceFake() {} | 294 virtual ~WebDataServiceFake() {} |
264 | 295 |
265 void CreateSyncableService() { | 296 void CreateSyncableService(const base::Closure& on_changed_callback) { |
266 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 297 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
267 // These services are deleted in DestroySyncableService(). | 298 // These services are deleted in DestroySyncableService(). |
268 AutocompleteSyncableService::CreateForWebDataService(this); | 299 backend_.reset(new MockAutofillBackend( |
269 AutofillProfileSyncableService::CreateForWebDataService(this, "en-US"); | 300 GetDatabase(), on_changed_callback)); |
301 AutocompleteSyncableService::CreateForWebDataService(this, backend_.get()); | |
302 AutofillProfileSyncableService::CreateForWebDataService( | |
303 this, backend_.get(), "en-US"); | |
270 | 304 |
271 autocomplete_syncable_service_ = | 305 autocomplete_syncable_service_ = |
272 AutocompleteSyncableService::FromWebDataService(this); | 306 AutocompleteSyncableService::FromWebDataService(this); |
273 autofill_profile_syncable_service_ = | 307 autofill_profile_syncable_service_ = |
274 AutofillProfileSyncableService::FromWebDataService(this); | 308 AutofillProfileSyncableService::FromWebDataService(this); |
275 | 309 |
276 syncable_service_created_or_destroyed_.Signal(); | 310 syncable_service_created_or_destroyed_.Signal(); |
277 } | 311 } |
278 | 312 |
279 void DestroySyncableService() { | 313 void DestroySyncableService() { |
280 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 314 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
281 AutofillWebDataService::ShutdownOnDBThread(); | 315 AutofillWebDataService::ShutdownOnDBThread(); |
282 autocomplete_syncable_service_ = NULL; | 316 autocomplete_syncable_service_ = NULL; |
283 autofill_profile_syncable_service_ = NULL; | 317 autofill_profile_syncable_service_ = NULL; |
318 backend_.reset(); | |
284 syncable_service_created_or_destroyed_.Signal(); | 319 syncable_service_created_or_destroyed_.Signal(); |
285 } | 320 } |
286 | 321 |
287 WebDatabase* web_database_; | 322 WebDatabase* web_database_; |
288 AutocompleteSyncableService* autocomplete_syncable_service_; | 323 AutocompleteSyncableService* autocomplete_syncable_service_; |
289 AutofillProfileSyncableService* autofill_profile_syncable_service_; | 324 AutofillProfileSyncableService* autofill_profile_syncable_service_; |
325 scoped_ptr<autofill::AutofillWebDataBackend> backend_; | |
290 | 326 |
291 WaitableEvent syncable_service_created_or_destroyed_; | 327 WaitableEvent syncable_service_created_or_destroyed_; |
292 | 328 |
293 DISALLOW_COPY_AND_ASSIGN(WebDataServiceFake); | 329 DISALLOW_COPY_AND_ASSIGN(WebDataServiceFake); |
294 }; | 330 }; |
295 | 331 |
296 ProfileKeyedService* BuildMockWebDataServiceWrapper( | 332 ProfileKeyedService* BuildMockWebDataServiceWrapper( |
297 content::BrowserContext* profile) { | 333 content::BrowserContext* profile) { |
298 return new MockWebDataServiceWrapper( | 334 return new MockWebDataServiceWrapper( |
299 new TokenWebDataServiceFake(), | 335 new TokenWebDataServiceFake(), |
(...skipping 1064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1364 std::vector<AutofillEntry> sync_entries; | 1400 std::vector<AutofillEntry> sync_entries; |
1365 std::vector<AutofillProfile> sync_profiles; | 1401 std::vector<AutofillProfile> sync_profiles; |
1366 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); | 1402 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); |
1367 EXPECT_EQ(3U, sync_entries.size()); | 1403 EXPECT_EQ(3U, sync_entries.size()); |
1368 EXPECT_EQ(0U, sync_profiles.size()); | 1404 EXPECT_EQ(0U, sync_profiles.size()); |
1369 for (size_t i = 0; i < sync_entries.size(); i++) { | 1405 for (size_t i = 0; i < sync_entries.size(); i++) { |
1370 DVLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name() | 1406 DVLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name() |
1371 << ", " << sync_entries[i].key().value(); | 1407 << ", " << sync_entries[i].key().value(); |
1372 } | 1408 } |
1373 } | 1409 } |
OLD | NEW |