Chromium Code Reviews| 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 |