| 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/files/file_util.h" | 9 #include "base/files/file_util.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 credentials_.scope_set.insert(GaiaConstants::kChromeSyncOAuth2Scope); | 169 credentials_.scope_set.insert(GaiaConstants::kChromeSyncOAuth2Scope); |
| 170 | 170 |
| 171 fake_manager_factory_.reset(new FakeSyncManagerFactory(&fake_manager_)); | 171 fake_manager_factory_.reset(new FakeSyncManagerFactory(&fake_manager_)); |
| 172 | 172 |
| 173 // These types are always implicitly enabled. | 173 // These types are always implicitly enabled. |
| 174 enabled_types_.PutAll(syncer::ControlTypes()); | 174 enabled_types_.PutAll(syncer::ControlTypes()); |
| 175 | 175 |
| 176 // NOTE: We can't include Passwords or Typed URLs due to the Sync Backend | 176 // NOTE: We can't include Passwords or Typed URLs due to the Sync Backend |
| 177 // Registrar removing them if it can't find their model workers. | 177 // Registrar removing them if it can't find their model workers. |
| 178 enabled_types_.Put(syncer::BOOKMARKS); | 178 enabled_types_.Put(syncer::BOOKMARKS); |
| 179 enabled_types_.Put(syncer::NIGORI); | |
| 180 enabled_types_.Put(syncer::DEVICE_INFO); | |
| 181 enabled_types_.Put(syncer::PREFERENCES); | 179 enabled_types_.Put(syncer::PREFERENCES); |
| 182 enabled_types_.Put(syncer::SESSIONS); | 180 enabled_types_.Put(syncer::SESSIONS); |
| 183 enabled_types_.Put(syncer::SEARCH_ENGINES); | 181 enabled_types_.Put(syncer::SEARCH_ENGINES); |
| 184 enabled_types_.Put(syncer::AUTOFILL); | 182 enabled_types_.Put(syncer::AUTOFILL); |
| 185 enabled_types_.Put(syncer::EXPERIMENTS); | |
| 186 | 183 |
| 187 network_resources_.reset(new syncer::HttpBridgeNetworkResources()); | 184 network_resources_.reset(new syncer::HttpBridgeNetworkResources()); |
| 188 } | 185 } |
| 189 | 186 |
| 190 virtual void TearDown() override { | 187 virtual void TearDown() override { |
| 191 if (backend_) { | 188 if (backend_) { |
| 192 backend_->StopSyncingForShutdown(); | 189 backend_->StopSyncingForShutdown(); |
| 193 backend_->Shutdown(syncer::STOP_SYNC); | 190 backend_->Shutdown(syncer::STOP_SYNC); |
| 194 } | 191 } |
| 195 backend_.reset(); | 192 backend_.reset(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 224 run_loop.QuitClosure(), | 221 run_loop.QuitClosure(), |
| 225 TestTimeouts::action_timeout()); | 222 TestTimeouts::action_timeout()); |
| 226 run_loop.Run(); | 223 run_loop.Run(); |
| 227 // |fake_manager_factory_|'s fake_manager() is set on the sync | 224 // |fake_manager_factory_|'s fake_manager() is set on the sync |
| 228 // thread, but we can rely on the message loop barriers to | 225 // thread, but we can rely on the message loop barriers to |
| 229 // guarantee that we see the updated value. | 226 // guarantee that we see the updated value. |
| 230 DCHECK(fake_manager_); | 227 DCHECK(fake_manager_); |
| 231 } | 228 } |
| 232 | 229 |
| 233 // Synchronously configures the backend's datatypes. | 230 // Synchronously configures the backend's datatypes. |
| 234 void ConfigureDataTypes(syncer::ModelTypeSet types_to_add, | 231 syncer::ModelTypeSet ConfigureDataTypes( |
| 235 syncer::ModelTypeSet types_to_remove, | 232 syncer::ModelTypeSet types_to_add, |
| 236 syncer::ModelTypeSet types_to_unapply) { | 233 syncer::ModelTypeSet types_to_remove, |
| 234 syncer::ModelTypeSet types_to_unapply) { |
| 237 sync_driver::BackendDataTypeConfigurer::DataTypeConfigStateMap | 235 sync_driver::BackendDataTypeConfigurer::DataTypeConfigStateMap |
| 238 config_state_map; | 236 config_state_map; |
| 239 sync_driver::BackendDataTypeConfigurer::SetDataTypesState( | 237 sync_driver::BackendDataTypeConfigurer::SetDataTypesState( |
| 240 sync_driver::BackendDataTypeConfigurer::CONFIGURE_ACTIVE, | 238 sync_driver::BackendDataTypeConfigurer::CONFIGURE_ACTIVE, |
| 241 types_to_add, | 239 types_to_add, |
| 242 &config_state_map); | 240 &config_state_map); |
| 243 sync_driver::BackendDataTypeConfigurer::SetDataTypesState( | 241 sync_driver::BackendDataTypeConfigurer::SetDataTypesState( |
| 244 sync_driver::BackendDataTypeConfigurer::DISABLED, | 242 sync_driver::BackendDataTypeConfigurer::DISABLED, |
| 245 types_to_remove, &config_state_map); | 243 types_to_remove, &config_state_map); |
| 246 sync_driver::BackendDataTypeConfigurer::SetDataTypesState( | 244 sync_driver::BackendDataTypeConfigurer::SetDataTypesState( |
| 247 sync_driver::BackendDataTypeConfigurer::UNREADY, | 245 sync_driver::BackendDataTypeConfigurer::UNREADY, |
| 248 types_to_unapply, &config_state_map); | 246 types_to_unapply, &config_state_map); |
| 249 | 247 |
| 250 types_to_add.PutAll(syncer::ControlTypes()); | 248 types_to_add.PutAll(syncer::ControlTypes()); |
| 251 backend_->ConfigureDataTypes( | 249 syncer::ModelTypeSet ready_types = backend_->ConfigureDataTypes( |
| 252 syncer::CONFIGURE_REASON_RECONFIGURATION, | 250 syncer::CONFIGURE_REASON_RECONFIGURATION, config_state_map, |
| 253 config_state_map, | 251 base::Bind(&SyncBackendHostTest::DownloadReady, base::Unretained(this)), |
| 254 base::Bind(&SyncBackendHostTest::DownloadReady, | |
| 255 base::Unretained(this)), | |
| 256 base::Bind(&SyncBackendHostTest::OnDownloadRetry, | 252 base::Bind(&SyncBackendHostTest::OnDownloadRetry, |
| 257 base::Unretained(this))); | 253 base::Unretained(this))); |
| 258 base::RunLoop run_loop; | 254 base::RunLoop run_loop; |
| 259 BrowserThread::PostDelayedTask(BrowserThread::UI, FROM_HERE, | 255 BrowserThread::PostDelayedTask(BrowserThread::UI, FROM_HERE, |
| 260 run_loop.QuitClosure(), | 256 run_loop.QuitClosure(), |
| 261 TestTimeouts::action_timeout()); | 257 TestTimeouts::action_timeout()); |
| 262 run_loop.Run(); | 258 run_loop.Run(); |
| 259 return ready_types; |
| 263 } | 260 } |
| 264 | 261 |
| 265 void IssueRefreshRequest(syncer::ModelTypeSet types) { | 262 void IssueRefreshRequest(syncer::ModelTypeSet types) { |
| 266 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 263 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 267 | 264 |
| 268 content::NotificationService::current()->Notify( | 265 content::NotificationService::current()->Notify( |
| 269 chrome::NOTIFICATION_SYNC_REFRESH_LOCAL, | 266 chrome::NOTIFICATION_SYNC_REFRESH_LOCAL, |
| 270 content::Source<Profile>(profile_), | 267 content::Source<Profile>(profile_), |
| 271 content::Details<syncer::ModelTypeSet>(&types)); | 268 content::Details<syncer::ModelTypeSet>(&types)); |
| 272 } | 269 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 // Test first time sync scenario. All types should be properly configured. | 306 // Test first time sync scenario. All types should be properly configured. |
| 310 TEST_F(SyncBackendHostTest, FirstTimeSync) { | 307 TEST_F(SyncBackendHostTest, FirstTimeSync) { |
| 311 InitializeBackend(true); | 308 InitializeBackend(true); |
| 312 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 309 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 313 syncer::ControlTypes())); | 310 syncer::ControlTypes())); |
| 314 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( | 311 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( |
| 315 syncer::ControlTypes())); | 312 syncer::ControlTypes())); |
| 316 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 313 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 317 syncer::ControlTypes()).Empty()); | 314 syncer::ControlTypes()).Empty()); |
| 318 | 315 |
| 319 ConfigureDataTypes(enabled_types_, | 316 syncer::ModelTypeSet ready_types = ConfigureDataTypes( |
| 320 Difference(syncer::ModelTypeSet::All(), | 317 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 321 enabled_types_), | 318 syncer::ModelTypeSet()); |
| 322 syncer::ModelTypeSet()); | 319 // Nigori is always downloaded so won't be ready. |
| 320 EXPECT_TRUE(ready_types.Equals(syncer::Difference( |
| 321 syncer::ControlTypes(), |
| 322 syncer::ModelTypeSet(syncer::NIGORI)))); |
| 323 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( | 323 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( |
| 324 Difference(enabled_types_, syncer::ControlTypes()))); | 324 Difference(enabled_types_, syncer::ControlTypes()))); |
| 325 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 325 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 326 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 326 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 327 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 327 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 328 enabled_types_).Empty()); | 328 enabled_types_).Empty()); |
| 329 } | 329 } |
| 330 | 330 |
| 331 // Test the restart after setting up sync scenario. No enabled types should be | 331 // Test the restart after setting up sync scenario. No enabled types should be |
| 332 // downloaded or cleaned. | 332 // downloaded or cleaned. |
| 333 TEST_F(SyncBackendHostTest, Restart) { | 333 TEST_F(SyncBackendHostTest, Restart) { |
| 334 sync_prefs_->SetSyncSetupCompleted(); | 334 sync_prefs_->SetSyncSetupCompleted(); |
| 335 syncer::ModelTypeSet all_but_nigori = enabled_types_; | 335 syncer::ModelTypeSet all_but_nigori = enabled_types_; |
| 336 fake_manager_factory_->set_progress_marker_types(enabled_types_); | 336 fake_manager_factory_->set_progress_marker_types(enabled_types_); |
| 337 fake_manager_factory_->set_initial_sync_ended_types(enabled_types_); | 337 fake_manager_factory_->set_initial_sync_ended_types(enabled_types_); |
| 338 InitializeBackend(true); | 338 InitializeBackend(true); |
| 339 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 339 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 340 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 340 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 341 enabled_types_).Empty()); | 341 enabled_types_).Empty()); |
| 342 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 342 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 343 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 343 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 344 enabled_types_).Empty()); | 344 enabled_types_).Empty()); |
| 345 | 345 |
| 346 ConfigureDataTypes(enabled_types_, | 346 syncer::ModelTypeSet ready_types = ConfigureDataTypes( |
| 347 Difference(syncer::ModelTypeSet::All(), | 347 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 348 enabled_types_), | 348 syncer::ModelTypeSet()); |
| 349 syncer::ModelTypeSet()); | 349 EXPECT_TRUE(ready_types.Equals(enabled_types_)); |
| 350 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 350 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 351 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 351 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 352 enabled_types_).Empty()); | 352 enabled_types_).Empty()); |
| 353 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 353 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 354 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 354 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 355 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 355 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 356 enabled_types_).Empty()); | 356 enabled_types_).Empty()); |
| 357 } | 357 } |
| 358 | 358 |
| 359 // Test a sync restart scenario where some types had never finished configuring. | 359 // Test a sync restart scenario where some types had never finished configuring. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 374 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 374 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 375 syncer::ModelTypeSet(syncer::NIGORI))); | 375 syncer::ModelTypeSet(syncer::NIGORI))); |
| 376 EXPECT_TRUE(fake_manager_->GetAndResetCleanedTypes().HasAll(partial_types)); | 376 EXPECT_TRUE(fake_manager_->GetAndResetCleanedTypes().HasAll(partial_types)); |
| 377 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( | 377 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( |
| 378 Union(full_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 378 Union(full_types, syncer::ModelTypeSet(syncer::NIGORI)))); |
| 379 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 379 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 380 enabled_types_).Equals( | 380 enabled_types_).Equals( |
| 381 Difference(partial_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 381 Difference(partial_types, syncer::ModelTypeSet(syncer::NIGORI)))); |
| 382 | 382 |
| 383 // Now do the actual configuration, which should download and apply bookmarks. | 383 // Now do the actual configuration, which should download and apply bookmarks. |
| 384 ConfigureDataTypes(enabled_types_, | 384 syncer::ModelTypeSet ready_types = ConfigureDataTypes( |
| 385 Difference(syncer::ModelTypeSet::All(), | 385 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 386 enabled_types_), | 386 syncer::ModelTypeSet()); |
| 387 syncer::ModelTypeSet()); | 387 EXPECT_TRUE(ready_types.Equals(full_types)); |
| 388 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 388 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 389 enabled_types_).Empty()); | 389 enabled_types_).Empty()); |
| 390 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 390 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 391 partial_types)); | 391 partial_types)); |
| 392 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 392 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 393 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 393 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 394 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 394 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 395 enabled_types_).Empty()); | 395 enabled_types_).Empty()); |
| 396 } | 396 } |
| 397 | 397 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 408 syncer::ModelTypeSet(syncer::ControlTypes()))); | 408 syncer::ModelTypeSet(syncer::ControlTypes()))); |
| 409 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 409 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 410 enabled_types_).Equals( | 410 enabled_types_).Equals( |
| 411 Difference(enabled_types_, syncer::ControlTypes()))); | 411 Difference(enabled_types_, syncer::ControlTypes()))); |
| 412 | 412 |
| 413 // The database was empty, so any cleaning is entirely optional. We want to | 413 // The database was empty, so any cleaning is entirely optional. We want to |
| 414 // reset this value before running the next part of the test, though. | 414 // reset this value before running the next part of the test, though. |
| 415 fake_manager_->GetAndResetCleanedTypes(); | 415 fake_manager_->GetAndResetCleanedTypes(); |
| 416 | 416 |
| 417 // The actual configuration should redownload and apply all the enabled types. | 417 // The actual configuration should redownload and apply all the enabled types. |
| 418 ConfigureDataTypes(enabled_types_, | 418 syncer::ModelTypeSet ready_types = ConfigureDataTypes( |
| 419 Difference(syncer::ModelTypeSet::All(), | 419 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 420 enabled_types_), | 420 syncer::ModelTypeSet()); |
| 421 syncer::ModelTypeSet()); | 421 // Nigori is always downloaded so won't be ready. |
| 422 EXPECT_TRUE(ready_types.Equals(syncer::Difference( |
| 423 syncer::ControlTypes(), |
| 424 syncer::ModelTypeSet(syncer::NIGORI)))); |
| 422 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( | 425 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( |
| 423 Difference(enabled_types_, syncer::ControlTypes()))); | 426 Difference(enabled_types_, syncer::ControlTypes()))); |
| 424 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 427 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 425 enabled_types_).Empty()); | 428 enabled_types_).Empty()); |
| 426 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 429 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 427 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 430 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 428 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 431 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 429 enabled_types_).Empty()); | 432 enabled_types_).Empty()); |
| 430 } | 433 } |
| 431 | 434 |
| 432 TEST_F(SyncBackendHostTest, DisableTypes) { | 435 TEST_F(SyncBackendHostTest, DisableTypes) { |
| 433 // Simulate first time sync. | 436 // Simulate first time sync. |
| 434 InitializeBackend(true); | 437 InitializeBackend(true); |
| 435 fake_manager_->GetAndResetCleanedTypes(); | 438 fake_manager_->GetAndResetCleanedTypes(); |
| 436 ConfigureDataTypes(enabled_types_, | 439 syncer::ModelTypeSet ready_types = ConfigureDataTypes( |
| 437 Difference(syncer::ModelTypeSet::All(), | 440 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 438 enabled_types_), | 441 syncer::ModelTypeSet()); |
| 439 syncer::ModelTypeSet()); | 442 // Nigori is always downloaded so won't be ready. |
| 443 EXPECT_TRUE(ready_types.Equals(syncer::Difference( |
| 444 syncer::ControlTypes(), |
| 445 syncer::ModelTypeSet(syncer::NIGORI)))); |
| 440 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 446 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 441 enabled_types_)); | 447 enabled_types_)); |
| 442 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 448 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 443 enabled_types_).Empty()); | 449 enabled_types_).Empty()); |
| 444 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 450 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 445 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 451 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 446 enabled_types_).Empty()); | 452 enabled_types_).Empty()); |
| 447 | 453 |
| 448 // Then disable two datatypes. | 454 // Then disable two datatypes. |
| 449 syncer::ModelTypeSet disabled_types(syncer::BOOKMARKS, | 455 syncer::ModelTypeSet disabled_types(syncer::BOOKMARKS, |
| 450 syncer::SEARCH_ENGINES); | 456 syncer::SEARCH_ENGINES); |
| 451 syncer::ModelTypeSet old_types = enabled_types_; | 457 syncer::ModelTypeSet old_types = enabled_types_; |
| 452 enabled_types_.RemoveAll(disabled_types); | 458 enabled_types_.RemoveAll(disabled_types); |
| 453 ConfigureDataTypes(enabled_types_, | 459 ready_types = ConfigureDataTypes( |
| 454 Difference(syncer::ModelTypeSet::All(), | 460 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 455 enabled_types_), | 461 syncer::ModelTypeSet()); |
| 456 syncer::ModelTypeSet()); | |
| 457 | 462 |
| 458 // Only those datatypes disabled should be cleaned. Nothing should be | 463 // Only those datatypes disabled should be cleaned. Nothing should be |
| 459 // downloaded. | 464 // downloaded. |
| 465 EXPECT_TRUE(ready_types.Equals(enabled_types_)); |
| 460 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 466 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 461 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 467 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 462 old_types).Equals(disabled_types)); | 468 old_types).Equals(disabled_types)); |
| 463 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 469 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 464 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 470 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 465 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 471 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 466 enabled_types_).Empty()); | 472 enabled_types_).Empty()); |
| 467 } | 473 } |
| 468 | 474 |
| 469 TEST_F(SyncBackendHostTest, AddTypes) { | 475 TEST_F(SyncBackendHostTest, AddTypes) { |
| 470 // Simulate first time sync. | 476 // Simulate first time sync. |
| 471 InitializeBackend(true); | 477 InitializeBackend(true); |
| 472 fake_manager_->GetAndResetCleanedTypes(); | 478 fake_manager_->GetAndResetCleanedTypes(); |
| 473 ConfigureDataTypes(enabled_types_, | 479 syncer::ModelTypeSet ready_types = ConfigureDataTypes( |
| 474 Difference(syncer::ModelTypeSet::All(), | 480 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 475 enabled_types_), | 481 syncer::ModelTypeSet()); |
| 476 syncer::ModelTypeSet()); | 482 // Nigori is always downloaded so won't be ready. |
| 483 EXPECT_TRUE(ready_types.Equals(syncer::Difference( |
| 484 syncer::ControlTypes(), |
| 485 syncer::ModelTypeSet(syncer::NIGORI)))); |
| 477 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 486 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 478 enabled_types_)); | 487 enabled_types_)); |
| 479 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 488 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 480 enabled_types_).Empty()); | 489 enabled_types_).Empty()); |
| 481 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 490 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 482 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 491 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 483 enabled_types_).Empty()); | 492 enabled_types_).Empty()); |
| 484 | 493 |
| 485 // Then add two datatypes. | 494 // Then add two datatypes. |
| 486 syncer::ModelTypeSet new_types(syncer::EXTENSIONS, | 495 syncer::ModelTypeSet new_types(syncer::EXTENSIONS, |
| 487 syncer::APPS); | 496 syncer::APPS); |
| 488 enabled_types_.PutAll(new_types); | 497 enabled_types_.PutAll(new_types); |
| 489 ConfigureDataTypes(enabled_types_, | 498 ready_types = ConfigureDataTypes( |
| 490 Difference(syncer::ModelTypeSet::All(), | 499 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 491 enabled_types_), | 500 syncer::ModelTypeSet()); |
| 492 syncer::ModelTypeSet()); | |
| 493 | 501 |
| 494 // Only those datatypes added should be downloaded (plus nigori). Nothing | 502 // Only those datatypes added should be downloaded (plus nigori). Nothing |
| 495 // should be cleaned aside from the disabled types. | 503 // should be cleaned aside from the disabled types. |
| 496 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 504 new_types.Put(syncer::NIGORI); |
| 497 Union(new_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 505 EXPECT_TRUE( |
| 506 ready_types.Equals(syncer::Difference(enabled_types_, new_types))); |
| 507 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals(new_types)); |
| 498 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 508 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 499 enabled_types_).Empty()); | 509 enabled_types_).Empty()); |
| 500 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 510 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 501 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 511 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 502 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 512 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 503 enabled_types_).Empty()); | 513 enabled_types_).Empty()); |
| 504 } | 514 } |
| 505 | 515 |
| 506 // And and disable in the same configuration. | 516 // And and disable in the same configuration. |
| 507 TEST_F(SyncBackendHostTest, AddDisableTypes) { | 517 TEST_F(SyncBackendHostTest, AddDisableTypes) { |
| 508 // Simulate first time sync. | 518 // Simulate first time sync. |
| 509 InitializeBackend(true); | 519 InitializeBackend(true); |
| 510 fake_manager_->GetAndResetCleanedTypes(); | 520 fake_manager_->GetAndResetCleanedTypes(); |
| 511 ConfigureDataTypes(enabled_types_, | 521 syncer::ModelTypeSet ready_types = ConfigureDataTypes( |
| 512 Difference(syncer::ModelTypeSet::All(), | 522 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 513 enabled_types_), | 523 syncer::ModelTypeSet()); |
| 514 syncer::ModelTypeSet()); | 524 // Nigori is always downloaded so won't be ready. |
| 525 EXPECT_TRUE(ready_types.Equals(syncer::Difference( |
| 526 syncer::ControlTypes(), |
| 527 syncer::ModelTypeSet(syncer::NIGORI)))); |
| 515 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 528 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 516 enabled_types_)); | 529 enabled_types_)); |
| 517 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 530 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 518 enabled_types_).Empty()); | 531 enabled_types_).Empty()); |
| 519 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 532 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 520 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 533 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 521 enabled_types_).Empty()); | 534 enabled_types_).Empty()); |
| 522 | 535 |
| 523 // Then add two datatypes. | 536 // Then add two datatypes. |
| 524 syncer::ModelTypeSet old_types = enabled_types_; | 537 syncer::ModelTypeSet old_types = enabled_types_; |
| 525 syncer::ModelTypeSet disabled_types(syncer::BOOKMARKS, | 538 syncer::ModelTypeSet disabled_types(syncer::BOOKMARKS, |
| 526 syncer::SEARCH_ENGINES); | 539 syncer::SEARCH_ENGINES); |
| 527 syncer::ModelTypeSet new_types(syncer::EXTENSIONS, | 540 syncer::ModelTypeSet new_types(syncer::EXTENSIONS, |
| 528 syncer::APPS); | 541 syncer::APPS); |
| 529 enabled_types_.PutAll(new_types); | 542 enabled_types_.PutAll(new_types); |
| 530 enabled_types_.RemoveAll(disabled_types); | 543 enabled_types_.RemoveAll(disabled_types); |
| 531 ConfigureDataTypes(enabled_types_, | 544 ready_types = ConfigureDataTypes( |
| 532 Difference(syncer::ModelTypeSet::All(), | 545 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 533 enabled_types_), | 546 syncer::ModelTypeSet()); |
| 534 syncer::ModelTypeSet()); | |
| 535 | 547 |
| 536 // Only those datatypes added should be downloaded (plus nigori). Nothing | 548 // Only those datatypes added should be downloaded (plus nigori). Nothing |
| 537 // should be cleaned aside from the disabled types. | 549 // should be cleaned aside from the disabled types. |
| 538 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 550 new_types.Put(syncer::NIGORI); |
| 539 Union(new_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 551 EXPECT_TRUE( |
| 552 ready_types.Equals(syncer::Difference(enabled_types_, new_types))); |
| 553 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals(new_types)); |
| 540 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 554 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 541 old_types).Equals(disabled_types)); | 555 old_types).Equals(disabled_types)); |
| 542 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 556 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 543 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 557 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 544 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 558 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 545 old_types).Equals(disabled_types)); | 559 old_types).Equals(disabled_types)); |
| 546 } | 560 } |
| 547 | 561 |
| 548 // Test restarting the browser to newly supported datatypes. The new datatypes | 562 // Test restarting the browser to newly supported datatypes. The new datatypes |
| 549 // should be downloaded on the configuration after backend initialization. | 563 // should be downloaded on the configuration after backend initialization. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 560 | 574 |
| 561 // Does nothing. | 575 // Does nothing. |
| 562 InitializeBackend(true); | 576 InitializeBackend(true); |
| 563 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 577 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 564 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 578 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 565 old_types).Empty()); | 579 old_types).Empty()); |
| 566 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(old_types)); | 580 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(old_types)); |
| 567 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 581 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 568 enabled_types_).Equals(new_types)); | 582 enabled_types_).Equals(new_types)); |
| 569 | 583 |
| 570 // Downloads and applies the new types. | 584 // Downloads and applies the new types (plus nigori). |
| 571 ConfigureDataTypes(enabled_types_, | 585 syncer::ModelTypeSet ready_types = ConfigureDataTypes( |
| 572 Difference(syncer::ModelTypeSet::All(), | 586 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 573 enabled_types_), | 587 syncer::ModelTypeSet()); |
| 574 syncer::ModelTypeSet()); | 588 |
| 575 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 589 new_types.Put(syncer::NIGORI); |
| 576 Union(new_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 590 EXPECT_TRUE(ready_types.Equals( |
| 591 syncer::Difference(old_types, syncer::ModelTypeSet(syncer::NIGORI)))); |
| 592 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals(new_types)); |
| 577 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 593 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 578 enabled_types_).Empty()); | 594 enabled_types_).Empty()); |
| 579 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 595 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 580 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 596 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 581 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 597 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 582 enabled_types_).Empty()); | 598 enabled_types_).Empty()); |
| 583 } | 599 } |
| 584 | 600 |
| 585 // Test the newly supported types scenario, but with the presence of partial | 601 // Test the newly supported types scenario, but with the presence of partial |
| 586 // types as well. Both partial and newly supported types should be downloaded | 602 // types as well. Both partial and newly supported types should be downloaded |
| (...skipping 19 matching lines...) Expand all Loading... |
| 606 syncer::ModelTypeSet(syncer::NIGORI))); | 622 syncer::ModelTypeSet(syncer::NIGORI))); |
| 607 EXPECT_TRUE(fake_manager_->GetAndResetCleanedTypes().HasAll(partial_types)); | 623 EXPECT_TRUE(fake_manager_->GetAndResetCleanedTypes().HasAll(partial_types)); |
| 608 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( | 624 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals( |
| 609 syncer::Union(full_types, syncer::ModelTypeSet(syncer::NIGORI)))); | 625 syncer::Union(full_types, syncer::ModelTypeSet(syncer::NIGORI)))); |
| 610 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 626 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 611 enabled_types_).Equals(Union(new_types, Difference( | 627 enabled_types_).Equals(Union(new_types, Difference( |
| 612 partial_types, syncer::ModelTypeSet(syncer::NIGORI))))); | 628 partial_types, syncer::ModelTypeSet(syncer::NIGORI))))); |
| 613 | 629 |
| 614 // Downloads and applies the new types and partial types (which includes | 630 // Downloads and applies the new types and partial types (which includes |
| 615 // nigori anyways). | 631 // nigori anyways). |
| 616 ConfigureDataTypes(enabled_types_, | 632 syncer::ModelTypeSet ready_types = ConfigureDataTypes( |
| 617 Difference(syncer::ModelTypeSet::All(), | 633 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 618 enabled_types_), | 634 syncer::ModelTypeSet()); |
| 619 syncer::ModelTypeSet()); | 635 EXPECT_TRUE(ready_types.Equals(full_types)); |
| 620 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( | 636 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Equals( |
| 621 Union(new_types, partial_types))); | 637 Union(new_types, partial_types))); |
| 622 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), | 638 EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), |
| 623 enabled_types_).Empty()); | 639 enabled_types_).Empty()); |
| 624 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); | 640 EXPECT_TRUE(fake_manager_->InitialSyncEndedTypes().Equals(enabled_types_)); |
| 625 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); | 641 EXPECT_TRUE(fake_manager_->GetAndResetEnabledTypes().Equals(enabled_types_)); |
| 626 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 642 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 627 enabled_types_).Empty()); | 643 enabled_types_).Empty()); |
| 628 } | 644 } |
| 629 | 645 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 740 // If bookmarks encounter an error that results in disabling without purging | 756 // If bookmarks encounter an error that results in disabling without purging |
| 741 // (such as when the type is unready), and then is explicitly disabled, the | 757 // (such as when the type is unready), and then is explicitly disabled, the |
| 742 // SyncBackendHost needs to tell the manager to purge the type, even though | 758 // SyncBackendHost needs to tell the manager to purge the type, even though |
| 743 // it's already disabled (crbug.com/386778). | 759 // it's already disabled (crbug.com/386778). |
| 744 TEST_F(SyncBackendHostTest, DisableThenPurgeType) { | 760 TEST_F(SyncBackendHostTest, DisableThenPurgeType) { |
| 745 syncer::ModelTypeSet error_types(syncer::BOOKMARKS); | 761 syncer::ModelTypeSet error_types(syncer::BOOKMARKS); |
| 746 | 762 |
| 747 InitializeBackend(true); | 763 InitializeBackend(true); |
| 748 | 764 |
| 749 // First enable the types. | 765 // First enable the types. |
| 750 ConfigureDataTypes(enabled_types_, | 766 syncer::ModelTypeSet ready_types = ConfigureDataTypes( |
| 751 Difference(syncer::ModelTypeSet::All(), | 767 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 752 enabled_types_), | 768 syncer::ModelTypeSet()); |
| 753 syncer::ModelTypeSet()); | 769 |
| 770 // Nigori is always downloaded so won't be ready. |
| 771 EXPECT_TRUE(ready_types.Equals(syncer::Difference( |
| 772 syncer::ControlTypes(), |
| 773 syncer::ModelTypeSet(syncer::NIGORI)))); |
| 754 | 774 |
| 755 // Then mark the error types as unready (disables without purging). | 775 // Then mark the error types as unready (disables without purging). |
| 756 ConfigureDataTypes(enabled_types_, | 776 ready_types = ConfigureDataTypes( |
| 757 Difference(syncer::ModelTypeSet::All(), | 777 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 758 enabled_types_), | 778 error_types); |
| 759 error_types); | 779 EXPECT_TRUE( |
| 780 ready_types.Equals(syncer::Difference(enabled_types_, error_types))); |
| 760 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 781 EXPECT_TRUE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 761 error_types).Empty()); | 782 error_types).Empty()); |
| 762 | 783 |
| 763 // Lastly explicitly disable the error types, which should result in a purge. | 784 // Lastly explicitly disable the error types, which should result in a purge. |
| 764 enabled_types_.RemoveAll(error_types); | 785 enabled_types_.RemoveAll(error_types); |
| 765 ConfigureDataTypes(enabled_types_, | 786 ready_types = ConfigureDataTypes( |
| 766 Difference(syncer::ModelTypeSet::All(), | 787 enabled_types_, Difference(syncer::ModelTypeSet::All(), enabled_types_), |
| 767 enabled_types_), | 788 syncer::ModelTypeSet()); |
| 768 syncer::ModelTypeSet()); | 789 EXPECT_TRUE( |
| 790 ready_types.Equals(syncer::Difference(enabled_types_, error_types))); |
| 769 EXPECT_FALSE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 791 EXPECT_FALSE(fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 770 error_types).Empty()); | 792 error_types).Empty()); |
| 771 } | 793 } |
| 772 | 794 |
| 773 } // namespace | 795 } // namespace |
| 774 | 796 |
| 775 } // namespace browser_sync | 797 } // namespace browser_sync |
| OLD | NEW |