| 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 "chrome/browser/sync/glue/sync_backend_host_impl.h" | 5 #include "chrome/browser/sync/glue/sync_backend_host_impl.h" |
| 6 | 6 |
| 7 #include <cstddef> | 7 #include <cstddef> |
| 8 | 8 |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 TestTimeouts::action_timeout()); | 227 TestTimeouts::action_timeout()); |
| 228 run_loop.Run(); | 228 run_loop.Run(); |
| 229 // |fake_manager_factory_|'s fake_manager() is set on the sync | 229 // |fake_manager_factory_|'s fake_manager() is set on the sync |
| 230 // thread, but we can rely on the message loop barriers to | 230 // thread, but we can rely on the message loop barriers to |
| 231 // guarantee that we see the updated value. | 231 // guarantee that we see the updated value. |
| 232 DCHECK(fake_manager_); | 232 DCHECK(fake_manager_); |
| 233 } | 233 } |
| 234 | 234 |
| 235 // Synchronously configures the backend's datatypes. | 235 // Synchronously configures the backend's datatypes. |
| 236 void ConfigureDataTypes(syncer::ModelTypeSet types_to_add, | 236 void ConfigureDataTypes(syncer::ModelTypeSet types_to_add, |
| 237 syncer::ModelTypeSet types_to_remove) { | 237 syncer::ModelTypeSet types_to_remove, |
| 238 syncer::ModelTypeSet types_to_unapply) { |
| 238 BackendDataTypeConfigurer::DataTypeConfigStateMap config_state_map; | 239 BackendDataTypeConfigurer::DataTypeConfigStateMap config_state_map; |
| 239 BackendDataTypeConfigurer::SetDataTypesState( | 240 BackendDataTypeConfigurer::SetDataTypesState( |
| 240 BackendDataTypeConfigurer::CONFIGURE_ACTIVE, | 241 BackendDataTypeConfigurer::CONFIGURE_ACTIVE, |
| 241 types_to_add, | 242 types_to_add, |
| 242 &config_state_map); | 243 &config_state_map); |
| 243 BackendDataTypeConfigurer::SetDataTypesState( | 244 BackendDataTypeConfigurer::SetDataTypesState( |
| 244 BackendDataTypeConfigurer::DISABLED, | 245 BackendDataTypeConfigurer::DISABLED, |
| 245 types_to_remove, &config_state_map); | 246 types_to_remove, &config_state_map); |
| 247 BackendDataTypeConfigurer::SetDataTypesState( |
| 248 BackendDataTypeConfigurer::UNREADY, |
| 249 types_to_unapply, &config_state_map); |
| 246 | 250 |
| 247 types_to_add.PutAll(syncer::ControlTypes()); | 251 types_to_add.PutAll(syncer::ControlTypes()); |
| 248 backend_->ConfigureDataTypes( | 252 backend_->ConfigureDataTypes( |
| 249 syncer::CONFIGURE_REASON_RECONFIGURATION, | 253 syncer::CONFIGURE_REASON_RECONFIGURATION, |
| 250 config_state_map, | 254 config_state_map, |
| 251 base::Bind(&SyncBackendHostTest::DownloadReady, | 255 base::Bind(&SyncBackendHostTest::DownloadReady, |
| 252 base::Unretained(this)), | 256 base::Unretained(this)), |
| 253 base::Bind(&SyncBackendHostTest::OnDownloadRetry, | 257 base::Bind(&SyncBackendHostTest::OnDownloadRetry, |
| 254 base::Unretained(this))); | 258 base::Unretained(this))); |
| 255 base::RunLoop run_loop; | 259 base::RunLoop run_loop; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 InitializeBackend(true); | 312 InitializeBackend(true); |
| 309 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 313 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 310 syncer::ControlTypes())); | 314 syncer::ControlTypes())); |
| 311 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( | 315 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( |
| 312 syncer::ControlTypes())); | 316 syncer::ControlTypes())); |
| 313 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 317 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 314 syncer::ControlTypes()).Empty()); | 318 syncer::ControlTypes()).Empty()); |
| 315 | 319 |
| 316 ConfigureDataTypes(enabled_types_, | 320 ConfigureDataTypes(enabled_types_, |
| 317 Difference(syncer::ModelTypeSet::All(), | 321 Difference(syncer::ModelTypeSet::All(), |
| 318 enabled_types_)); | 322 enabled_types_), |
| 323 syncer::ModelTypeSet()); |
| 319 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( | 324 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( |
| 320 Difference(enabled_types_, syncer::ControlTypes()))); | 325 Difference(enabled_types_, syncer::ControlTypes()))); |
| 321 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 326 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 322 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 327 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 323 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 328 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 324 enabled_types_).Empty()); | 329 enabled_types_).Empty()); |
| 325 } | 330 } |
| 326 | 331 |
| 327 // Test the restart after setting up sync scenario. No enabled types should be | 332 // Test the restart after setting up sync scenario. No enabled types should be |
| 328 // downloaded or cleaned. | 333 // downloaded or cleaned. |
| 329 TEST_F(SyncBackendHostTest, Restart) { | 334 TEST_F(SyncBackendHostTest, Restart) { |
| 330 sync_prefs_->SetSyncSetupCompleted(); | 335 sync_prefs_->SetSyncSetupCompleted(); |
| 331 syncer::ModelTypeSet all_but_nigori = enabled_types_; | 336 syncer::ModelTypeSet all_but_nigori = enabled_types_; |
| 332 fake_manager_factory_->set_progress_marker_types(enabled_types_); | 337 fake_manager_factory_->set_progress_marker_types(enabled_types_); |
| 333 fake_manager_factory_->set_initial_sync_ended_types(enabled_types_); | 338 fake_manager_factory_->set_initial_sync_ended_types(enabled_types_); |
| 334 InitializeBackend(true); | 339 InitializeBackend(true); |
| 335 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 340 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 336 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 341 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 337 enabled_types_).Empty()); | 342 enabled_types_).Empty()); |
| 338 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 343 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 339 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 344 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 340 enabled_types_).Empty()); | 345 enabled_types_).Empty()); |
| 341 | 346 |
| 342 ConfigureDataTypes(enabled_types_, | 347 ConfigureDataTypes(enabled_types_, |
| 343 Difference(syncer::ModelTypeSet::All(), | 348 Difference(syncer::ModelTypeSet::All(), |
| 344 enabled_types_)); | 349 enabled_types_), |
| 350 syncer::ModelTypeSet()); |
| 345 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 351 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 346 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 352 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 347 enabled_types_).Empty()); | 353 enabled_types_).Empty()); |
| 348 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 354 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 349 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 355 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 350 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 356 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 351 enabled_types_).Empty()); | 357 enabled_types_).Empty()); |
| 352 } | 358 } |
| 353 | 359 |
| 354 // 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. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 371 EXPECT_TRUE(fake_manager_->GetAndResetCleanedTypes().HasAll(partial_types)); | 377 EXPECT_TRUE(fake_manager_->GetAndResetCleanedTypes().HasAll(partial_types)); |
| 372 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( | 378 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( |
| 373 Union(full_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 379 Union(full_types, syncer::ModelTypeSet(syncer::NIGORI)))); |
| 374 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 380 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 375 enabled_types_).Equals( | 381 enabled_types_).Equals( |
| 376 Difference(partial_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 382 Difference(partial_types, syncer::ModelTypeSet(syncer::NIGORI)))); |
| 377 | 383 |
| 378 // Now do the actual configuration, which should download and apply bookmarks. | 384 // Now do the actual configuration, which should download and apply bookmarks. |
| 379 ConfigureDataTypes(enabled_types_, | 385 ConfigureDataTypes(enabled_types_, |
| 380 Difference(syncer::ModelTypeSet::All(), | 386 Difference(syncer::ModelTypeSet::All(), |
| 381 enabled_types_)); | 387 enabled_types_), |
| 388 syncer::ModelTypeSet()); |
| 382 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 389 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 383 enabled_types_).Empty()); | 390 enabled_types_).Empty()); |
| 384 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 391 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 385 partial_types)); | 392 partial_types)); |
| 386 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 393 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 387 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 394 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 388 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 395 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 389 enabled_types_).Empty()); | 396 enabled_types_).Empty()); |
| 390 } | 397 } |
| 391 | 398 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 404 enabled_types_).Equals( | 411 enabled_types_).Equals( |
| 405 Difference(enabled_types_, syncer::ControlTypes()))); | 412 Difference(enabled_types_, syncer::ControlTypes()))); |
| 406 | 413 |
| 407 // The database was empty, so any cleaning is entirely optional. We want to | 414 // The database was empty, so any cleaning is entirely optional. We want to |
| 408 // reset this value before running the next part of the test, though. | 415 // reset this value before running the next part of the test, though. |
| 409 fake_manager_->GetAndResetCleanedTypes(); | 416 fake_manager_->GetAndResetCleanedTypes(); |
| 410 | 417 |
| 411 // The actual configuration should redownload and apply all the enabled types. | 418 // The actual configuration should redownload and apply all the enabled types. |
| 412 ConfigureDataTypes(enabled_types_, | 419 ConfigureDataTypes(enabled_types_, |
| 413 Difference(syncer::ModelTypeSet::All(), | 420 Difference(syncer::ModelTypeSet::All(), |
| 414 enabled_types_)); | 421 enabled_types_), |
| 422 syncer::ModelTypeSet()); |
| 415 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( | 423 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( |
| 416 Difference(enabled_types_, syncer::ControlTypes()))); | 424 Difference(enabled_types_, syncer::ControlTypes()))); |
| 417 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 425 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 418 enabled_types_).Empty()); | 426 enabled_types_).Empty()); |
| 419 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 427 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 420 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 428 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 421 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 429 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 422 enabled_types_).Empty()); | 430 enabled_types_).Empty()); |
| 423 } | 431 } |
| 424 | 432 |
| 425 TEST_F(SyncBackendHostTest, DisableTypes) { | 433 TEST_F(SyncBackendHostTest, DisableTypes) { |
| 426 // Simulate first time sync. | 434 // Simulate first time sync. |
| 427 InitializeBackend(true); | 435 InitializeBackend(true); |
| 428 fake_manager_->GetAndResetCleanedTypes(); | 436 fake_manager_->GetAndResetCleanedTypes(); |
| 429 ConfigureDataTypes(enabled_types_, | 437 ConfigureDataTypes(enabled_types_, |
| 430 Difference(syncer::ModelTypeSet::All(), | 438 Difference(syncer::ModelTypeSet::All(), |
| 431 enabled_types_)); | 439 enabled_types_), |
| 440 syncer::ModelTypeSet()); |
| 432 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 441 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 433 enabled_types_)); | 442 enabled_types_)); |
| 434 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 443 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 435 enabled_types_).Empty()); | 444 enabled_types_).Empty()); |
| 436 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 445 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 437 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 446 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 438 enabled_types_).Empty()); | 447 enabled_types_).Empty()); |
| 439 | 448 |
| 440 // Then disable two datatypes. | 449 // Then disable two datatypes. |
| 441 syncer::ModelTypeSet disabled_types(syncer::BOOKMARKS, | 450 syncer::ModelTypeSet disabled_types(syncer::BOOKMARKS, |
| 442 syncer::SEARCH_ENGINES); | 451 syncer::SEARCH_ENGINES); |
| 443 syncer::ModelTypeSet old_types = enabled_types_; | 452 syncer::ModelTypeSet old_types = enabled_types_; |
| 444 enabled_types_.RemoveAll(disabled_types); | 453 enabled_types_.RemoveAll(disabled_types); |
| 445 ConfigureDataTypes(enabled_types_, | 454 ConfigureDataTypes(enabled_types_, |
| 446 Difference(syncer::ModelTypeSet::All(), | 455 Difference(syncer::ModelTypeSet::All(), |
| 447 enabled_types_)); | 456 enabled_types_), |
| 457 syncer::ModelTypeSet()); |
| 448 | 458 |
| 449 // Only those datatypes disabled should be cleaned. Nothing should be | 459 // Only those datatypes disabled should be cleaned. Nothing should be |
| 450 // downloaded. | 460 // downloaded. |
| 451 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 461 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 452 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 462 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 453 old_types).Equals(disabled_types)); | 463 old_types).Equals(disabled_types)); |
| 454 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 464 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 455 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 465 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 456 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 466 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 457 enabled_types_).Empty()); | 467 enabled_types_).Empty()); |
| 458 } | 468 } |
| 459 | 469 |
| 460 TEST_F(SyncBackendHostTest, AddTypes) { | 470 TEST_F(SyncBackendHostTest, AddTypes) { |
| 461 // Simulate first time sync. | 471 // Simulate first time sync. |
| 462 InitializeBackend(true); | 472 InitializeBackend(true); |
| 463 fake_manager_->GetAndResetCleanedTypes(); | 473 fake_manager_->GetAndResetCleanedTypes(); |
| 464 ConfigureDataTypes(enabled_types_, | 474 ConfigureDataTypes(enabled_types_, |
| 465 Difference(syncer::ModelTypeSet::All(), | 475 Difference(syncer::ModelTypeSet::All(), |
| 466 enabled_types_)); | 476 enabled_types_), |
| 477 syncer::ModelTypeSet()); |
| 467 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 478 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 468 enabled_types_)); | 479 enabled_types_)); |
| 469 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 480 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 470 enabled_types_).Empty()); | 481 enabled_types_).Empty()); |
| 471 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 482 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 472 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 483 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 473 enabled_types_).Empty()); | 484 enabled_types_).Empty()); |
| 474 | 485 |
| 475 // Then add two datatypes. | 486 // Then add two datatypes. |
| 476 syncer::ModelTypeSet new_types(syncer::EXTENSIONS, | 487 syncer::ModelTypeSet new_types(syncer::EXTENSIONS, |
| 477 syncer::APPS); | 488 syncer::APPS); |
| 478 enabled_types_.PutAll(new_types); | 489 enabled_types_.PutAll(new_types); |
| 479 ConfigureDataTypes(enabled_types_, | 490 ConfigureDataTypes(enabled_types_, |
| 480 Difference(syncer::ModelTypeSet::All(), | 491 Difference(syncer::ModelTypeSet::All(), |
| 481 enabled_types_)); | 492 enabled_types_), |
| 493 syncer::ModelTypeSet()); |
| 482 | 494 |
| 483 // Only those datatypes added should be downloaded (plus nigori). Nothing | 495 // Only those datatypes added should be downloaded (plus nigori). Nothing |
| 484 // should be cleaned aside from the disabled types. | 496 // should be cleaned aside from the disabled types. |
| 485 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 497 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 486 Union(new_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 498 Union(new_types, syncer::ModelTypeSet(syncer::NIGORI)))); |
| 487 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 499 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 488 enabled_types_).Empty()); | 500 enabled_types_).Empty()); |
| 489 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 501 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 490 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 502 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 491 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 503 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 492 enabled_types_).Empty()); | 504 enabled_types_).Empty()); |
| 493 } | 505 } |
| 494 | 506 |
| 495 // And and disable in the same configuration. | 507 // And and disable in the same configuration. |
| 496 TEST_F(SyncBackendHostTest, AddDisableTypes) { | 508 TEST_F(SyncBackendHostTest, AddDisableTypes) { |
| 497 // Simulate first time sync. | 509 // Simulate first time sync. |
| 498 InitializeBackend(true); | 510 InitializeBackend(true); |
| 499 fake_manager_->GetAndResetCleanedTypes(); | 511 fake_manager_->GetAndResetCleanedTypes(); |
| 500 ConfigureDataTypes(enabled_types_, | 512 ConfigureDataTypes(enabled_types_, |
| 501 Difference(syncer::ModelTypeSet::All(), | 513 Difference(syncer::ModelTypeSet::All(), |
| 502 enabled_types_)); | 514 enabled_types_), |
| 515 syncer::ModelTypeSet()); |
| 503 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 516 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 504 enabled_types_)); | 517 enabled_types_)); |
| 505 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 518 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 506 enabled_types_).Empty()); | 519 enabled_types_).Empty()); |
| 507 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 520 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 508 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 521 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 509 enabled_types_).Empty()); | 522 enabled_types_).Empty()); |
| 510 | 523 |
| 511 // Then add two datatypes. | 524 // Then add two datatypes. |
| 512 syncer::ModelTypeSet old_types = enabled_types_; | 525 syncer::ModelTypeSet old_types = enabled_types_; |
| 513 syncer::ModelTypeSet disabled_types(syncer::BOOKMARKS, | 526 syncer::ModelTypeSet disabled_types(syncer::BOOKMARKS, |
| 514 syncer::SEARCH_ENGINES); | 527 syncer::SEARCH_ENGINES); |
| 515 syncer::ModelTypeSet new_types(syncer::EXTENSIONS, | 528 syncer::ModelTypeSet new_types(syncer::EXTENSIONS, |
| 516 syncer::APPS); | 529 syncer::APPS); |
| 517 enabled_types_.PutAll(new_types); | 530 enabled_types_.PutAll(new_types); |
| 518 enabled_types_.RemoveAll(disabled_types); | 531 enabled_types_.RemoveAll(disabled_types); |
| 519 ConfigureDataTypes(enabled_types_, | 532 ConfigureDataTypes(enabled_types_, |
| 520 Difference(syncer::ModelTypeSet::All(), | 533 Difference(syncer::ModelTypeSet::All(), |
| 521 enabled_types_)); | 534 enabled_types_), |
| 535 syncer::ModelTypeSet()); |
| 522 | 536 |
| 523 // Only those datatypes added should be downloaded (plus nigori). Nothing | 537 // Only those datatypes added should be downloaded (plus nigori). Nothing |
| 524 // should be cleaned aside from the disabled types. | 538 // should be cleaned aside from the disabled types. |
| 525 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 539 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 526 Union(new_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 540 Union(new_types, syncer::ModelTypeSet(syncer::NIGORI)))); |
| 527 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 541 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 528 old_types).Equals(disabled_types)); | 542 old_types).Equals(disabled_types)); |
| 529 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 543 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 530 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 544 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 531 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 545 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| (...skipping 18 matching lines...) Expand all Loading... |
| 550 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 564 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 551 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 565 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 552 old_types).Empty()); | 566 old_types).Empty()); |
| 553 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(old_types)); | 567 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(old_types)); |
| 554 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 568 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 555 enabled_types_).Equals(new_types)); | 569 enabled_types_).Equals(new_types)); |
| 556 | 570 |
| 557 // Downloads and applies the new types. | 571 // Downloads and applies the new types. |
| 558 ConfigureDataTypes(enabled_types_, | 572 ConfigureDataTypes(enabled_types_, |
| 559 Difference(syncer::ModelTypeSet::All(), | 573 Difference(syncer::ModelTypeSet::All(), |
| 560 enabled_types_)); | 574 enabled_types_), |
| 575 syncer::ModelTypeSet()); |
| 561 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 576 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 562 Union(new_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 577 Union(new_types, syncer::ModelTypeSet(syncer::NIGORI)))); |
| 563 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 578 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 564 enabled_types_).Empty()); | 579 enabled_types_).Empty()); |
| 565 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 580 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 566 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 581 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 567 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 582 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 568 enabled_types_).Empty()); | 583 enabled_types_).Empty()); |
| 569 } | 584 } |
| 570 | 585 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 594 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( | 609 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( |
| 595 syncer::Union(full_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 610 syncer::Union(full_types, syncer::ModelTypeSet(syncer::NIGORI)))); |
| 596 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 611 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 597 enabled_types_).Equals(Union(new_types, Difference( | 612 enabled_types_).Equals(Union(new_types, Difference( |
| 598 partial_types, syncer::ModelTypeSet(syncer::NIGORI))))); | 613 partial_types, syncer::ModelTypeSet(syncer::NIGORI))))); |
| 599 | 614 |
| 600 // Downloads and applies the new types and partial types (which includes | 615 // Downloads and applies the new types and partial types (which includes |
| 601 // nigori anyways). | 616 // nigori anyways). |
| 602 ConfigureDataTypes(enabled_types_, | 617 ConfigureDataTypes(enabled_types_, |
| 603 Difference(syncer::ModelTypeSet::All(), | 618 Difference(syncer::ModelTypeSet::All(), |
| 604 enabled_types_)); | 619 enabled_types_), |
| 620 syncer::ModelTypeSet()); |
| 605 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 621 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 606 Union(new_types, partial_types))); | 622 Union(new_types, partial_types))); |
| 607 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 623 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 608 enabled_types_).Empty()); | 624 enabled_types_).Empty()); |
| 609 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 625 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 610 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 626 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 611 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 627 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 612 enabled_types_).Empty()); | 628 enabled_types_).Empty()); |
| 613 } | 629 } |
| 614 | 630 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 725 profile_->GetPath().Append(base::FilePath(kTestSyncDir)); | 741 profile_->GetPath().Append(base::FilePath(kTestSyncDir)); |
| 726 base::FilePath sync_file = temp_directory.AppendASCII("SyncData.sqlite3"); | 742 base::FilePath sync_file = temp_directory.AppendASCII("SyncData.sqlite3"); |
| 727 ASSERT_TRUE(base::CreateDirectory(temp_directory)); | 743 ASSERT_TRUE(base::CreateDirectory(temp_directory)); |
| 728 ASSERT_NE(-1, base::WriteFile(sync_file, nonsense, strlen(nonsense))); | 744 ASSERT_NE(-1, base::WriteFile(sync_file, nonsense, strlen(nonsense))); |
| 729 | 745 |
| 730 InitializeBackend(true); | 746 InitializeBackend(true); |
| 731 | 747 |
| 732 EXPECT_FALSE(base::PathExists(sync_file)); | 748 EXPECT_FALSE(base::PathExists(sync_file)); |
| 733 } | 749 } |
| 734 | 750 |
| 751 // If bookmarks encounter an error that results in disabling without purging |
| 752 // (such as when the type is unready), and then is explicitly disabled, the |
| 753 // SyncBackendHost needs to tell the manager to purge the type, even though |
| 754 // it's already disabled (crbug.com/386778). |
| 755 TEST_F(SyncBackendHostTest, DisableThenPurgeType) { |
| 756 syncer::ModelTypeSet error_types(syncer::BOOKMARKS); |
| 757 |
| 758 InitializeBackend(true); |
| 759 |
| 760 // First enable the types. |
| 761 ConfigureDataTypes(enabled_types_, |
| 762 Difference(syncer::ModelTypeSet::All(), |
| 763 enabled_types_), |
| 764 syncer::ModelTypeSet()); |
| 765 |
| 766 // Then mark the error types as unready (disables without purging). |
| 767 ConfigureDataTypes(enabled_types_, |
| 768 Difference(syncer::ModelTypeSet::All(), |
| 769 enabled_types_), |
| 770 error_types); |
| 771 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 772 error_types).Empty()); |
| 773 |
| 774 // Lastly explicitly disable the error types, which should result in a purge. |
| 775 enabled_types_.RemoveAll(error_types); |
| 776 ConfigureDataTypes(enabled_types_, |
| 777 Difference(syncer::ModelTypeSet::All(), |
| 778 enabled_types_), |
| 779 syncer::ModelTypeSet()); |
| 780 EXPECT_FALSE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 781 error_types).Empty()); |
| 782 } |
| 783 |
| 735 } // namespace | 784 } // namespace |
| 736 | 785 |
| 737 } // namespace browser_sync | 786 } // namespace browser_sync |
| OLD | NEW |