| 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 17 matching lines...) Expand all Loading... |
| 28 #include "components/sync/device_info/device_info.h" | 28 #include "components/sync/device_info/device_info.h" |
| 29 #include "components/sync/driver/fake_sync_client.h" | 29 #include "components/sync/driver/fake_sync_client.h" |
| 30 #include "components/sync/engine/cycle/commit_counters.h" | 30 #include "components/sync/engine/cycle/commit_counters.h" |
| 31 #include "components/sync/engine/cycle/status_counters.h" | 31 #include "components/sync/engine/cycle/status_counters.h" |
| 32 #include "components/sync/engine/cycle/update_counters.h" | 32 #include "components/sync/engine/cycle/update_counters.h" |
| 33 #include "components/sync/engine/fake_sync_manager.h" | 33 #include "components/sync/engine/fake_sync_manager.h" |
| 34 #include "components/sync/engine/model_safe_worker.h" | 34 #include "components/sync/engine/model_safe_worker.h" |
| 35 #include "components/sync/engine/net/http_bridge_network_resources.h" | 35 #include "components/sync/engine/net/http_bridge_network_resources.h" |
| 36 #include "components/sync/engine/net/network_resources.h" | 36 #include "components/sync/engine/net/network_resources.h" |
| 37 #include "components/sync/engine/passive_model_worker.h" | 37 #include "components/sync/engine/passive_model_worker.h" |
| 38 #include "components/sync/engine/sync_engine_host.h" | 38 #include "components/sync/engine/sync_engine_host_stub.h" |
| 39 #include "components/sync/engine/sync_manager_factory.h" | 39 #include "components/sync/engine/sync_manager_factory.h" |
| 40 #include "components/sync/test/callback_counter.h" | 40 #include "components/sync/test/callback_counter.h" |
| 41 #include "components/sync_preferences/pref_service_syncable.h" | 41 #include "components/sync_preferences/pref_service_syncable.h" |
| 42 #include "components/sync_preferences/testing_pref_service_syncable.h" | 42 #include "components/sync_preferences/testing_pref_service_syncable.h" |
| 43 #include "google/cacheinvalidation/include/types.h" | 43 #include "google/cacheinvalidation/include/types.h" |
| 44 #include "google_apis/gaia/gaia_constants.h" | 44 #include "google_apis/gaia/gaia_constants.h" |
| 45 #include "net/url_request/test_url_fetcher_factory.h" | 45 #include "net/url_request/test_url_fetcher_factory.h" |
| 46 #include "net/url_request/url_request_context_getter.h" | 46 #include "net/url_request/url_request_context_getter.h" |
| 47 #include "testing/gmock/include/gmock/gmock.h" | 47 #include "testing/gmock/include/gmock/gmock.h" |
| 48 #include "testing/gtest/include/gtest/gtest.h" | 48 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 60 FILE_PATH_LITERAL("sync-test"); | 60 FILE_PATH_LITERAL("sync-test"); |
| 61 | 61 |
| 62 ACTION_P(Signal, event) { | 62 ACTION_P(Signal, event) { |
| 63 event->Signal(); | 63 event->Signal(); |
| 64 } | 64 } |
| 65 | 65 |
| 66 void EmptyNetworkTimeUpdate(const base::Time&, | 66 void EmptyNetworkTimeUpdate(const base::Time&, |
| 67 const base::TimeDelta&, | 67 const base::TimeDelta&, |
| 68 const base::TimeDelta&) {} | 68 const base::TimeDelta&) {} |
| 69 | 69 |
| 70 void QuitMessageLoop() { | 70 class TestSyncEngineHost : public SyncEngineHostStub { |
| 71 base::MessageLoop::current()->QuitWhenIdle(); | 71 public: |
| 72 } | 72 explicit TestSyncEngineHost( |
| 73 base::Callback<void(ModelTypeSet)> set_engine_types) |
| 74 : set_engine_types_(set_engine_types) {} |
| 73 | 75 |
| 74 class MockSyncEngineHost : public SyncEngineHost { | 76 void OnEngineInitialized(ModelTypeSet initial_types, |
| 75 public: | 77 const WeakHandle<JsBackend>&, |
| 76 virtual ~MockSyncEngineHost() {} | 78 const WeakHandle<DataTypeDebugInfoListener>&, |
| 79 const std::string&, |
| 80 bool success) override { |
| 81 EXPECT_EQ(expect_success_, success); |
| 82 set_engine_types_.Run(initial_types); |
| 83 base::MessageLoop::current()->QuitWhenIdle(); |
| 84 } |
| 77 | 85 |
| 78 MOCK_METHOD5(OnEngineInitialized, | 86 void SetExpectSuccess(bool expect_success) { |
| 79 void(ModelTypeSet initial_types, | 87 expect_success_ = expect_success; |
| 80 const WeakHandle<JsBackend>&, | 88 } |
| 81 const WeakHandle<DataTypeDebugInfoListener>&, | 89 |
| 82 const std::string&, | 90 private: |
| 83 bool)); | 91 base::Callback<void(ModelTypeSet)> set_engine_types_; |
| 84 MOCK_METHOD0(OnSyncCycleCompleted, void()); | 92 bool expect_success_ = false; |
| 85 MOCK_METHOD1(OnConnectionStatusChange, void(ConnectionStatus status)); | |
| 86 MOCK_METHOD0(OnClearServerDataSucceeded, void()); | |
| 87 MOCK_METHOD0(OnClearServerDataFailed, void()); | |
| 88 MOCK_METHOD2(OnPassphraseRequired, | |
| 89 void(PassphraseRequiredReason, const sync_pb::EncryptedData&)); | |
| 90 MOCK_METHOD0(OnPassphraseAccepted, void()); | |
| 91 MOCK_METHOD2(OnEncryptedTypesChanged, void(ModelTypeSet, bool)); | |
| 92 MOCK_METHOD0(OnEncryptionComplete, void()); | |
| 93 MOCK_METHOD1(OnMigrationNeededForTypes, void(ModelTypeSet)); | |
| 94 MOCK_METHOD1(OnProtocolEvent, void(const ProtocolEvent&)); | |
| 95 MOCK_METHOD2(OnDirectoryTypeCommitCounterUpdated, | |
| 96 void(ModelType, const CommitCounters&)); | |
| 97 MOCK_METHOD2(OnDirectoryTypeUpdateCounterUpdated, | |
| 98 void(ModelType, const UpdateCounters&)); | |
| 99 MOCK_METHOD2(OnDatatypeStatusCounterUpdated, | |
| 100 void(ModelType, const StatusCounters&)); | |
| 101 MOCK_METHOD1(OnExperimentsChanged, void(const Experiments&)); | |
| 102 MOCK_METHOD1(OnActionableError, void(const SyncProtocolError& sync_error)); | |
| 103 MOCK_METHOD0(OnSyncConfigureRetry, void()); | |
| 104 MOCK_METHOD1(OnLocalSetPassphraseEncryption, | |
| 105 void(const SyncEncryptionHandler::NigoriState& nigori_state)); | |
| 106 }; | 93 }; |
| 107 | 94 |
| 108 class FakeSyncManagerFactory : public SyncManagerFactory { | 95 class FakeSyncManagerFactory : public SyncManagerFactory { |
| 109 public: | 96 public: |
| 110 explicit FakeSyncManagerFactory(FakeSyncManager** fake_manager) | 97 explicit FakeSyncManagerFactory(FakeSyncManager** fake_manager) |
| 111 : fake_manager_(fake_manager) { | 98 : fake_manager_(fake_manager) { |
| 112 *fake_manager_ = nullptr; | 99 *fake_manager_ = nullptr; |
| 113 } | 100 } |
| 114 ~FakeSyncManagerFactory() override {} | 101 ~FakeSyncManagerFactory() override {} |
| 115 | 102 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 return new PassiveModelWorker(); | 137 return new PassiveModelWorker(); |
| 151 default: | 138 default: |
| 152 return nullptr; | 139 return nullptr; |
| 153 } | 140 } |
| 154 } | 141 } |
| 155 }; | 142 }; |
| 156 | 143 |
| 157 class SyncEngineTest : public testing::Test { | 144 class SyncEngineTest : public testing::Test { |
| 158 protected: | 145 protected: |
| 159 SyncEngineTest() | 146 SyncEngineTest() |
| 160 : sync_thread_("SyncThreadForTest"), fake_manager_(nullptr) {} | 147 : sync_thread_("SyncThreadForTest"), |
| 148 host_(base::Bind(&SyncEngineTest::SetEngineTypes, |
| 149 base::Unretained(this))), |
| 150 fake_manager_(nullptr) {} |
| 161 | 151 |
| 162 ~SyncEngineTest() override {} | 152 ~SyncEngineTest() override {} |
| 163 | 153 |
| 164 void SetUp() override { | 154 void SetUp() override { |
| 165 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 155 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 166 | 156 |
| 167 SyncPrefs::RegisterProfilePrefs(pref_service_.registry()); | 157 SyncPrefs::RegisterProfilePrefs(pref_service_.registry()); |
| 168 | 158 |
| 169 sync_prefs_ = base::MakeUnique<SyncPrefs>(&pref_service_); | 159 sync_prefs_ = base::MakeUnique<SyncPrefs>(&pref_service_); |
| 170 sync_thread_.StartAndWaitForTesting(); | 160 sync_thread_.StartAndWaitForTesting(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 199 backend_->Shutdown(STOP_SYNC); | 189 backend_->Shutdown(STOP_SYNC); |
| 200 } | 190 } |
| 201 backend_.reset(); | 191 backend_.reset(); |
| 202 sync_prefs_.reset(); | 192 sync_prefs_.reset(); |
| 203 // Pump messages posted by the sync thread. | 193 // Pump messages posted by the sync thread. |
| 204 base::RunLoop().RunUntilIdle(); | 194 base::RunLoop().RunUntilIdle(); |
| 205 } | 195 } |
| 206 | 196 |
| 207 // Synchronously initializes the backend. | 197 // Synchronously initializes the backend. |
| 208 void InitializeBackend(bool expect_success) { | 198 void InitializeBackend(bool expect_success) { |
| 209 EXPECT_CALL(mock_host_, OnEngineInitialized(_, _, _, _, expect_success)) | 199 host_.SetExpectSuccess(expect_success); |
| 210 .WillOnce(InvokeWithoutArgs(QuitMessageLoop)); | |
| 211 SyncEngine::HttpPostProviderFactoryGetter | 200 SyncEngine::HttpPostProviderFactoryGetter |
| 212 http_post_provider_factory_getter = | 201 http_post_provider_factory_getter = |
| 213 base::Bind(&NetworkResources::GetHttpPostProviderFactory, | 202 base::Bind(&NetworkResources::GetHttpPostProviderFactory, |
| 214 base::Unretained(network_resources_.get()), nullptr, | 203 base::Unretained(network_resources_.get()), nullptr, |
| 215 base::Bind(&EmptyNetworkTimeUpdate)); | 204 base::Bind(&EmptyNetworkTimeUpdate)); |
| 216 | 205 |
| 217 SyncEngine::InitParams params; | 206 SyncEngine::InitParams params; |
| 218 params.sync_task_runner = sync_thread_.task_runner(); | 207 params.sync_task_runner = sync_thread_.task_runner(); |
| 219 params.host = &mock_host_; | 208 params.host = &host_; |
| 220 params.registrar = base::MakeUnique<SyncBackendRegistrar>( | 209 params.registrar = base::MakeUnique<SyncBackendRegistrar>( |
| 221 std::string(), base::Bind(&SyncClient::CreateModelWorkerForGroup, | 210 std::string(), base::Bind(&SyncClient::CreateModelWorkerForGroup, |
| 222 base::Unretained(&sync_client_))); | 211 base::Unretained(&sync_client_))); |
| 223 params.http_factory_getter = http_post_provider_factory_getter; | 212 params.http_factory_getter = http_post_provider_factory_getter; |
| 224 params.credentials = credentials_; | 213 params.credentials = credentials_; |
| 225 params.sync_manager_factory = std::move(fake_manager_factory_); | 214 params.sync_manager_factory = std::move(fake_manager_factory_); |
| 226 params.delete_sync_data_folder = true; | 215 params.delete_sync_data_folder = true; |
| 227 params.unrecoverable_error_handler = | 216 params.unrecoverable_error_handler = |
| 228 MakeWeakHandle(test_unrecoverable_error_handler_.GetWeakPtr()), | 217 MakeWeakHandle(test_unrecoverable_error_handler_.GetWeakPtr()), |
| 229 params.saved_nigori_state = std::move(saved_nigori_state_); | 218 params.saved_nigori_state = std::move(saved_nigori_state_); |
| 230 sync_prefs_->GetInvalidationVersions(¶ms.invalidation_versions); | 219 sync_prefs_->GetInvalidationVersions(¶ms.invalidation_versions); |
| 231 | 220 |
| 232 backend_->Initialize(std::move(params)); | 221 backend_->Initialize(std::move(params)); |
| 233 | 222 |
| 234 base::RunLoop run_loop; | 223 PumpSyncThread(); |
| 235 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | |
| 236 FROM_HERE, run_loop.QuitClosure(), TestTimeouts::action_timeout()); | |
| 237 run_loop.Run(); | |
| 238 // |fake_manager_factory_|'s fake_manager() is set on the sync | 224 // |fake_manager_factory_|'s fake_manager() is set on the sync |
| 239 // thread, but we can rely on the message loop barriers to | 225 // thread, but we can rely on the message loop barriers to |
| 240 // guarantee that we see the updated value. | 226 // guarantee that we see the updated value. |
| 241 DCHECK(fake_manager_); | 227 DCHECK(fake_manager_); |
| 242 } | 228 } |
| 243 | 229 |
| 244 // Returns DataTypeConfigStateMap with all |enabled_types_| in | 230 // Synchronously configures the backend's datatypes. |
| 245 // CONFIGURE_ACTIVE state and all remaining types DISABLED. | 231 ModelTypeSet ConfigureDataTypes() { |
| 246 ModelTypeConfigurer::DataTypeConfigStateMap ConfigStateMapForEnabledTypes() { | 232 return ConfigureDataTypesWithUnready(ModelTypeSet()); |
| 247 ModelTypeConfigurer::DataTypeConfigStateMap config_state_map; | |
| 248 ModelTypeConfigurer::SetDataTypesState( | |
| 249 ModelTypeConfigurer::CONFIGURE_ACTIVE, enabled_types_, | |
| 250 &config_state_map); | |
| 251 ModelTypeConfigurer::SetDataTypesState( | |
| 252 ModelTypeConfigurer::DISABLED, | |
| 253 Difference(ModelTypeSet::All(), enabled_types_), &config_state_map); | |
| 254 return config_state_map; | |
| 255 } | 233 } |
| 256 | 234 |
| 257 // Synchronously configures the backend's datatypes. | 235 ModelTypeSet ConfigureDataTypesWithUnready(ModelTypeSet unready_types) { |
| 258 ModelTypeSet ConfigureDataTypes( | 236 ModelTypeSet disabled_types = |
| 259 const ModelTypeConfigurer::DataTypeConfigStateMap& config_state_map) { | 237 Difference(ModelTypeSet::All(), enabled_types_); |
| 260 ModelTypeSet ready_types = backend_->ConfigureDataTypes( | 238 |
| 261 CONFIGURE_REASON_RECONFIGURATION, config_state_map, | 239 ModelTypeConfigurer::ConfigureParams params; |
| 262 base::Bind(&SyncEngineTest::DownloadReady, base::Unretained(this)), | 240 params.reason = CONFIGURE_REASON_RECONFIGURATION; |
| 263 base::Bind(&SyncEngineTest::OnDownloadRetry, base::Unretained(this))); | 241 params.enabled_types = Difference(enabled_types_, unready_types); |
| 264 base::RunLoop run_loop; | 242 params.disabled_types = Union(disabled_types, unready_types); |
| 265 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 243 params.to_download = Difference(params.enabled_types, engine_types_); |
| 266 FROM_HERE, run_loop.QuitClosure(), TestTimeouts::action_timeout()); | 244 if (!params.to_download.Empty()) { |
| 267 run_loop.Run(); | 245 params.to_download.Put(NIGORI); |
| 246 } |
| 247 params.to_purge = Intersection(engine_types_, disabled_types); |
| 248 params.ready_task = |
| 249 base::Bind(&SyncEngineTest::DownloadReady, base::Unretained(this)); |
| 250 params.retry_callback = |
| 251 base::Bind(&SyncEngineTest::OnDownloadRetry, base::Unretained(this)); |
| 252 |
| 253 ModelTypeSet ready_types = |
| 254 Difference(params.enabled_types, params.to_download); |
| 255 backend_->ConfigureDataTypes(std::move(params)); |
| 256 PumpSyncThread(); |
| 257 |
| 268 return ready_types; | 258 return ready_types; |
| 269 } | 259 } |
| 270 | 260 |
| 271 protected: | 261 protected: |
| 272 void DownloadReady(ModelTypeSet succeeded_types, ModelTypeSet failed_types) { | 262 void DownloadReady(ModelTypeSet succeeded_types, ModelTypeSet failed_types) { |
| 263 engine_types_.PutAll(succeeded_types); |
| 273 base::MessageLoop::current()->QuitWhenIdle(); | 264 base::MessageLoop::current()->QuitWhenIdle(); |
| 274 } | 265 } |
| 275 | 266 |
| 276 void OnDownloadRetry() { NOTIMPLEMENTED(); } | 267 void OnDownloadRetry() { NOTIMPLEMENTED(); } |
| 277 | 268 |
| 269 void SetEngineTypes(ModelTypeSet engine_types) { |
| 270 EXPECT_TRUE(engine_types_.Empty()); |
| 271 engine_types_ = engine_types; |
| 272 } |
| 273 |
| 274 void PumpSyncThread() { |
| 275 base::RunLoop run_loop; |
| 276 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 277 FROM_HERE, run_loop.QuitClosure(), TestTimeouts::action_timeout()); |
| 278 run_loop.Run(); |
| 279 } |
| 280 |
| 278 base::MessageLoop message_loop_; | 281 base::MessageLoop message_loop_; |
| 279 base::ScopedTempDir temp_dir_; | 282 base::ScopedTempDir temp_dir_; |
| 280 sync_preferences::TestingPrefServiceSyncable pref_service_; | 283 sync_preferences::TestingPrefServiceSyncable pref_service_; |
| 281 base::Thread sync_thread_; | 284 base::Thread sync_thread_; |
| 282 StrictMock<MockSyncEngineHost> mock_host_; | 285 TestSyncEngineHost host_; |
| 283 SyncCredentials credentials_; | 286 SyncCredentials credentials_; |
| 284 BackendSyncClient sync_client_; | 287 BackendSyncClient sync_client_; |
| 285 TestUnrecoverableErrorHandler test_unrecoverable_error_handler_; | 288 TestUnrecoverableErrorHandler test_unrecoverable_error_handler_; |
| 286 std::unique_ptr<SyncPrefs> sync_prefs_; | 289 std::unique_ptr<SyncPrefs> sync_prefs_; |
| 287 std::unique_ptr<SyncBackendHostImpl> backend_; | 290 std::unique_ptr<SyncBackendHostImpl> backend_; |
| 288 std::unique_ptr<FakeSyncManagerFactory> fake_manager_factory_; | 291 std::unique_ptr<FakeSyncManagerFactory> fake_manager_factory_; |
| 289 FakeSyncManager* fake_manager_; | 292 FakeSyncManager* fake_manager_; |
| 293 ModelTypeSet engine_types_; |
| 290 ModelTypeSet enabled_types_; | 294 ModelTypeSet enabled_types_; |
| 291 std::unique_ptr<NetworkResources> network_resources_; | 295 std::unique_ptr<NetworkResources> network_resources_; |
| 292 std::unique_ptr<SyncEncryptionHandler::NigoriState> saved_nigori_state_; | 296 std::unique_ptr<SyncEncryptionHandler::NigoriState> saved_nigori_state_; |
| 293 }; | 297 }; |
| 294 | 298 |
| 295 // Test basic initialization with no initial types (first time initialization). | 299 // Test basic initialization with no initial types (first time initialization). |
| 296 // Only the nigori should be configured. | 300 // Only the nigori should be configured. |
| 297 TEST_F(SyncEngineTest, InitShutdown) { | 301 TEST_F(SyncEngineTest, InitShutdown) { |
| 298 InitializeBackend(true); | 302 InitializeBackend(true); |
| 299 EXPECT_EQ(ControlTypes(), fake_manager_->GetAndResetDownloadedTypes()); | 303 EXPECT_EQ(ControlTypes(), fake_manager_->GetAndResetDownloadedTypes()); |
| 300 EXPECT_EQ(ControlTypes(), fake_manager_->InitialSyncEndedTypes()); | 304 EXPECT_EQ(ControlTypes(), fake_manager_->InitialSyncEndedTypes()); |
| 301 EXPECT_TRUE( | 305 EXPECT_TRUE( |
| 302 fake_manager_->GetTypesWithEmptyProgressMarkerToken(ControlTypes()) | 306 fake_manager_->GetTypesWithEmptyProgressMarkerToken(ControlTypes()) |
| 303 .Empty()); | 307 .Empty()); |
| 304 } | 308 } |
| 305 | 309 |
| 306 // Test first time sync scenario. All types should be properly configured. | 310 // Test first time sync scenario. All types should be properly configured. |
| 307 | 311 |
| 308 TEST_F(SyncEngineTest, FirstTimeSync) { | 312 TEST_F(SyncEngineTest, FirstTimeSync) { |
| 309 InitializeBackend(true); | 313 InitializeBackend(true); |
| 310 EXPECT_EQ(ControlTypes(), fake_manager_->GetAndResetDownloadedTypes()); | 314 EXPECT_EQ(ControlTypes(), fake_manager_->GetAndResetDownloadedTypes()); |
| 311 EXPECT_EQ(ControlTypes(), fake_manager_->InitialSyncEndedTypes()); | 315 EXPECT_EQ(ControlTypes(), fake_manager_->InitialSyncEndedTypes()); |
| 312 EXPECT_TRUE( | 316 EXPECT_TRUE( |
| 313 fake_manager_->GetTypesWithEmptyProgressMarkerToken(ControlTypes()) | 317 fake_manager_->GetTypesWithEmptyProgressMarkerToken(ControlTypes()) |
| 314 .Empty()); | 318 .Empty()); |
| 315 | 319 |
| 316 ModelTypeSet ready_types = | 320 ModelTypeSet ready_types = ConfigureDataTypes(); |
| 317 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | |
| 318 // Nigori is always downloaded so won't be ready. | 321 // Nigori is always downloaded so won't be ready. |
| 319 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 322 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 320 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( | 323 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( |
| 321 Difference(enabled_types_, ControlTypes()))); | 324 Difference(enabled_types_, ControlTypes()))); |
| 322 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 325 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 323 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 326 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 324 EXPECT_TRUE( | 327 EXPECT_TRUE( |
| 325 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 328 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 326 .Empty()); | 329 .Empty()); |
| 327 } | 330 } |
| 328 | 331 |
| 329 // 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 |
| 330 // downloaded or cleaned. | 333 // downloaded or cleaned. |
| 331 TEST_F(SyncEngineTest, Restart) { | 334 TEST_F(SyncEngineTest, Restart) { |
| 332 sync_prefs_->SetFirstSetupComplete(); | 335 sync_prefs_->SetFirstSetupComplete(); |
| 333 ModelTypeSet all_but_nigori = enabled_types_; | 336 ModelTypeSet all_but_nigori = enabled_types_; |
| 334 fake_manager_factory_->set_progress_marker_types(enabled_types_); | 337 fake_manager_factory_->set_progress_marker_types(enabled_types_); |
| 335 fake_manager_factory_->set_initial_sync_ended_types(enabled_types_); | 338 fake_manager_factory_->set_initial_sync_ended_types(enabled_types_); |
| 336 InitializeBackend(true); | 339 InitializeBackend(true); |
| 337 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 340 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 338 EXPECT_TRUE( | 341 EXPECT_TRUE( |
| 339 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) | 342 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 340 .Empty()); | 343 .Empty()); |
| 341 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 344 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 342 EXPECT_TRUE( | 345 EXPECT_TRUE( |
| 343 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 346 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 344 .Empty()); | 347 .Empty()); |
| 345 | 348 |
| 346 ModelTypeSet ready_types = | 349 ModelTypeSet ready_types = ConfigureDataTypes(); |
| 347 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | |
| 348 EXPECT_EQ(enabled_types_, ready_types); | 350 EXPECT_EQ(enabled_types_, ready_types); |
| 349 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 351 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 350 EXPECT_TRUE( | 352 EXPECT_TRUE( |
| 351 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) | 353 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 352 .Empty()); | 354 .Empty()); |
| 353 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 355 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 354 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 356 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 355 EXPECT_TRUE( | 357 EXPECT_TRUE( |
| 356 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 358 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 357 .Empty()); | 359 .Empty()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 373 InitializeBackend(true); | 375 InitializeBackend(true); |
| 374 EXPECT_EQ(ModelTypeSet(NIGORI), fake_manager_->GetAndResetDownloadedTypes()); | 376 EXPECT_EQ(ModelTypeSet(NIGORI), fake_manager_->GetAndResetDownloadedTypes()); |
| 375 EXPECT_TRUE(fake_manager_->GetAndResetPurgedTypes().HasAll(partial_types)); | 377 EXPECT_TRUE(fake_manager_->GetAndResetPurgedTypes().HasAll(partial_types)); |
| 376 EXPECT_EQ(Union(full_types, ModelTypeSet(NIGORI)), | 378 EXPECT_EQ(Union(full_types, ModelTypeSet(NIGORI)), |
| 377 fake_manager_->InitialSyncEndedTypes()); | 379 fake_manager_->InitialSyncEndedTypes()); |
| 378 EXPECT_EQ( | 380 EXPECT_EQ( |
| 379 Difference(partial_types, ModelTypeSet(NIGORI)), | 381 Difference(partial_types, ModelTypeSet(NIGORI)), |
| 380 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); | 382 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); |
| 381 | 383 |
| 382 // Now do the actual configuration, which should download and apply bookmarks. | 384 // Now do the actual configuration, which should download and apply bookmarks. |
| 383 ModelTypeSet ready_types = | 385 ModelTypeSet ready_types = ConfigureDataTypes(); |
| 384 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | |
| 385 EXPECT_EQ(full_types, ready_types); | 386 EXPECT_EQ(full_types, ready_types); |
| 386 EXPECT_TRUE( | 387 EXPECT_TRUE( |
| 387 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) | 388 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 388 .Empty()); | 389 .Empty()); |
| 389 EXPECT_EQ(partial_types, fake_manager_->GetAndResetDownloadedTypes()); | 390 EXPECT_EQ(partial_types, fake_manager_->GetAndResetDownloadedTypes()); |
| 390 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 391 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 391 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 392 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 392 EXPECT_TRUE( | 393 EXPECT_TRUE( |
| 393 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 394 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 394 .Empty()); | 395 .Empty()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 407 fake_manager_->InitialSyncEndedTypes()); | 408 fake_manager_->InitialSyncEndedTypes()); |
| 408 EXPECT_EQ( | 409 EXPECT_EQ( |
| 409 Difference(enabled_types_, ControlTypes()), | 410 Difference(enabled_types_, ControlTypes()), |
| 410 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); | 411 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); |
| 411 | 412 |
| 412 // 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 |
| 413 // 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. |
| 414 fake_manager_->GetAndResetPurgedTypes(); | 415 fake_manager_->GetAndResetPurgedTypes(); |
| 415 | 416 |
| 416 // The actual configuration should redownload and apply all the enabled types. | 417 // The actual configuration should redownload and apply all the enabled types. |
| 417 ModelTypeSet ready_types = | 418 ModelTypeSet ready_types = ConfigureDataTypes(); |
| 418 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | |
| 419 // Nigori is always downloaded so won't be ready. | 419 // Nigori is always downloaded so won't be ready. |
| 420 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 420 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 421 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( | 421 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll( |
| 422 Difference(enabled_types_, ControlTypes()))); | 422 Difference(enabled_types_, ControlTypes()))); |
| 423 EXPECT_TRUE( | 423 EXPECT_TRUE( |
| 424 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) | 424 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 425 .Empty()); | 425 .Empty()); |
| 426 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 426 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 427 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 427 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 428 EXPECT_TRUE( | 428 EXPECT_TRUE( |
| 429 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 429 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 430 .Empty()); | 430 .Empty()); |
| 431 } | 431 } |
| 432 | 432 |
| 433 TEST_F(SyncEngineTest, DisableTypes) { | 433 TEST_F(SyncEngineTest, DisableTypes) { |
| 434 // Simulate first time sync. | 434 // Simulate first time sync. |
| 435 InitializeBackend(true); | 435 InitializeBackend(true); |
| 436 fake_manager_->GetAndResetPurgedTypes(); | 436 fake_manager_->GetAndResetPurgedTypes(); |
| 437 ModelTypeSet ready_types = | 437 ModelTypeSet ready_types = ConfigureDataTypes(); |
| 438 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | |
| 439 // Nigori is always downloaded so won't be ready. | 438 // Nigori is always downloaded so won't be ready. |
| 440 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 439 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 441 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); | 440 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); |
| 442 EXPECT_TRUE( | 441 EXPECT_TRUE( |
| 443 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) | 442 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 444 .Empty()); | 443 .Empty()); |
| 445 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 444 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 446 EXPECT_TRUE( | 445 EXPECT_TRUE( |
| 447 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 446 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 448 .Empty()); | 447 .Empty()); |
| 449 | 448 |
| 450 // Then disable two datatypes. | 449 // Then disable two datatypes. |
| 451 ModelTypeSet disabled_types(BOOKMARKS, SEARCH_ENGINES); | 450 ModelTypeSet disabled_types(BOOKMARKS, SEARCH_ENGINES); |
| 452 ModelTypeSet old_types = enabled_types_; | 451 ModelTypeSet old_types = enabled_types_; |
| 453 enabled_types_.RemoveAll(disabled_types); | 452 enabled_types_.RemoveAll(disabled_types); |
| 454 ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | 453 ready_types = ConfigureDataTypes(); |
| 455 | 454 |
| 456 // Only those datatypes disabled should be cleaned. Nothing should be | 455 // Only those datatypes disabled should be cleaned. Nothing should be |
| 457 // downloaded. | 456 // downloaded. |
| 458 EXPECT_EQ(enabled_types_, ready_types); | 457 EXPECT_EQ(enabled_types_, ready_types); |
| 459 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 458 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 460 EXPECT_EQ(disabled_types, | 459 EXPECT_EQ(disabled_types, |
| 461 Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types)); | 460 Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types)); |
| 462 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 461 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 463 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 462 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 464 EXPECT_TRUE( | 463 EXPECT_TRUE( |
| 465 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 464 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 466 .Empty()); | 465 .Empty()); |
| 467 } | 466 } |
| 468 | 467 |
| 469 TEST_F(SyncEngineTest, AddTypes) { | 468 TEST_F(SyncEngineTest, AddTypes) { |
| 470 // Simulate first time sync. | 469 // Simulate first time sync. |
| 471 InitializeBackend(true); | 470 InitializeBackend(true); |
| 472 fake_manager_->GetAndResetPurgedTypes(); | 471 fake_manager_->GetAndResetPurgedTypes(); |
| 473 ModelTypeSet ready_types = | 472 ModelTypeSet ready_types = ConfigureDataTypes(); |
| 474 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | |
| 475 // Nigori is always downloaded so won't be ready. | 473 // Nigori is always downloaded so won't be ready. |
| 476 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 474 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 477 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); | 475 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); |
| 478 EXPECT_TRUE( | 476 EXPECT_TRUE( |
| 479 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) | 477 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 480 .Empty()); | 478 .Empty()); |
| 481 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 479 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 482 EXPECT_TRUE( | 480 EXPECT_TRUE( |
| 483 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 481 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 484 .Empty()); | 482 .Empty()); |
| 485 | 483 |
| 486 // Then add two datatypes. | 484 // Then add two datatypes. |
| 487 ModelTypeSet new_types(EXTENSIONS, APPS); | 485 ModelTypeSet new_types(EXTENSIONS, APPS); |
| 488 enabled_types_.PutAll(new_types); | 486 enabled_types_.PutAll(new_types); |
| 489 ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | 487 ready_types = ConfigureDataTypes(); |
| 490 | 488 |
| 491 // Only those datatypes added should be downloaded (plus nigori). Nothing | 489 // Only those datatypes added should be downloaded (plus nigori). Nothing |
| 492 // should be cleaned aside from the disabled types. | 490 // should be cleaned aside from the disabled types. |
| 493 new_types.Put(NIGORI); | 491 new_types.Put(NIGORI); |
| 494 EXPECT_EQ(Difference(enabled_types_, new_types), ready_types); | 492 EXPECT_EQ(Difference(enabled_types_, new_types), ready_types); |
| 495 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); | 493 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); |
| 496 EXPECT_TRUE( | 494 EXPECT_TRUE( |
| 497 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) | 495 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 498 .Empty()); | 496 .Empty()); |
| 499 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 497 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 500 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 498 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 501 EXPECT_TRUE( | 499 EXPECT_TRUE( |
| 502 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 500 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 503 .Empty()); | 501 .Empty()); |
| 504 } | 502 } |
| 505 | 503 |
| 506 // And and disable in the same configuration. | 504 // And and disable in the same configuration. |
| 507 TEST_F(SyncEngineTest, AddDisableTypes) { | 505 TEST_F(SyncEngineTest, AddDisableTypes) { |
| 508 // Simulate first time sync. | 506 // Simulate first time sync. |
| 509 InitializeBackend(true); | 507 InitializeBackend(true); |
| 510 fake_manager_->GetAndResetPurgedTypes(); | 508 fake_manager_->GetAndResetPurgedTypes(); |
| 511 ModelTypeSet ready_types = | 509 ModelTypeSet ready_types = ConfigureDataTypes(); |
| 512 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | |
| 513 // Nigori is always downloaded so won't be ready. | 510 // Nigori is always downloaded so won't be ready. |
| 514 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 511 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 515 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); | 512 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes()); |
| 516 EXPECT_TRUE( | 513 EXPECT_TRUE( |
| 517 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) | 514 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 518 .Empty()); | 515 .Empty()); |
| 519 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 516 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 520 EXPECT_TRUE( | 517 EXPECT_TRUE( |
| 521 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 518 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| 522 .Empty()); | 519 .Empty()); |
| 523 | 520 |
| 524 // Then add two datatypes. | 521 // Then add two datatypes. |
| 525 ModelTypeSet old_types = enabled_types_; | 522 ModelTypeSet old_types = enabled_types_; |
| 526 ModelTypeSet disabled_types(BOOKMARKS, SEARCH_ENGINES); | 523 ModelTypeSet disabled_types(BOOKMARKS, SEARCH_ENGINES); |
| 527 ModelTypeSet new_types(EXTENSIONS, APPS); | 524 ModelTypeSet new_types(EXTENSIONS, APPS); |
| 528 enabled_types_.PutAll(new_types); | 525 enabled_types_.PutAll(new_types); |
| 529 enabled_types_.RemoveAll(disabled_types); | 526 enabled_types_.RemoveAll(disabled_types); |
| 530 ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | 527 ready_types = ConfigureDataTypes(); |
| 531 | 528 |
| 532 // Only those datatypes added should be downloaded (plus nigori). Nothing | 529 // Only those datatypes added should be downloaded (plus nigori). Nothing |
| 533 // should be cleaned aside from the disabled types. | 530 // should be cleaned aside from the disabled types. |
| 534 new_types.Put(NIGORI); | 531 new_types.Put(NIGORI); |
| 535 EXPECT_EQ(Difference(enabled_types_, new_types), ready_types); | 532 EXPECT_EQ(Difference(enabled_types_, new_types), ready_types); |
| 536 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); | 533 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); |
| 537 EXPECT_EQ(disabled_types, | 534 EXPECT_EQ(disabled_types, |
| 538 Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types)); | 535 Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types)); |
| 539 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 536 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 540 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 537 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 557 // Does nothing. | 554 // Does nothing. |
| 558 InitializeBackend(true); | 555 InitializeBackend(true); |
| 559 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); | 556 EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty()); |
| 560 EXPECT_TRUE( | 557 EXPECT_TRUE( |
| 561 Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types).Empty()); | 558 Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types).Empty()); |
| 562 EXPECT_EQ(old_types, fake_manager_->InitialSyncEndedTypes()); | 559 EXPECT_EQ(old_types, fake_manager_->InitialSyncEndedTypes()); |
| 563 EXPECT_EQ(new_types, fake_manager_->GetTypesWithEmptyProgressMarkerToken( | 560 EXPECT_EQ(new_types, fake_manager_->GetTypesWithEmptyProgressMarkerToken( |
| 564 enabled_types_)); | 561 enabled_types_)); |
| 565 | 562 |
| 566 // Downloads and applies the new types (plus nigori). | 563 // Downloads and applies the new types (plus nigori). |
| 567 ModelTypeSet ready_types = | 564 ModelTypeSet ready_types = ConfigureDataTypes(); |
| 568 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | |
| 569 | 565 |
| 570 new_types.Put(NIGORI); | 566 new_types.Put(NIGORI); |
| 571 EXPECT_EQ(Difference(old_types, ModelTypeSet(NIGORI)), ready_types); | 567 EXPECT_EQ(Difference(old_types, ModelTypeSet(NIGORI)), ready_types); |
| 572 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); | 568 EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes()); |
| 573 EXPECT_TRUE( | 569 EXPECT_TRUE( |
| 574 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) | 570 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 575 .Empty()); | 571 .Empty()); |
| 576 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 572 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 577 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 573 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 578 EXPECT_TRUE( | 574 EXPECT_TRUE( |
| (...skipping 22 matching lines...) Expand all Loading... |
| 601 EXPECT_EQ(ModelTypeSet(NIGORI), fake_manager_->GetAndResetDownloadedTypes()); | 597 EXPECT_EQ(ModelTypeSet(NIGORI), fake_manager_->GetAndResetDownloadedTypes()); |
| 602 EXPECT_TRUE(fake_manager_->GetAndResetPurgedTypes().HasAll(partial_types)); | 598 EXPECT_TRUE(fake_manager_->GetAndResetPurgedTypes().HasAll(partial_types)); |
| 603 EXPECT_EQ(Union(full_types, ModelTypeSet(NIGORI)), | 599 EXPECT_EQ(Union(full_types, ModelTypeSet(NIGORI)), |
| 604 fake_manager_->InitialSyncEndedTypes()); | 600 fake_manager_->InitialSyncEndedTypes()); |
| 605 EXPECT_EQ( | 601 EXPECT_EQ( |
| 606 Union(new_types, Difference(partial_types, ModelTypeSet(NIGORI))), | 602 Union(new_types, Difference(partial_types, ModelTypeSet(NIGORI))), |
| 607 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); | 603 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)); |
| 608 | 604 |
| 609 // Downloads and applies the new types and partial types (which includes | 605 // Downloads and applies the new types and partial types (which includes |
| 610 // nigori anyways). | 606 // nigori anyways). |
| 611 ModelTypeSet ready_types = | 607 ModelTypeSet ready_types = ConfigureDataTypes(); |
| 612 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | |
| 613 EXPECT_EQ(full_types, ready_types); | 608 EXPECT_EQ(full_types, ready_types); |
| 614 EXPECT_EQ(Union(new_types, partial_types), | 609 EXPECT_EQ(Union(new_types, partial_types), |
| 615 fake_manager_->GetAndResetDownloadedTypes()); | 610 fake_manager_->GetAndResetDownloadedTypes()); |
| 616 EXPECT_TRUE( | 611 EXPECT_TRUE( |
| 617 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) | 612 Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_) |
| 618 .Empty()); | 613 .Empty()); |
| 619 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); | 614 EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes()); |
| 620 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); | 615 EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes()); |
| 621 EXPECT_TRUE( | 616 EXPECT_TRUE( |
| 622 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) | 617 fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_) |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 // If bookmarks encounter an error that results in disabling without purging | 704 // If bookmarks encounter an error that results in disabling without purging |
| 710 // (such as when the type is unready), and then is explicitly disabled, the | 705 // (such as when the type is unready), and then is explicitly disabled, the |
| 711 // SyncEngine needs to tell the manager to purge the type, even though | 706 // SyncEngine needs to tell the manager to purge the type, even though |
| 712 // it's already disabled (crbug.com/386778). | 707 // it's already disabled (crbug.com/386778). |
| 713 TEST_F(SyncEngineTest, DisableThenPurgeType) { | 708 TEST_F(SyncEngineTest, DisableThenPurgeType) { |
| 714 ModelTypeSet error_types(BOOKMARKS); | 709 ModelTypeSet error_types(BOOKMARKS); |
| 715 | 710 |
| 716 InitializeBackend(true); | 711 InitializeBackend(true); |
| 717 | 712 |
| 718 // First enable the types. | 713 // First enable the types. |
| 719 ModelTypeSet ready_types = | 714 ModelTypeSet ready_types = ConfigureDataTypes(); |
| 720 ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | |
| 721 | 715 |
| 722 // Nigori is always downloaded so won't be ready. | 716 // Nigori is always downloaded so won't be ready. |
| 723 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); | 717 EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types); |
| 724 | 718 |
| 725 // Then mark the error types as unready (disables without purging). | 719 // Then mark the error types as unready (disables without purging). |
| 726 ModelTypeConfigurer::DataTypeConfigStateMap config_state_map = | 720 ready_types = ConfigureDataTypesWithUnready(error_types); |
| 727 ConfigStateMapForEnabledTypes(); | |
| 728 ModelTypeConfigurer::SetDataTypesState(ModelTypeConfigurer::UNREADY, | |
| 729 error_types, &config_state_map); | |
| 730 ready_types = ConfigureDataTypes(config_state_map); | |
| 731 EXPECT_EQ(Difference(enabled_types_, error_types), ready_types); | 721 EXPECT_EQ(Difference(enabled_types_, error_types), ready_types); |
| 732 EXPECT_TRUE( | 722 EXPECT_TRUE( |
| 733 fake_manager_->GetTypesWithEmptyProgressMarkerToken(error_types).Empty()); | 723 fake_manager_->GetTypesWithEmptyProgressMarkerToken(error_types).Empty()); |
| 734 | 724 |
| 735 // Lastly explicitly disable the error types, which should result in a purge. | 725 // Lastly explicitly disable the error types, which should result in a purge. |
| 736 enabled_types_.RemoveAll(error_types); | 726 enabled_types_.RemoveAll(error_types); |
| 737 ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes()); | 727 ready_types = ConfigureDataTypes(); |
| 738 EXPECT_EQ(Difference(enabled_types_, error_types), ready_types); | 728 EXPECT_EQ(Difference(enabled_types_, error_types), ready_types); |
| 739 EXPECT_FALSE( | 729 EXPECT_FALSE( |
| 740 fake_manager_->GetTypesWithEmptyProgressMarkerToken(error_types).Empty()); | 730 fake_manager_->GetTypesWithEmptyProgressMarkerToken(error_types).Empty()); |
| 741 } | 731 } |
| 742 | 732 |
| 743 // Test that a call to ClearServerData is forwarded to the underlying | 733 // Test that a call to ClearServerData is forwarded to the underlying |
| 744 // SyncManager. | 734 // SyncManager. |
| 745 TEST_F(SyncEngineTest, ClearServerDataCallsAreForwarded) { | 735 TEST_F(SyncEngineTest, ClearServerDataCallsAreForwarded) { |
| 746 InitializeBackend(true); | 736 InitializeBackend(true); |
| 747 CallbackCounter callback_counter; | 737 CallbackCounter callback_counter; |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 816 // DataTypeManager shutdown. | 806 // DataTypeManager shutdown. |
| 817 TEST_F(SyncEngineTest, ModelTypeConnectorValidDuringShutdown) { | 807 TEST_F(SyncEngineTest, ModelTypeConnectorValidDuringShutdown) { |
| 818 InitializeBackend(true); | 808 InitializeBackend(true); |
| 819 backend_->StopSyncingForShutdown(); | 809 backend_->StopSyncingForShutdown(); |
| 820 // Verify that call to DeactivateNonBlockingDataType doesn't assert. | 810 // Verify that call to DeactivateNonBlockingDataType doesn't assert. |
| 821 backend_->DeactivateNonBlockingDataType(AUTOFILL); | 811 backend_->DeactivateNonBlockingDataType(AUTOFILL); |
| 822 backend_->Shutdown(STOP_SYNC); | 812 backend_->Shutdown(STOP_SYNC); |
| 823 backend_.reset(); | 813 backend_.reset(); |
| 824 } | 814 } |
| 825 | 815 |
| 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 | |
| 856 } // namespace | 816 } // namespace |
| 857 | 817 |
| 858 } // namespace syncer | 818 } // namespace syncer |
| OLD | NEW |