| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/sync/driver/glue/sync_backend_host_impl.h" | 5 #include "components/sync/driver/glue/sync_backend_host_impl.h" |
| 6 | 6 |
| 7 #include <cstddef> | 7 #include <cstddef> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 base::RunLoop run_loop; | 234 base::RunLoop run_loop; |
| 235 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 235 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 236 FROM_HERE, run_loop.QuitClosure(), TestTimeouts::action_timeout()); | 236 FROM_HERE, run_loop.QuitClosure(), TestTimeouts::action_timeout()); |
| 237 run_loop.Run(); | 237 run_loop.Run(); |
| 238 // |fake_manager_factory_|'s fake_manager() is set on the sync | 238 // |fake_manager_factory_|'s fake_manager() is set on the sync |
| 239 // thread, but we can rely on the message loop barriers to | 239 // thread, but we can rely on the message loop barriers to |
| 240 // guarantee that we see the updated value. | 240 // guarantee that we see the updated value. |
| 241 DCHECK(fake_manager_); | 241 DCHECK(fake_manager_); |
| 242 } | 242 } |
| 243 | 243 |
| 244 // Synchronously configures the backend's datatypes. | 244 // Returns DataTypeConfigStateMap with all |enabled_types_| in |
| 245 ModelTypeSet ConfigureDataTypes(ModelTypeSet types_to_add, | 245 // CONFIGURE_ACTIVE state and all remaining types DISABLED. |
| 246 ModelTypeSet types_to_remove, | 246 ModelTypeConfigurer::DataTypeConfigStateMap ConfigStateMapForEnabledTypes() { |
| 247 ModelTypeSet types_to_unapply) { | |
| 248 ModelTypeConfigurer::DataTypeConfigStateMap config_state_map; | 247 ModelTypeConfigurer::DataTypeConfigStateMap config_state_map; |
| 249 ModelTypeConfigurer::SetDataTypesState( | 248 ModelTypeConfigurer::SetDataTypesState( |
| 250 ModelTypeConfigurer::CONFIGURE_ACTIVE, types_to_add, &config_state_map); | 249 ModelTypeConfigurer::CONFIGURE_ACTIVE, enabled_types_, |
| 251 ModelTypeConfigurer::SetDataTypesState(ModelTypeConfigurer::DISABLED, | 250 &config_state_map); |
| 252 types_to_remove, &config_state_map); | 251 ModelTypeConfigurer::SetDataTypesState( |
| 253 ModelTypeConfigurer::SetDataTypesState(ModelTypeConfigurer::UNREADY, | 252 ModelTypeConfigurer::DISABLED, |
| 254 types_to_unapply, &config_state_map); | 253 Difference(ModelTypeSet::All(), enabled_types_), &config_state_map); |
| 254 return config_state_map; |
| 255 } |
| 255 | 256 |
| 256 types_to_add.PutAll(ControlTypes()); | 257 // Synchronously configures the backend's datatypes. |
| 258 ModelTypeSet ConfigureDataTypes( |
| 259 const ModelTypeConfigurer::DataTypeConfigStateMap& config_state_map) { |
| 257 ModelTypeSet ready_types = backend_->ConfigureDataTypes( | 260 ModelTypeSet ready_types = backend_->ConfigureDataTypes( |
| 258 CONFIGURE_REASON_RECONFIGURATION, config_state_map, | 261 CONFIGURE_REASON_RECONFIGURATION, config_state_map, |
| 259 base::Bind(&SyncEngineTest::DownloadReady, base::Unretained(this)), | 262 base::Bind(&SyncEngineTest::DownloadReady, base::Unretained(this)), |
| 260 base::Bind(&SyncEngineTest::OnDownloadRetry, base::Unretained(this))); | 263 base::Bind(&SyncEngineTest::OnDownloadRetry, base::Unretained(this))); |
| 261 base::RunLoop run_loop; | 264 base::RunLoop run_loop; |
| 262 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 265 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 263 FROM_HERE, run_loop.QuitClosure(), TestTimeouts::action_timeout()); | 266 FROM_HERE, run_loop.QuitClosure(), TestTimeouts::action_timeout()); |
| 264 run_loop.Run(); | 267 run_loop.Run(); |
| 265 return ready_types; | 268 return ready_types; |
| 266 } | 269 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 // Test first time sync scenario. All types should be properly configured. | 306 // Test first time sync scenario. All types should be properly configured. |
| 304 | 307 |
| 305 TEST_F(SyncEngineTest, FirstTimeSync) { | 308 TEST_F(SyncEngineTest, FirstTimeSync) { |
| 306 InitializeBackend(true); | 309 InitializeBackend(true); |
| 307 EXPECT_EQ(ControlTypes(), fake_manager_->GetAndResetDownloadedTypes()); | 310 EXPECT_EQ(ControlTypes(), fake_manager_->GetAndResetDownloadedTypes()); |
| 308 EXPECT_EQ(ControlTypes(), fake_manager_->InitialSyncEndedTypes()); | 311 EXPECT_EQ(ControlTypes(), fake_manager_->InitialSyncEndedTypes()); |
| 309 EXPECT_TRUE( | 312 EXPECT_TRUE( |
| 310 fake_manager_->GetTypesWithEmptyProgressMarkerToken(ControlTypes()) | 313 fake_manager_->GetTypesWithEmptyProgressMarkerToken(ControlTypes()) |
| 311 .Empty()); | 314 .Empty()); |
| 312 | 315 |
| 313 ModelTypeSet ready_types = ConfigureDataTypes( | 316 ModelTypeSet ready_types = |
| 314 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | 317 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 315 ModelTypeSet()); | |
| 316 // Nigori is always downloaded so won't be ready. | 318 // Nigori is always downloaded so won't be ready. |
| 317 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 319 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 318 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( | 320 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( |
| 319 Difference(enabled_types_, ControlTypes()))); | 321 Difference(enabled_types_, ControlTypes()))); |
| 320 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 322 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 321 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 323 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 322 EXPECT_TRUE( | 324 EXPECT_TRUE( |
| 323 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 325 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 324 .Empty()); | 326 .Empty()); |
| 325 } | 327 } |
| 326 | 328 |
| 327 // Test the restart after setting up sync scenario. No enabled types should be | 329 // Test the restart after setting up sync scenario. No enabled types should be |
| 328 // downloaded or cleaned. | 330 // downloaded or cleaned. |
| 329 TEST_F(SyncEngineTest, Restart) { | 331 TEST_F(SyncEngineTest, Restart) { |
| 330 sync_prefs_->SetFirstSetupComplete(); | 332 sync_prefs_->SetFirstSetupComplete(); |
| 331 ModelTypeSet all_but_nigori = enabled_types_; | 333 ModelTypeSet all_but_nigori = enabled_types_; |
| 332 fake_manager_factory_->set_progress_marker_types(enabled_types_); | 334 fake_manager_factory_->set_progress_marker_types(enabled_types_); |
| 333 fake_manager_factory_->set_initial_sync_ended_types(enabled_types_); | 335 fake_manager_factory_->set_initial_sync_ended_types(enabled_types_); |
| 334 InitializeBackend(true); | 336 InitializeBackend(true); |
| 335 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 337 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 336 EXPECT_TRUE( | 338 EXPECT_TRUE( |
| 337 Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_) | 339 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 338 .Empty()); | 340 .Empty()); |
| 339 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 341 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 340 EXPECT_TRUE( | 342 EXPECT_TRUE( |
| 341 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 343 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 342 .Empty()); | 344 .Empty()); |
| 343 | 345 |
| 344 ModelTypeSet ready_types = ConfigureDataTypes( | 346 ModelTypeSet ready_types = |
| 345 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | 347 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 346 ModelTypeSet()); | |
| 347 EXPECT_EQ(enabled_types_, ready_types); | 348 EXPECT_EQ(enabled_types_, ready_types); |
| 348 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 349 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 349 EXPECT_TRUE( | 350 EXPECT_TRUE( |
| 350 Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_) | 351 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 351 .Empty()); | 352 .Empty()); |
| 352 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 353 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 353 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 354 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 354 EXPECT_TRUE( | 355 EXPECT_TRUE( |
| 355 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 356 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 356 .Empty()); | 357 .Empty()); |
| 357 } | 358 } |
| 358 | 359 |
| 359 // Test a sync restart scenario where some types had never finished configuring. | 360 // Test a sync restart scenario where some types had never finished configuring. |
| 360 // The partial types should be purged, then reconfigured properly. | 361 // The partial types should be purged, then reconfigured properly. |
| 361 TEST_F(SyncEngineTest, PartialTypes) { | 362 TEST_F(SyncEngineTest, PartialTypes) { |
| 362 sync_prefs_->SetFirstSetupComplete(); | 363 sync_prefs_->SetFirstSetupComplete(); |
| 363 // Set sync manager behavior before passing it down. All types have progress | 364 // Set sync manager behavior before passing it down. All types have progress |
| 364 // markers, but nigori and bookmarks are missing initial sync ended. | 365 // markers, but nigori and bookmarks are missing initial sync ended. |
| 365 ModelTypeSet partial_types(NIGORI, BOOKMARKS); | 366 ModelTypeSet partial_types(NIGORI, BOOKMARKS); |
| 366 ModelTypeSet full_types = Difference(enabled_types_, partial_types); | 367 ModelTypeSet full_types = Difference(enabled_types_, partial_types); |
| 367 fake_manager_factory_->set_progress_marker_types(enabled_types_); | 368 fake_manager_factory_->set_progress_marker_types(enabled_types_); |
| 368 fake_manager_factory_->set_initial_sync_ended_types(full_types); | 369 fake_manager_factory_->set_initial_sync_ended_types(full_types); |
| 369 | 370 |
| 370 // Bringing up the backend should purge all partial types, then proceed to | 371 // Bringing up the backend should purge all partial types, then proceed to |
| 371 // download the Nigori. | 372 // download the Nigori. |
| 372 InitializeBackend(true); | 373 InitializeBackend(true); |
| 373 EXPECT_EQ(ModelTypeSet(NIGORI), fake_manager_->GetAndResetDownloadedTypes()); | 374 EXPECT_EQ(ModelTypeSet(NIGORI), fake_manager_->GetAndResetDownloadedTypes()); |
| 374 EXPECT_TRUE(fake_manager_->GetAndResetCleanedTypes().HasAll(partial_types)); | 375 EXPECT_TRUE(fake_manager_->GetAndResetPurgedTypes().HasAll(partial_types)); |
| 375 EXPECT_EQ(Union(full_types, ModelTypeSet(NIGORI)), | 376 EXPECT_EQ(Union(full_types, ModelTypeSet(NIGORI)), |
| 376 fake_manager_->InitialSyncEndedTypes()); | 377 fake_manager_->InitialSyncEndedTypes()); |
| 377 EXPECT_EQ( | 378 EXPECT_EQ( |
| 378 Difference(partial_types, ModelTypeSet(NIGORI)), | 379 Difference(partial_types, ModelTypeSet(NIGORI)), |
| 379 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); | 380 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); |
| 380 | 381 |
| 381 // Now do the actual configuration, which should download and apply bookmarks. | 382 // Now do the actual configuration, which should download and apply bookmarks. |
| 382 ModelTypeSet ready_types = ConfigureDataTypes( | 383 ModelTypeSet ready_types = |
| 383 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | 384 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 384 ModelTypeSet()); | |
| 385 EXPECT_EQ(full_types, ready_types); | 385 EXPECT_EQ(full_types, ready_types); |
| 386 EXPECT_TRUE( | 386 EXPECT_TRUE( |
| 387 Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_) | 387 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 388 .Empty()); | 388 .Empty()); |
| 389 EXPECT_EQ(partial_types, fake_manager_->GetAndResetDownloadedTypes()); | 389 EXPECT_EQ(partial_types, fake_manager_->GetAndResetDownloadedTypes()); |
| 390 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 390 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 391 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 391 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 392 EXPECT_TRUE( | 392 EXPECT_TRUE( |
| 393 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 393 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 394 .Empty()); | 394 .Empty()); |
| 395 } | 395 } |
| 396 | 396 |
| 397 // Test the behavior when we lose the sync db. Although we already have types | 397 // Test the behavior when we lose the sync db. Although we already have types |
| 398 // enabled, we should re-download all of them because we lost their data. | 398 // enabled, we should re-download all of them because we lost their data. |
| 399 TEST_F(SyncEngineTest, LostDB) { | 399 TEST_F(SyncEngineTest, LostDB) { |
| 400 sync_prefs_->SetFirstSetupComplete(); | 400 sync_prefs_->SetFirstSetupComplete(); |
| 401 // Initialization should fetch the Nigori node. Everything else should be | 401 // Initialization should fetch the Nigori node. Everything else should be |
| 402 // left untouched. | 402 // left untouched. |
| 403 InitializeBackend(true); | 403 InitializeBackend(true); |
| 404 EXPECT_EQ(ModelTypeSet(ControlTypes()), | 404 EXPECT_EQ(ModelTypeSet(ControlTypes()), |
| 405 fake_manager_->GetAndResetDownloadedTypes()); | 405 fake_manager_->GetAndResetDownloadedTypes()); |
| 406 EXPECT_EQ(ModelTypeSet(ControlTypes()), | 406 EXPECT_EQ(ModelTypeSet(ControlTypes()), |
| 407 fake_manager_->InitialSyncEndedTypes()); | 407 fake_manager_->InitialSyncEndedTypes()); |
| 408 EXPECT_EQ( | 408 EXPECT_EQ( |
| 409 Difference(enabled_types_, ControlTypes()), | 409 Difference(enabled_types_, ControlTypes()), |
| 410 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); | 410 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); |
| 411 | 411 |
| 412 // The database was empty, so any cleaning is entirely optional. We want to | 412 // The database was empty, so any cleaning is entirely optional. We want to |
| 413 // reset this value before running the next part of the test, though. | 413 // reset this value before running the next part of the test, though. |
| 414 fake_manager_->GetAndResetCleanedTypes(); | 414 fake_manager_->GetAndResetPurgedTypes(); |
| 415 | 415 |
| 416 // The actual configuration should redownload and apply all the enabled types. | 416 // The actual configuration should redownload and apply all the enabled types. |
| 417 ModelTypeSet ready_types = ConfigureDataTypes( | 417 ModelTypeSet ready_types = |
| 418 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | 418 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 419 ModelTypeSet()); | |
| 420 // Nigori is always downloaded so won't be ready. | 419 // Nigori is always downloaded so won't be ready. |
| 421 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 420 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 422 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( | 421 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( |
| 423 Difference(enabled_types_, ControlTypes()))); | 422 Difference(enabled_types_, ControlTypes()))); |
| 424 EXPECT_TRUE( | 423 EXPECT_TRUE( |
| 425 Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_) | 424 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 426 .Empty()); | 425 .Empty()); |
| 427 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 426 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 428 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 427 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 429 EXPECT_TRUE( | 428 EXPECT_TRUE( |
| 430 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 429 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 431 .Empty()); | 430 .Empty()); |
| 432 } | 431 } |
| 433 | 432 |
| 434 TEST_F(SyncEngineTest, DisableTypes) { | 433 TEST_F(SyncEngineTest, DisableTypes) { |
| 435 // Simulate first time sync. | 434 // Simulate first time sync. |
| 436 InitializeBackend(true); | 435 InitializeBackend(true); |
| 437 fake_manager_->GetAndResetCleanedTypes(); | 436 fake_manager_->GetAndResetPurgedTypes(); |
| 438 ModelTypeSet ready_types = ConfigureDataTypes( | 437 ModelTypeSet ready_types = |
| 439 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | 438 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 440 ModelTypeSet()); | |
| 441 // Nigori is always downloaded so won't be ready. | 439 // Nigori is always downloaded so won't be ready. |
| 442 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 440 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 443 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); | 441 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); |
| 444 EXPECT_TRUE( | 442 EXPECT_TRUE( |
| 445 Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_) | 443 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 446 .Empty()); | 444 .Empty()); |
| 447 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 445 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 448 EXPECT_TRUE( | 446 EXPECT_TRUE( |
| 449 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 447 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 450 .Empty()); | 448 .Empty()); |
| 451 | 449 |
| 452 // Then disable two datatypes. | 450 // Then disable two datatypes. |
| 453 ModelTypeSet disabled_types(BOOKMARKS, SEARCH_ENGINES); | 451 ModelTypeSet disabled_types(BOOKMARKS, SEARCH_ENGINES); |
| 454 ModelTypeSet old_types = enabled_types_; | 452 ModelTypeSet old_types = enabled_types_; |
| 455 enabled_types_.RemoveAll(disabled_types); | 453 enabled_types_.RemoveAll(disabled_types); |
| 456 ready_types = ConfigureDataTypes( | 454 ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 457 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | |
| 458 ModelTypeSet()); | |
| 459 | 455 |
| 460 // Only those datatypes disabled should be cleaned. Nothing should be | 456 // Only those datatypes disabled should be cleaned. Nothing should be |
| 461 // downloaded. | 457 // downloaded. |
| 462 EXPECT_EQ(enabled_types_, ready_types); | 458 EXPECT_EQ(enabled_types_, ready_types); |
| 463 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 459 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 464 EXPECT_EQ(disabled_types, | 460 EXPECT_EQ(disabled_types, |
| 465 Intersection(fake_manager_->GetAndResetCleanedTypes(), old_types)); | 461 Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types)); |
| 466 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 462 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 467 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 463 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 468 EXPECT_TRUE( | 464 EXPECT_TRUE( |
| 469 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 465 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 470 .Empty()); | 466 .Empty()); |
| 471 } | 467 } |
| 472 | 468 |
| 473 TEST_F(SyncEngineTest, AddTypes) { | 469 TEST_F(SyncEngineTest, AddTypes) { |
| 474 // Simulate first time sync. | 470 // Simulate first time sync. |
| 475 InitializeBackend(true); | 471 InitializeBackend(true); |
| 476 fake_manager_->GetAndResetCleanedTypes(); | 472 fake_manager_->GetAndResetPurgedTypes(); |
| 477 ModelTypeSet ready_types = ConfigureDataTypes( | 473 ModelTypeSet ready_types = |
| 478 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | 474 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 479 ModelTypeSet()); | |
| 480 // Nigori is always downloaded so won't be ready. | 475 // Nigori is always downloaded so won't be ready. |
| 481 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 476 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 482 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); | 477 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); |
| 483 EXPECT_TRUE( | 478 EXPECT_TRUE( |
| 484 Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_) | 479 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 485 .Empty()); | 480 .Empty()); |
| 486 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 481 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 487 EXPECT_TRUE( | 482 EXPECT_TRUE( |
| 488 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 483 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 489 .Empty()); | 484 .Empty()); |
| 490 | 485 |
| 491 // Then add two datatypes. | 486 // Then add two datatypes. |
| 492 ModelTypeSet new_types(EXTENSIONS, APPS); | 487 ModelTypeSet new_types(EXTENSIONS, APPS); |
| 493 enabled_types_.PutAll(new_types); | 488 enabled_types_.PutAll(new_types); |
| 494 ready_types = ConfigureDataTypes( | 489 ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 495 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | |
| 496 ModelTypeSet()); | |
| 497 | 490 |
| 498 // Only those datatypes added should be downloaded (plus nigori). Nothing | 491 // Only those datatypes added should be downloaded (plus nigori). Nothing |
| 499 // should be cleaned aside from the disabled types. | 492 // should be cleaned aside from the disabled types. |
| 500 new_types.Put(NIGORI); | 493 new_types.Put(NIGORI); |
| 501 EXPECT_EQ(Difference(enabled_types_, new_types), ready_types); | 494 EXPECT_EQ(Difference(enabled_types_, new_types), ready_types); |
| 502 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); | 495 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); |
| 503 EXPECT_TRUE( | 496 EXPECT_TRUE( |
| 504 Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_) | 497 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 505 .Empty()); | 498 .Empty()); |
| 506 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 499 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 507 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 500 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 508 EXPECT_TRUE( | 501 EXPECT_TRUE( |
| 509 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 502 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 510 .Empty()); | 503 .Empty()); |
| 511 } | 504 } |
| 512 | 505 |
| 513 // And and disable in the same configuration. | 506 // And and disable in the same configuration. |
| 514 TEST_F(SyncEngineTest, AddDisableTypes) { | 507 TEST_F(SyncEngineTest, AddDisableTypes) { |
| 515 // Simulate first time sync. | 508 // Simulate first time sync. |
| 516 InitializeBackend(true); | 509 InitializeBackend(true); |
| 517 fake_manager_->GetAndResetCleanedTypes(); | 510 fake_manager_->GetAndResetPurgedTypes(); |
| 518 ModelTypeSet ready_types = ConfigureDataTypes( | 511 ModelTypeSet ready_types = |
| 519 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | 512 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 520 ModelTypeSet()); | |
| 521 // Nigori is always downloaded so won't be ready. | 513 // Nigori is always downloaded so won't be ready. |
| 522 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 514 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 523 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); | 515 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); |
| 524 EXPECT_TRUE( | 516 EXPECT_TRUE( |
| 525 Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_) | 517 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 526 .Empty()); | 518 .Empty()); |
| 527 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 519 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 528 EXPECT_TRUE( | 520 EXPECT_TRUE( |
| 529 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 521 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 530 .Empty()); | 522 .Empty()); |
| 531 | 523 |
| 532 // Then add two datatypes. | 524 // Then add two datatypes. |
| 533 ModelTypeSet old_types = enabled_types_; | 525 ModelTypeSet old_types = enabled_types_; |
| 534 ModelTypeSet disabled_types(BOOKMARKS, SEARCH_ENGINES); | 526 ModelTypeSet disabled_types(BOOKMARKS, SEARCH_ENGINES); |
| 535 ModelTypeSet new_types(EXTENSIONS, APPS); | 527 ModelTypeSet new_types(EXTENSIONS, APPS); |
| 536 enabled_types_.PutAll(new_types); | 528 enabled_types_.PutAll(new_types); |
| 537 enabled_types_.RemoveAll(disabled_types); | 529 enabled_types_.RemoveAll(disabled_types); |
| 538 ready_types = ConfigureDataTypes( | 530 ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 539 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | |
| 540 ModelTypeSet()); | |
| 541 | 531 |
| 542 // Only those datatypes added should be downloaded (plus nigori). Nothing | 532 // Only those datatypes added should be downloaded (plus nigori). Nothing |
| 543 // should be cleaned aside from the disabled types. | 533 // should be cleaned aside from the disabled types. |
| 544 new_types.Put(NIGORI); | 534 new_types.Put(NIGORI); |
| 545 EXPECT_EQ(Difference(enabled_types_, new_types), ready_types); | 535 EXPECT_EQ(Difference(enabled_types_, new_types), ready_types); |
| 546 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); | 536 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); |
| 547 EXPECT_EQ(disabled_types, | 537 EXPECT_EQ(disabled_types, |
| 548 Intersection(fake_manager_->GetAndResetCleanedTypes(), old_types)); | 538 Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types)); |
| 549 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 539 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 550 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 540 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 551 EXPECT_EQ(disabled_types, | 541 EXPECT_EQ(disabled_types, |
| 552 fake_manager_->GetTypesWithEmptyProgressMarkerToken(old_types)); | 542 fake_manager_->GetTypesWithEmptyProgressMarkerToken(old_types)); |
| 553 } | 543 } |
| 554 | 544 |
| 555 // Test restarting the browser to newly supported datatypes. The new datatypes | 545 // Test restarting the browser to newly supported datatypes. The new datatypes |
| 556 // should be downloaded on the configuration after backend initialization. | 546 // should be downloaded on the configuration after backend initialization. |
| 557 TEST_F(SyncEngineTest, NewlySupportedTypes) { | 547 TEST_F(SyncEngineTest, NewlySupportedTypes) { |
| 558 sync_prefs_->SetFirstSetupComplete(); | 548 sync_prefs_->SetFirstSetupComplete(); |
| 559 // Set sync manager behavior before passing it down. All types have progress | 549 // Set sync manager behavior before passing it down. All types have progress |
| 560 // markers and initial sync ended except the new types. | 550 // markers and initial sync ended except the new types. |
| 561 ModelTypeSet old_types = enabled_types_; | 551 ModelTypeSet old_types = enabled_types_; |
| 562 fake_manager_factory_->set_progress_marker_types(old_types); | 552 fake_manager_factory_->set_progress_marker_types(old_types); |
| 563 fake_manager_factory_->set_initial_sync_ended_types(old_types); | 553 fake_manager_factory_->set_initial_sync_ended_types(old_types); |
| 564 ModelTypeSet new_types(APP_SETTINGS, EXTENSION_SETTINGS); | 554 ModelTypeSet new_types(APP_SETTINGS, EXTENSION_SETTINGS); |
| 565 enabled_types_.PutAll(new_types); | 555 enabled_types_.PutAll(new_types); |
| 566 | 556 |
| 567 // Does nothing. | 557 // Does nothing. |
| 568 InitializeBackend(true); | 558 InitializeBackend(true); |
| 569 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 559 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 570 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), old_types) | 560 EXPECT_TRUE( |
| 571 .Empty()); | 561 Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types).Empty()); |
| 572 EXPECT_EQ(old_types, fake_manager_->InitialSyncEndedTypes()); | 562 EXPECT_EQ(old_types, fake_manager_->InitialSyncEndedTypes()); |
| 573 EXPECT_EQ(new_types, fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 563 EXPECT_EQ(new_types, fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 574 enabled_types_)); | 564 enabled_types_)); |
| 575 | 565 |
| 576 // Downloads and applies the new types (plus nigori). | 566 // Downloads and applies the new types (plus nigori). |
| 577 ModelTypeSet ready_types = ConfigureDataTypes( | 567 ModelTypeSet ready_types = |
| 578 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | 568 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 579 ModelTypeSet()); | |
| 580 | 569 |
| 581 new_types.Put(NIGORI); | 570 new_types.Put(NIGORI); |
| 582 EXPECT_EQ(Difference(old_types, ModelTypeSet(NIGORI)), ready_types); | 571 EXPECT_EQ(Difference(old_types, ModelTypeSet(NIGORI)), ready_types); |
| 583 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); | 572 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); |
| 584 EXPECT_TRUE( | 573 EXPECT_TRUE( |
| 585 Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_) | 574 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 586 .Empty()); | 575 .Empty()); |
| 587 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 576 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 588 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 577 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 589 EXPECT_TRUE( | 578 EXPECT_TRUE( |
| 590 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 579 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 591 .Empty()); | 580 .Empty()); |
| 592 } | 581 } |
| 593 | 582 |
| 594 // Test the newly supported types scenario, but with the presence of partial | 583 // Test the newly supported types scenario, but with the presence of partial |
| 595 // types as well. Both partial and newly supported types should be downloaded | 584 // types as well. Both partial and newly supported types should be downloaded |
| 596 // the configuration. | 585 // the configuration. |
| 597 TEST_F(SyncEngineTest, NewlySupportedTypesWithPartialTypes) { | 586 TEST_F(SyncEngineTest, NewlySupportedTypesWithPartialTypes) { |
| 598 sync_prefs_->SetFirstSetupComplete(); | 587 sync_prefs_->SetFirstSetupComplete(); |
| 599 // Set sync manager behavior before passing it down. All types have progress | 588 // Set sync manager behavior before passing it down. All types have progress |
| 600 // markers and initial sync ended except the new types. | 589 // markers and initial sync ended except the new types. |
| 601 ModelTypeSet old_types = enabled_types_; | 590 ModelTypeSet old_types = enabled_types_; |
| 602 ModelTypeSet partial_types(NIGORI, BOOKMARKS); | 591 ModelTypeSet partial_types(NIGORI, BOOKMARKS); |
| 603 ModelTypeSet full_types = Difference(enabled_types_, partial_types); | 592 ModelTypeSet full_types = Difference(enabled_types_, partial_types); |
| 604 fake_manager_factory_->set_progress_marker_types(old_types); | 593 fake_manager_factory_->set_progress_marker_types(old_types); |
| 605 fake_manager_factory_->set_initial_sync_ended_types(full_types); | 594 fake_manager_factory_->set_initial_sync_ended_types(full_types); |
| 606 ModelTypeSet new_types(APP_SETTINGS, EXTENSION_SETTINGS); | 595 ModelTypeSet new_types(APP_SETTINGS, EXTENSION_SETTINGS); |
| 607 enabled_types_.PutAll(new_types); | 596 enabled_types_.PutAll(new_types); |
| 608 | 597 |
| 609 // Purge the partial types. The nigori will be among the purged types, but | 598 // Purge the partial types. The nigori will be among the purged types, but |
| 610 // the syncer will re-download it by the time the initialization is complete. | 599 // the syncer will re-download it by the time the initialization is complete. |
| 611 InitializeBackend(true); | 600 InitializeBackend(true); |
| 612 EXPECT_EQ(ModelTypeSet(NIGORI), fake_manager_->GetAndResetDownloadedTypes()); | 601 EXPECT_EQ(ModelTypeSet(NIGORI), fake_manager_->GetAndResetDownloadedTypes()); |
| 613 EXPECT_TRUE(fake_manager_->GetAndResetCleanedTypes().HasAll(partial_types)); | 602 EXPECT_TRUE(fake_manager_->GetAndResetPurgedTypes().HasAll(partial_types)); |
| 614 EXPECT_EQ(Union(full_types, ModelTypeSet(NIGORI)), | 603 EXPECT_EQ(Union(full_types, ModelTypeSet(NIGORI)), |
| 615 fake_manager_->InitialSyncEndedTypes()); | 604 fake_manager_->InitialSyncEndedTypes()); |
| 616 EXPECT_EQ( | 605 EXPECT_EQ( |
| 617 Union(new_types, Difference(partial_types, ModelTypeSet(NIGORI))), | 606 Union(new_types, Difference(partial_types, ModelTypeSet(NIGORI))), |
| 618 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); | 607 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); |
| 619 | 608 |
| 620 // Downloads and applies the new types and partial types (which includes | 609 // Downloads and applies the new types and partial types (which includes |
| 621 // nigori anyways). | 610 // nigori anyways). |
| 622 ModelTypeSet ready_types = ConfigureDataTypes( | 611 ModelTypeSet ready_types = |
| 623 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | 612 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 624 ModelTypeSet()); | |
| 625 EXPECT_EQ(full_types, ready_types); | 613 EXPECT_EQ(full_types, ready_types); |
| 626 EXPECT_EQ(Union(new_types, partial_types), | 614 EXPECT_EQ(Union(new_types, partial_types), |
| 627 fake_manager_->GetAndResetDownloadedTypes()); | 615 fake_manager_->GetAndResetDownloadedTypes()); |
| 628 EXPECT_TRUE( | 616 EXPECT_TRUE( |
| 629 Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_) | 617 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 630 .Empty()); | 618 .Empty()); |
| 631 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 619 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 632 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 620 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 633 EXPECT_TRUE( | 621 EXPECT_TRUE( |
| 634 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 622 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 635 .Empty()); | 623 .Empty()); |
| 636 } | 624 } |
| 637 | 625 |
| 638 // Verify that downloading control types only downloads those types that do | 626 // Verify that downloading control types only downloads those types that do |
| 639 // not have initial sync ended set. | 627 // not have initial sync ended set. |
| 640 TEST_F(SyncEngineTest, DownloadControlTypes) { | 628 TEST_F(SyncEngineTest, DownloadControlTypes) { |
| 641 sync_prefs_->SetFirstSetupComplete(); | 629 sync_prefs_->SetFirstSetupComplete(); |
| 642 // Set sync manager behavior before passing it down. Experiments and device | 630 // Set sync manager behavior before passing it down. Experiments and device |
| 643 // info are new types without progress markers or initial sync ended, while | 631 // info are new types without progress markers or initial sync ended, while |
| 644 // all other types have been fully downloaded and applied. | 632 // all other types have been fully downloaded and applied. |
| 645 ModelTypeSet new_types(EXPERIMENTS, NIGORI); | 633 ModelTypeSet new_types(EXPERIMENTS, NIGORI); |
| 646 ModelTypeSet old_types = Difference(enabled_types_, new_types); | 634 ModelTypeSet old_types = Difference(enabled_types_, new_types); |
| 647 fake_manager_factory_->set_progress_marker_types(old_types); | 635 fake_manager_factory_->set_progress_marker_types(old_types); |
| 648 fake_manager_factory_->set_initial_sync_ended_types(old_types); | 636 fake_manager_factory_->set_initial_sync_ended_types(old_types); |
| 649 | 637 |
| 650 // Bringing up the backend should download the new types without downloading | 638 // Bringing up the backend should download the new types without downloading |
| 651 // any old types. | 639 // any old types. |
| 652 InitializeBackend(true); | 640 InitializeBackend(true); |
| 653 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); | 641 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); |
| 654 EXPECT_EQ(Difference(ModelTypeSet::All(), enabled_types_), | 642 EXPECT_EQ(Difference(ModelTypeSet::All(), enabled_types_), |
| 655 fake_manager_->GetAndResetCleanedTypes()); | 643 fake_manager_->GetAndResetPurgedTypes()); |
| 656 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 644 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 657 EXPECT_TRUE( | 645 EXPECT_TRUE( |
| 658 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 646 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 659 .Empty()); | 647 .Empty()); |
| 660 } | 648 } |
| 661 | 649 |
| 662 // Fail to download control types. It's believed that there is a server bug | 650 // Fail to download control types. It's believed that there is a server bug |
| 663 // which can allow this to happen (crbug.com/164288). The sync backend host | 651 // which can allow this to happen (crbug.com/164288). The sync backend host |
| 664 // should detect this condition and fail to initialize the backend. | 652 // should detect this condition and fail to initialize the backend. |
| 665 // | 653 // |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 721 // If bookmarks encounter an error that results in disabling without purging | 709 // If bookmarks encounter an error that results in disabling without purging |
| 722 // (such as when the type is unready), and then is explicitly disabled, the | 710 // (such as when the type is unready), and then is explicitly disabled, the |
| 723 // SyncEngine needs to tell the manager to purge the type, even though | 711 // SyncEngine needs to tell the manager to purge the type, even though |
| 724 // it's already disabled (crbug.com/386778). | 712 // it's already disabled (crbug.com/386778). |
| 725 TEST_F(SyncEngineTest, DisableThenPurgeType) { | 713 TEST_F(SyncEngineTest, DisableThenPurgeType) { |
| 726 ModelTypeSet error_types(BOOKMARKS); | 714 ModelTypeSet error_types(BOOKMARKS); |
| 727 | 715 |
| 728 InitializeBackend(true); | 716 InitializeBackend(true); |
| 729 | 717 |
| 730 // First enable the types. | 718 // First enable the types. |
| 731 ModelTypeSet ready_types = ConfigureDataTypes( | 719 ModelTypeSet ready_types = |
| 732 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | 720 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 733 ModelTypeSet()); | |
| 734 | 721 |
| 735 // Nigori is always downloaded so won't be ready. | 722 // Nigori is always downloaded so won't be ready. |
| 736 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 723 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 737 | 724 |
| 738 // Then mark the error types as unready (disables without purging). | 725 // Then mark the error types as unready (disables without purging). |
| 739 ready_types = ConfigureDataTypes( | 726 ModelTypeConfigurer::DataTypeConfigStateMap config_state_map = |
| 740 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | 727 ConfigStateMapForEnabledTypes(); |
| 741 error_types); | 728 ModelTypeConfigurer::SetDataTypesState(ModelTypeConfigurer::UNREADY, |
| 729 error_types, &config_state_map); |
| 730 ready_types = ConfigureDataTypes(config_state_map); |
| 742 EXPECT_EQ(Difference(enabled_types_, error_types), ready_types); | 731 EXPECT_EQ(Difference(enabled_types_, error_types), ready_types); |
| 743 EXPECT_TRUE( | 732 EXPECT_TRUE( |
| 744 fake_manager_->GetTypesWithEmptyProgressMarkerToken(error_types).Empty()); | 733 fake_manager_->GetTypesWithEmptyProgressMarkerToken(error_types).Empty()); |
| 745 | 734 |
| 746 // Lastly explicitly disable the error types, which should result in a purge. | 735 // Lastly explicitly disable the error types, which should result in a purge. |
| 747 enabled_types_.RemoveAll(error_types); | 736 enabled_types_.RemoveAll(error_types); |
| 748 ready_types = ConfigureDataTypes( | 737 ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 749 enabled_types_, Difference(ModelTypeSet::All(), enabled_types_), | |
| 750 ModelTypeSet()); | |
| 751 EXPECT_EQ(Difference(enabled_types_, error_types), ready_types); | 738 EXPECT_EQ(Difference(enabled_types_, error_types), ready_types); |
| 752 EXPECT_FALSE( | 739 EXPECT_FALSE( |
| 753 fake_manager_->GetTypesWithEmptyProgressMarkerToken(error_types).Empty()); | 740 fake_manager_->GetTypesWithEmptyProgressMarkerToken(error_types).Empty()); |
| 754 } | 741 } |
| 755 | 742 |
| 756 // Test that a call to ClearServerData is forwarded to the underlying | 743 // Test that a call to ClearServerData is forwarded to the underlying |
| 757 // SyncManager. | 744 // SyncManager. |
| 758 TEST_F(SyncEngineTest, ClearServerDataCallsAreForwarded) { | 745 TEST_F(SyncEngineTest, ClearServerDataCallsAreForwarded) { |
| 759 InitializeBackend(true); | 746 InitializeBackend(true); |
| 760 CallbackCounter callback_counter; | 747 CallbackCounter callback_counter; |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 // DataTypeManager shutdown. | 816 // DataTypeManager shutdown. |
| 830 TEST_F(SyncEngineTest, ModelTypeConnectorValidDuringShutdown) { | 817 TEST_F(SyncEngineTest, ModelTypeConnectorValidDuringShutdown) { |
| 831 InitializeBackend(true); | 818 InitializeBackend(true); |
| 832 backend_->StopSyncingForShutdown(); | 819 backend_->StopSyncingForShutdown(); |
| 833 // Verify that call to DeactivateNonBlockingDataType doesn't assert. | 820 // Verify that call to DeactivateNonBlockingDataType doesn't assert. |
| 834 backend_->DeactivateNonBlockingDataType(AUTOFILL); | 821 backend_->DeactivateNonBlockingDataType(AUTOFILL); |
| 835 backend_->Shutdown(STOP_SYNC); | 822 backend_->Shutdown(STOP_SYNC); |
| 836 backend_.reset(); | 823 backend_.reset(); |
| 837 } | 824 } |
| 838 | 825 |
| 826 // Ensure that types in CONFIGURE_CLEAN state are unapplied. |
| 827 TEST_F(SyncEngineTest, ConfigureCelanTypesAreUnapplied) { |
| 828 ModelTypeSet clean_types(AUTOFILL); |
| 829 |
| 830 InitializeBackend(true); |
| 831 |
| 832 // First enable the types. |
| 833 ModelTypeSet ready_types = |
| 834 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); |
| 835 EXPECT_TRUE( |
| 836 fake_manager_->GetTypesWithEmptyProgressMarkerToken(clean_types).Empty()); |
| 837 |
| 838 // Then unapply AUTOFILL. |
| 839 ModelTypeConfigurer::DataTypeConfigStateMap config_state_map = |
| 840 ConfigStateMapForEnabledTypes(); |
| 841 ModelTypeConfigurer::SetDataTypesState(ModelTypeConfigurer::CONFIGURE_CLEAN, |
| 842 clean_types, &config_state_map); |
| 843 |
| 844 ready_types = ConfigureDataTypes(config_state_map); |
| 845 |
| 846 // Autofill should be unapplied as part of PurgeDisabledTypes, but should |
| 847 // retain progress markers. |
| 848 ModelTypeSet purged_types = fake_manager_->GetAndResetPurgedTypes(); |
| 849 ModelTypeSet unapplied_types = fake_manager_->GetAndResetUnappliedTypes(); |
| 850 EXPECT_EQ(unapplied_types, clean_types); |
| 851 EXPECT_TRUE(purged_types.HasAll(clean_types)); |
| 852 EXPECT_TRUE( |
| 853 fake_manager_->GetTypesWithEmptyProgressMarkerToken(clean_types).Empty()); |
| 854 } |
| 855 |
| 839 } // namespace | 856 } // namespace |
| 840 | 857 |
| 841 } // namespace syncer | 858 } // namespace syncer |
| OLD | NEW |