| Index: chrome/browser/sync/glue/sync_backend_host_impl_unittest.cc
|
| diff --git a/chrome/browser/sync/glue/sync_backend_host_impl_unittest.cc b/chrome/browser/sync/glue/sync_backend_host_impl_unittest.cc
|
| index 8bd0e7c5e05873c344a6f77b4e21f9fc0838f4b2..a41e1116bbdfdaeadda7a7ee2e3b76b52c1ab06d 100644
|
| --- a/chrome/browser/sync/glue/sync_backend_host_impl_unittest.cc
|
| +++ b/chrome/browser/sync/glue/sync_backend_host_impl_unittest.cc
|
| @@ -234,7 +234,8 @@ class SyncBackendHostTest : public testing::Test {
|
|
|
| // Synchronously configures the backend's datatypes.
|
| void ConfigureDataTypes(syncer::ModelTypeSet types_to_add,
|
| - syncer::ModelTypeSet types_to_remove) {
|
| + syncer::ModelTypeSet types_to_remove,
|
| + syncer::ModelTypeSet types_to_unapply) {
|
| BackendDataTypeConfigurer::DataTypeConfigStateMap config_state_map;
|
| BackendDataTypeConfigurer::SetDataTypesState(
|
| BackendDataTypeConfigurer::CONFIGURE_ACTIVE,
|
| @@ -243,6 +244,9 @@ class SyncBackendHostTest : public testing::Test {
|
| BackendDataTypeConfigurer::SetDataTypesState(
|
| BackendDataTypeConfigurer::DISABLED,
|
| types_to_remove, &config_state_map);
|
| + BackendDataTypeConfigurer::SetDataTypesState(
|
| + BackendDataTypeConfigurer::UNREADY,
|
| + types_to_unapply, &config_state_map);
|
|
|
| types_to_add.PutAll(syncer::ControlTypes());
|
| backend_->ConfigureDataTypes(
|
| @@ -315,7 +319,8 @@ TEST_F(SyncBackendHostTest, FirstTimeSync) {
|
|
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
| EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll(
|
| Difference(enabled_types_, syncer::ControlTypes())));
|
| EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_));
|
| @@ -341,7 +346,8 @@ TEST_F(SyncBackendHostTest, Restart) {
|
|
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
| EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty());
|
| EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(),
|
| enabled_types_).Empty());
|
| @@ -378,7 +384,8 @@ TEST_F(SyncBackendHostTest, PartialTypes) {
|
| // Now do the actual configuration, which should download and apply bookmarks.
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
| EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(),
|
| enabled_types_).Empty());
|
| EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals(
|
| @@ -411,7 +418,8 @@ TEST_F(SyncBackendHostTest, LostDB) {
|
| // The actual configuration should redownload and apply all the enabled types.
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
| EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll(
|
| Difference(enabled_types_, syncer::ControlTypes())));
|
| EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(),
|
| @@ -428,7 +436,8 @@ TEST_F(SyncBackendHostTest, DisableTypes) {
|
| fake_manager_->GetAndResetCleanedTypes();
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
| EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals(
|
| enabled_types_));
|
| EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(),
|
| @@ -444,7 +453,8 @@ TEST_F(SyncBackendHostTest, DisableTypes) {
|
| enabled_types_.RemoveAll(disabled_types);
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
|
|
| // Only those datatypes disabled should be cleaned. Nothing should be
|
| // downloaded.
|
| @@ -463,7 +473,8 @@ TEST_F(SyncBackendHostTest, AddTypes) {
|
| fake_manager_->GetAndResetCleanedTypes();
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
| EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals(
|
| enabled_types_));
|
| EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(),
|
| @@ -478,7 +489,8 @@ TEST_F(SyncBackendHostTest, AddTypes) {
|
| enabled_types_.PutAll(new_types);
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
|
|
| // Only those datatypes added should be downloaded (plus nigori). Nothing
|
| // should be cleaned aside from the disabled types.
|
| @@ -499,7 +511,8 @@ TEST_F(SyncBackendHostTest, AddDisableTypes) {
|
| fake_manager_->GetAndResetCleanedTypes();
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
| EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals(
|
| enabled_types_));
|
| EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(),
|
| @@ -518,7 +531,8 @@ TEST_F(SyncBackendHostTest, AddDisableTypes) {
|
| enabled_types_.RemoveAll(disabled_types);
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
|
|
| // Only those datatypes added should be downloaded (plus nigori). Nothing
|
| // should be cleaned aside from the disabled types.
|
| @@ -557,7 +571,8 @@ TEST_F(SyncBackendHostTest, NewlySupportedTypes) {
|
| // Downloads and applies the new types.
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
| EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals(
|
| Union(new_types, syncer::ModelTypeSet(syncer::NIGORI))));
|
| EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(),
|
| @@ -601,7 +616,8 @@ TEST_F(SyncBackendHostTest, NewlySupportedTypesWithPartialTypes) {
|
| // nigori anyways).
|
| ConfigureDataTypes(enabled_types_,
|
| Difference(syncer::ModelTypeSet::All(),
|
| - enabled_types_));
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
| EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals(
|
| Union(new_types, partial_types)));
|
| EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(),
|
| @@ -732,6 +748,39 @@ TEST_F(SyncBackendHostTest, TestStartupWithOldSyncData) {
|
| EXPECT_FALSE(base::PathExists(sync_file));
|
| }
|
|
|
| +// If bookmarks encounter an error that results in disabling without purging
|
| +// (such as when the type is unready), and then is explicitly disabled, the
|
| +// SyncBackendHost needs to tell the manager to purge the type, even though
|
| +// it's already disabled (crbug.com/386778).
|
| +TEST_F(SyncBackendHostTest, DisableThenPurgeType) {
|
| + syncer::ModelTypeSet error_types(syncer::BOOKMARKS);
|
| +
|
| + InitializeBackend(true);
|
| +
|
| + // First enable the types.
|
| + ConfigureDataTypes(enabled_types_,
|
| + Difference(syncer::ModelTypeSet::All(),
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
| +
|
| + // Then mark the error types as unready (disables without purging).
|
| + ConfigureDataTypes(enabled_types_,
|
| + Difference(syncer::ModelTypeSet::All(),
|
| + enabled_types_),
|
| + error_types);
|
| + EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken(
|
| + error_types).Empty());
|
| +
|
| + // Lastly explicitly disable the error types, which should result in a purge.
|
| + enabled_types_.RemoveAll(error_types);
|
| + ConfigureDataTypes(enabled_types_,
|
| + Difference(syncer::ModelTypeSet::All(),
|
| + enabled_types_),
|
| + syncer::ModelTypeSet());
|
| + EXPECT_FALSE(fake_manager_->GetTypesWithEmptyProgressMarkerToken(
|
| + error_types).Empty());
|
| +}
|
| +
|
| } // namespace
|
|
|
| } // namespace browser_sync
|
|
|