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

Side by Side Diff: chrome/browser/sync/profile_sync_service_autofill_unittest.cc

Issue 7819002: Migrate AutofillProfile sync to new API. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/message_loop.h" 14 #include "base/message_loop.h"
15 #include "base/string16.h" 15 #include "base/string16.h"
16 #include "base/synchronization/waitable_event.h" 16 #include "base/synchronization/waitable_event.h"
17 #include "base/task.h" 17 #include "base/task.h"
18 #include "base/time.h" 18 #include "base/time.h"
19 #include "base/tracked.h" 19 #include "base/tracked.h"
20 #include "base/utf_string_conversions.h" 20 #include "base/utf_string_conversions.h"
21 #include "chrome/browser/autofill/autofill_common_test.h" 21 #include "chrome/browser/autofill/autofill_common_test.h"
22 #include "chrome/browser/sync/abstract_profile_sync_service_test.h" 22 #include "chrome/browser/sync/abstract_profile_sync_service_test.h"
23 #include "chrome/browser/sync/engine/model_changing_syncer_command.h" 23 #include "chrome/browser/sync/engine/model_changing_syncer_command.h"
24 #include "chrome/browser/sync/glue/autofill_change_processor.h" 24 #include "chrome/browser/sync/glue/autofill_change_processor.h"
25 #include "chrome/browser/sync/glue/autofill_data_type_controller.h" 25 #include "chrome/browser/sync/glue/autofill_data_type_controller.h"
26 #include "chrome/browser/sync/glue/autofill_model_associator.h" 26 #include "chrome/browser/sync/glue/autofill_model_associator.h"
27 #include "chrome/browser/sync/glue/autofill_profile_change_processor.h"
28 #include "chrome/browser/sync/glue/autofill_profile_data_type_controller.h" 27 #include "chrome/browser/sync/glue/autofill_profile_data_type_controller.h"
29 #include "chrome/browser/sync/glue/autofill_profile_model_associator.h" 28 #include "chrome/browser/sync/glue/autofill_profile_syncable_service.h"
30 #include "chrome/browser/sync/glue/data_type_controller.h" 29 #include "chrome/browser/sync/glue/data_type_controller.h"
30 #include "chrome/browser/sync/glue/generic_change_processor.h"
31 #include "chrome/browser/sync/glue/syncable_service_adapter.h"
31 #include "chrome/browser/sync/internal_api/read_node.h" 32 #include "chrome/browser/sync/internal_api/read_node.h"
32 #include "chrome/browser/sync/internal_api/read_transaction.h" 33 #include "chrome/browser/sync/internal_api/read_transaction.h"
33 #include "chrome/browser/sync/internal_api/write_node.h" 34 #include "chrome/browser/sync/internal_api/write_node.h"
34 #include "chrome/browser/sync/internal_api/write_transaction.h" 35 #include "chrome/browser/sync/internal_api/write_transaction.h"
35 #include "chrome/browser/sync/profile_sync_factory.h" 36 #include "chrome/browser/sync/profile_sync_factory.h"
36 #include "chrome/browser/sync/profile_sync_service.h" 37 #include "chrome/browser/sync/profile_sync_service.h"
37 #include "chrome/browser/sync/profile_sync_test_util.h" 38 #include "chrome/browser/sync/profile_sync_test_util.h"
38 #include "chrome/browser/sync/protocol/autofill_specifics.pb.h" 39 #include "chrome/browser/sync/protocol/autofill_specifics.pb.h"
39 #include "chrome/browser/sync/syncable/directory_manager.h" 40 #include "chrome/browser/sync/syncable/directory_manager.h"
40 #include "chrome/browser/sync/syncable/model_type.h" 41 #include "chrome/browser/sync/syncable/model_type.h"
41 #include "chrome/browser/sync/syncable/syncable.h" 42 #include "chrome/browser/sync/syncable/syncable.h"
42 #include "chrome/browser/sync/test_profile_sync_service.h" 43 #include "chrome/browser/sync/test_profile_sync_service.h"
43 #include "chrome/browser/sync/test/engine/test_id_factory.h" 44 #include "chrome/browser/sync/test/engine/test_id_factory.h"
44 #include "chrome/browser/webdata/autofill_change.h" 45 #include "chrome/browser/webdata/autofill_change.h"
45 #include "chrome/browser/webdata/autofill_entry.h" 46 #include "chrome/browser/webdata/autofill_entry.h"
46 #include "chrome/browser/webdata/autofill_table.h" 47 #include "chrome/browser/webdata/autofill_table.h"
47 #include "chrome/browser/webdata/web_database.h" 48 #include "chrome/browser/webdata/web_database.h"
48 #include "chrome/common/chrome_notification_types.h" 49 #include "chrome/common/chrome_notification_types.h"
49 #include "chrome/common/net/gaia/gaia_constants.h" 50 #include "chrome/common/net/gaia/gaia_constants.h"
50 #include "content/browser/browser_thread.h" 51 #include "content/browser/browser_thread.h"
51 #include "content/common/notification_source.h" 52 #include "content/common/notification_source.h"
52 #include "testing/gmock/include/gmock/gmock.h" 53 #include "testing/gmock/include/gmock/gmock.h"
53 54
54 using base::Time; 55 using base::Time;
55 using base::WaitableEvent; 56 using base::WaitableEvent;
56 using browser_sync::AutofillChangeProcessor; 57 using browser_sync::AutofillChangeProcessor;
57 using browser_sync::AutofillDataTypeController; 58 using browser_sync::AutofillDataTypeController;
58 using browser_sync::AutofillModelAssociator; 59 using browser_sync::AutofillModelAssociator;
59 using browser_sync::AutofillProfileChangeProcessor;
60 using browser_sync::AutofillProfileDataTypeController; 60 using browser_sync::AutofillProfileDataTypeController;
61 using browser_sync::AutofillProfileModelAssociator; 61 using browser_sync::AutofillProfileSyncableService;
62 using browser_sync::DataTypeController; 62 using browser_sync::DataTypeController;
63 using browser_sync::GenericChangeProcessor;
64 using browser_sync::SyncableServiceAdapter;
63 using browser_sync::GROUP_DB; 65 using browser_sync::GROUP_DB;
64 using browser_sync::kAutofillTag; 66 using browser_sync::kAutofillTag;
65 using browser_sync::SyncBackendHostForProfileSyncTest; 67 using browser_sync::SyncBackendHostForProfileSyncTest;
66 using browser_sync::UnrecoverableErrorHandler; 68 using browser_sync::UnrecoverableErrorHandler;
67 using syncable::CREATE_NEW_UPDATE_ITEM; 69 using syncable::CREATE_NEW_UPDATE_ITEM;
68 using syncable::AUTOFILL; 70 using syncable::AUTOFILL;
69 using syncable::BASE_VERSION; 71 using syncable::BASE_VERSION;
70 using syncable::CREATE; 72 using syncable::CREATE;
71 using syncable::GET_BY_SERVER_TAG; 73 using syncable::GET_BY_SERVER_TAG;
72 using syncable::INVALID; 74 using syncable::INVALID;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 AutofillChangeProcessor* change_processor = 173 AutofillChangeProcessor* change_processor =
172 new AutofillChangeProcessor(model_associator, wd, pdm, dtc); 174 new AutofillChangeProcessor(model_associator, wd, pdm, dtc);
173 return ProfileSyncFactory::SyncComponents(model_associator, 175 return ProfileSyncFactory::SyncComponents(model_associator,
174 change_processor); 176 change_processor);
175 } 177 }
176 178
177 ACTION_P4(MakeAutofillProfileSyncComponents, service, wd, pdm, dtc) { 179 ACTION_P4(MakeAutofillProfileSyncComponents, service, wd, pdm, dtc) {
178 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); 180 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB));
179 if (!BrowserThread::CurrentlyOn(BrowserThread::DB)) 181 if (!BrowserThread::CurrentlyOn(BrowserThread::DB))
180 return ProfileSyncFactory::SyncComponents(NULL, NULL); 182 return ProfileSyncFactory::SyncComponents(NULL, NULL);
181 AutofillProfileModelAssociator* model_associator = 183 AutofillProfileSyncableService* sync_service =
182 new AutofillProfileModelAssociator(service, wd, pdm); 184 new AutofillProfileSyncableService(wd, pdm, service->profile());
183 AutofillProfileChangeProcessor* change_processor = 185 sync_api::UserShare* user_share = service->GetUserShare();
184 new AutofillProfileChangeProcessor(model_associator, wd, pdm, dtc); 186 GenericChangeProcessor* change_processor =
185 return ProfileSyncFactory::SyncComponents(model_associator, 187 new GenericChangeProcessor(sync_service, dtc, user_share);
188 SyncableServiceAdapter* sync_service_adapter =
189 new SyncableServiceAdapter(syncable::AUTOFILL_PROFILE,
190 sync_service,
191 change_processor);
192 return ProfileSyncFactory::SyncComponents(sync_service_adapter,
186 change_processor); 193 change_processor);
187 } 194 }
188 195
189 class AbstractAutofillFactory { 196 class AbstractAutofillFactory {
190 public: 197 public:
191 virtual AutofillDataTypeController* CreateDataTypeController( 198 virtual AutofillDataTypeController* CreateDataTypeController(
192 ProfileSyncFactory *factory, 199 ProfileSyncFactory* factory,
193 ProfileMock* profile, 200 ProfileMock* profile,
194 ProfileSyncService* service) = 0; 201 ProfileSyncService* service) = 0;
195 virtual void SetExpectation(ProfileSyncFactoryMock* factory, 202 virtual void SetExpectation(ProfileSyncFactoryMock* factory,
196 ProfileSyncService* service, 203 ProfileSyncService* service,
197 WebDatabase* wd, 204 WebDatabase* wd,
198 PersonalDataManager* pdm, 205 PersonalDataManager* pdm,
199 DataTypeController* dtc) = 0; 206 DataTypeController* dtc) = 0;
200 virtual ~AbstractAutofillFactory() {} 207 virtual ~AbstractAutofillFactory() {}
201 }; 208 };
202 209
203 class AutofillEntryFactory : public AbstractAutofillFactory { 210 class AutofillEntryFactory : public AbstractAutofillFactory {
204 public: 211 public:
205 browser_sync::AutofillDataTypeController* CreateDataTypeController( 212 browser_sync::AutofillDataTypeController* CreateDataTypeController(
206 ProfileSyncFactory *factory, 213 ProfileSyncFactory* factory,
207 ProfileMock* profile, 214 ProfileMock* profile,
208 ProfileSyncService* service) { 215 ProfileSyncService* service) {
209 return new AutofillDataTypeController(factory, 216 return new AutofillDataTypeController(factory,
210 profile); 217 profile);
211 } 218 }
212 219
213 void SetExpectation(ProfileSyncFactoryMock* factory, 220 void SetExpectation(ProfileSyncFactoryMock* factory,
214 ProfileSyncService* service, 221 ProfileSyncService* service,
215 WebDatabase* wd, 222 WebDatabase* wd,
216 PersonalDataManager* pdm, 223 PersonalDataManager* pdm,
217 DataTypeController* dtc) { 224 DataTypeController* dtc) {
218 EXPECT_CALL(*factory, CreateAutofillSyncComponents(_,_,_,_)). 225 EXPECT_CALL(*factory, CreateAutofillSyncComponents(_,_,_,_)).
219 WillOnce(MakeAutofillSyncComponents(service, wd, pdm, dtc)); 226 WillOnce(MakeAutofillSyncComponents(service, wd, pdm, dtc));
220 } 227 }
221 }; 228 };
222 229
223 class AutofillProfileFactory : public AbstractAutofillFactory { 230 class AutofillProfileFactory : public AbstractAutofillFactory {
224 public: 231 public:
225 browser_sync::AutofillDataTypeController* CreateDataTypeController( 232 browser_sync::AutofillDataTypeController* CreateDataTypeController(
226 ProfileSyncFactory *factory, 233 ProfileSyncFactory* factory,
227 ProfileMock* profile, 234 ProfileMock* profile,
228 ProfileSyncService* service) { 235 ProfileSyncService* service) {
229 return new AutofillProfileDataTypeController(factory, 236 return new AutofillProfileDataTypeController(factory,
230 profile); 237 profile);
231 } 238 }
232 239
233 void SetExpectation(ProfileSyncFactoryMock* factory, 240 void SetExpectation(ProfileSyncFactoryMock* factory,
234 ProfileSyncService* service, 241 ProfileSyncService* service,
235 WebDatabase* wd, 242 WebDatabase* wd,
236 PersonalDataManager* pdm, 243 PersonalDataManager* pdm,
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 service_.get(), 314 service_.get(),
308 web_database_.get(), 315 web_database_.get(),
309 personal_data_manager_.get(), 316 personal_data_manager_.get(),
310 data_type_controller); 317 data_type_controller);
311 318
312 EXPECT_CALL(factory_, CreateDataTypeManager(_, _)). 319 EXPECT_CALL(factory_, CreateDataTypeManager(_, _)).
313 WillOnce(ReturnNewDataTypeManager()); 320 WillOnce(ReturnNewDataTypeManager());
314 321
315 EXPECT_CALL(profile_, GetWebDataService(_)). 322 EXPECT_CALL(profile_, GetWebDataService(_)).
316 // TokenService::Initialize 323 // TokenService::Initialize
317 WillOnce(Return(web_data_service_.get())).
318 // AutofillDataTypeController::StartModels() 324 // AutofillDataTypeController::StartModels()
319 WillOnce(Return(web_data_service_.get())); 325 // In some tests:
326 // AutofillProfileSyncableService::AutofillProfileSyncableService()
327 WillRepeatedly(Return(web_data_service_.get()));
320 328
321 EXPECT_CALL(profile_, GetPersonalDataManager()). 329 EXPECT_CALL(profile_, GetPersonalDataManager()).
322 WillRepeatedly(Return(personal_data_manager_.get())); 330 WillRepeatedly(Return(personal_data_manager_.get()));
323 331
324 EXPECT_CALL(*personal_data_manager_, IsDataLoaded()). 332 EXPECT_CALL(*personal_data_manager_, IsDataLoaded()).
325 WillRepeatedly(Return(true)); 333 WillRepeatedly(Return(true));
326 334
327 // We need tokens to get the tests going 335 // We need tokens to get the tests going
328 token_service_.IssueAuthTokenForTest( 336 token_service_.IssueAuthTokenForTest(
329 GaiaConstants::kSyncService, "token"); 337 GaiaConstants::kSyncService, "token");
(...skipping 25 matching lines...) Expand all
355 bool AddAutofillSyncNode(const AutofillProfile& profile) { 363 bool AddAutofillSyncNode(const AutofillProfile& profile) {
356 sync_api::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); 364 sync_api::WriteTransaction trans(FROM_HERE, service_->GetUserShare());
357 sync_api::ReadNode autofill_root(&trans); 365 sync_api::ReadNode autofill_root(&trans);
358 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillProfileTag)) 366 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillProfileTag))
359 return false; 367 return false;
360 sync_api::WriteNode node(&trans); 368 sync_api::WriteNode node(&trans);
361 std::string tag = profile.guid(); 369 std::string tag = profile.guid();
362 if (!node.InitUniqueByCreation(syncable::AUTOFILL_PROFILE, 370 if (!node.InitUniqueByCreation(syncable::AUTOFILL_PROFILE,
363 autofill_root, tag)) 371 autofill_root, tag))
364 return false; 372 return false;
365 AutofillProfileChangeProcessor::WriteAutofillProfile(profile, &node); 373 sync_pb::EntitySpecifics specifics;
374 AutofillProfileSyncableService::WriteAutofillProfile(profile, &specifics);
375 sync_pb::AutofillProfileSpecifics* profile_specifics =
376 specifics.MutableExtension(sync_pb::autofill_profile);
377 node.SetAutofillProfileSpecifics(*profile_specifics);
366 return true; 378 return true;
367 } 379 }
368 380
369 bool GetAutofillEntriesFromSyncDB(std::vector<AutofillEntry>* entries, 381 bool GetAutofillEntriesFromSyncDB(std::vector<AutofillEntry>* entries,
370 std::vector<AutofillProfile>* profiles) { 382 std::vector<AutofillProfile>* profiles) {
371 sync_api::ReadTransaction trans(FROM_HERE, service_->GetUserShare()); 383 sync_api::ReadTransaction trans(FROM_HERE, service_->GetUserShare());
372 sync_api::ReadNode autofill_root(&trans); 384 sync_api::ReadNode autofill_root(&trans);
373 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillTag)) 385 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillTag))
374 return false; 386 return false;
375 387
(...skipping 11 matching lines...) Expand all
387 std::vector<base::Time> timestamps; 399 std::vector<base::Time> timestamps;
388 int timestamps_count = autofill.usage_timestamp_size(); 400 int timestamps_count = autofill.usage_timestamp_size();
389 for (int i = 0; i < timestamps_count; ++i) { 401 for (int i = 0; i < timestamps_count; ++i) {
390 timestamps.push_back(Time::FromInternalValue( 402 timestamps.push_back(Time::FromInternalValue(
391 autofill.usage_timestamp(i))); 403 autofill.usage_timestamp(i)));
392 } 404 }
393 entries->push_back(AutofillEntry(key, timestamps)); 405 entries->push_back(AutofillEntry(key, timestamps));
394 } else if (autofill.has_profile()) { 406 } else if (autofill.has_profile()) {
395 AutofillProfile p; 407 AutofillProfile p;
396 p.set_guid(autofill.profile().guid()); 408 p.set_guid(autofill.profile().guid());
397 AutofillProfileModelAssociator::OverwriteProfileWithServerData(&p, 409 AutofillProfileSyncableService::OverwriteProfileWithServerData(
398 autofill.profile()); 410 autofill.profile(), &p);
399 profiles->push_back(p); 411 profiles->push_back(p);
400 } 412 }
401 child_id = child_node.GetSuccessorId(); 413 child_id = child_node.GetSuccessorId();
402 } 414 }
403 return true; 415 return true;
404 } 416 }
405 417
406 bool GetAutofillProfilesFromSyncDBUnderProfileNode( 418 bool GetAutofillProfilesFromSyncDBUnderProfileNode(
407 std::vector<AutofillProfile>* profiles) { 419 std::vector<AutofillProfile>* profiles) {
408 sync_api::ReadTransaction trans(FROM_HERE, service_->GetUserShare()); 420 sync_api::ReadTransaction trans(FROM_HERE, service_->GetUserShare());
409 sync_api::ReadNode autofill_root(&trans); 421 sync_api::ReadNode autofill_root(&trans);
410 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillProfileTag)) 422 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillProfileTag))
411 return false; 423 return false;
412 424
413 int64 child_id = autofill_root.GetFirstChildId(); 425 int64 child_id = autofill_root.GetFirstChildId();
414 while (child_id != sync_api::kInvalidId) { 426 while (child_id != sync_api::kInvalidId) {
415 sync_api::ReadNode child_node(&trans); 427 sync_api::ReadNode child_node(&trans);
416 if (!child_node.InitByIdLookup(child_id)) 428 if (!child_node.InitByIdLookup(child_id))
417 return false; 429 return false;
418 430
419 const sync_pb::AutofillProfileSpecifics& autofill( 431 const sync_pb::AutofillProfileSpecifics& autofill(
420 child_node.GetAutofillProfileSpecifics()); 432 child_node.GetAutofillProfileSpecifics());
421 AutofillProfile p; 433 AutofillProfile p;
422 p.set_guid(autofill.guid()); 434 p.set_guid(autofill.guid());
423 AutofillProfileModelAssociator::OverwriteProfileWithServerData(&p, 435 AutofillProfileSyncableService::OverwriteProfileWithServerData(
424 autofill); 436 autofill, &p);
425 profiles->push_back(p); 437 profiles->push_back(p);
426 child_id = child_node.GetSuccessorId(); 438 child_id = child_node.GetSuccessorId();
427 } 439 }
428 return true; 440 return true;
429 } 441 }
430 442
431 void SetIdleChangeProcessorExpectations() { 443 void SetIdleChangeProcessorExpectations() {
432 EXPECT_CALL(autofill_table_, RemoveFormElement(_, _)).Times(0); 444 EXPECT_CALL(autofill_table_, RemoveFormElement(_, _)).Times(0);
433 EXPECT_CALL(autofill_table_, GetAutofillTimestamps(_, _, _)).Times(0); 445 EXPECT_CALL(autofill_table_, GetAutofillTimestamps(_, _, _)).Times(0);
434 EXPECT_CALL(autofill_table_, UpdateAutofillEntries(_)).Times(0); 446 EXPECT_CALL(autofill_table_, UpdateAutofillEntries(_)).Times(0);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 bool success_; 503 bool success_;
492 }; 504 };
493 505
494 // Overload write transaction to use custom NotifyTransactionComplete 506 // Overload write transaction to use custom NotifyTransactionComplete
495 static const bool kLoggingInfo = true; 507 static const bool kLoggingInfo = true;
496 class WriteTransactionTest: public WriteTransaction { 508 class WriteTransactionTest: public WriteTransaction {
497 public: 509 public:
498 WriteTransactionTest(const tracked_objects::Location& from_here, 510 WriteTransactionTest(const tracked_objects::Location& from_here,
499 WriterTag writer, 511 WriterTag writer,
500 const syncable::ScopedDirLookup& directory, 512 const syncable::ScopedDirLookup& directory,
501 scoped_ptr<WaitableEvent> *wait_for_syncapi) 513 scoped_ptr<WaitableEvent>* wait_for_syncapi)
502 : WriteTransaction(from_here, writer, directory), 514 : WriteTransaction(from_here, writer, directory),
503 wait_for_syncapi_(wait_for_syncapi) { } 515 wait_for_syncapi_(wait_for_syncapi) { }
504 516
505 virtual void NotifyTransactionComplete(syncable::ModelTypeBitSet types) { 517 virtual void NotifyTransactionComplete(syncable::ModelTypeBitSet types) {
506 // This is where we differ. Force a thread change here, giving another 518 // This is where we differ. Force a thread change here, giving another
507 // thread a chance to create a WriteTransaction 519 // thread a chance to create a WriteTransaction
508 (*wait_for_syncapi_)->Wait(); 520 (*wait_for_syncapi_)->Wait();
509 521
510 WriteTransaction::NotifyTransactionComplete(types); 522 WriteTransaction::NotifyTransactionComplete(types);
511 } 523 }
512 524
513 private: 525 private:
514 scoped_ptr<WaitableEvent> *wait_for_syncapi_; 526 scoped_ptr<WaitableEvent>* wait_for_syncapi_;
515 }; 527 };
516 528
517 // Our fake server updater. Needs the RefCountedThreadSafe inheritance so we can 529 // Our fake server updater. Needs the RefCountedThreadSafe inheritance so we can
518 // post tasks with it. 530 // post tasks with it.
519 class FakeServerUpdater: public base::RefCountedThreadSafe<FakeServerUpdater> { 531 class FakeServerUpdater: public base::RefCountedThreadSafe<FakeServerUpdater> {
520 public: 532 public:
521 FakeServerUpdater(TestProfileSyncService *service, 533 FakeServerUpdater(TestProfileSyncService* service,
522 scoped_ptr<WaitableEvent> *wait_for_start, 534 scoped_ptr<WaitableEvent>* wait_for_start,
523 scoped_ptr<WaitableEvent> *wait_for_syncapi) 535 scoped_ptr<WaitableEvent>* wait_for_syncapi)
524 : entry_(ProfileSyncServiceAutofillTest::MakeAutofillEntry("0", "0", 0)), 536 : entry_(ProfileSyncServiceAutofillTest::MakeAutofillEntry("0", "0", 0)),
525 service_(service), 537 service_(service),
526 wait_for_start_(wait_for_start), 538 wait_for_start_(wait_for_start),
527 wait_for_syncapi_(wait_for_syncapi), 539 wait_for_syncapi_(wait_for_syncapi),
528 is_finished_(false, false) { } 540 is_finished_(false, false) { }
529 541
530 void Update() { 542 void Update() {
531 // This gets called in a modelsafeworker thread. 543 // This gets called in a modelsafeworker thread.
532 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); 544 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB));
533 545
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 item.Put(syncable::ID, server_item_id); 584 item.Put(syncable::ID, server_item_id);
573 syncable::Id new_predecessor; 585 syncable::Id new_predecessor;
574 ASSERT_TRUE(item.PutPredecessor(new_predecessor)); 586 ASSERT_TRUE(item.PutPredecessor(new_predecessor));
575 } 587 }
576 VLOG(1) << "FakeServerUpdater finishing."; 588 VLOG(1) << "FakeServerUpdater finishing.";
577 is_finished_.Signal(); 589 is_finished_.Signal();
578 } 590 }
579 591
580 void CreateNewEntry(const AutofillEntry& entry) { 592 void CreateNewEntry(const AutofillEntry& entry) {
581 entry_ = entry; 593 entry_ = entry;
582 scoped_ptr<Callback0::Type> c(NewCallback((FakeServerUpdater *)this, 594 scoped_ptr<Callback0::Type> c(NewCallback((FakeServerUpdater*)this,
583 &FakeServerUpdater::Update)); 595 &FakeServerUpdater::Update));
584 ASSERT_FALSE(BrowserThread::CurrentlyOn(BrowserThread::DB)); 596 ASSERT_FALSE(BrowserThread::CurrentlyOn(BrowserThread::DB));
585 if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 597 if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
586 NewRunnableMethod(this, &FakeServerUpdater::Update))) { 598 NewRunnableMethod(this, &FakeServerUpdater::Update))) {
587 NOTREACHED() << "Failed to post task to the db thread."; 599 NOTREACHED() << "Failed to post task to the db thread.";
588 return; 600 return;
589 } 601 }
590 } 602 }
591 603
592 void CreateNewEntryAndWait(const AutofillEntry& entry) { 604 void CreateNewEntryAndWait(const AutofillEntry& entry) {
593 entry_ = entry; 605 entry_ = entry;
594 scoped_ptr<Callback0::Type> c(NewCallback((FakeServerUpdater *)this, 606 scoped_ptr<Callback0::Type> c(NewCallback((FakeServerUpdater*)this,
595 &FakeServerUpdater::Update)); 607 &FakeServerUpdater::Update));
596 ASSERT_FALSE(BrowserThread::CurrentlyOn(BrowserThread::DB)); 608 ASSERT_FALSE(BrowserThread::CurrentlyOn(BrowserThread::DB));
597 is_finished_.Reset(); 609 is_finished_.Reset();
598 if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 610 if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
599 NewRunnableMethod(this, &FakeServerUpdater::Update))) { 611 NewRunnableMethod(this, &FakeServerUpdater::Update))) {
600 NOTREACHED() << "Failed to post task to the db thread."; 612 NOTREACHED() << "Failed to post task to the db thread.";
601 return; 613 return;
602 } 614 }
603 is_finished_.Wait(); 615 is_finished_.Wait();
604 } 616 }
605 617
606 private: 618 private:
607 friend class base::RefCountedThreadSafe<FakeServerUpdater>; 619 friend class base::RefCountedThreadSafe<FakeServerUpdater>;
608 ~FakeServerUpdater() { } 620 ~FakeServerUpdater() { }
609 621
610 AutofillEntry entry_; 622 AutofillEntry entry_;
611 TestProfileSyncService *service_; 623 TestProfileSyncService* service_;
612 scoped_ptr<WaitableEvent> *wait_for_start_; 624 scoped_ptr<WaitableEvent>* wait_for_start_;
613 scoped_ptr<WaitableEvent> *wait_for_syncapi_; 625 scoped_ptr<WaitableEvent>* wait_for_syncapi_;
614 WaitableEvent is_finished_; 626 WaitableEvent is_finished_;
615 syncable::Id parent_id_; 627 syncable::Id parent_id_;
616 }; 628 };
617 629
618 // TODO(skrul): Test abort startup. 630 // TODO(skrul): Test abort startup.
619 // TODO(skrul): Test processing of cloud changes. 631 // TODO(skrul): Test processing of cloud changes.
620 // TODO(tim): Add autofill data type controller test, and a case to cover 632 // TODO(tim): Add autofill data type controller test, and a case to cover
621 // waiting for the PersonalDataManager. 633 // waiting for the PersonalDataManager.
622 TEST_F(ProfileSyncServiceAutofillTest, FailModelAssociation) { 634 TEST_F(ProfileSyncServiceAutofillTest, FailModelAssociation) {
623 // Don't create the root autofill node so startup fails. 635 // Don't create the root autofill node so startup fails.
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 std::vector<AutofillEntry> sync_entries; 1091 std::vector<AutofillEntry> sync_entries;
1080 std::vector<AutofillProfile> sync_profiles; 1092 std::vector<AutofillProfile> sync_profiles;
1081 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); 1093 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles));
1082 EXPECT_EQ(3U, sync_entries.size()); 1094 EXPECT_EQ(3U, sync_entries.size());
1083 EXPECT_EQ(0U, sync_profiles.size()); 1095 EXPECT_EQ(0U, sync_profiles.size());
1084 for (size_t i = 0; i < sync_entries.size(); i++) { 1096 for (size_t i = 0; i < sync_entries.size(); i++) {
1085 VLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name() 1097 VLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name()
1086 << ", " << sync_entries[i].key().value(); 1098 << ", " << sync_entries[i].key().value();
1087 } 1099 }
1088 } 1100 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698