OLD | NEW |
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/bind.h" |
11 #include "base/callback.h" | 12 #include "base/callback.h" |
12 #include "base/location.h" | 13 #include "base/location.h" |
13 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
14 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
15 #include "base/message_loop.h" | 16 #include "base/message_loop.h" |
16 #include "base/string16.h" | 17 #include "base/string16.h" |
17 #include "base/synchronization/waitable_event.h" | 18 #include "base/synchronization/waitable_event.h" |
18 #include "base/task.h" | 19 #include "base/task.h" |
19 #include "base/time.h" | 20 #include "base/time.h" |
20 #include "base/utf_string_conversions.h" | 21 #include "base/utf_string_conversions.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 #include "content/browser/browser_thread.h" | 54 #include "content/browser/browser_thread.h" |
54 #include "content/common/notification_source.h" | 55 #include "content/common/notification_source.h" |
55 #include "testing/gmock/include/gmock/gmock.h" | 56 #include "testing/gmock/include/gmock/gmock.h" |
56 | 57 |
57 using base::Time; | 58 using base::Time; |
58 using base::WaitableEvent; | 59 using base::WaitableEvent; |
59 using browser_sync::AutofillChangeProcessor; | 60 using browser_sync::AutofillChangeProcessor; |
60 using browser_sync::AutofillDataTypeController; | 61 using browser_sync::AutofillDataTypeController; |
61 using browser_sync::AutofillModelAssociator; | 62 using browser_sync::AutofillModelAssociator; |
62 using browser_sync::AutofillProfileDataTypeController; | 63 using browser_sync::AutofillProfileDataTypeController; |
63 using browser_sync::AutofillProfileSyncableService; | |
64 using browser_sync::DataTypeController; | 64 using browser_sync::DataTypeController; |
65 using browser_sync::GenericChangeProcessor; | 65 using browser_sync::GenericChangeProcessor; |
66 using browser_sync::SyncableServiceAdapter; | 66 using browser_sync::SyncableServiceAdapter; |
67 using browser_sync::GROUP_DB; | 67 using browser_sync::GROUP_DB; |
68 using browser_sync::kAutofillTag; | 68 using browser_sync::kAutofillTag; |
69 using browser_sync::SyncBackendHostForProfileSyncTest; | 69 using browser_sync::SyncBackendHostForProfileSyncTest; |
70 using browser_sync::UnrecoverableErrorHandler; | 70 using browser_sync::UnrecoverableErrorHandler; |
71 using syncable::CREATE_NEW_UPDATE_ITEM; | 71 using syncable::CREATE_NEW_UPDATE_ITEM; |
72 using syncable::AUTOFILL; | 72 using syncable::AUTOFILL; |
73 using syncable::BASE_VERSION; | 73 using syncable::BASE_VERSION; |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 service->profile(), dtc); | 177 service->profile(), dtc); |
178 return ProfileSyncFactory::SyncComponents(model_associator, | 178 return ProfileSyncFactory::SyncComponents(model_associator, |
179 change_processor); | 179 change_processor); |
180 } | 180 } |
181 | 181 |
182 ACTION_P3(MakeAutofillProfileSyncComponents, service, wd, dtc) { | 182 ACTION_P3(MakeAutofillProfileSyncComponents, service, wd, dtc) { |
183 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 183 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
184 if (!BrowserThread::CurrentlyOn(BrowserThread::DB)) | 184 if (!BrowserThread::CurrentlyOn(BrowserThread::DB)) |
185 return ProfileSyncFactory::SyncComponents(NULL, NULL); | 185 return ProfileSyncFactory::SyncComponents(NULL, NULL); |
186 AutofillProfileSyncableService* sync_service = | 186 AutofillProfileSyncableService* sync_service = |
187 new AutofillProfileSyncableService(wd, service->profile()); | 187 wd->GetAutofillTable()->GetSyncableService(wd, service->profile()); |
188 sync_api::UserShare* user_share = service->GetUserShare(); | 188 sync_api::UserShare* user_share = service->GetUserShare(); |
189 GenericChangeProcessor* change_processor = | 189 GenericChangeProcessor* change_processor = |
190 new GenericChangeProcessor(sync_service, dtc, user_share); | 190 new GenericChangeProcessor(sync_service, dtc, user_share); |
191 SyncableServiceAdapter* sync_service_adapter = | 191 SyncableServiceAdapter* sync_service_adapter = |
192 new SyncableServiceAdapter(syncable::AUTOFILL_PROFILE, | 192 new SyncableServiceAdapter(syncable::AUTOFILL_PROFILE, |
193 sync_service, | 193 sync_service, |
194 change_processor); | 194 change_processor); |
195 return ProfileSyncFactory::SyncComponents(sync_service_adapter, | 195 return ProfileSyncFactory::SyncComponents(sync_service_adapter, |
196 change_processor); | 196 change_processor); |
197 } | 197 } |
(...skipping 10 matching lines...) Expand all Loading... |
208 DataTypeController* dtc) = 0; | 208 DataTypeController* dtc) = 0; |
209 virtual ~AbstractAutofillFactory() {} | 209 virtual ~AbstractAutofillFactory() {} |
210 }; | 210 }; |
211 | 211 |
212 class AutofillEntryFactory : public AbstractAutofillFactory { | 212 class AutofillEntryFactory : public AbstractAutofillFactory { |
213 public: | 213 public: |
214 browser_sync::AutofillDataTypeController* CreateDataTypeController( | 214 browser_sync::AutofillDataTypeController* CreateDataTypeController( |
215 ProfileSyncFactory* factory, | 215 ProfileSyncFactory* factory, |
216 ProfileMock* profile, | 216 ProfileMock* profile, |
217 ProfileSyncService* service) { | 217 ProfileSyncService* service) { |
218 return new AutofillDataTypeController(factory, | 218 return new AutofillDataTypeController(factory, profile); |
219 profile); | |
220 } | 219 } |
221 | 220 |
222 void SetExpectation(ProfileSyncFactoryMock* factory, | 221 void SetExpectation(ProfileSyncFactoryMock* factory, |
223 ProfileSyncService* service, | 222 ProfileSyncService* service, |
224 WebDatabase* wd, | 223 WebDatabase* wd, |
225 DataTypeController* dtc) { | 224 DataTypeController* dtc) { |
226 EXPECT_CALL(*factory, CreateAutofillSyncComponents(_,_,_)). | 225 EXPECT_CALL(*factory, CreateAutofillSyncComponents(_,_,_)). |
227 WillOnce(MakeAutofillSyncComponents(service, wd, dtc)); | 226 WillOnce(MakeAutofillSyncComponents(service, wd, dtc)); |
228 } | 227 } |
229 }; | 228 }; |
230 | 229 |
231 class AutofillProfileFactory : public AbstractAutofillFactory { | 230 class AutofillProfileFactory : public AbstractAutofillFactory { |
232 public: | 231 public: |
233 browser_sync::AutofillDataTypeController* CreateDataTypeController( | 232 browser_sync::AutofillDataTypeController* CreateDataTypeController( |
234 ProfileSyncFactory* factory, | 233 ProfileSyncFactory* factory, |
235 ProfileMock* profile, | 234 ProfileMock* profile, |
236 ProfileSyncService* service) { | 235 ProfileSyncService* service) { |
237 return new AutofillProfileDataTypeController(factory, | 236 return new AutofillProfileDataTypeController(factory, profile); |
238 profile); | |
239 } | 237 } |
240 | 238 |
241 void SetExpectation(ProfileSyncFactoryMock* factory, | 239 void SetExpectation(ProfileSyncFactoryMock* factory, |
242 ProfileSyncService* service, | 240 ProfileSyncService* service, |
243 WebDatabase* wd, | 241 WebDatabase* wd, |
244 DataTypeController* dtc) { | 242 DataTypeController* dtc) { |
245 EXPECT_CALL(*factory, CreateAutofillProfileSyncComponents(_,_,_)). | 243 EXPECT_CALL(*factory, CreateAutofillProfileSyncComponents(_,_,_)). |
246 WillOnce(MakeAutofillProfileSyncComponents(service, wd, dtc)); | 244 WillOnce(MakeAutofillProfileSyncComponents(service, wd, dtc)); |
247 } | 245 } |
248 }; | 246 }; |
249 | 247 |
250 class PersonalDataManagerMock: public PersonalDataManager { | 248 class PersonalDataManagerMock: public PersonalDataManager { |
251 public: | 249 public: |
252 static ProfileKeyedService* Build(Profile* profile) { | 250 static ProfileKeyedService* Build(Profile* profile) { |
253 return new PersonalDataManagerMock; | 251 return new PersonalDataManagerMock; |
254 } | 252 } |
255 | 253 |
256 MOCK_CONST_METHOD0(IsDataLoaded, bool()); | 254 MOCK_CONST_METHOD0(IsDataLoaded, bool()); |
257 MOCK_METHOD0(LoadProfiles, void()); | 255 MOCK_METHOD0(LoadProfiles, void()); |
258 MOCK_METHOD0(LoadCreditCards, void()); | 256 MOCK_METHOD0(LoadCreditCards, void()); |
259 MOCK_METHOD0(Refresh, void()); | 257 MOCK_METHOD0(Refresh, void()); |
260 }; | 258 }; |
261 template <class T> class AddAutofillTask; | 259 template <class T> class AddAutofillTask; |
262 | 260 |
263 class ProfileSyncServiceAutofillTest : public AbstractProfileSyncServiceTest { | 261 class ProfileSyncServiceAutofillTest : public AbstractProfileSyncServiceTest { |
264 protected: | 262 protected: |
265 ProfileSyncServiceAutofillTest() {} | 263 ProfileSyncServiceAutofillTest() |
| 264 : autofill_table_created_or_destroyed_(false, false) { |
| 265 } |
266 | 266 |
267 AutofillProfileFactory profile_factory_; | 267 AutofillProfileFactory profile_factory_; |
268 AutofillEntryFactory entry_factory_; | 268 AutofillEntryFactory entry_factory_; |
269 | 269 |
270 AbstractAutofillFactory* GetFactory(syncable::ModelType type) { | 270 AbstractAutofillFactory* GetFactory(syncable::ModelType type) { |
271 if (type == syncable::AUTOFILL) { | 271 if (type == syncable::AUTOFILL) { |
272 return &entry_factory_; | 272 return &entry_factory_; |
273 } else if (type == syncable::AUTOFILL_PROFILE) { | 273 } else if (type == syncable::AUTOFILL_PROFILE) { |
274 return &profile_factory_; | 274 return &profile_factory_; |
275 } else { | 275 } else { |
276 NOTREACHED(); | 276 NOTREACHED(); |
277 return NULL; | 277 return NULL; |
278 } | 278 } |
279 } | 279 } |
280 | 280 |
281 virtual void SetUp() { | 281 virtual void SetUp() { |
282 AbstractProfileSyncServiceTest::SetUp(); | 282 AbstractProfileSyncServiceTest::SetUp(); |
283 profile_.CreateRequestContext(); | 283 profile_.CreateRequestContext(); |
284 web_database_.reset(new WebDatabaseFake(&autofill_table_)); | 284 |
| 285 // The |autofill_table_| must be constructed on the DB thread. |
| 286 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, |
| 287 base::Bind(&ProfileSyncServiceAutofillTest::CreateAutofillTable, |
| 288 base::Unretained(this))); |
| 289 ASSERT_TRUE(autofill_table_created_or_destroyed_.Wait()); |
| 290 |
| 291 web_database_.reset(new WebDatabaseFake(autofill_table_.get())); |
285 web_data_service_ = new WebDataServiceFake(web_database_.get()); | 292 web_data_service_ = new WebDataServiceFake(web_database_.get()); |
286 personal_data_manager_ = static_cast<PersonalDataManagerMock*>( | 293 personal_data_manager_ = static_cast<PersonalDataManagerMock*>( |
287 PersonalDataManagerFactory::GetInstance()->SetTestingFactoryAndUse( | 294 PersonalDataManagerFactory::GetInstance()->SetTestingFactoryAndUse( |
288 &profile_, PersonalDataManagerMock::Build)); | 295 &profile_, PersonalDataManagerMock::Build)); |
289 EXPECT_CALL(*personal_data_manager_, LoadProfiles()).Times(1); | 296 EXPECT_CALL(*personal_data_manager_, LoadProfiles()).Times(1); |
290 EXPECT_CALL(*personal_data_manager_, LoadCreditCards()).Times(1); | 297 EXPECT_CALL(*personal_data_manager_, LoadCreditCards()).Times(1); |
291 EXPECT_CALL(profile_, GetWebDataService(_)). | 298 EXPECT_CALL(profile_, GetWebDataService(_)). |
292 // TokenService::Initialize | 299 // TokenService::Initialize |
293 // AutofillDataTypeController::StartModels() | 300 // AutofillDataTypeController::StartModels() |
294 // In some tests: | 301 // In some tests: |
295 // AutofillProfileSyncableService::AutofillProfileSyncableService() | 302 // AutofillProfileSyncableService::AutofillProfileSyncableService() |
296 WillRepeatedly(Return(web_data_service_.get())); | 303 WillRepeatedly(Return(web_data_service_.get())); |
297 personal_data_manager_->Init(&profile_); | 304 personal_data_manager_->Init(&profile_); |
298 | 305 |
299 notification_service_ = new ThreadNotificationService(&db_thread_); | 306 notification_service_ = new ThreadNotificationService(&db_thread_); |
300 notification_service_->Init(); | 307 notification_service_->Init(); |
301 } | 308 } |
302 | 309 |
303 virtual void TearDown() { | 310 virtual void TearDown() { |
304 service_.reset(); | 311 service_.reset(); |
305 notification_service_->TearDown(); | 312 notification_service_->TearDown(); |
| 313 |
| 314 // The |autofill_table_| must be destroyed on the DB thread. |
| 315 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, |
| 316 base::Bind(&ProfileSyncServiceAutofillTest::DestroyAutofillTable, |
| 317 base::Unretained(this))); |
| 318 ASSERT_TRUE(autofill_table_created_or_destroyed_.Wait()); |
| 319 |
306 profile_.ResetRequestContext(); | 320 profile_.ResetRequestContext(); |
307 AbstractProfileSyncServiceTest::TearDown(); | 321 AbstractProfileSyncServiceTest::TearDown(); |
308 } | 322 } |
309 | 323 |
| 324 void CreateAutofillTable() { |
| 325 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 326 autofill_table_.reset(new AutofillTableMock); |
| 327 autofill_table_created_or_destroyed_.Signal(); |
| 328 } |
| 329 |
| 330 void DestroyAutofillTable() { |
| 331 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 332 autofill_table_.reset(); |
| 333 autofill_table_created_or_destroyed_.Signal(); |
| 334 } |
| 335 |
310 void StartSyncService(Task* task, | 336 void StartSyncService(Task* task, |
311 bool will_fail_association, | 337 bool will_fail_association, |
312 syncable::ModelType type) { | 338 syncable::ModelType type) { |
313 AbstractAutofillFactory* factory = GetFactory(type); | 339 AbstractAutofillFactory* factory = GetFactory(type); |
314 service_.reset( | 340 service_.reset( |
315 new TestProfileSyncService(&factory_, &profile_, "test_user", false, | 341 new TestProfileSyncService(&factory_, &profile_, "test_user", false, |
316 task)); | 342 task)); |
317 EXPECT_CALL(profile_, GetProfileSyncService()).WillRepeatedly( | 343 EXPECT_CALL(profile_, GetProfileSyncService()).WillRepeatedly( |
318 Return(service_.get())); | 344 Return(service_.get())); |
319 AutofillDataTypeController* data_type_controller = | 345 AutofillDataTypeController* data_type_controller = |
320 factory->CreateDataTypeController(&factory_, | 346 factory->CreateDataTypeController(&factory_, |
321 &profile_, | 347 &profile_, |
322 service_.get()); | 348 service_.get()); |
323 SyncBackendHostForProfileSyncTest:: | 349 SyncBackendHostForProfileSyncTest:: |
324 SetDefaultExpectationsForWorkerCreation(&profile_); | 350 SetDefaultExpectationsForWorkerCreation(&profile_); |
325 | 351 |
326 factory->SetExpectation(&factory_, | 352 factory->SetExpectation(&factory_, |
327 service_.get(), | 353 service_.get(), |
328 web_database_.get(), | 354 web_database_.get(), |
329 data_type_controller); | 355 data_type_controller); |
330 | 356 |
331 EXPECT_CALL(factory_, CreateDataTypeManager(_, _)). | 357 EXPECT_CALL(factory_, CreateDataTypeManager(_, _)). |
332 WillOnce(ReturnNewDataTypeManager()); | 358 WillOnce(ReturnNewDataTypeManager()); |
333 | 359 |
334 EXPECT_CALL(*personal_data_manager_, IsDataLoaded()). | 360 EXPECT_CALL(*personal_data_manager_, IsDataLoaded()). |
335 WillRepeatedly(Return(true)); | 361 WillRepeatedly(Return(true)); |
336 | 362 |
337 // We need tokens to get the tests going | 363 // We need tokens to get the tests going |
338 token_service_->IssueAuthTokenForTest( | 364 token_service_->IssueAuthTokenForTest(GaiaConstants::kSyncService, "token"); |
339 GaiaConstants::kSyncService, "token"); | |
340 | 365 |
341 EXPECT_CALL(profile_, GetTokenService()). | 366 EXPECT_CALL(profile_, GetTokenService()). |
342 WillRepeatedly(Return(token_service_.get())); | 367 WillRepeatedly(Return(token_service_.get())); |
343 | 368 |
344 service_->RegisterDataTypeController(data_type_controller); | 369 service_->RegisterDataTypeController(data_type_controller); |
345 service_->Initialize(); | 370 service_->Initialize(); |
346 MessageLoop::current()->Run(); | 371 MessageLoop::current()->Run(); |
347 } | 372 } |
348 | 373 |
349 bool AddAutofillSyncNode(const AutofillEntry& entry) { | 374 bool AddAutofillSyncNode(const AutofillEntry& entry) { |
350 sync_api::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); | 375 sync_api::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); |
351 sync_api::ReadNode autofill_root(&trans); | 376 sync_api::ReadNode autofill_root(&trans); |
352 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillTag)) | 377 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillTag)) |
353 return false; | 378 return false; |
354 | 379 |
355 sync_api::WriteNode node(&trans); | 380 sync_api::WriteNode node(&trans); |
356 std::string tag = AutofillModelAssociator::KeyToTag(entry.key().name(), | 381 std::string tag = AutofillModelAssociator::KeyToTag(entry.key().name(), |
357 entry.key().value()); | 382 entry.key().value()); |
358 if (!node.InitUniqueByCreation(syncable::AUTOFILL, autofill_root, tag)) | 383 if (!node.InitUniqueByCreation(syncable::AUTOFILL, autofill_root, tag)) |
359 return false; | 384 return false; |
360 | 385 |
361 AutofillChangeProcessor::WriteAutofillEntry(entry, &node); | 386 AutofillChangeProcessor::WriteAutofillEntry(entry, &node); |
362 return true; | 387 return true; |
363 } | 388 } |
364 | 389 |
365 bool AddAutofillSyncNode(const AutofillProfile& profile) { | 390 bool AddAutofillSyncNode(const AutofillProfile& profile) { |
366 sync_api::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); | 391 sync_api::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); |
367 sync_api::ReadNode autofill_root(&trans); | 392 sync_api::ReadNode autofill_root(&trans); |
368 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillProfileTag)) | 393 if (!autofill_root.InitByTagLookup(kAutofillProfileTag)) |
369 return false; | 394 return false; |
370 sync_api::WriteNode node(&trans); | 395 sync_api::WriteNode node(&trans); |
371 std::string tag = profile.guid(); | 396 std::string tag = profile.guid(); |
372 if (!node.InitUniqueByCreation(syncable::AUTOFILL_PROFILE, | 397 if (!node.InitUniqueByCreation(syncable::AUTOFILL_PROFILE, |
373 autofill_root, tag)) | 398 autofill_root, tag)) |
374 return false; | 399 return false; |
375 sync_pb::EntitySpecifics specifics; | 400 sync_pb::EntitySpecifics specifics; |
376 AutofillProfileSyncableService::WriteAutofillProfile(profile, &specifics); | 401 AutofillProfileSyncableService::WriteAutofillProfile(profile, &specifics); |
377 sync_pb::AutofillProfileSpecifics* profile_specifics = | 402 sync_pb::AutofillProfileSpecifics* profile_specifics = |
378 specifics.MutableExtension(sync_pb::autofill_profile); | 403 specifics.MutableExtension(sync_pb::autofill_profile); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 } | 439 } |
415 child_id = child_node.GetSuccessorId(); | 440 child_id = child_node.GetSuccessorId(); |
416 } | 441 } |
417 return true; | 442 return true; |
418 } | 443 } |
419 | 444 |
420 bool GetAutofillProfilesFromSyncDBUnderProfileNode( | 445 bool GetAutofillProfilesFromSyncDBUnderProfileNode( |
421 std::vector<AutofillProfile>* profiles) { | 446 std::vector<AutofillProfile>* profiles) { |
422 sync_api::ReadTransaction trans(FROM_HERE, service_->GetUserShare()); | 447 sync_api::ReadTransaction trans(FROM_HERE, service_->GetUserShare()); |
423 sync_api::ReadNode autofill_root(&trans); | 448 sync_api::ReadNode autofill_root(&trans); |
424 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillProfileTag)) | 449 if (!autofill_root.InitByTagLookup(kAutofillProfileTag)) |
425 return false; | 450 return false; |
426 | 451 |
427 int64 child_id = autofill_root.GetFirstChildId(); | 452 int64 child_id = autofill_root.GetFirstChildId(); |
428 while (child_id != sync_api::kInvalidId) { | 453 while (child_id != sync_api::kInvalidId) { |
429 sync_api::ReadNode child_node(&trans); | 454 sync_api::ReadNode child_node(&trans); |
430 if (!child_node.InitByIdLookup(child_id)) | 455 if (!child_node.InitByIdLookup(child_id)) |
431 return false; | 456 return false; |
432 | 457 |
433 const sync_pb::AutofillProfileSpecifics& autofill( | 458 const sync_pb::AutofillProfileSpecifics& autofill( |
434 child_node.GetAutofillProfileSpecifics()); | 459 child_node.GetAutofillProfileSpecifics()); |
435 AutofillProfile p; | 460 AutofillProfile p; |
436 p.set_guid(autofill.guid()); | 461 p.set_guid(autofill.guid()); |
437 AutofillProfileSyncableService::OverwriteProfileWithServerData( | 462 AutofillProfileSyncableService::OverwriteProfileWithServerData( |
438 autofill, &p); | 463 autofill, &p); |
439 profiles->push_back(p); | 464 profiles->push_back(p); |
440 child_id = child_node.GetSuccessorId(); | 465 child_id = child_node.GetSuccessorId(); |
441 } | 466 } |
442 return true; | 467 return true; |
443 } | 468 } |
444 | 469 |
445 void SetIdleChangeProcessorExpectations() { | 470 void SetIdleChangeProcessorExpectations() { |
446 EXPECT_CALL(autofill_table_, RemoveFormElement(_, _)).Times(0); | 471 EXPECT_CALL(*autofill_table_, RemoveFormElement(_, _)).Times(0); |
447 EXPECT_CALL(autofill_table_, GetAutofillTimestamps(_, _, _)).Times(0); | 472 EXPECT_CALL(*autofill_table_, GetAutofillTimestamps(_, _, _)).Times(0); |
448 EXPECT_CALL(autofill_table_, UpdateAutofillEntries(_)).Times(0); | 473 EXPECT_CALL(*autofill_table_, UpdateAutofillEntries(_)).Times(0); |
449 } | 474 } |
450 | 475 |
451 static AutofillEntry MakeAutofillEntry(const char* name, | 476 static AutofillEntry MakeAutofillEntry(const char* name, |
452 const char* value, | 477 const char* value, |
453 time_t timestamp0, | 478 time_t timestamp0, |
454 time_t timestamp1) { | 479 time_t timestamp1) { |
455 std::vector<Time> timestamps; | 480 std::vector<Time> timestamps; |
456 if (timestamp0 > 0) | 481 if (timestamp0 > 0) |
457 timestamps.push_back(Time::FromTimeT(timestamp0)); | 482 timestamps.push_back(Time::FromTimeT(timestamp0)); |
458 if (timestamp1 > 0) | 483 if (timestamp1 > 0) |
459 timestamps.push_back(Time::FromTimeT(timestamp1)); | 484 timestamps.push_back(Time::FromTimeT(timestamp1)); |
460 return AutofillEntry( | 485 return AutofillEntry( |
461 AutofillKey(ASCIIToUTF16(name), ASCIIToUTF16(value)), timestamps); | 486 AutofillKey(ASCIIToUTF16(name), ASCIIToUTF16(value)), timestamps); |
462 } | 487 } |
463 | 488 |
464 static AutofillEntry MakeAutofillEntry(const char* name, | 489 static AutofillEntry MakeAutofillEntry(const char* name, |
465 const char* value, | 490 const char* value, |
466 time_t timestamp) { | 491 time_t timestamp) { |
467 return MakeAutofillEntry(name, value, timestamp, -1); | 492 return MakeAutofillEntry(name, value, timestamp, -1); |
468 } | 493 } |
469 | 494 |
470 friend class AddAutofillTask<AutofillEntry>; | 495 friend class AddAutofillTask<AutofillEntry>; |
471 friend class AddAutofillTask<AutofillProfile>; | 496 friend class AddAutofillTask<AutofillProfile>; |
472 friend class FakeServerUpdater; | 497 friend class FakeServerUpdater; |
473 | 498 |
474 scoped_refptr<ThreadNotificationService> notification_service_; | 499 scoped_refptr<ThreadNotificationService> notification_service_; |
475 | 500 |
476 ProfileMock profile_; | 501 ProfileMock profile_; |
477 AutofillTableMock autofill_table_; | 502 scoped_ptr<AutofillTableMock> autofill_table_; |
| 503 WaitableEvent autofill_table_created_or_destroyed_; |
478 scoped_ptr<WebDatabaseFake> web_database_; | 504 scoped_ptr<WebDatabaseFake> web_database_; |
479 scoped_refptr<WebDataService> web_data_service_; | 505 scoped_refptr<WebDataService> web_data_service_; |
480 PersonalDataManagerMock* personal_data_manager_; | 506 PersonalDataManagerMock* personal_data_manager_; |
481 }; | 507 }; |
482 | 508 |
483 template <class T> | 509 template <class T> |
484 class AddAutofillTask : public Task { | 510 class AddAutofillTask : public Task { |
485 public: | 511 public: |
486 AddAutofillTask(ProfileSyncServiceAutofillTest* test, | 512 AddAutofillTask(ProfileSyncServiceAutofillTest* test, |
487 const std::vector<T>& entries) | 513 const std::vector<T>& entries) |
488 : test_(test), entries_(entries), success_(false) { | 514 : test_(test), entries_(entries), success_(false) { |
489 } | 515 } |
490 | 516 |
491 virtual void Run() { | 517 virtual void Run() { |
492 if (!test_->CreateRoot(GetModelType<T>())) | 518 if (!test_->CreateRoot(GetModelType<T>())) |
493 return; | 519 return; |
494 for (size_t i = 0; i < entries_.size(); ++i) { | 520 for (size_t i = 0; i < entries_.size(); ++i) { |
495 if (!test_->AddAutofillSyncNode(entries_[i])) | 521 if (!test_->AddAutofillSyncNode(entries_[i])) |
496 return; | 522 return; |
497 } | 523 } |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
633 // TODO(skrul): Test processing of cloud changes. | 659 // TODO(skrul): Test processing of cloud changes. |
634 // TODO(tim): Add autofill data type controller test, and a case to cover | 660 // TODO(tim): Add autofill data type controller test, and a case to cover |
635 // waiting for the PersonalDataManager. | 661 // waiting for the PersonalDataManager. |
636 TEST_F(ProfileSyncServiceAutofillTest, FailModelAssociation) { | 662 TEST_F(ProfileSyncServiceAutofillTest, FailModelAssociation) { |
637 // Don't create the root autofill node so startup fails. | 663 // Don't create the root autofill node so startup fails. |
638 StartSyncService(NULL, true, syncable::AUTOFILL); | 664 StartSyncService(NULL, true, syncable::AUTOFILL); |
639 EXPECT_TRUE(service_->unrecoverable_error_detected()); | 665 EXPECT_TRUE(service_->unrecoverable_error_detected()); |
640 } | 666 } |
641 | 667 |
642 TEST_F(ProfileSyncServiceAutofillTest, EmptyNativeEmptySync) { | 668 TEST_F(ProfileSyncServiceAutofillTest, EmptyNativeEmptySync) { |
643 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)).WillOnce(Return(true)); | 669 EXPECT_CALL(*autofill_table_, |
644 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 670 GetAllAutofillEntries(_)).WillOnce(Return(true)); |
| 671 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
645 SetIdleChangeProcessorExpectations(); | 672 SetIdleChangeProcessorExpectations(); |
646 CreateRootTask task(this, syncable::AUTOFILL); | 673 CreateRootTask task(this, syncable::AUTOFILL); |
647 EXPECT_CALL(*personal_data_manager_, Refresh()); | 674 EXPECT_CALL(*personal_data_manager_, Refresh()); |
648 StartSyncService(&task, false, syncable::AUTOFILL); | 675 StartSyncService(&task, false, syncable::AUTOFILL); |
649 ASSERT_TRUE(task.success()); | 676 ASSERT_TRUE(task.success()); |
650 std::vector<AutofillEntry> sync_entries; | 677 std::vector<AutofillEntry> sync_entries; |
651 std::vector<AutofillProfile> sync_profiles; | 678 std::vector<AutofillProfile> sync_profiles; |
652 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); | 679 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); |
653 EXPECT_EQ(0U, sync_entries.size()); | 680 EXPECT_EQ(0U, sync_entries.size()); |
654 EXPECT_EQ(0U, sync_profiles.size()); | 681 EXPECT_EQ(0U, sync_profiles.size()); |
655 } | 682 } |
656 | 683 |
657 TEST_F(ProfileSyncServiceAutofillTest, HasNativeEntriesEmptySync) { | 684 TEST_F(ProfileSyncServiceAutofillTest, HasNativeEntriesEmptySync) { |
658 std::vector<AutofillEntry> entries; | 685 std::vector<AutofillEntry> entries; |
659 entries.push_back(MakeAutofillEntry("foo", "bar", 1)); | 686 entries.push_back(MakeAutofillEntry("foo", "bar", 1)); |
660 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)). | 687 EXPECT_CALL(*autofill_table_, GetAllAutofillEntries(_)). |
661 WillOnce(DoAll(SetArgumentPointee<0>(entries), Return(true))); | 688 WillOnce(DoAll(SetArgumentPointee<0>(entries), Return(true))); |
662 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 689 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
663 SetIdleChangeProcessorExpectations(); | 690 SetIdleChangeProcessorExpectations(); |
664 CreateRootTask task(this, syncable::AUTOFILL); | 691 CreateRootTask task(this, syncable::AUTOFILL); |
665 EXPECT_CALL(*personal_data_manager_, Refresh()); | 692 EXPECT_CALL(*personal_data_manager_, Refresh()); |
666 StartSyncService(&task, false, syncable::AUTOFILL); | 693 StartSyncService(&task, false, syncable::AUTOFILL); |
667 ASSERT_TRUE(task.success()); | 694 ASSERT_TRUE(task.success()); |
668 std::vector<AutofillEntry> sync_entries; | 695 std::vector<AutofillEntry> sync_entries; |
669 std::vector<AutofillProfile> sync_profiles; | 696 std::vector<AutofillProfile> sync_profiles; |
670 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); | 697 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); |
671 ASSERT_EQ(1U, entries.size()); | 698 ASSERT_EQ(1U, entries.size()); |
672 EXPECT_TRUE(entries[0] == sync_entries[0]); | 699 EXPECT_TRUE(entries[0] == sync_entries[0]); |
673 EXPECT_EQ(0U, sync_profiles.size()); | 700 EXPECT_EQ(0U, sync_profiles.size()); |
674 } | 701 } |
675 | 702 |
676 TEST_F(ProfileSyncServiceAutofillTest, HasProfileEmptySync) { | 703 TEST_F(ProfileSyncServiceAutofillTest, HasProfileEmptySync) { |
677 std::vector<AutofillProfile*> profiles; | 704 std::vector<AutofillProfile*> profiles; |
678 std::vector<AutofillProfile> expected_profiles; | 705 std::vector<AutofillProfile> expected_profiles; |
679 // Owned by GetAutofillProfiles caller. | 706 // Owned by GetAutofillProfiles caller. |
680 AutofillProfile* profile0 = new AutofillProfile; | 707 AutofillProfile* profile0 = new AutofillProfile; |
681 autofill_test::SetProfileInfoWithGuid(profile0, | 708 autofill_test::SetProfileInfoWithGuid(profile0, |
682 "54B3F9AA-335E-4F71-A27D-719C41564230", "Billing", | 709 "54B3F9AA-335E-4F71-A27D-719C41564230", "Billing", |
683 "Mitchell", "Morrison", | 710 "Mitchell", "Morrison", |
684 "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA", | 711 "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA", |
685 "91601", "US", "12345678910"); | 712 "91601", "US", "12345678910"); |
686 profiles.push_back(profile0); | 713 profiles.push_back(profile0); |
687 expected_profiles.push_back(*profile0); | 714 expected_profiles.push_back(*profile0); |
688 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)). | 715 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)). |
689 WillOnce(DoAll(SetArgumentPointee<0>(profiles), Return(true))); | 716 WillOnce(DoAll(SetArgumentPointee<0>(profiles), Return(true))); |
690 EXPECT_CALL(*personal_data_manager_, Refresh()); | 717 EXPECT_CALL(*personal_data_manager_, Refresh()); |
691 SetIdleChangeProcessorExpectations(); | 718 SetIdleChangeProcessorExpectations(); |
692 CreateRootTask task(this, syncable::AUTOFILL_PROFILE); | 719 CreateRootTask task(this, syncable::AUTOFILL_PROFILE); |
693 StartSyncService(&task, false, syncable::AUTOFILL_PROFILE); | 720 StartSyncService(&task, false, syncable::AUTOFILL_PROFILE); |
694 ASSERT_TRUE(task.success()); | 721 ASSERT_TRUE(task.success()); |
695 std::vector<AutofillProfile> sync_profiles; | 722 std::vector<AutofillProfile> sync_profiles; |
696 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode(&sync_profiles)); | 723 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode(&sync_profiles)); |
697 EXPECT_EQ(1U, sync_profiles.size()); | 724 EXPECT_EQ(1U, sync_profiles.size()); |
698 EXPECT_EQ(0, expected_profiles[0].Compare(sync_profiles[0])); | 725 EXPECT_EQ(0, expected_profiles[0].Compare(sync_profiles[0])); |
699 } | 726 } |
700 | 727 |
701 TEST_F(ProfileSyncServiceAutofillTest, HasNativeWithDuplicatesEmptySync) { | 728 TEST_F(ProfileSyncServiceAutofillTest, HasNativeWithDuplicatesEmptySync) { |
702 // There is buggy autofill code that allows duplicate name/value | 729 // There is buggy autofill code that allows duplicate name/value |
703 // pairs to exist in the database with separate pair_ids. | 730 // pairs to exist in the database with separate pair_ids. |
704 std::vector<AutofillEntry> entries; | 731 std::vector<AutofillEntry> entries; |
705 entries.push_back(MakeAutofillEntry("foo", "bar", 1)); | 732 entries.push_back(MakeAutofillEntry("foo", "bar", 1)); |
706 entries.push_back(MakeAutofillEntry("dup", "", 2)); | 733 entries.push_back(MakeAutofillEntry("dup", "", 2)); |
707 entries.push_back(MakeAutofillEntry("dup", "", 3)); | 734 entries.push_back(MakeAutofillEntry("dup", "", 3)); |
708 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)). | 735 EXPECT_CALL(*autofill_table_, GetAllAutofillEntries(_)). |
709 WillOnce(DoAll(SetArgumentPointee<0>(entries), Return(true))); | 736 WillOnce(DoAll(SetArgumentPointee<0>(entries), Return(true))); |
710 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 737 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
711 SetIdleChangeProcessorExpectations(); | 738 SetIdleChangeProcessorExpectations(); |
712 CreateRootTask task(this, syncable::AUTOFILL); | 739 CreateRootTask task(this, syncable::AUTOFILL); |
713 EXPECT_CALL(*personal_data_manager_, Refresh()); | 740 EXPECT_CALL(*personal_data_manager_, Refresh()); |
714 StartSyncService(&task, false, syncable::AUTOFILL); | 741 StartSyncService(&task, false, syncable::AUTOFILL); |
715 ASSERT_TRUE(task.success()); | 742 ASSERT_TRUE(task.success()); |
716 std::vector<AutofillEntry> sync_entries; | 743 std::vector<AutofillEntry> sync_entries; |
717 std::vector<AutofillProfile> sync_profiles; | 744 std::vector<AutofillProfile> sync_profiles; |
718 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); | 745 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); |
719 EXPECT_EQ(2U, sync_entries.size()); | 746 EXPECT_EQ(2U, sync_entries.size()); |
720 } | 747 } |
721 | 748 |
722 TEST_F(ProfileSyncServiceAutofillTest, HasNativeHasSyncNoMerge) { | 749 TEST_F(ProfileSyncServiceAutofillTest, HasNativeHasSyncNoMerge) { |
723 AutofillEntry native_entry(MakeAutofillEntry("native", "entry", 1)); | 750 AutofillEntry native_entry(MakeAutofillEntry("native", "entry", 1)); |
724 AutofillEntry sync_entry(MakeAutofillEntry("sync", "entry", 2)); | 751 AutofillEntry sync_entry(MakeAutofillEntry("sync", "entry", 2)); |
725 | 752 |
726 std::vector<AutofillEntry> native_entries; | 753 std::vector<AutofillEntry> native_entries; |
727 native_entries.push_back(native_entry); | 754 native_entries.push_back(native_entry); |
728 | 755 |
729 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)). | 756 EXPECT_CALL(*autofill_table_, GetAllAutofillEntries(_)). |
730 WillOnce(DoAll(SetArgumentPointee<0>(native_entries), Return(true))); | 757 WillOnce(DoAll(SetArgumentPointee<0>(native_entries), Return(true))); |
731 | 758 |
732 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 759 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
733 | 760 |
734 std::vector<AutofillEntry> sync_entries; | 761 std::vector<AutofillEntry> sync_entries; |
735 sync_entries.push_back(sync_entry); | 762 sync_entries.push_back(sync_entry); |
736 | 763 |
737 AddAutofillTask<AutofillEntry> task(this, sync_entries); | 764 AddAutofillTask<AutofillEntry> task(this, sync_entries); |
738 | 765 |
739 EXPECT_CALL(autofill_table_, UpdateAutofillEntries(ElementsAre(sync_entry))). | 766 EXPECT_CALL(*autofill_table_, UpdateAutofillEntries(ElementsAre(sync_entry))). |
740 WillOnce(Return(true)); | 767 WillOnce(Return(true)); |
741 | 768 |
742 EXPECT_CALL(*personal_data_manager_, Refresh()); | 769 EXPECT_CALL(*personal_data_manager_, Refresh()); |
743 StartSyncService(&task, false, syncable::AUTOFILL); | 770 StartSyncService(&task, false, syncable::AUTOFILL); |
744 ASSERT_TRUE(task.success()); | 771 ASSERT_TRUE(task.success()); |
745 | 772 |
746 std::set<AutofillEntry> expected_entries; | 773 std::set<AutofillEntry> expected_entries; |
747 expected_entries.insert(native_entry); | 774 expected_entries.insert(native_entry); |
748 expected_entries.insert(sync_entry); | 775 expected_entries.insert(sync_entry); |
749 | 776 |
750 std::vector<AutofillEntry> new_sync_entries; | 777 std::vector<AutofillEntry> new_sync_entries; |
751 std::vector<AutofillProfile> new_sync_profiles; | 778 std::vector<AutofillProfile> new_sync_profiles; |
752 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, | 779 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, |
753 &new_sync_profiles)); | 780 &new_sync_profiles)); |
754 std::set<AutofillEntry> new_sync_entries_set(new_sync_entries.begin(), | 781 std::set<AutofillEntry> new_sync_entries_set(new_sync_entries.begin(), |
755 new_sync_entries.end()); | 782 new_sync_entries.end()); |
756 | 783 |
757 EXPECT_TRUE(expected_entries == new_sync_entries_set); | 784 EXPECT_TRUE(expected_entries == new_sync_entries_set); |
758 } | 785 } |
759 | 786 |
760 TEST_F(ProfileSyncServiceAutofillTest, HasNativeHasSyncMergeEntry) { | 787 TEST_F(ProfileSyncServiceAutofillTest, HasNativeHasSyncMergeEntry) { |
761 AutofillEntry native_entry(MakeAutofillEntry("merge", "entry", 1)); | 788 AutofillEntry native_entry(MakeAutofillEntry("merge", "entry", 1)); |
762 AutofillEntry sync_entry(MakeAutofillEntry("merge", "entry", 2)); | 789 AutofillEntry sync_entry(MakeAutofillEntry("merge", "entry", 2)); |
763 AutofillEntry merged_entry(MakeAutofillEntry("merge", "entry", 1, 2)); | 790 AutofillEntry merged_entry(MakeAutofillEntry("merge", "entry", 1, 2)); |
764 | 791 |
765 std::vector<AutofillEntry> native_entries; | 792 std::vector<AutofillEntry> native_entries; |
766 native_entries.push_back(native_entry); | 793 native_entries.push_back(native_entry); |
767 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)). | 794 EXPECT_CALL(*autofill_table_, GetAllAutofillEntries(_)). |
768 WillOnce(DoAll(SetArgumentPointee<0>(native_entries), Return(true))); | 795 WillOnce(DoAll(SetArgumentPointee<0>(native_entries), Return(true))); |
769 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 796 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
770 | 797 |
771 std::vector<AutofillEntry> sync_entries; | 798 std::vector<AutofillEntry> sync_entries; |
772 sync_entries.push_back(sync_entry); | 799 sync_entries.push_back(sync_entry); |
773 AddAutofillTask<AutofillEntry> task(this, sync_entries); | 800 AddAutofillTask<AutofillEntry> task(this, sync_entries); |
774 | 801 |
775 EXPECT_CALL(autofill_table_, | 802 EXPECT_CALL(*autofill_table_, |
776 UpdateAutofillEntries(ElementsAre(merged_entry))).WillOnce(Return(true)); | 803 UpdateAutofillEntries(ElementsAre(merged_entry))).WillOnce(Return(true)); |
777 EXPECT_CALL(*personal_data_manager_, Refresh()); | 804 EXPECT_CALL(*personal_data_manager_, Refresh()); |
778 StartSyncService(&task, false, syncable::AUTOFILL); | 805 StartSyncService(&task, false, syncable::AUTOFILL); |
779 ASSERT_TRUE(task.success()); | 806 ASSERT_TRUE(task.success()); |
780 | 807 |
781 std::vector<AutofillEntry> new_sync_entries; | 808 std::vector<AutofillEntry> new_sync_entries; |
782 std::vector<AutofillProfile> new_sync_profiles; | 809 std::vector<AutofillProfile> new_sync_profiles; |
783 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, | 810 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, |
784 &new_sync_profiles)); | 811 &new_sync_profiles)); |
785 ASSERT_EQ(1U, new_sync_entries.size()); | 812 ASSERT_EQ(1U, new_sync_entries.size()); |
786 EXPECT_TRUE(merged_entry == new_sync_entries[0]); | 813 EXPECT_TRUE(merged_entry == new_sync_entries[0]); |
787 } | 814 } |
788 | 815 |
789 TEST_F(ProfileSyncServiceAutofillTest, HasNativeHasSyncMergeProfile) { | 816 TEST_F(ProfileSyncServiceAutofillTest, HasNativeHasSyncMergeProfile) { |
790 AutofillProfile sync_profile; | 817 AutofillProfile sync_profile; |
791 autofill_test::SetProfileInfoWithGuid(&sync_profile, | 818 autofill_test::SetProfileInfoWithGuid(&sync_profile, |
792 "23355099-1170-4B71-8ED4-144470CC9EBE", "Billing", | 819 "23355099-1170-4B71-8ED4-144470CC9EBE", "Billing", |
793 "Mitchell", "Morrison", | 820 "Mitchell", "Morrison", |
794 "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA", | 821 "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA", |
795 "91601", "US", "12345678910"); | 822 "91601", "US", "12345678910"); |
796 | 823 |
797 AutofillProfile* native_profile = new AutofillProfile; | 824 AutofillProfile* native_profile = new AutofillProfile; |
798 autofill_test::SetProfileInfoWithGuid(native_profile, | 825 autofill_test::SetProfileInfoWithGuid(native_profile, |
799 "23355099-1170-4B71-8ED4-144470CC9EBE", "Billing", "Alicia", "Saenz", | 826 "23355099-1170-4B71-8ED4-144470CC9EBE", "Billing", "Alicia", "Saenz", |
800 "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", | 827 "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", |
801 "32801", "US", "19482937549"); | 828 "32801", "US", "19482937549"); |
802 | 829 |
803 std::vector<AutofillProfile*> native_profiles; | 830 std::vector<AutofillProfile*> native_profiles; |
804 native_profiles.push_back(native_profile); | 831 native_profiles.push_back(native_profile); |
805 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)). | 832 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)). |
806 WillOnce(DoAll(SetArgumentPointee<0>(native_profiles), Return(true))); | 833 WillOnce(DoAll(SetArgumentPointee<0>(native_profiles), Return(true))); |
807 | 834 |
808 std::vector<AutofillProfile> sync_profiles; | 835 std::vector<AutofillProfile> sync_profiles; |
809 sync_profiles.push_back(sync_profile); | 836 sync_profiles.push_back(sync_profile); |
810 AddAutofillTask<AutofillProfile> task(this, sync_profiles); | 837 AddAutofillTask<AutofillProfile> task(this, sync_profiles); |
811 | 838 |
812 EXPECT_CALL(autofill_table_, UpdateAutofillProfile(_)). | 839 EXPECT_CALL(*autofill_table_, UpdateAutofillProfile(_)). |
813 WillOnce(Return(true)); | 840 WillOnce(Return(true)); |
814 EXPECT_CALL(*personal_data_manager_, Refresh()); | 841 EXPECT_CALL(*personal_data_manager_, Refresh()); |
815 StartSyncService(&task, false, syncable::AUTOFILL_PROFILE); | 842 StartSyncService(&task, false, syncable::AUTOFILL_PROFILE); |
816 ASSERT_TRUE(task.success()); | 843 ASSERT_TRUE(task.success()); |
817 | 844 |
818 std::vector<AutofillProfile> new_sync_profiles; | 845 std::vector<AutofillProfile> new_sync_profiles; |
819 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode( | 846 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode( |
820 &new_sync_profiles)); | 847 &new_sync_profiles)); |
821 ASSERT_EQ(1U, new_sync_profiles.size()); | 848 ASSERT_EQ(1U, new_sync_profiles.size()); |
822 EXPECT_EQ(0, sync_profile.Compare(new_sync_profiles[0])); | 849 EXPECT_EQ(0, sync_profile.Compare(new_sync_profiles[0])); |
(...skipping 11 matching lines...) Expand all Loading... |
834 std::string native_guid = "EDC609ED-7EEE-4F27-B00C-423242A9C44B"; | 861 std::string native_guid = "EDC609ED-7EEE-4F27-B00C-423242A9C44B"; |
835 AutofillProfile* native_profile = new AutofillProfile; | 862 AutofillProfile* native_profile = new AutofillProfile; |
836 autofill_test::SetProfileInfoWithGuid(native_profile, | 863 autofill_test::SetProfileInfoWithGuid(native_profile, |
837 native_guid.c_str(), "Billing", | 864 native_guid.c_str(), "Billing", |
838 "Mitchell", "Morrison", | 865 "Mitchell", "Morrison", |
839 "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA", | 866 "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA", |
840 "91601", "US", "12345678910"); | 867 "91601", "US", "12345678910"); |
841 | 868 |
842 std::vector<AutofillProfile*> native_profiles; | 869 std::vector<AutofillProfile*> native_profiles; |
843 native_profiles.push_back(native_profile); | 870 native_profiles.push_back(native_profile); |
844 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)). | 871 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)). |
845 WillOnce(DoAll(SetArgumentPointee<0>(native_profiles), Return(true))); | 872 WillOnce(DoAll(SetArgumentPointee<0>(native_profiles), Return(true))); |
846 | 873 |
847 std::vector<AutofillProfile> sync_profiles; | 874 std::vector<AutofillProfile> sync_profiles; |
848 sync_profiles.push_back(sync_profile); | 875 sync_profiles.push_back(sync_profile); |
849 AddAutofillTask<AutofillProfile> task(this, sync_profiles); | 876 AddAutofillTask<AutofillProfile> task(this, sync_profiles); |
850 | 877 |
851 EXPECT_CALL(autofill_table_, AddAutofillProfile(_)). | 878 EXPECT_CALL(*autofill_table_, AddAutofillProfile(_)). |
852 WillOnce(Return(true)); | 879 WillOnce(Return(true)); |
853 EXPECT_CALL(autofill_table_, RemoveAutofillProfile(native_guid)). | 880 EXPECT_CALL(*autofill_table_, RemoveAutofillProfile(native_guid)). |
854 WillOnce(Return(true)); | 881 WillOnce(Return(true)); |
855 EXPECT_CALL(*personal_data_manager_, Refresh()); | 882 EXPECT_CALL(*personal_data_manager_, Refresh()); |
856 StartSyncService(&task, false, syncable::AUTOFILL_PROFILE); | 883 StartSyncService(&task, false, syncable::AUTOFILL_PROFILE); |
857 ASSERT_TRUE(task.success()); | 884 ASSERT_TRUE(task.success()); |
858 | 885 |
859 std::vector<AutofillProfile> new_sync_profiles; | 886 std::vector<AutofillProfile> new_sync_profiles; |
860 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode( | 887 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode( |
861 &new_sync_profiles)); | 888 &new_sync_profiles)); |
862 ASSERT_EQ(1U, new_sync_profiles.size()); | 889 ASSERT_EQ(1U, new_sync_profiles.size()); |
863 EXPECT_EQ(0, sync_profile.Compare(new_sync_profiles[0])); | 890 EXPECT_EQ(0, sync_profile.Compare(new_sync_profiles[0])); |
864 EXPECT_EQ(sync_profile.guid(), new_sync_profiles[0].guid()); | 891 EXPECT_EQ(sync_profile.guid(), new_sync_profiles[0].guid()); |
865 } | 892 } |
866 | 893 |
867 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeAddEntry) { | 894 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeAddEntry) { |
868 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)).WillOnce(Return(true)); | 895 EXPECT_CALL(*autofill_table_, |
869 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 896 GetAllAutofillEntries(_)).WillOnce(Return(true)); |
| 897 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
870 EXPECT_CALL(*personal_data_manager_, Refresh()); | 898 EXPECT_CALL(*personal_data_manager_, Refresh()); |
871 SetIdleChangeProcessorExpectations(); | 899 SetIdleChangeProcessorExpectations(); |
872 CreateRootTask task(this, syncable::AUTOFILL); | 900 CreateRootTask task(this, syncable::AUTOFILL); |
873 StartSyncService(&task, false, syncable::AUTOFILL); | 901 StartSyncService(&task, false, syncable::AUTOFILL); |
874 ASSERT_TRUE(task.success()); | 902 ASSERT_TRUE(task.success()); |
875 | 903 |
876 AutofillEntry added_entry(MakeAutofillEntry("added", "entry", 1)); | 904 AutofillEntry added_entry(MakeAutofillEntry("added", "entry", 1)); |
877 std::vector<base::Time> timestamps(added_entry.timestamps()); | 905 std::vector<base::Time> timestamps(added_entry.timestamps()); |
878 | 906 |
879 EXPECT_CALL(autofill_table_, GetAutofillTimestamps(_, _, _)). | 907 EXPECT_CALL(*autofill_table_, GetAutofillTimestamps(_, _, _)). |
880 WillOnce(DoAll(SetArgumentPointee<2>(timestamps), Return(true))); | 908 WillOnce(DoAll(SetArgumentPointee<2>(timestamps), Return(true))); |
881 | 909 |
882 AutofillChangeList changes; | 910 AutofillChangeList changes; |
883 changes.push_back(AutofillChange(AutofillChange::ADD, added_entry.key())); | 911 changes.push_back(AutofillChange(AutofillChange::ADD, added_entry.key())); |
884 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier(&db_thread_)); | 912 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier(&db_thread_)); |
885 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED, | 913 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED, |
886 Source<WebDataService>(web_data_service_.get()), | 914 Source<WebDataService>(web_data_service_.get()), |
887 Details<AutofillChangeList>(&changes)); | 915 Details<AutofillChangeList>(&changes)); |
888 | 916 |
889 std::vector<AutofillEntry> new_sync_entries; | 917 std::vector<AutofillEntry> new_sync_entries; |
890 std::vector<AutofillProfile> new_sync_profiles; | 918 std::vector<AutofillProfile> new_sync_profiles; |
891 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, | 919 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, |
892 &new_sync_profiles)); | 920 &new_sync_profiles)); |
893 ASSERT_EQ(1U, new_sync_entries.size()); | 921 ASSERT_EQ(1U, new_sync_entries.size()); |
894 EXPECT_TRUE(added_entry == new_sync_entries[0]); | 922 EXPECT_TRUE(added_entry == new_sync_entries[0]); |
895 } | 923 } |
896 | 924 |
897 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeAddProfile) { | 925 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeAddProfile) { |
898 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 926 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
899 EXPECT_CALL(*personal_data_manager_, Refresh()); | 927 EXPECT_CALL(*personal_data_manager_, Refresh()); |
900 SetIdleChangeProcessorExpectations(); | 928 SetIdleChangeProcessorExpectations(); |
901 CreateRootTask task(this, syncable::AUTOFILL_PROFILE); | 929 CreateRootTask task(this, syncable::AUTOFILL_PROFILE); |
902 StartSyncService(&task, false, syncable::AUTOFILL_PROFILE); | 930 StartSyncService(&task, false, syncable::AUTOFILL_PROFILE); |
903 ASSERT_TRUE(task.success()); | 931 ASSERT_TRUE(task.success()); |
904 | 932 |
905 AutofillProfile added_profile; | 933 AutofillProfile added_profile; |
906 autofill_test::SetProfileInfoWithGuid(&added_profile, | 934 autofill_test::SetProfileInfoWithGuid(&added_profile, |
907 "D6ADA912-D374-4C0A-917D-F5C8EBE43011", "Josephine", "Alicia", "Saenz", | 935 "D6ADA912-D374-4C0A-917D-F5C8EBE43011", "Josephine", "Alicia", "Saenz", |
908 "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", | 936 "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", |
(...skipping 11 matching lines...) Expand all Loading... |
920 &new_sync_profiles)); | 948 &new_sync_profiles)); |
921 ASSERT_EQ(1U, new_sync_profiles.size()); | 949 ASSERT_EQ(1U, new_sync_profiles.size()); |
922 EXPECT_EQ(0, added_profile.Compare(new_sync_profiles[0])); | 950 EXPECT_EQ(0, added_profile.Compare(new_sync_profiles[0])); |
923 } | 951 } |
924 | 952 |
925 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeUpdateEntry) { | 953 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeUpdateEntry) { |
926 AutofillEntry original_entry(MakeAutofillEntry("my", "entry", 1)); | 954 AutofillEntry original_entry(MakeAutofillEntry("my", "entry", 1)); |
927 std::vector<AutofillEntry> original_entries; | 955 std::vector<AutofillEntry> original_entries; |
928 original_entries.push_back(original_entry); | 956 original_entries.push_back(original_entry); |
929 | 957 |
930 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)). | 958 EXPECT_CALL(*autofill_table_, GetAllAutofillEntries(_)). |
931 WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true))); | 959 WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true))); |
932 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 960 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
933 EXPECT_CALL(*personal_data_manager_, Refresh()); | 961 EXPECT_CALL(*personal_data_manager_, Refresh()); |
934 CreateRootTask task(this, syncable::AUTOFILL); | 962 CreateRootTask task(this, syncable::AUTOFILL); |
935 StartSyncService(&task, false, syncable::AUTOFILL); | 963 StartSyncService(&task, false, syncable::AUTOFILL); |
936 ASSERT_TRUE(task.success()); | 964 ASSERT_TRUE(task.success()); |
937 | 965 |
938 AutofillEntry updated_entry(MakeAutofillEntry("my", "entry", 1, 2)); | 966 AutofillEntry updated_entry(MakeAutofillEntry("my", "entry", 1, 2)); |
939 std::vector<base::Time> timestamps(updated_entry.timestamps()); | 967 std::vector<base::Time> timestamps(updated_entry.timestamps()); |
940 | 968 |
941 EXPECT_CALL(autofill_table_, GetAutofillTimestamps(_, _, _)). | 969 EXPECT_CALL(*autofill_table_, GetAutofillTimestamps(_, _, _)). |
942 WillOnce(DoAll(SetArgumentPointee<2>(timestamps), Return(true))); | 970 WillOnce(DoAll(SetArgumentPointee<2>(timestamps), Return(true))); |
943 | 971 |
944 AutofillChangeList changes; | 972 AutofillChangeList changes; |
945 changes.push_back(AutofillChange(AutofillChange::UPDATE, | 973 changes.push_back(AutofillChange(AutofillChange::UPDATE, |
946 updated_entry.key())); | 974 updated_entry.key())); |
947 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier(&db_thread_)); | 975 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier(&db_thread_)); |
948 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED, | 976 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED, |
949 Source<WebDataService>(web_data_service_.get()), | 977 Source<WebDataService>(web_data_service_.get()), |
950 Details<AutofillChangeList>(&changes)); | 978 Details<AutofillChangeList>(&changes)); |
951 | 979 |
952 std::vector<AutofillEntry> new_sync_entries; | 980 std::vector<AutofillEntry> new_sync_entries; |
953 std::vector<AutofillProfile> new_sync_profiles; | 981 std::vector<AutofillProfile> new_sync_profiles; |
954 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, | 982 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, |
955 &new_sync_profiles)); | 983 &new_sync_profiles)); |
956 ASSERT_EQ(1U, new_sync_entries.size()); | 984 ASSERT_EQ(1U, new_sync_entries.size()); |
957 EXPECT_TRUE(updated_entry == new_sync_entries[0]); | 985 EXPECT_TRUE(updated_entry == new_sync_entries[0]); |
958 } | 986 } |
959 | 987 |
960 | 988 |
961 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeRemoveEntry) { | 989 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeRemoveEntry) { |
962 AutofillEntry original_entry(MakeAutofillEntry("my", "entry", 1)); | 990 AutofillEntry original_entry(MakeAutofillEntry("my", "entry", 1)); |
963 std::vector<AutofillEntry> original_entries; | 991 std::vector<AutofillEntry> original_entries; |
964 original_entries.push_back(original_entry); | 992 original_entries.push_back(original_entry); |
965 | 993 |
966 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)). | 994 EXPECT_CALL(*autofill_table_, GetAllAutofillEntries(_)). |
967 WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true))); | 995 WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true))); |
968 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 996 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
969 EXPECT_CALL(*personal_data_manager_, Refresh()); | 997 EXPECT_CALL(*personal_data_manager_, Refresh()); |
970 CreateRootTask task(this, syncable::AUTOFILL); | 998 CreateRootTask task(this, syncable::AUTOFILL); |
971 StartSyncService(&task, false, syncable::AUTOFILL); | 999 StartSyncService(&task, false, syncable::AUTOFILL); |
972 ASSERT_TRUE(task.success()); | 1000 ASSERT_TRUE(task.success()); |
973 | 1001 |
974 AutofillChangeList changes; | 1002 AutofillChangeList changes; |
975 changes.push_back(AutofillChange(AutofillChange::REMOVE, | 1003 changes.push_back(AutofillChange(AutofillChange::REMOVE, |
976 original_entry.key())); | 1004 original_entry.key())); |
977 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier(&db_thread_)); | 1005 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier(&db_thread_)); |
978 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED, | 1006 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED, |
(...skipping 14 matching lines...) Expand all Loading... |
993 "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", | 1021 "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", |
994 "32801", "US", "19482937549"); | 1022 "32801", "US", "19482937549"); |
995 AutofillProfile* native_profile = new AutofillProfile; | 1023 AutofillProfile* native_profile = new AutofillProfile; |
996 autofill_test::SetProfileInfoWithGuid(native_profile, | 1024 autofill_test::SetProfileInfoWithGuid(native_profile, |
997 "3BA5FA1B-1EC4-4BB3-9B57-EC92BE3C1A09", "Josephine", "Alicia", "Saenz", | 1025 "3BA5FA1B-1EC4-4BB3-9B57-EC92BE3C1A09", "Josephine", "Alicia", "Saenz", |
998 "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", | 1026 "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", |
999 "32801", "US", "19482937549"); | 1027 "32801", "US", "19482937549"); |
1000 | 1028 |
1001 std::vector<AutofillProfile*> native_profiles; | 1029 std::vector<AutofillProfile*> native_profiles; |
1002 native_profiles.push_back(native_profile); | 1030 native_profiles.push_back(native_profile); |
1003 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)). | 1031 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)). |
1004 WillOnce(DoAll(SetArgumentPointee<0>(native_profiles), Return(true))); | 1032 WillOnce(DoAll(SetArgumentPointee<0>(native_profiles), Return(true))); |
1005 | 1033 |
1006 std::vector<AutofillProfile> sync_profiles; | 1034 std::vector<AutofillProfile> sync_profiles; |
1007 sync_profiles.push_back(sync_profile); | 1035 sync_profiles.push_back(sync_profile); |
1008 AddAutofillTask<AutofillProfile> task(this, sync_profiles); | 1036 AddAutofillTask<AutofillProfile> task(this, sync_profiles); |
1009 EXPECT_CALL(*personal_data_manager_, Refresh()); | 1037 EXPECT_CALL(*personal_data_manager_, Refresh()); |
1010 StartSyncService(&task, false, syncable::AUTOFILL_PROFILE); | 1038 StartSyncService(&task, false, syncable::AUTOFILL_PROFILE); |
1011 ASSERT_TRUE(task.success()); | 1039 ASSERT_TRUE(task.success()); |
1012 | 1040 |
1013 AutofillProfileChange change(AutofillProfileChange::REMOVE, | 1041 AutofillProfileChange change(AutofillProfileChange::REMOVE, |
1014 sync_profile.guid(), NULL); | 1042 sync_profile.guid(), NULL); |
1015 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier(&db_thread_)); | 1043 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier(&db_thread_)); |
1016 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED, | 1044 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED, |
1017 Source<WebDataService>(web_data_service_.get()), | 1045 Source<WebDataService>(web_data_service_.get()), |
1018 Details<AutofillProfileChange>(&change)); | 1046 Details<AutofillProfileChange>(&change)); |
1019 | 1047 |
1020 std::vector<AutofillProfile> new_sync_profiles; | 1048 std::vector<AutofillProfile> new_sync_profiles; |
1021 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode( | 1049 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode( |
1022 &new_sync_profiles)); | 1050 &new_sync_profiles)); |
1023 ASSERT_EQ(0U, new_sync_profiles.size()); | 1051 ASSERT_EQ(0U, new_sync_profiles.size()); |
1024 } | 1052 } |
1025 | 1053 |
1026 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeError) { | 1054 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeError) { |
1027 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)).WillOnce(Return(true)); | 1055 EXPECT_CALL(*autofill_table_, |
1028 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 1056 GetAllAutofillEntries(_)).WillOnce(Return(true)); |
| 1057 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
1029 EXPECT_CALL(*personal_data_manager_, Refresh()); | 1058 EXPECT_CALL(*personal_data_manager_, Refresh()); |
1030 CreateRootTask task(this, syncable::AUTOFILL); | 1059 CreateRootTask task(this, syncable::AUTOFILL); |
1031 StartSyncService(&task, false, syncable::AUTOFILL); | 1060 StartSyncService(&task, false, syncable::AUTOFILL); |
1032 ASSERT_TRUE(task.success()); | 1061 ASSERT_TRUE(task.success()); |
1033 | 1062 |
1034 // Inject an evil entry into the sync db to conflict with the same | 1063 // Inject an evil entry into the sync db to conflict with the same |
1035 // entry added by the user. | 1064 // entry added by the user. |
1036 AutofillEntry evil_entry(MakeAutofillEntry("evil", "entry", 1)); | 1065 AutofillEntry evil_entry(MakeAutofillEntry("evil", "entry", 1)); |
1037 ASSERT_TRUE(AddAutofillSyncNode(evil_entry)); | 1066 ASSERT_TRUE(AddAutofillSyncNode(evil_entry)); |
1038 | 1067 |
(...skipping 13 matching lines...) Expand all Loading... |
1052 EXPECT_TRUE(service_->unrecoverable_error_detected()); | 1081 EXPECT_TRUE(service_->unrecoverable_error_detected()); |
1053 | 1082 |
1054 // Ensure future autofill notifications don't crash. | 1083 // Ensure future autofill notifications don't crash. |
1055 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED, | 1084 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED, |
1056 Source<WebDataService>(web_data_service_.get()), | 1085 Source<WebDataService>(web_data_service_.get()), |
1057 Details<AutofillChangeList>(&changes)); | 1086 Details<AutofillChangeList>(&changes)); |
1058 } | 1087 } |
1059 | 1088 |
1060 // Crashy, http://crbug.com/57884 | 1089 // Crashy, http://crbug.com/57884 |
1061 TEST_F(ProfileSyncServiceAutofillTest, DISABLED_ServerChangeRace) { | 1090 TEST_F(ProfileSyncServiceAutofillTest, DISABLED_ServerChangeRace) { |
1062 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)).WillOnce(Return(true)); | 1091 EXPECT_CALL(*autofill_table_, |
1063 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 1092 GetAllAutofillEntries(_)).WillOnce(Return(true)); |
1064 EXPECT_CALL(autofill_table_, UpdateAutofillEntries(_)). | 1093 EXPECT_CALL(*autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
| 1094 EXPECT_CALL(*autofill_table_, UpdateAutofillEntries(_)). |
1065 WillRepeatedly(Return(true)); | 1095 WillRepeatedly(Return(true)); |
1066 EXPECT_CALL(*personal_data_manager_, Refresh()).Times(3); | 1096 EXPECT_CALL(*personal_data_manager_, Refresh()).Times(3); |
1067 CreateRootTask task(this, syncable::AUTOFILL); | 1097 CreateRootTask task(this, syncable::AUTOFILL); |
1068 StartSyncService(&task, false, syncable::AUTOFILL); | 1098 StartSyncService(&task, false, syncable::AUTOFILL); |
1069 ASSERT_TRUE(task.success()); | 1099 ASSERT_TRUE(task.success()); |
1070 | 1100 |
1071 // (true, false) means we have to reset after |Signal|, init to unsignaled. | 1101 // (true, false) means we have to reset after |Signal|, init to unsignaled. |
1072 scoped_ptr<WaitableEvent> wait_for_start(new WaitableEvent(true, false)); | 1102 scoped_ptr<WaitableEvent> wait_for_start(new WaitableEvent(true, false)); |
1073 scoped_ptr<WaitableEvent> wait_for_syncapi(new WaitableEvent(true, false)); | 1103 scoped_ptr<WaitableEvent> wait_for_syncapi(new WaitableEvent(true, false)); |
1074 scoped_refptr<FakeServerUpdater> updater(new FakeServerUpdater( | 1104 scoped_refptr<FakeServerUpdater> updater(new FakeServerUpdater( |
(...skipping 18 matching lines...) Expand all Loading... |
1093 std::vector<AutofillEntry> sync_entries; | 1123 std::vector<AutofillEntry> sync_entries; |
1094 std::vector<AutofillProfile> sync_profiles; | 1124 std::vector<AutofillProfile> sync_profiles; |
1095 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); | 1125 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); |
1096 EXPECT_EQ(3U, sync_entries.size()); | 1126 EXPECT_EQ(3U, sync_entries.size()); |
1097 EXPECT_EQ(0U, sync_profiles.size()); | 1127 EXPECT_EQ(0U, sync_profiles.size()); |
1098 for (size_t i = 0; i < sync_entries.size(); i++) { | 1128 for (size_t i = 0; i < sync_entries.size(); i++) { |
1099 VLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name() | 1129 VLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name() |
1100 << ", " << sync_entries[i].key().value(); | 1130 << ", " << sync_entries[i].key().value(); |
1101 } | 1131 } |
1102 } | 1132 } |
OLD | NEW |