Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "testing/gtest/include/gtest/gtest.h" | 5 #include "testing/gtest/include/gtest/gtest.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 135 extension_id << "/" << key << " (out of " << changes_.size() << ")"; | 135 extension_id << "/" << key << " (out of " << changes_.size() << ")"; |
| 136 } | 136 } |
| 137 return matching_changes[0]; | 137 return matching_changes[0]; |
| 138 } | 138 } |
| 139 | 139 |
| 140 private: | 140 private: |
| 141 SettingSyncDataList changes_; | 141 SettingSyncDataList changes_; |
| 142 bool fail_all_requests_; | 142 bool fail_all_requests_; |
| 143 }; | 143 }; |
| 144 | 144 |
| 145 class SyncChangeProcessorDelegate : public SyncChangeProcessor { | |
|
asargent_no_longer_on_chrome
2012/03/22 22:54:11
same thing here about duplicate code
Nicolas Zea
2012/03/22 23:05:29
See previous comment.
| |
| 146 public: | |
| 147 explicit SyncChangeProcessorDelegate(SyncChangeProcessor* recipient) | |
| 148 : recipient_(recipient) { | |
| 149 DCHECK(recipient_); | |
| 150 } | |
| 151 virtual ~SyncChangeProcessorDelegate() {} | |
| 152 | |
| 153 // SyncChangeProcessor implementation. | |
| 154 virtual SyncError ProcessSyncChanges( | |
| 155 const tracked_objects::Location& from_here, | |
| 156 const SyncChangeList& change_list) OVERRIDE { | |
| 157 return recipient_->ProcessSyncChanges(from_here, change_list); | |
| 158 } | |
| 159 | |
| 160 private: | |
| 161 // The recipient of all sync changes. | |
| 162 SyncChangeProcessor* recipient_; | |
| 163 }; | |
| 164 | |
| 145 // SettingsStorageFactory which always returns TestingSettingsStorage objects, | 165 // SettingsStorageFactory which always returns TestingSettingsStorage objects, |
| 146 // and allows individually created objects to be returned. | 166 // and allows individually created objects to be returned. |
| 147 class TestingSettingsStorageFactory : public SettingsStorageFactory { | 167 class TestingSettingsStorageFactory : public SettingsStorageFactory { |
| 148 public: | 168 public: |
| 149 TestingSettingsStorage* GetExisting(const std::string& extension_id) { | 169 TestingSettingsStorage* GetExisting(const std::string& extension_id) { |
| 150 DCHECK(created_.count(extension_id)); | 170 DCHECK(created_.count(extension_id)); |
| 151 return created_[extension_id]; | 171 return created_[extension_id]; |
| 152 } | 172 } |
| 153 | 173 |
| 154 // SettingsStorageFactory implementation. | 174 // SettingsStorageFactory implementation. |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 175 *dst = frontend->GetBackendForSync(type); | 195 *dst = frontend->GetBackendForSync(type); |
| 176 } | 196 } |
| 177 | 197 |
| 178 } // namespace | 198 } // namespace |
| 179 | 199 |
| 180 class ExtensionSettingsSyncTest : public testing::Test { | 200 class ExtensionSettingsSyncTest : public testing::Test { |
| 181 public: | 201 public: |
| 182 ExtensionSettingsSyncTest() | 202 ExtensionSettingsSyncTest() |
| 183 : ui_thread_(BrowserThread::UI, MessageLoop::current()), | 203 : ui_thread_(BrowserThread::UI, MessageLoop::current()), |
| 184 file_thread_(BrowserThread::FILE, MessageLoop::current()), | 204 file_thread_(BrowserThread::FILE, MessageLoop::current()), |
| 185 storage_factory_(new util::ScopedSettingsStorageFactory()) {} | 205 storage_factory_(new util::ScopedSettingsStorageFactory()), |
| 206 sync_processor_(new MockSyncChangeProcessor), | |
| 207 sync_processor_delegate_(new SyncChangeProcessorDelegate( | |
| 208 sync_processor_.get())) {} | |
| 186 | 209 |
| 187 virtual void SetUp() OVERRIDE { | 210 virtual void SetUp() OVERRIDE { |
| 188 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 211 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 189 profile_.reset(new util::MockProfile(temp_dir_.path())); | 212 profile_.reset(new util::MockProfile(temp_dir_.path())); |
| 190 storage_factory_->Reset(new SettingsLeveldbStorage::Factory()); | 213 storage_factory_->Reset(new SettingsLeveldbStorage::Factory()); |
| 191 frontend_.reset( | 214 frontend_.reset( |
| 192 SettingsFrontend::Create(storage_factory_.get(), profile_.get())); | 215 SettingsFrontend::Create(storage_factory_.get(), profile_.get())); |
| 193 } | 216 } |
| 194 | 217 |
| 195 virtual void TearDown() OVERRIDE { | 218 virtual void TearDown() OVERRIDE { |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 226 } | 249 } |
| 227 return as_map; | 250 return as_map; |
| 228 } | 251 } |
| 229 | 252 |
| 230 // Need these so that the DCHECKs for running on FILE or UI threads pass. | 253 // Need these so that the DCHECKs for running on FILE or UI threads pass. |
| 231 MessageLoop message_loop_; | 254 MessageLoop message_loop_; |
| 232 content::TestBrowserThread ui_thread_; | 255 content::TestBrowserThread ui_thread_; |
| 233 content::TestBrowserThread file_thread_; | 256 content::TestBrowserThread file_thread_; |
| 234 | 257 |
| 235 ScopedTempDir temp_dir_; | 258 ScopedTempDir temp_dir_; |
| 236 MockSyncChangeProcessor sync_; | |
| 237 scoped_ptr<util::MockProfile> profile_; | 259 scoped_ptr<util::MockProfile> profile_; |
| 238 scoped_ptr<SettingsFrontend> frontend_; | 260 scoped_ptr<SettingsFrontend> frontend_; |
| 239 scoped_refptr<util::ScopedSettingsStorageFactory> storage_factory_; | 261 scoped_refptr<util::ScopedSettingsStorageFactory> storage_factory_; |
| 262 scoped_ptr<MockSyncChangeProcessor> sync_processor_; | |
| 263 scoped_ptr<SyncChangeProcessorDelegate> sync_processor_delegate_; | |
| 240 }; | 264 }; |
| 241 | 265 |
| 242 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS | 266 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS |
| 243 // sync by roughly alternative which one to test. | 267 // sync by roughly alternative which one to test. |
| 244 | 268 |
| 245 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { | 269 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { |
| 246 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 270 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
| 247 Extension::Type type = Extension::TYPE_EXTENSION; | 271 Extension::Type type = Extension::TYPE_EXTENSION; |
| 248 | 272 |
| 249 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 273 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
| 250 | 274 |
| 251 // Have one extension created before sync is set up, the other created after. | 275 // Have one extension created before sync is set up, the other created after. |
| 252 AddExtensionAndGetStorage("s1", type); | 276 AddExtensionAndGetStorage("s1", type); |
| 253 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 277 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
| 254 | 278 |
| 255 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 279 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 256 model_type, SyncDataList(), &sync_); | 280 model_type, |
| 281 SyncDataList(), | |
| 282 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 257 | 283 |
| 258 AddExtensionAndGetStorage("s2", type); | 284 AddExtensionAndGetStorage("s2", type); |
| 259 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 285 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
| 260 | 286 |
| 261 GetSyncableService(model_type)->StopSyncing(model_type); | 287 GetSyncableService(model_type)->StopSyncing(model_type); |
| 262 | 288 |
| 263 EXPECT_EQ(0u, sync_.changes().size()); | 289 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 264 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 290 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
| 265 } | 291 } |
| 266 | 292 |
| 267 TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { | 293 TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { |
| 268 syncable::ModelType model_type = syncable::APP_SETTINGS; | 294 syncable::ModelType model_type = syncable::APP_SETTINGS; |
| 269 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 295 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
| 270 | 296 |
| 271 StringValue value1("fooValue"); | 297 StringValue value1("fooValue"); |
| 272 ListValue value2; | 298 ListValue value2; |
| 273 value2.Append(StringValue::CreateStringValue("barValue")); | 299 value2.Append(StringValue::CreateStringValue("barValue")); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 286 EXPECT_EQ(1u, all_sync_data["s2"].size()); | 312 EXPECT_EQ(1u, all_sync_data["s2"].size()); |
| 287 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value()); | 313 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value()); |
| 288 | 314 |
| 289 SyncDataList sync_data; | 315 SyncDataList sync_data; |
| 290 sync_data.push_back(settings_sync_util::CreateData( | 316 sync_data.push_back(settings_sync_util::CreateData( |
| 291 "s1", "foo", value1, model_type)); | 317 "s1", "foo", value1, model_type)); |
| 292 sync_data.push_back(settings_sync_util::CreateData( | 318 sync_data.push_back(settings_sync_util::CreateData( |
| 293 "s2", "bar", value2, model_type)); | 319 "s2", "bar", value2, model_type)); |
| 294 | 320 |
| 295 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 321 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 296 model_type, sync_data, &sync_); | 322 model_type, sync_data, |
| 323 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 297 | 324 |
| 298 // Already in sync, so no changes. | 325 // Already in sync, so no changes. |
| 299 EXPECT_EQ(0u, sync_.changes().size()); | 326 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 300 | 327 |
| 301 // Regression test: not-changing the synced value shouldn't result in a sync | 328 // Regression test: not-changing the synced value shouldn't result in a sync |
| 302 // change, and changing the synced value should result in an update. | 329 // change, and changing the synced value should result in an update. |
| 303 storage1->Set(DEFAULTS, "foo", value1); | 330 storage1->Set(DEFAULTS, "foo", value1); |
| 304 EXPECT_EQ(0u, sync_.changes().size()); | 331 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 305 | 332 |
| 306 storage1->Set(DEFAULTS, "foo", value2); | 333 storage1->Set(DEFAULTS, "foo", value2); |
| 307 EXPECT_EQ(1u, sync_.changes().size()); | 334 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| 308 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); | 335 SettingSyncData change = sync_processor_->GetOnlyChange("s1", "foo"); |
| 309 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 336 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| 310 EXPECT_TRUE(value2.Equals(&change.value())); | 337 EXPECT_TRUE(value2.Equals(&change.value())); |
| 311 | 338 |
| 312 GetSyncableService(model_type)->StopSyncing(model_type); | 339 GetSyncableService(model_type)->StopSyncing(model_type); |
| 313 } | 340 } |
| 314 | 341 |
| 315 TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { | 342 TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { |
| 316 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 343 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
| 317 Extension::Type type = Extension::TYPE_EXTENSION; | 344 Extension::Type type = Extension::TYPE_EXTENSION; |
| 318 | 345 |
| 319 StringValue value1("fooValue"); | 346 StringValue value1("fooValue"); |
| 320 ListValue value2; | 347 ListValue value2; |
| 321 value2.Append(StringValue::CreateStringValue("barValue")); | 348 value2.Append(StringValue::CreateStringValue("barValue")); |
| 322 | 349 |
| 323 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 350 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| 324 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 351 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| 325 | 352 |
| 326 storage1->Set(DEFAULTS, "foo", value1); | 353 storage1->Set(DEFAULTS, "foo", value1); |
| 327 storage2->Set(DEFAULTS, "bar", value2); | 354 storage2->Set(DEFAULTS, "bar", value2); |
| 328 | 355 |
| 329 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 356 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 330 model_type, SyncDataList(), &sync_); | 357 model_type, |
| 358 SyncDataList(), | |
| 359 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 331 | 360 |
| 332 // All settings should have been pushed to sync. | 361 // All settings should have been pushed to sync. |
| 333 EXPECT_EQ(2u, sync_.changes().size()); | 362 EXPECT_EQ(2u, sync_processor_->changes().size()); |
| 334 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); | 363 SettingSyncData change = sync_processor_->GetOnlyChange("s1", "foo"); |
| 335 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 364 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| 336 EXPECT_TRUE(value1.Equals(&change.value())); | 365 EXPECT_TRUE(value1.Equals(&change.value())); |
| 337 change = sync_.GetOnlyChange("s2", "bar"); | 366 change = sync_processor_->GetOnlyChange("s2", "bar"); |
| 338 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 367 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| 339 EXPECT_TRUE(value2.Equals(&change.value())); | 368 EXPECT_TRUE(value2.Equals(&change.value())); |
| 340 | 369 |
| 341 GetSyncableService(model_type)->StopSyncing(model_type); | 370 GetSyncableService(model_type)->StopSyncing(model_type); |
| 342 } | 371 } |
| 343 | 372 |
| 344 TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) { | 373 TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) { |
| 345 syncable::ModelType model_type = syncable::APP_SETTINGS; | 374 syncable::ModelType model_type = syncable::APP_SETTINGS; |
| 346 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 375 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
| 347 | 376 |
| 348 StringValue value1("fooValue"); | 377 StringValue value1("fooValue"); |
| 349 ListValue value2; | 378 ListValue value2; |
| 350 value2.Append(StringValue::CreateStringValue("barValue")); | 379 value2.Append(StringValue::CreateStringValue("barValue")); |
| 351 | 380 |
| 352 // Maintain dictionaries mirrored to the expected values of the settings in | 381 // Maintain dictionaries mirrored to the expected values of the settings in |
| 353 // each storage area. | 382 // each storage area. |
| 354 DictionaryValue expected1, expected2; | 383 DictionaryValue expected1, expected2; |
| 355 | 384 |
| 356 // Pre-populate one of the storage areas. | 385 // Pre-populate one of the storage areas. |
| 357 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 386 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| 358 storage1->Set(DEFAULTS, "overwriteMe", value1); | 387 storage1->Set(DEFAULTS, "overwriteMe", value1); |
| 359 | 388 |
| 360 SyncDataList sync_data; | 389 SyncDataList sync_data; |
| 361 sync_data.push_back(settings_sync_util::CreateData( | 390 sync_data.push_back(settings_sync_util::CreateData( |
| 362 "s1", "foo", value1, model_type)); | 391 "s1", "foo", value1, model_type)); |
| 363 sync_data.push_back(settings_sync_util::CreateData( | 392 sync_data.push_back(settings_sync_util::CreateData( |
| 364 "s2", "bar", value2, model_type)); | 393 "s2", "bar", value2, model_type)); |
| 365 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 394 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 366 model_type, sync_data, &sync_); | 395 model_type, sync_data, |
| 396 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 367 expected1.Set("foo", value1.DeepCopy()); | 397 expected1.Set("foo", value1.DeepCopy()); |
| 368 expected2.Set("bar", value2.DeepCopy()); | 398 expected2.Set("bar", value2.DeepCopy()); |
| 369 | 399 |
| 370 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 400 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| 371 | 401 |
| 372 // All changes should be local, so no sync changes. | 402 // All changes should be local, so no sync changes. |
| 373 EXPECT_EQ(0u, sync_.changes().size()); | 403 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 374 | 404 |
| 375 // Sync settings should have been pushed to local settings. | 405 // Sync settings should have been pushed to local settings. |
| 376 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); | 406 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
| 377 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); | 407 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
| 378 | 408 |
| 379 GetSyncableService(model_type)->StopSyncing(model_type); | 409 GetSyncableService(model_type)->StopSyncing(model_type); |
| 380 } | 410 } |
| 381 | 411 |
| 382 TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) { | 412 TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) { |
| 383 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 413 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 396 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 426 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| 397 | 427 |
| 398 storage1->Set(DEFAULTS, "foo", value1); | 428 storage1->Set(DEFAULTS, "foo", value1); |
| 399 expected1.Set("foo", value1.DeepCopy()); | 429 expected1.Set("foo", value1.DeepCopy()); |
| 400 | 430 |
| 401 SyncDataList sync_data; | 431 SyncDataList sync_data; |
| 402 sync_data.push_back(settings_sync_util::CreateData( | 432 sync_data.push_back(settings_sync_util::CreateData( |
| 403 "s2", "bar", value2, model_type)); | 433 "s2", "bar", value2, model_type)); |
| 404 | 434 |
| 405 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 435 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 406 model_type, sync_data, &sync_); | 436 model_type, sync_data, |
| 437 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 407 expected2.Set("bar", value2.DeepCopy()); | 438 expected2.Set("bar", value2.DeepCopy()); |
| 408 | 439 |
| 409 // Make sync add some settings. | 440 // Make sync add some settings. |
| 410 SyncChangeList change_list; | 441 SyncChangeList change_list; |
| 411 change_list.push_back(settings_sync_util::CreateAdd( | 442 change_list.push_back(settings_sync_util::CreateAdd( |
| 412 "s1", "bar", value2, model_type)); | 443 "s1", "bar", value2, model_type)); |
| 413 change_list.push_back(settings_sync_util::CreateAdd( | 444 change_list.push_back(settings_sync_util::CreateAdd( |
| 414 "s2", "foo", value1, model_type)); | 445 "s2", "foo", value1, model_type)); |
| 415 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 446 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 416 expected1.Set("bar", value2.DeepCopy()); | 447 expected1.Set("bar", value2.DeepCopy()); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 468 storage1->Set(DEFAULTS, "foo", value1); | 499 storage1->Set(DEFAULTS, "foo", value1); |
| 469 storage2->Set(DEFAULTS, "foo", value1); | 500 storage2->Set(DEFAULTS, "foo", value1); |
| 470 | 501 |
| 471 SyncDataList sync_data; | 502 SyncDataList sync_data; |
| 472 sync_data.push_back(settings_sync_util::CreateData( | 503 sync_data.push_back(settings_sync_util::CreateData( |
| 473 "s3", "bar", value2, model_type)); | 504 "s3", "bar", value2, model_type)); |
| 474 sync_data.push_back(settings_sync_util::CreateData( | 505 sync_data.push_back(settings_sync_util::CreateData( |
| 475 "s4", "bar", value2, model_type)); | 506 "s4", "bar", value2, model_type)); |
| 476 | 507 |
| 477 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 508 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 478 model_type, sync_data, &sync_); | 509 model_type, sync_data, |
| 510 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 479 | 511 |
| 480 // Add something locally. | 512 // Add something locally. |
| 481 storage1->Set(DEFAULTS, "bar", value2); | 513 storage1->Set(DEFAULTS, "bar", value2); |
| 482 storage2->Set(DEFAULTS, "bar", value2); | 514 storage2->Set(DEFAULTS, "bar", value2); |
| 483 storage3->Set(DEFAULTS, "foo", value1); | 515 storage3->Set(DEFAULTS, "foo", value1); |
| 484 storage4->Set(DEFAULTS, "foo", value1); | 516 storage4->Set(DEFAULTS, "foo", value1); |
| 485 | 517 |
| 486 SettingSyncData change = sync_.GetOnlyChange("s1", "bar"); | 518 SettingSyncData change = sync_processor_->GetOnlyChange("s1", "bar"); |
| 487 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 519 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| 488 EXPECT_TRUE(value2.Equals(&change.value())); | 520 EXPECT_TRUE(value2.Equals(&change.value())); |
| 489 sync_.GetOnlyChange("s2", "bar"); | 521 sync_processor_->GetOnlyChange("s2", "bar"); |
| 490 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 522 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| 491 EXPECT_TRUE(value2.Equals(&change.value())); | 523 EXPECT_TRUE(value2.Equals(&change.value())); |
| 492 change = sync_.GetOnlyChange("s3", "foo"); | 524 change = sync_processor_->GetOnlyChange("s3", "foo"); |
| 493 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 525 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| 494 EXPECT_TRUE(value1.Equals(&change.value())); | 526 EXPECT_TRUE(value1.Equals(&change.value())); |
| 495 change = sync_.GetOnlyChange("s4", "foo"); | 527 change = sync_processor_->GetOnlyChange("s4", "foo"); |
| 496 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 528 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| 497 EXPECT_TRUE(value1.Equals(&change.value())); | 529 EXPECT_TRUE(value1.Equals(&change.value())); |
| 498 | 530 |
| 499 // Change something locally, storage1/3 the new setting and storage2/4 the | 531 // Change something locally, storage1/3 the new setting and storage2/4 the |
| 500 // initial setting, for all combinations of local vs sync intialisation and | 532 // initial setting, for all combinations of local vs sync intialisation and |
| 501 // new vs initial. | 533 // new vs initial. |
| 502 sync_.ClearChanges(); | 534 sync_processor_->ClearChanges(); |
| 503 storage1->Set(DEFAULTS, "bar", value1); | 535 storage1->Set(DEFAULTS, "bar", value1); |
| 504 storage2->Set(DEFAULTS, "foo", value2); | 536 storage2->Set(DEFAULTS, "foo", value2); |
| 505 storage3->Set(DEFAULTS, "bar", value1); | 537 storage3->Set(DEFAULTS, "bar", value1); |
| 506 storage4->Set(DEFAULTS, "foo", value2); | 538 storage4->Set(DEFAULTS, "foo", value2); |
| 507 | 539 |
| 508 change = sync_.GetOnlyChange("s1", "bar"); | 540 change = sync_processor_->GetOnlyChange("s1", "bar"); |
| 509 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 541 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| 510 EXPECT_TRUE(value1.Equals(&change.value())); | 542 EXPECT_TRUE(value1.Equals(&change.value())); |
| 511 change = sync_.GetOnlyChange("s2", "foo"); | 543 change = sync_processor_->GetOnlyChange("s2", "foo"); |
| 512 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 544 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| 513 EXPECT_TRUE(value2.Equals(&change.value())); | 545 EXPECT_TRUE(value2.Equals(&change.value())); |
| 514 change = sync_.GetOnlyChange("s3", "bar"); | 546 change = sync_processor_->GetOnlyChange("s3", "bar"); |
| 515 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 547 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| 516 EXPECT_TRUE(value1.Equals(&change.value())); | 548 EXPECT_TRUE(value1.Equals(&change.value())); |
| 517 change = sync_.GetOnlyChange("s4", "foo"); | 549 change = sync_processor_->GetOnlyChange("s4", "foo"); |
| 518 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 550 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| 519 EXPECT_TRUE(value2.Equals(&change.value())); | 551 EXPECT_TRUE(value2.Equals(&change.value())); |
| 520 | 552 |
| 521 // Remove something locally, storage1/3 the new setting and storage2/4 the | 553 // Remove something locally, storage1/3 the new setting and storage2/4 the |
| 522 // initial setting, for all combinations of local vs sync intialisation and | 554 // initial setting, for all combinations of local vs sync intialisation and |
| 523 // new vs initial. | 555 // new vs initial. |
| 524 sync_.ClearChanges(); | 556 sync_processor_->ClearChanges(); |
| 525 storage1->Remove("foo"); | 557 storage1->Remove("foo"); |
| 526 storage2->Remove("bar"); | 558 storage2->Remove("bar"); |
| 527 storage3->Remove("foo"); | 559 storage3->Remove("foo"); |
| 528 storage4->Remove("bar"); | 560 storage4->Remove("bar"); |
| 529 | 561 |
| 530 EXPECT_EQ( | 562 EXPECT_EQ( |
| 531 SyncChange::ACTION_DELETE, | 563 SyncChange::ACTION_DELETE, |
| 532 sync_.GetOnlyChange("s1", "foo").change_type()); | 564 sync_processor_->GetOnlyChange("s1", "foo").change_type()); |
| 533 EXPECT_EQ( | 565 EXPECT_EQ( |
| 534 SyncChange::ACTION_DELETE, | 566 SyncChange::ACTION_DELETE, |
| 535 sync_.GetOnlyChange("s2", "bar").change_type()); | 567 sync_processor_->GetOnlyChange("s2", "bar").change_type()); |
| 536 EXPECT_EQ( | 568 EXPECT_EQ( |
| 537 SyncChange::ACTION_DELETE, | 569 SyncChange::ACTION_DELETE, |
| 538 sync_.GetOnlyChange("s3", "foo").change_type()); | 570 sync_processor_->GetOnlyChange("s3", "foo").change_type()); |
| 539 EXPECT_EQ( | 571 EXPECT_EQ( |
| 540 SyncChange::ACTION_DELETE, | 572 SyncChange::ACTION_DELETE, |
| 541 sync_.GetOnlyChange("s4", "bar").change_type()); | 573 sync_processor_->GetOnlyChange("s4", "bar").change_type()); |
| 542 | 574 |
| 543 // Remove some nonexistent settings. | 575 // Remove some nonexistent settings. |
| 544 sync_.ClearChanges(); | 576 sync_processor_->ClearChanges(); |
| 545 storage1->Remove("foo"); | 577 storage1->Remove("foo"); |
| 546 storage2->Remove("bar"); | 578 storage2->Remove("bar"); |
| 547 storage3->Remove("foo"); | 579 storage3->Remove("foo"); |
| 548 storage4->Remove("bar"); | 580 storage4->Remove("bar"); |
| 549 | 581 |
| 550 EXPECT_EQ(0u, sync_.changes().size()); | 582 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 551 | 583 |
| 552 // Clear the rest of the settings. Add the removed ones back first so that | 584 // Clear the rest of the settings. Add the removed ones back first so that |
| 553 // more than one setting is cleared. | 585 // more than one setting is cleared. |
| 554 storage1->Set(DEFAULTS, "foo", value1); | 586 storage1->Set(DEFAULTS, "foo", value1); |
| 555 storage2->Set(DEFAULTS, "bar", value2); | 587 storage2->Set(DEFAULTS, "bar", value2); |
| 556 storage3->Set(DEFAULTS, "foo", value1); | 588 storage3->Set(DEFAULTS, "foo", value1); |
| 557 storage4->Set(DEFAULTS, "bar", value2); | 589 storage4->Set(DEFAULTS, "bar", value2); |
| 558 | 590 |
| 559 sync_.ClearChanges(); | 591 sync_processor_->ClearChanges(); |
| 560 storage1->Clear(); | 592 storage1->Clear(); |
| 561 storage2->Clear(); | 593 storage2->Clear(); |
| 562 storage3->Clear(); | 594 storage3->Clear(); |
| 563 storage4->Clear(); | 595 storage4->Clear(); |
| 564 | 596 |
| 565 EXPECT_EQ( | 597 EXPECT_EQ( |
| 566 SyncChange::ACTION_DELETE, | 598 SyncChange::ACTION_DELETE, |
| 567 sync_.GetOnlyChange("s1", "foo").change_type()); | 599 sync_processor_->GetOnlyChange("s1", "foo").change_type()); |
| 568 EXPECT_EQ( | 600 EXPECT_EQ( |
| 569 SyncChange::ACTION_DELETE, | 601 SyncChange::ACTION_DELETE, |
| 570 sync_.GetOnlyChange("s1", "bar").change_type()); | 602 sync_processor_->GetOnlyChange("s1", "bar").change_type()); |
| 571 EXPECT_EQ( | 603 EXPECT_EQ( |
| 572 SyncChange::ACTION_DELETE, | 604 SyncChange::ACTION_DELETE, |
| 573 sync_.GetOnlyChange("s2", "foo").change_type()); | 605 sync_processor_->GetOnlyChange("s2", "foo").change_type()); |
| 574 EXPECT_EQ( | 606 EXPECT_EQ( |
| 575 SyncChange::ACTION_DELETE, | 607 SyncChange::ACTION_DELETE, |
| 576 sync_.GetOnlyChange("s2", "bar").change_type()); | 608 sync_processor_->GetOnlyChange("s2", "bar").change_type()); |
| 577 EXPECT_EQ( | 609 EXPECT_EQ( |
| 578 SyncChange::ACTION_DELETE, | 610 SyncChange::ACTION_DELETE, |
| 579 sync_.GetOnlyChange("s3", "foo").change_type()); | 611 sync_processor_->GetOnlyChange("s3", "foo").change_type()); |
| 580 EXPECT_EQ( | 612 EXPECT_EQ( |
| 581 SyncChange::ACTION_DELETE, | 613 SyncChange::ACTION_DELETE, |
| 582 sync_.GetOnlyChange("s3", "bar").change_type()); | 614 sync_processor_->GetOnlyChange("s3", "bar").change_type()); |
| 583 EXPECT_EQ( | 615 EXPECT_EQ( |
| 584 SyncChange::ACTION_DELETE, | 616 SyncChange::ACTION_DELETE, |
| 585 sync_.GetOnlyChange("s4", "foo").change_type()); | 617 sync_processor_->GetOnlyChange("s4", "foo").change_type()); |
| 586 EXPECT_EQ( | 618 EXPECT_EQ( |
| 587 SyncChange::ACTION_DELETE, | 619 SyncChange::ACTION_DELETE, |
| 588 sync_.GetOnlyChange("s4", "bar").change_type()); | 620 sync_processor_->GetOnlyChange("s4", "bar").change_type()); |
| 589 | 621 |
| 590 GetSyncableService(model_type)->StopSyncing(model_type); | 622 GetSyncableService(model_type)->StopSyncing(model_type); |
| 591 } | 623 } |
| 592 | 624 |
| 593 TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) { | 625 TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) { |
| 594 StringValue value1("fooValue"); | 626 StringValue value1("fooValue"); |
| 595 ListValue value2; | 627 ListValue value2; |
| 596 value2.Append(StringValue::CreateStringValue("barValue")); | 628 value2.Append(StringValue::CreateStringValue("barValue")); |
| 597 | 629 |
| 598 // storage1 is an extension, storage2 is an app. | 630 // storage1 is an extension, storage2 is an app. |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 614 GetAllSyncData(syncable::APP_SETTINGS); | 646 GetAllSyncData(syncable::APP_SETTINGS); |
| 615 EXPECT_EQ(1u, app_sync_data.size()); | 647 EXPECT_EQ(1u, app_sync_data.size()); |
| 616 EXPECT_EQ(1u, app_sync_data["s2"].size()); | 648 EXPECT_EQ(1u, app_sync_data["s2"].size()); |
| 617 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &app_sync_data["s2"][0].value()); | 649 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &app_sync_data["s2"][0].value()); |
| 618 | 650 |
| 619 // Stop each separately, there should be no changes either time. | 651 // Stop each separately, there should be no changes either time. |
| 620 SyncDataList sync_data; | 652 SyncDataList sync_data; |
| 621 sync_data.push_back(settings_sync_util::CreateData( | 653 sync_data.push_back(settings_sync_util::CreateData( |
| 622 "s1", "foo", value1, syncable::EXTENSION_SETTINGS)); | 654 "s1", "foo", value1, syncable::EXTENSION_SETTINGS)); |
| 623 | 655 |
| 624 GetSyncableService(syncable::EXTENSION_SETTINGS)-> | 656 GetSyncableService(syncable::EXTENSION_SETTINGS)->MergeDataAndStartSyncing( |
| 625 MergeDataAndStartSyncing(syncable::EXTENSION_SETTINGS, sync_data, &sync_); | 657 syncable::EXTENSION_SETTINGS, |
| 658 sync_data, | |
| 659 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 626 GetSyncableService(syncable::EXTENSION_SETTINGS)-> | 660 GetSyncableService(syncable::EXTENSION_SETTINGS)-> |
| 627 StopSyncing(syncable::EXTENSION_SETTINGS); | 661 StopSyncing(syncable::EXTENSION_SETTINGS); |
| 628 EXPECT_EQ(0u, sync_.changes().size()); | 662 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 629 | 663 |
| 630 sync_data.clear(); | 664 sync_data.clear(); |
| 631 sync_data.push_back(settings_sync_util::CreateData( | 665 sync_data.push_back(settings_sync_util::CreateData( |
| 632 "s2", "bar", value2, syncable::APP_SETTINGS)); | 666 "s2", "bar", value2, syncable::APP_SETTINGS)); |
| 633 | 667 |
| 634 GetSyncableService(syncable::APP_SETTINGS)-> | 668 scoped_ptr<SyncChangeProcessorDelegate> app_settings_delegate_( |
| 635 MergeDataAndStartSyncing(syncable::APP_SETTINGS, sync_data, &sync_); | 669 new SyncChangeProcessorDelegate(sync_processor_.get())); |
| 670 GetSyncableService(syncable::APP_SETTINGS)->MergeDataAndStartSyncing( | |
| 671 syncable::APP_SETTINGS, | |
| 672 sync_data, | |
| 673 app_settings_delegate_.PassAs<SyncChangeProcessor>()); | |
| 636 GetSyncableService(syncable::APP_SETTINGS)-> | 674 GetSyncableService(syncable::APP_SETTINGS)-> |
| 637 StopSyncing(syncable::APP_SETTINGS); | 675 StopSyncing(syncable::APP_SETTINGS); |
| 638 EXPECT_EQ(0u, sync_.changes().size()); | 676 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 639 } | 677 } |
| 640 | 678 |
| 641 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { | 679 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
| 642 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 680 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
| 643 Extension::Type type = Extension::TYPE_EXTENSION; | 681 Extension::Type type = Extension::TYPE_EXTENSION; |
| 644 | 682 |
| 645 StringValue fooValue("fooValue"); | 683 StringValue fooValue("fooValue"); |
| 646 StringValue barValue("barValue"); | 684 StringValue barValue("barValue"); |
| 647 | 685 |
| 648 // There is a bit of a convoluted method to get storage areas that can fail; | 686 // There is a bit of a convoluted method to get storage areas that can fail; |
| 649 // hand out TestingSettingsStorage object then toggle them failing/succeeding | 687 // hand out TestingSettingsStorage object then toggle them failing/succeeding |
| 650 // as necessary. | 688 // as necessary. |
| 651 TestingSettingsStorageFactory* testing_factory = | 689 TestingSettingsStorageFactory* testing_factory = |
| 652 new TestingSettingsStorageFactory(); | 690 new TestingSettingsStorageFactory(); |
| 653 storage_factory_->Reset(testing_factory); | 691 storage_factory_->Reset(testing_factory); |
| 654 | 692 |
| 655 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 693 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
| 656 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 694 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
| 657 | 695 |
| 658 // Make bad fail for incoming sync changes. | 696 // Make bad fail for incoming sync changes. |
| 659 testing_factory->GetExisting("bad")->SetFailAllRequests(true); | 697 testing_factory->GetExisting("bad")->SetFailAllRequests(true); |
| 660 { | 698 { |
| 661 SyncDataList sync_data; | 699 SyncDataList sync_data; |
| 662 sync_data.push_back(settings_sync_util::CreateData( | 700 sync_data.push_back(settings_sync_util::CreateData( |
| 663 "good", "foo", fooValue, model_type)); | 701 "good", "foo", fooValue, model_type)); |
| 664 sync_data.push_back(settings_sync_util::CreateData( | 702 sync_data.push_back(settings_sync_util::CreateData( |
| 665 "bad", "foo", fooValue, model_type)); | 703 "bad", "foo", fooValue, model_type)); |
| 666 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 704 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 667 model_type, sync_data, &sync_); | 705 model_type, |
| 706 sync_data, | |
| 707 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 668 } | 708 } |
| 669 testing_factory->GetExisting("bad")->SetFailAllRequests(false); | 709 testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
| 670 | 710 |
| 671 { | 711 { |
| 672 DictionaryValue dict; | 712 DictionaryValue dict; |
| 673 dict.Set("foo", fooValue.DeepCopy()); | 713 dict.Set("foo", fooValue.DeepCopy()); |
| 674 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 714 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 675 } | 715 } |
| 676 { | 716 { |
| 677 DictionaryValue dict; | 717 DictionaryValue dict; |
| 678 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 718 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| 679 } | 719 } |
| 680 | 720 |
| 681 // Changes made to good should be sent to sync, changes from bad shouldn't. | 721 // Changes made to good should be sent to sync, changes from bad shouldn't. |
| 682 sync_.ClearChanges(); | 722 sync_processor_->ClearChanges(); |
| 683 good->Set(DEFAULTS, "bar", barValue); | 723 good->Set(DEFAULTS, "bar", barValue); |
| 684 bad->Set(DEFAULTS, "bar", barValue); | 724 bad->Set(DEFAULTS, "bar", barValue); |
| 685 | 725 |
| 686 EXPECT_EQ( | 726 EXPECT_EQ( |
| 687 SyncChange::ACTION_ADD, | 727 SyncChange::ACTION_ADD, |
| 688 sync_.GetOnlyChange("good", "bar").change_type()); | 728 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| 689 EXPECT_EQ(1u, sync_.changes().size()); | 729 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| 690 | 730 |
| 691 { | 731 { |
| 692 DictionaryValue dict; | 732 DictionaryValue dict; |
| 693 dict.Set("foo", fooValue.DeepCopy()); | 733 dict.Set("foo", fooValue.DeepCopy()); |
| 694 dict.Set("bar", barValue.DeepCopy()); | 734 dict.Set("bar", barValue.DeepCopy()); |
| 695 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 735 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 696 } | 736 } |
| 697 { | 737 { |
| 698 DictionaryValue dict; | 738 DictionaryValue dict; |
| 699 dict.Set("bar", barValue.DeepCopy()); | 739 dict.Set("bar", barValue.DeepCopy()); |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 720 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 760 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 721 } | 761 } |
| 722 { | 762 { |
| 723 DictionaryValue dict; | 763 DictionaryValue dict; |
| 724 dict.Set("bar", barValue.DeepCopy()); | 764 dict.Set("bar", barValue.DeepCopy()); |
| 725 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 765 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| 726 } | 766 } |
| 727 | 767 |
| 728 // Changes made to bad still shouldn't go to sync, even though it didn't fail | 768 // Changes made to bad still shouldn't go to sync, even though it didn't fail |
| 729 // last time. | 769 // last time. |
| 730 sync_.ClearChanges(); | 770 sync_processor_->ClearChanges(); |
| 731 good->Set(DEFAULTS, "bar", fooValue); | 771 good->Set(DEFAULTS, "bar", fooValue); |
| 732 bad->Set(DEFAULTS, "bar", fooValue); | 772 bad->Set(DEFAULTS, "bar", fooValue); |
| 733 | 773 |
| 734 EXPECT_EQ( | 774 EXPECT_EQ( |
| 735 SyncChange::ACTION_UPDATE, | 775 SyncChange::ACTION_UPDATE, |
| 736 sync_.GetOnlyChange("good", "bar").change_type()); | 776 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| 737 EXPECT_EQ(1u, sync_.changes().size()); | 777 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| 738 | 778 |
| 739 { | 779 { |
| 740 DictionaryValue dict; | 780 DictionaryValue dict; |
| 741 dict.Set("foo", barValue.DeepCopy()); | 781 dict.Set("foo", barValue.DeepCopy()); |
| 742 dict.Set("bar", fooValue.DeepCopy()); | 782 dict.Set("bar", fooValue.DeepCopy()); |
| 743 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 783 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 744 } | 784 } |
| 745 { | 785 { |
| 746 DictionaryValue dict; | 786 DictionaryValue dict; |
| 747 dict.Set("bar", fooValue.DeepCopy()); | 787 dict.Set("bar", fooValue.DeepCopy()); |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 767 dict.Set("bar", fooValue.DeepCopy()); | 807 dict.Set("bar", fooValue.DeepCopy()); |
| 768 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 808 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 769 } | 809 } |
| 770 { | 810 { |
| 771 DictionaryValue dict; | 811 DictionaryValue dict; |
| 772 dict.Set("bar", fooValue.DeepCopy()); | 812 dict.Set("bar", fooValue.DeepCopy()); |
| 773 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 813 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| 774 } | 814 } |
| 775 | 815 |
| 776 // Restarting sync should make bad start syncing again. | 816 // Restarting sync should make bad start syncing again. |
| 777 sync_.ClearChanges(); | 817 sync_processor_->ClearChanges(); |
| 778 GetSyncableService(model_type)->StopSyncing(model_type); | 818 GetSyncableService(model_type)->StopSyncing(model_type); |
| 819 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( | |
| 820 sync_processor_.get())); | |
| 779 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 821 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 780 model_type, SyncDataList(), &sync_); | 822 model_type, |
| 823 SyncDataList(), | |
| 824 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 781 | 825 |
| 782 // Local settings will have been pushed to sync, since it's empty (in this | 826 // Local settings will have been pushed to sync, since it's empty (in this |
| 783 // test; presumably it wouldn't be live, since we've been getting changes). | 827 // test; presumably it wouldn't be live, since we've been getting changes). |
| 784 EXPECT_EQ( | 828 EXPECT_EQ( |
| 785 SyncChange::ACTION_ADD, | 829 SyncChange::ACTION_ADD, |
| 786 sync_.GetOnlyChange("good", "foo").change_type()); | 830 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 787 EXPECT_EQ( | 831 EXPECT_EQ( |
| 788 SyncChange::ACTION_ADD, | 832 SyncChange::ACTION_ADD, |
| 789 sync_.GetOnlyChange("good", "bar").change_type()); | 833 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| 790 EXPECT_EQ( | 834 EXPECT_EQ( |
| 791 SyncChange::ACTION_ADD, | 835 SyncChange::ACTION_ADD, |
| 792 sync_.GetOnlyChange("bad", "bar").change_type()); | 836 sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
| 793 EXPECT_EQ(3u, sync_.changes().size()); | 837 EXPECT_EQ(3u, sync_processor_->changes().size()); |
| 794 | 838 |
| 795 // Live local changes now get pushed, too. | 839 // Live local changes now get pushed, too. |
| 796 sync_.ClearChanges(); | 840 sync_processor_->ClearChanges(); |
| 797 good->Set(DEFAULTS, "bar", barValue); | 841 good->Set(DEFAULTS, "bar", barValue); |
| 798 bad->Set(DEFAULTS, "bar", barValue); | 842 bad->Set(DEFAULTS, "bar", barValue); |
| 799 | 843 |
| 800 EXPECT_EQ( | 844 EXPECT_EQ( |
| 801 SyncChange::ACTION_UPDATE, | 845 SyncChange::ACTION_UPDATE, |
| 802 sync_.GetOnlyChange("good", "bar").change_type()); | 846 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| 803 EXPECT_EQ( | 847 EXPECT_EQ( |
| 804 SyncChange::ACTION_UPDATE, | 848 SyncChange::ACTION_UPDATE, |
| 805 sync_.GetOnlyChange("bad", "bar").change_type()); | 849 sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
| 806 EXPECT_EQ(2u, sync_.changes().size()); | 850 EXPECT_EQ(2u, sync_processor_->changes().size()); |
| 807 | 851 |
| 808 // And ProcessSyncChanges work, too. | 852 // And ProcessSyncChanges work, too. |
| 809 { | 853 { |
| 810 SyncChangeList change_list; | 854 SyncChangeList change_list; |
| 811 change_list.push_back(settings_sync_util::CreateUpdate( | 855 change_list.push_back(settings_sync_util::CreateUpdate( |
| 812 "good", "bar", fooValue, model_type)); | 856 "good", "bar", fooValue, model_type)); |
| 813 change_list.push_back(settings_sync_util::CreateUpdate( | 857 change_list.push_back(settings_sync_util::CreateUpdate( |
| 814 "bad", "bar", fooValue, model_type)); | 858 "bad", "bar", fooValue, model_type)); |
| 815 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 859 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 816 } | 860 } |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 845 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 889 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
| 846 | 890 |
| 847 // Unlike before, initially succeeding MergeDataAndStartSyncing. | 891 // Unlike before, initially succeeding MergeDataAndStartSyncing. |
| 848 { | 892 { |
| 849 SyncDataList sync_data; | 893 SyncDataList sync_data; |
| 850 sync_data.push_back(settings_sync_util::CreateData( | 894 sync_data.push_back(settings_sync_util::CreateData( |
| 851 "good", "foo", fooValue, model_type)); | 895 "good", "foo", fooValue, model_type)); |
| 852 sync_data.push_back(settings_sync_util::CreateData( | 896 sync_data.push_back(settings_sync_util::CreateData( |
| 853 "bad", "foo", fooValue, model_type)); | 897 "bad", "foo", fooValue, model_type)); |
| 854 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 898 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 855 model_type, sync_data, &sync_); | 899 model_type, |
| 900 sync_data, | |
| 901 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 856 } | 902 } |
| 857 | 903 |
| 858 EXPECT_EQ(0u, sync_.changes().size()); | 904 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 859 | 905 |
| 860 { | 906 { |
| 861 DictionaryValue dict; | 907 DictionaryValue dict; |
| 862 dict.Set("foo", fooValue.DeepCopy()); | 908 dict.Set("foo", fooValue.DeepCopy()); |
| 863 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 909 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 864 } | 910 } |
| 865 { | 911 { |
| 866 DictionaryValue dict; | 912 DictionaryValue dict; |
| 867 dict.Set("foo", fooValue.DeepCopy()); | 913 dict.Set("foo", fooValue.DeepCopy()); |
| 868 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 914 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 886 dict.Set("bar", barValue.DeepCopy()); | 932 dict.Set("bar", barValue.DeepCopy()); |
| 887 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 933 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 888 } | 934 } |
| 889 { | 935 { |
| 890 DictionaryValue dict; | 936 DictionaryValue dict; |
| 891 dict.Set("foo", fooValue.DeepCopy()); | 937 dict.Set("foo", fooValue.DeepCopy()); |
| 892 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 938 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| 893 } | 939 } |
| 894 | 940 |
| 895 // No more changes sent to sync for bad. | 941 // No more changes sent to sync for bad. |
| 896 sync_.ClearChanges(); | 942 sync_processor_->ClearChanges(); |
| 897 good->Set(DEFAULTS, "foo", barValue); | 943 good->Set(DEFAULTS, "foo", barValue); |
| 898 bad->Set(DEFAULTS, "foo", barValue); | 944 bad->Set(DEFAULTS, "foo", barValue); |
| 899 | 945 |
| 900 EXPECT_EQ( | 946 EXPECT_EQ( |
| 901 SyncChange::ACTION_UPDATE, | 947 SyncChange::ACTION_UPDATE, |
| 902 sync_.GetOnlyChange("good", "foo").change_type()); | 948 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 903 EXPECT_EQ(1u, sync_.changes().size()); | 949 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| 904 | 950 |
| 905 // No more changes received from sync should go to bad. | 951 // No more changes received from sync should go to bad. |
| 906 { | 952 { |
| 907 SyncChangeList change_list; | 953 SyncChangeList change_list; |
| 908 change_list.push_back(settings_sync_util::CreateAdd( | 954 change_list.push_back(settings_sync_util::CreateAdd( |
| 909 "good", "foo", fooValue, model_type)); | 955 "good", "foo", fooValue, model_type)); |
| 910 change_list.push_back(settings_sync_util::CreateAdd( | 956 change_list.push_back(settings_sync_util::CreateAdd( |
| 911 "bad", "foo", fooValue, model_type)); | 957 "bad", "foo", fooValue, model_type)); |
| 912 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 958 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 913 } | 959 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 948 { | 994 { |
| 949 SyncDataList all_sync_data = | 995 SyncDataList all_sync_data = |
| 950 GetSyncableService(model_type)->GetAllSyncData(model_type); | 996 GetSyncableService(model_type)->GetAllSyncData(model_type); |
| 951 EXPECT_EQ(1u, all_sync_data.size()); | 997 EXPECT_EQ(1u, all_sync_data.size()); |
| 952 EXPECT_EQ("good/foo", all_sync_data[0].GetTag()); | 998 EXPECT_EQ("good/foo", all_sync_data[0].GetTag()); |
| 953 } | 999 } |
| 954 testing_factory->GetExisting("bad")->SetFailAllRequests(false); | 1000 testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
| 955 | 1001 |
| 956 // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). | 1002 // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). |
| 957 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1003 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 958 model_type, SyncDataList(), &sync_); | 1004 model_type, |
| 1005 SyncDataList(), | |
| 1006 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 959 | 1007 |
| 960 EXPECT_EQ( | 1008 EXPECT_EQ( |
| 961 SyncChange::ACTION_ADD, | 1009 SyncChange::ACTION_ADD, |
| 962 sync_.GetOnlyChange("good", "foo").change_type()); | 1010 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 963 EXPECT_EQ( | 1011 EXPECT_EQ( |
| 964 SyncChange::ACTION_ADD, | 1012 SyncChange::ACTION_ADD, |
| 965 sync_.GetOnlyChange("bad", "foo").change_type()); | 1013 sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
| 966 EXPECT_EQ(2u, sync_.changes().size()); | 1014 EXPECT_EQ(2u, sync_processor_->changes().size()); |
| 967 | 1015 |
| 968 sync_.ClearChanges(); | 1016 sync_processor_->ClearChanges(); |
| 969 good->Set(DEFAULTS, "bar", barValue); | 1017 good->Set(DEFAULTS, "bar", barValue); |
| 970 bad->Set(DEFAULTS, "bar", barValue); | 1018 bad->Set(DEFAULTS, "bar", barValue); |
| 971 | 1019 |
| 972 EXPECT_EQ( | 1020 EXPECT_EQ( |
| 973 SyncChange::ACTION_ADD, | 1021 SyncChange::ACTION_ADD, |
| 974 sync_.GetOnlyChange("good", "bar").change_type()); | 1022 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| 975 EXPECT_EQ( | 1023 EXPECT_EQ( |
| 976 SyncChange::ACTION_ADD, | 1024 SyncChange::ACTION_ADD, |
| 977 sync_.GetOnlyChange("bad", "bar").change_type()); | 1025 sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
| 978 EXPECT_EQ(2u, sync_.changes().size()); | 1026 EXPECT_EQ(2u, sync_processor_->changes().size()); |
| 979 } | 1027 } |
| 980 | 1028 |
| 981 TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { | 1029 TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { |
| 982 syncable::ModelType model_type = syncable::APP_SETTINGS; | 1030 syncable::ModelType model_type = syncable::APP_SETTINGS; |
| 983 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 1031 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
| 984 | 1032 |
| 985 StringValue fooValue("fooValue"); | 1033 StringValue fooValue("fooValue"); |
| 986 StringValue barValue("barValue"); | 1034 StringValue barValue("barValue"); |
| 987 | 1035 |
| 988 TestingSettingsStorageFactory* testing_factory = | 1036 TestingSettingsStorageFactory* testing_factory = |
| 989 new TestingSettingsStorageFactory(); | 1037 new TestingSettingsStorageFactory(); |
| 990 storage_factory_->Reset(testing_factory); | 1038 storage_factory_->Reset(testing_factory); |
| 991 | 1039 |
| 992 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 1040 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
| 993 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 1041 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
| 994 | 1042 |
| 995 good->Set(DEFAULTS, "foo", fooValue); | 1043 good->Set(DEFAULTS, "foo", fooValue); |
| 996 bad->Set(DEFAULTS, "foo", fooValue); | 1044 bad->Set(DEFAULTS, "foo", fooValue); |
| 997 | 1045 |
| 998 // good will successfully push foo:fooValue to sync, but bad will fail to | 1046 // good will successfully push foo:fooValue to sync, but bad will fail to |
| 999 // get them so won't. | 1047 // get them so won't. |
| 1000 testing_factory->GetExisting("bad")->SetFailAllRequests(true); | 1048 testing_factory->GetExisting("bad")->SetFailAllRequests(true); |
| 1001 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1049 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 1002 model_type, SyncDataList(), &sync_); | 1050 model_type, |
| 1051 SyncDataList(), | |
| 1052 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 1003 testing_factory->GetExisting("bad")->SetFailAllRequests(false); | 1053 testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
| 1004 | 1054 |
| 1005 EXPECT_EQ( | 1055 EXPECT_EQ( |
| 1006 SyncChange::ACTION_ADD, | 1056 SyncChange::ACTION_ADD, |
| 1007 sync_.GetOnlyChange("good", "foo").change_type()); | 1057 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 1008 EXPECT_EQ(1u, sync_.changes().size()); | 1058 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| 1009 | 1059 |
| 1010 // bad should now be disabled for sync. | 1060 // bad should now be disabled for sync. |
| 1011 sync_.ClearChanges(); | 1061 sync_processor_->ClearChanges(); |
| 1012 good->Set(DEFAULTS, "bar", barValue); | 1062 good->Set(DEFAULTS, "bar", barValue); |
| 1013 bad->Set(DEFAULTS, "bar", barValue); | 1063 bad->Set(DEFAULTS, "bar", barValue); |
| 1014 | 1064 |
| 1015 EXPECT_EQ( | 1065 EXPECT_EQ( |
| 1016 SyncChange::ACTION_ADD, | 1066 SyncChange::ACTION_ADD, |
| 1017 sync_.GetOnlyChange("good", "bar").change_type()); | 1067 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| 1018 EXPECT_EQ(1u, sync_.changes().size()); | 1068 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| 1019 | 1069 |
| 1020 { | 1070 { |
| 1021 SyncChangeList change_list; | 1071 SyncChangeList change_list; |
| 1022 change_list.push_back(settings_sync_util::CreateUpdate( | 1072 change_list.push_back(settings_sync_util::CreateUpdate( |
| 1023 "good", "foo", barValue, model_type)); | 1073 "good", "foo", barValue, model_type)); |
| 1024 // (Sending ADD here even though it's updating, since that's what the state | 1074 // (Sending ADD here even though it's updating, since that's what the state |
| 1025 // of sync is. In any case, it won't work.) | 1075 // of sync is. In any case, it won't work.) |
| 1026 change_list.push_back(settings_sync_util::CreateAdd( | 1076 change_list.push_back(settings_sync_util::CreateAdd( |
| 1027 "bad", "foo", barValue, model_type)); | 1077 "bad", "foo", barValue, model_type)); |
| 1028 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1078 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 1029 } | 1079 } |
| 1030 | 1080 |
| 1031 { | 1081 { |
| 1032 DictionaryValue dict; | 1082 DictionaryValue dict; |
| 1033 dict.Set("foo", barValue.DeepCopy()); | 1083 dict.Set("foo", barValue.DeepCopy()); |
| 1034 dict.Set("bar", barValue.DeepCopy()); | 1084 dict.Set("bar", barValue.DeepCopy()); |
| 1035 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 1085 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 1036 } | 1086 } |
| 1037 { | 1087 { |
| 1038 DictionaryValue dict; | 1088 DictionaryValue dict; |
| 1039 dict.Set("foo", fooValue.DeepCopy()); | 1089 dict.Set("foo", fooValue.DeepCopy()); |
| 1040 dict.Set("bar", barValue.DeepCopy()); | 1090 dict.Set("bar", barValue.DeepCopy()); |
| 1041 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 1091 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| 1042 } | 1092 } |
| 1043 | 1093 |
| 1044 // Re-enabling sync without failing should cause the local changes from bad | 1094 // Re-enabling sync without failing should cause the local changes from bad |
| 1045 // to be pushed to sync successfully, as should future changes to bad. | 1095 // to be pushed to sync successfully, as should future changes to bad. |
| 1046 sync_.ClearChanges(); | 1096 sync_processor_->ClearChanges(); |
| 1047 GetSyncableService(model_type)->StopSyncing(model_type); | 1097 GetSyncableService(model_type)->StopSyncing(model_type); |
| 1098 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( | |
| 1099 sync_processor_.get())); | |
| 1048 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1100 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 1049 model_type, SyncDataList(), &sync_); | 1101 model_type, |
| 1102 SyncDataList(), | |
| 1103 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 1050 | 1104 |
| 1051 EXPECT_EQ( | 1105 EXPECT_EQ( |
| 1052 SyncChange::ACTION_ADD, | 1106 SyncChange::ACTION_ADD, |
| 1053 sync_.GetOnlyChange("good", "foo").change_type()); | 1107 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 1054 EXPECT_EQ( | 1108 EXPECT_EQ( |
| 1055 SyncChange::ACTION_ADD, | 1109 SyncChange::ACTION_ADD, |
| 1056 sync_.GetOnlyChange("good", "bar").change_type()); | 1110 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| 1057 EXPECT_EQ( | 1111 EXPECT_EQ( |
| 1058 SyncChange::ACTION_ADD, | 1112 SyncChange::ACTION_ADD, |
| 1059 sync_.GetOnlyChange("bad", "foo").change_type()); | 1113 sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
| 1060 EXPECT_EQ( | 1114 EXPECT_EQ( |
| 1061 SyncChange::ACTION_ADD, | 1115 SyncChange::ACTION_ADD, |
| 1062 sync_.GetOnlyChange("bad", "bar").change_type()); | 1116 sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
| 1063 EXPECT_EQ(4u, sync_.changes().size()); | 1117 EXPECT_EQ(4u, sync_processor_->changes().size()); |
| 1064 | 1118 |
| 1065 sync_.ClearChanges(); | 1119 sync_processor_->ClearChanges(); |
| 1066 good->Set(DEFAULTS, "bar", fooValue); | 1120 good->Set(DEFAULTS, "bar", fooValue); |
| 1067 bad->Set(DEFAULTS, "bar", fooValue); | 1121 bad->Set(DEFAULTS, "bar", fooValue); |
| 1068 | 1122 |
| 1069 EXPECT_EQ( | 1123 EXPECT_EQ( |
| 1070 SyncChange::ACTION_UPDATE, | 1124 SyncChange::ACTION_UPDATE, |
| 1071 sync_.GetOnlyChange("good", "bar").change_type()); | 1125 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| 1072 EXPECT_EQ( | 1126 EXPECT_EQ( |
| 1073 SyncChange::ACTION_UPDATE, | 1127 SyncChange::ACTION_UPDATE, |
| 1074 sync_.GetOnlyChange("good", "bar").change_type()); | 1128 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| 1075 EXPECT_EQ(2u, sync_.changes().size()); | 1129 EXPECT_EQ(2u, sync_processor_->changes().size()); |
| 1076 } | 1130 } |
| 1077 | 1131 |
| 1078 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { | 1132 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { |
| 1079 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 1133 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
| 1080 Extension::Type type = Extension::TYPE_EXTENSION; | 1134 Extension::Type type = Extension::TYPE_EXTENSION; |
| 1081 | 1135 |
| 1082 StringValue fooValue("fooValue"); | 1136 StringValue fooValue("fooValue"); |
| 1083 StringValue barValue("barValue"); | 1137 StringValue barValue("barValue"); |
| 1084 | 1138 |
| 1085 TestingSettingsStorageFactory* testing_factory = | 1139 TestingSettingsStorageFactory* testing_factory = |
| 1086 new TestingSettingsStorageFactory(); | 1140 new TestingSettingsStorageFactory(); |
| 1087 storage_factory_->Reset(testing_factory); | 1141 storage_factory_->Reset(testing_factory); |
| 1088 | 1142 |
| 1089 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 1143 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
| 1090 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 1144 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
| 1091 | 1145 |
| 1092 // Only set bad; setting good will cause it to fail below. | 1146 // Only set bad; setting good will cause it to fail below. |
| 1093 bad->Set(DEFAULTS, "foo", fooValue); | 1147 bad->Set(DEFAULTS, "foo", fooValue); |
| 1094 | 1148 |
| 1095 sync_.SetFailAllRequests(true); | 1149 sync_processor_->SetFailAllRequests(true); |
| 1096 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1150 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 1097 model_type, SyncDataList(), &sync_); | 1151 model_type, |
| 1098 sync_.SetFailAllRequests(false); | 1152 SyncDataList(), |
| 1153 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 1154 sync_processor_->SetFailAllRequests(false); | |
| 1099 | 1155 |
| 1100 // Changes from good will be send to sync, changes from bad won't. | 1156 // Changes from good will be send to sync, changes from bad won't. |
| 1101 sync_.ClearChanges(); | 1157 sync_processor_->ClearChanges(); |
| 1102 good->Set(DEFAULTS, "foo", barValue); | 1158 good->Set(DEFAULTS, "foo", barValue); |
| 1103 bad->Set(DEFAULTS, "foo", barValue); | 1159 bad->Set(DEFAULTS, "foo", barValue); |
| 1104 | 1160 |
| 1105 EXPECT_EQ( | 1161 EXPECT_EQ( |
| 1106 SyncChange::ACTION_ADD, | 1162 SyncChange::ACTION_ADD, |
| 1107 sync_.GetOnlyChange("good", "foo").change_type()); | 1163 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 1108 EXPECT_EQ(1u, sync_.changes().size()); | 1164 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| 1109 | 1165 |
| 1110 // Changes from sync will be sent to good, not to bad. | 1166 // Changes from sync will be sent to good, not to bad. |
| 1111 { | 1167 { |
| 1112 SyncChangeList change_list; | 1168 SyncChangeList change_list; |
| 1113 change_list.push_back(settings_sync_util::CreateAdd( | 1169 change_list.push_back(settings_sync_util::CreateAdd( |
| 1114 "good", "bar", barValue, model_type)); | 1170 "good", "bar", barValue, model_type)); |
| 1115 change_list.push_back(settings_sync_util::CreateAdd( | 1171 change_list.push_back(settings_sync_util::CreateAdd( |
| 1116 "bad", "bar", barValue, model_type)); | 1172 "bad", "bar", barValue, model_type)); |
| 1117 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1173 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 1118 } | 1174 } |
| 1119 | 1175 |
| 1120 { | 1176 { |
| 1121 DictionaryValue dict; | 1177 DictionaryValue dict; |
| 1122 dict.Set("foo", barValue.DeepCopy()); | 1178 dict.Set("foo", barValue.DeepCopy()); |
| 1123 dict.Set("bar", barValue.DeepCopy()); | 1179 dict.Set("bar", barValue.DeepCopy()); |
| 1124 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 1180 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 1125 } | 1181 } |
| 1126 { | 1182 { |
| 1127 DictionaryValue dict; | 1183 DictionaryValue dict; |
| 1128 dict.Set("foo", barValue.DeepCopy()); | 1184 dict.Set("foo", barValue.DeepCopy()); |
| 1129 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 1185 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| 1130 } | 1186 } |
| 1131 | 1187 |
| 1132 // Restarting sync makes everything work again. | 1188 // Restarting sync makes everything work again. |
| 1133 sync_.ClearChanges(); | 1189 sync_processor_->ClearChanges(); |
| 1134 GetSyncableService(model_type)->StopSyncing(model_type); | 1190 GetSyncableService(model_type)->StopSyncing(model_type); |
| 1191 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( | |
| 1192 sync_processor_.get())); | |
| 1135 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1193 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 1136 model_type, SyncDataList(), &sync_); | 1194 model_type, |
| 1195 SyncDataList(), | |
| 1196 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 1137 | 1197 |
| 1138 EXPECT_EQ( | 1198 EXPECT_EQ( |
| 1139 SyncChange::ACTION_ADD, | 1199 SyncChange::ACTION_ADD, |
| 1140 sync_.GetOnlyChange("good", "foo").change_type()); | 1200 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 1141 EXPECT_EQ( | 1201 EXPECT_EQ( |
| 1142 SyncChange::ACTION_ADD, | 1202 SyncChange::ACTION_ADD, |
| 1143 sync_.GetOnlyChange("good", "bar").change_type()); | 1203 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| 1144 EXPECT_EQ( | 1204 EXPECT_EQ( |
| 1145 SyncChange::ACTION_ADD, | 1205 SyncChange::ACTION_ADD, |
| 1146 sync_.GetOnlyChange("bad", "foo").change_type()); | 1206 sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
| 1147 EXPECT_EQ(3u, sync_.changes().size()); | 1207 EXPECT_EQ(3u, sync_processor_->changes().size()); |
| 1148 | 1208 |
| 1149 sync_.ClearChanges(); | 1209 sync_processor_->ClearChanges(); |
| 1150 good->Set(DEFAULTS, "foo", fooValue); | 1210 good->Set(DEFAULTS, "foo", fooValue); |
| 1151 bad->Set(DEFAULTS, "foo", fooValue); | 1211 bad->Set(DEFAULTS, "foo", fooValue); |
| 1152 | 1212 |
| 1153 EXPECT_EQ( | 1213 EXPECT_EQ( |
| 1154 SyncChange::ACTION_UPDATE, | 1214 SyncChange::ACTION_UPDATE, |
| 1155 sync_.GetOnlyChange("good", "foo").change_type()); | 1215 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 1156 EXPECT_EQ( | 1216 EXPECT_EQ( |
| 1157 SyncChange::ACTION_UPDATE, | 1217 SyncChange::ACTION_UPDATE, |
| 1158 sync_.GetOnlyChange("good", "foo").change_type()); | 1218 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 1159 EXPECT_EQ(2u, sync_.changes().size()); | 1219 EXPECT_EQ(2u, sync_processor_->changes().size()); |
| 1160 } | 1220 } |
| 1161 | 1221 |
| 1162 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { | 1222 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
| 1163 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 1223 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
| 1164 Extension::Type type = Extension::TYPE_EXTENSION; | 1224 Extension::Type type = Extension::TYPE_EXTENSION; |
| 1165 | 1225 |
| 1166 StringValue fooValue("fooValue"); | 1226 StringValue fooValue("fooValue"); |
| 1167 StringValue barValue("barValue"); | 1227 StringValue barValue("barValue"); |
| 1168 | 1228 |
| 1169 TestingSettingsStorageFactory* testing_factory = | 1229 TestingSettingsStorageFactory* testing_factory = |
| 1170 new TestingSettingsStorageFactory(); | 1230 new TestingSettingsStorageFactory(); |
| 1171 storage_factory_->Reset(testing_factory); | 1231 storage_factory_->Reset(testing_factory); |
| 1172 | 1232 |
| 1173 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 1233 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
| 1174 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 1234 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
| 1175 | 1235 |
| 1176 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1236 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 1177 model_type, SyncDataList(), &sync_); | 1237 model_type, |
| 1238 SyncDataList(), | |
| 1239 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 1178 | 1240 |
| 1179 // bad will fail to send changes. | 1241 // bad will fail to send changes. |
| 1180 good->Set(DEFAULTS, "foo", fooValue); | 1242 good->Set(DEFAULTS, "foo", fooValue); |
| 1181 sync_.SetFailAllRequests(true); | 1243 sync_processor_->SetFailAllRequests(true); |
| 1182 bad->Set(DEFAULTS, "foo", fooValue); | 1244 bad->Set(DEFAULTS, "foo", fooValue); |
| 1183 sync_.SetFailAllRequests(false); | 1245 sync_processor_->SetFailAllRequests(false); |
| 1184 | 1246 |
| 1185 EXPECT_EQ( | 1247 EXPECT_EQ( |
| 1186 SyncChange::ACTION_ADD, | 1248 SyncChange::ACTION_ADD, |
| 1187 sync_.GetOnlyChange("good", "foo").change_type()); | 1249 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 1188 EXPECT_EQ(1u, sync_.changes().size()); | 1250 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| 1189 | 1251 |
| 1190 // No further changes should be sent from bad. | 1252 // No further changes should be sent from bad. |
| 1191 sync_.ClearChanges(); | 1253 sync_processor_->ClearChanges(); |
| 1192 good->Set(DEFAULTS, "foo", barValue); | 1254 good->Set(DEFAULTS, "foo", barValue); |
| 1193 bad->Set(DEFAULTS, "foo", barValue); | 1255 bad->Set(DEFAULTS, "foo", barValue); |
| 1194 | 1256 |
| 1195 EXPECT_EQ( | 1257 EXPECT_EQ( |
| 1196 SyncChange::ACTION_UPDATE, | 1258 SyncChange::ACTION_UPDATE, |
| 1197 sync_.GetOnlyChange("good", "foo").change_type()); | 1259 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 1198 EXPECT_EQ(1u, sync_.changes().size()); | 1260 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| 1199 | 1261 |
| 1200 // Changes from sync will be sent to good, not to bad. | 1262 // Changes from sync will be sent to good, not to bad. |
| 1201 { | 1263 { |
| 1202 SyncChangeList change_list; | 1264 SyncChangeList change_list; |
| 1203 change_list.push_back(settings_sync_util::CreateAdd( | 1265 change_list.push_back(settings_sync_util::CreateAdd( |
| 1204 "good", "bar", barValue, model_type)); | 1266 "good", "bar", barValue, model_type)); |
| 1205 change_list.push_back(settings_sync_util::CreateAdd( | 1267 change_list.push_back(settings_sync_util::CreateAdd( |
| 1206 "bad", "bar", barValue, model_type)); | 1268 "bad", "bar", barValue, model_type)); |
| 1207 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1269 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 1208 } | 1270 } |
| 1209 | 1271 |
| 1210 { | 1272 { |
| 1211 DictionaryValue dict; | 1273 DictionaryValue dict; |
| 1212 dict.Set("foo", barValue.DeepCopy()); | 1274 dict.Set("foo", barValue.DeepCopy()); |
| 1213 dict.Set("bar", barValue.DeepCopy()); | 1275 dict.Set("bar", barValue.DeepCopy()); |
| 1214 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 1276 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 1215 } | 1277 } |
| 1216 { | 1278 { |
| 1217 DictionaryValue dict; | 1279 DictionaryValue dict; |
| 1218 dict.Set("foo", barValue.DeepCopy()); | 1280 dict.Set("foo", barValue.DeepCopy()); |
| 1219 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 1281 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| 1220 } | 1282 } |
| 1221 | 1283 |
| 1222 // Restarting sync makes everything work again. | 1284 // Restarting sync makes everything work again. |
| 1223 sync_.ClearChanges(); | 1285 sync_processor_->ClearChanges(); |
| 1224 GetSyncableService(model_type)->StopSyncing(model_type); | 1286 GetSyncableService(model_type)->StopSyncing(model_type); |
| 1287 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( | |
| 1288 sync_processor_.get())); | |
| 1225 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1289 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 1226 model_type, SyncDataList(), &sync_); | 1290 model_type, |
| 1291 SyncDataList(), | |
| 1292 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 1227 | 1293 |
| 1228 EXPECT_EQ( | 1294 EXPECT_EQ( |
| 1229 SyncChange::ACTION_ADD, | 1295 SyncChange::ACTION_ADD, |
| 1230 sync_.GetOnlyChange("good", "foo").change_type()); | 1296 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 1231 EXPECT_EQ( | 1297 EXPECT_EQ( |
| 1232 SyncChange::ACTION_ADD, | 1298 SyncChange::ACTION_ADD, |
| 1233 sync_.GetOnlyChange("good", "bar").change_type()); | 1299 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| 1234 EXPECT_EQ( | 1300 EXPECT_EQ( |
| 1235 SyncChange::ACTION_ADD, | 1301 SyncChange::ACTION_ADD, |
| 1236 sync_.GetOnlyChange("bad", "foo").change_type()); | 1302 sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
| 1237 EXPECT_EQ(3u, sync_.changes().size()); | 1303 EXPECT_EQ(3u, sync_processor_->changes().size()); |
| 1238 | 1304 |
| 1239 sync_.ClearChanges(); | 1305 sync_processor_->ClearChanges(); |
| 1240 good->Set(DEFAULTS, "foo", fooValue); | 1306 good->Set(DEFAULTS, "foo", fooValue); |
| 1241 bad->Set(DEFAULTS, "foo", fooValue); | 1307 bad->Set(DEFAULTS, "foo", fooValue); |
| 1242 | 1308 |
| 1243 EXPECT_EQ( | 1309 EXPECT_EQ( |
| 1244 SyncChange::ACTION_UPDATE, | 1310 SyncChange::ACTION_UPDATE, |
| 1245 sync_.GetOnlyChange("good", "foo").change_type()); | 1311 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 1246 EXPECT_EQ( | 1312 EXPECT_EQ( |
| 1247 SyncChange::ACTION_UPDATE, | 1313 SyncChange::ACTION_UPDATE, |
| 1248 sync_.GetOnlyChange("good", "foo").change_type()); | 1314 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| 1249 EXPECT_EQ(2u, sync_.changes().size()); | 1315 EXPECT_EQ(2u, sync_processor_->changes().size()); |
| 1250 } | 1316 } |
| 1251 | 1317 |
| 1252 TEST_F(ExtensionSettingsSyncTest, | 1318 TEST_F(ExtensionSettingsSyncTest, |
| 1253 LargeOutgoingChangeRejectedButIncomingAccepted) { | 1319 LargeOutgoingChangeRejectedButIncomingAccepted) { |
| 1254 syncable::ModelType model_type = syncable::APP_SETTINGS; | 1320 syncable::ModelType model_type = syncable::APP_SETTINGS; |
| 1255 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 1321 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
| 1256 | 1322 |
| 1257 // This value should be larger than the limit in settings_backend.cc. | 1323 // This value should be larger than the limit in settings_backend.cc. |
| 1258 std::string string_5k; | 1324 std::string string_5k; |
| 1259 for (size_t i = 0; i < 5000; ++i) { | 1325 for (size_t i = 0; i < 5000; ++i) { |
| 1260 string_5k.append("a"); | 1326 string_5k.append("a"); |
| 1261 } | 1327 } |
| 1262 StringValue large_value(string_5k); | 1328 StringValue large_value(string_5k); |
| 1263 | 1329 |
| 1264 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1330 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 1265 model_type, SyncDataList(), &sync_); | 1331 model_type, |
| 1332 SyncDataList(), | |
| 1333 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); | |
| 1266 | 1334 |
| 1267 // Large local change rejected and doesn't get sent out. | 1335 // Large local change rejected and doesn't get sent out. |
| 1268 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 1336 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| 1269 EXPECT_TRUE(storage1->Set(DEFAULTS, "large_value", large_value).HasError()); | 1337 EXPECT_TRUE(storage1->Set(DEFAULTS, "large_value", large_value).HasError()); |
| 1270 EXPECT_EQ(0u, sync_.changes().size()); | 1338 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 1271 | 1339 |
| 1272 // Large incoming change should still get accepted. | 1340 // Large incoming change should still get accepted. |
| 1273 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 1341 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| 1274 { | 1342 { |
| 1275 SyncChangeList change_list; | 1343 SyncChangeList change_list; |
| 1276 change_list.push_back(settings_sync_util::CreateAdd( | 1344 change_list.push_back(settings_sync_util::CreateAdd( |
| 1277 "s1", "large_value", large_value, model_type)); | 1345 "s1", "large_value", large_value, model_type)); |
| 1278 change_list.push_back(settings_sync_util::CreateAdd( | 1346 change_list.push_back(settings_sync_util::CreateAdd( |
| 1279 "s2", "large_value", large_value, model_type)); | 1347 "s2", "large_value", large_value, model_type)); |
| 1280 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1348 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 1281 } | 1349 } |
| 1282 { | 1350 { |
| 1283 DictionaryValue expected; | 1351 DictionaryValue expected; |
| 1284 expected.Set("large_value", large_value.DeepCopy()); | 1352 expected.Set("large_value", large_value.DeepCopy()); |
| 1285 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); | 1353 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); |
| 1286 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); | 1354 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); |
| 1287 } | 1355 } |
| 1288 | 1356 |
| 1289 GetSyncableService(model_type)->StopSyncing(model_type); | 1357 GetSyncableService(model_type)->StopSyncing(model_type); |
| 1290 } | 1358 } |
| 1291 | 1359 |
| 1292 } // namespace extensions | 1360 } // namespace extensions |
| OLD | NEW |