| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 |
| 7 #include <memory> |
| 6 #include <utility> | 8 #include <utility> |
| 7 | 9 |
| 8 #include "base/bind.h" | 10 #include "base/bind.h" |
| 9 #include "base/files/scoped_temp_dir.h" | 11 #include "base/files/scoped_temp_dir.h" |
| 10 #include "base/json/json_reader.h" | 12 #include "base/json/json_reader.h" |
| 11 #include "base/json/json_writer.h" | 13 #include "base/json/json_writer.h" |
| 12 #include "base/memory/linked_ptr.h" | 14 #include "base/memory/linked_ptr.h" |
| 13 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/ptr_util.h" |
| 14 #include "base/message_loop/message_loop.h" | 16 #include "base/message_loop/message_loop.h" |
| 15 #include "base/strings/string_number_conversions.h" | 17 #include "base/strings/string_number_conversions.h" |
| 16 #include "build/build_config.h" | 18 #include "build/build_config.h" |
| 17 #include "chrome/browser/extensions/api/storage/settings_sync_util.h" | 19 #include "chrome/browser/extensions/api/storage/settings_sync_util.h" |
| 18 #include "chrome/browser/extensions/api/storage/sync_value_store_cache.h" | 20 #include "chrome/browser/extensions/api/storage/sync_value_store_cache.h" |
| 19 #include "chrome/browser/extensions/api/storage/syncable_settings_storage.h" | 21 #include "chrome/browser/extensions/api/storage/syncable_settings_storage.h" |
| 20 #include "chrome/test/base/testing_profile.h" | 22 #include "chrome/test/base/testing_profile.h" |
| 21 #include "content/public/test/test_browser_thread.h" | 23 #include "content/public/test/test_browser_thread.h" |
| 22 #include "extensions/browser/api/storage/settings_test_util.h" | 24 #include "extensions/browser/api/storage/settings_test_util.h" |
| 23 #include "extensions/browser/api/storage/storage_frontend.h" | 25 #include "extensions/browser/api/storage/storage_frontend.h" |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 extension_id << "/" << key << " (out of " << changes_.size() << ")"; | 161 extension_id << "/" << key << " (out of " << changes_.size() << ")"; |
| 160 } | 162 } |
| 161 return matching_changes[0]; | 163 return matching_changes[0]; |
| 162 } | 164 } |
| 163 | 165 |
| 164 private: | 166 private: |
| 165 SettingSyncDataList changes_; | 167 SettingSyncDataList changes_; |
| 166 bool fail_all_requests_; | 168 bool fail_all_requests_; |
| 167 }; | 169 }; |
| 168 | 170 |
| 169 scoped_ptr<KeyedService> MockExtensionSystemFactoryFunction( | 171 std::unique_ptr<KeyedService> MockExtensionSystemFactoryFunction( |
| 170 content::BrowserContext* context) { | 172 content::BrowserContext* context) { |
| 171 return make_scoped_ptr(new MockExtensionSystem(context)); | 173 return base::WrapUnique(new MockExtensionSystem(context)); |
| 172 } | 174 } |
| 173 | 175 |
| 174 scoped_ptr<KeyedService> BuildEventRouter(content::BrowserContext* profile) { | 176 std::unique_ptr<KeyedService> BuildEventRouter( |
| 175 return make_scoped_ptr(new extensions::EventRouter(profile, nullptr)); | 177 content::BrowserContext* profile) { |
| 178 return base::WrapUnique(new extensions::EventRouter(profile, nullptr)); |
| 176 } | 179 } |
| 177 | 180 |
| 178 } // namespace | 181 } // namespace |
| 179 | 182 |
| 180 class ExtensionSettingsSyncTest : public testing::Test { | 183 class ExtensionSettingsSyncTest : public testing::Test { |
| 181 public: | 184 public: |
| 182 ExtensionSettingsSyncTest() | 185 ExtensionSettingsSyncTest() |
| 183 : ui_thread_(BrowserThread::UI, base::MessageLoop::current()), | 186 : ui_thread_(BrowserThread::UI, base::MessageLoop::current()), |
| 184 file_thread_(BrowserThread::FILE, base::MessageLoop::current()), | 187 file_thread_(BrowserThread::FILE, base::MessageLoop::current()), |
| 185 storage_factory_(new TestValueStoreFactory()), | 188 storage_factory_(new TestValueStoreFactory()), |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 return static_cast<TestingValueStore*>( | 255 return static_cast<TestingValueStore*>( |
| 253 storage_factory_->GetExisting(extension_id)); | 256 storage_factory_->GetExisting(extension_id)); |
| 254 } | 257 } |
| 255 | 258 |
| 256 // Need these so that the DCHECKs for running on FILE or UI threads pass. | 259 // Need these so that the DCHECKs for running on FILE or UI threads pass. |
| 257 base::MessageLoop message_loop_; | 260 base::MessageLoop message_loop_; |
| 258 content::TestBrowserThread ui_thread_; | 261 content::TestBrowserThread ui_thread_; |
| 259 content::TestBrowserThread file_thread_; | 262 content::TestBrowserThread file_thread_; |
| 260 | 263 |
| 261 base::ScopedTempDir temp_dir_; | 264 base::ScopedTempDir temp_dir_; |
| 262 scoped_ptr<TestingProfile> profile_; | 265 std::unique_ptr<TestingProfile> profile_; |
| 263 scoped_ptr<StorageFrontend> frontend_; | 266 std::unique_ptr<StorageFrontend> frontend_; |
| 264 scoped_refptr<TestValueStoreFactory> storage_factory_; | 267 scoped_refptr<TestValueStoreFactory> storage_factory_; |
| 265 scoped_ptr<MockSyncChangeProcessor> sync_processor_; | 268 std::unique_ptr<MockSyncChangeProcessor> sync_processor_; |
| 266 scoped_ptr<syncer::SyncChangeProcessorWrapperForTest> sync_processor_wrapper_; | 269 std::unique_ptr<syncer::SyncChangeProcessorWrapperForTest> |
| 270 sync_processor_wrapper_; |
| 267 }; | 271 }; |
| 268 | 272 |
| 269 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS | 273 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS |
| 270 // sync by roughly alternative which one to test. | 274 // sync by roughly alternative which one to test. |
| 271 | 275 |
| 272 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { | 276 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { |
| 273 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS; | 277 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS; |
| 274 Manifest::Type type = Manifest::TYPE_EXTENSION; | 278 Manifest::Type type = Manifest::TYPE_EXTENSION; |
| 275 | 279 |
| 276 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 280 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
| 277 | 281 |
| 278 // Have one extension created before sync is set up, the other created after. | 282 // Have one extension created before sync is set up, the other created after. |
| 279 AddExtensionAndGetStorage("s1", type); | 283 AddExtensionAndGetStorage("s1", type); |
| 280 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 284 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
| 281 | 285 |
| 282 GetSyncableService(model_type) | 286 GetSyncableService(model_type) |
| 283 ->MergeDataAndStartSyncing( | 287 ->MergeDataAndStartSyncing( |
| 284 model_type, syncer::SyncDataList(), | 288 model_type, syncer::SyncDataList(), |
| 285 std::move(sync_processor_wrapper_), | 289 std::move(sync_processor_wrapper_), |
| 286 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 290 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 287 | 291 |
| 288 AddExtensionAndGetStorage("s2", type); | 292 AddExtensionAndGetStorage("s2", type); |
| 289 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 293 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
| 290 | 294 |
| 291 GetSyncableService(model_type)->StopSyncing(model_type); | 295 GetSyncableService(model_type)->StopSyncing(model_type); |
| 292 | 296 |
| 293 EXPECT_EQ(0u, sync_processor_->changes().size()); | 297 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 294 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 298 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
| 295 } | 299 } |
| 296 | 300 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 317 | 321 |
| 318 syncer::SyncDataList sync_data; | 322 syncer::SyncDataList sync_data; |
| 319 sync_data.push_back(settings_sync_util::CreateData( | 323 sync_data.push_back(settings_sync_util::CreateData( |
| 320 "s1", "foo", value1, model_type)); | 324 "s1", "foo", value1, model_type)); |
| 321 sync_data.push_back(settings_sync_util::CreateData( | 325 sync_data.push_back(settings_sync_util::CreateData( |
| 322 "s2", "bar", value2, model_type)); | 326 "s2", "bar", value2, model_type)); |
| 323 | 327 |
| 324 GetSyncableService(model_type) | 328 GetSyncableService(model_type) |
| 325 ->MergeDataAndStartSyncing( | 329 ->MergeDataAndStartSyncing( |
| 326 model_type, sync_data, std::move(sync_processor_wrapper_), | 330 model_type, sync_data, std::move(sync_processor_wrapper_), |
| 327 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 331 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 328 | 332 |
| 329 // Already in sync, so no changes. | 333 // Already in sync, so no changes. |
| 330 EXPECT_EQ(0u, sync_processor_->changes().size()); | 334 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 331 | 335 |
| 332 // Regression test: not-changing the synced value shouldn't result in a sync | 336 // Regression test: not-changing the synced value shouldn't result in a sync |
| 333 // change, and changing the synced value should result in an update. | 337 // change, and changing the synced value should result in an update. |
| 334 storage1->Set(DEFAULTS, "foo", value1); | 338 storage1->Set(DEFAULTS, "foo", value1); |
| 335 EXPECT_EQ(0u, sync_processor_->changes().size()); | 339 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 336 | 340 |
| 337 storage1->Set(DEFAULTS, "foo", value2); | 341 storage1->Set(DEFAULTS, "foo", value2); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 354 ValueStore* storage1 = AddExtensionAndGetStorage("s1", type); | 358 ValueStore* storage1 = AddExtensionAndGetStorage("s1", type); |
| 355 ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); | 359 ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); |
| 356 | 360 |
| 357 storage1->Set(DEFAULTS, "foo", value1); | 361 storage1->Set(DEFAULTS, "foo", value1); |
| 358 storage2->Set(DEFAULTS, "bar", value2); | 362 storage2->Set(DEFAULTS, "bar", value2); |
| 359 | 363 |
| 360 GetSyncableService(model_type) | 364 GetSyncableService(model_type) |
| 361 ->MergeDataAndStartSyncing( | 365 ->MergeDataAndStartSyncing( |
| 362 model_type, syncer::SyncDataList(), | 366 model_type, syncer::SyncDataList(), |
| 363 std::move(sync_processor_wrapper_), | 367 std::move(sync_processor_wrapper_), |
| 364 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 368 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 365 | 369 |
| 366 // All settings should have been pushed to sync. | 370 // All settings should have been pushed to sync. |
| 367 EXPECT_EQ(2u, sync_processor_->changes().size()); | 371 EXPECT_EQ(2u, sync_processor_->changes().size()); |
| 368 SettingSyncData* change = sync_processor_->GetOnlyChange("s1", "foo"); | 372 SettingSyncData* change = sync_processor_->GetOnlyChange("s1", "foo"); |
| 369 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); | 373 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
| 370 EXPECT_TRUE(value1.Equals(&change->value())); | 374 EXPECT_TRUE(value1.Equals(&change->value())); |
| 371 change = sync_processor_->GetOnlyChange("s2", "bar"); | 375 change = sync_processor_->GetOnlyChange("s2", "bar"); |
| 372 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); | 376 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
| 373 EXPECT_TRUE(value2.Equals(&change->value())); | 377 EXPECT_TRUE(value2.Equals(&change->value())); |
| 374 | 378 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 392 storage1->Set(DEFAULTS, "overwriteMe", value1); | 396 storage1->Set(DEFAULTS, "overwriteMe", value1); |
| 393 | 397 |
| 394 syncer::SyncDataList sync_data; | 398 syncer::SyncDataList sync_data; |
| 395 sync_data.push_back(settings_sync_util::CreateData( | 399 sync_data.push_back(settings_sync_util::CreateData( |
| 396 "s1", "foo", value1, model_type)); | 400 "s1", "foo", value1, model_type)); |
| 397 sync_data.push_back(settings_sync_util::CreateData( | 401 sync_data.push_back(settings_sync_util::CreateData( |
| 398 "s2", "bar", value2, model_type)); | 402 "s2", "bar", value2, model_type)); |
| 399 GetSyncableService(model_type) | 403 GetSyncableService(model_type) |
| 400 ->MergeDataAndStartSyncing( | 404 ->MergeDataAndStartSyncing( |
| 401 model_type, sync_data, std::move(sync_processor_wrapper_), | 405 model_type, sync_data, std::move(sync_processor_wrapper_), |
| 402 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 406 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 403 expected1.Set("foo", value1.DeepCopy()); | 407 expected1.Set("foo", value1.DeepCopy()); |
| 404 expected2.Set("bar", value2.DeepCopy()); | 408 expected2.Set("bar", value2.DeepCopy()); |
| 405 | 409 |
| 406 ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); | 410 ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); |
| 407 | 411 |
| 408 // All changes should be local, so no sync changes. | 412 // All changes should be local, so no sync changes. |
| 409 EXPECT_EQ(0u, sync_processor_->changes().size()); | 413 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 410 | 414 |
| 411 // Sync settings should have been pushed to local settings. | 415 // Sync settings should have been pushed to local settings. |
| 412 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); | 416 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 434 storage1->Set(DEFAULTS, "foo", value1); | 438 storage1->Set(DEFAULTS, "foo", value1); |
| 435 expected1.Set("foo", value1.DeepCopy()); | 439 expected1.Set("foo", value1.DeepCopy()); |
| 436 | 440 |
| 437 syncer::SyncDataList sync_data; | 441 syncer::SyncDataList sync_data; |
| 438 sync_data.push_back(settings_sync_util::CreateData( | 442 sync_data.push_back(settings_sync_util::CreateData( |
| 439 "s2", "bar", value2, model_type)); | 443 "s2", "bar", value2, model_type)); |
| 440 | 444 |
| 441 GetSyncableService(model_type) | 445 GetSyncableService(model_type) |
| 442 ->MergeDataAndStartSyncing( | 446 ->MergeDataAndStartSyncing( |
| 443 model_type, sync_data, std::move(sync_processor_wrapper_), | 447 model_type, sync_data, std::move(sync_processor_wrapper_), |
| 444 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 448 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 445 expected2.Set("bar", value2.DeepCopy()); | 449 expected2.Set("bar", value2.DeepCopy()); |
| 446 | 450 |
| 447 // Make sync add some settings. | 451 // Make sync add some settings. |
| 448 syncer::SyncChangeList change_list; | 452 syncer::SyncChangeList change_list; |
| 449 change_list.push_back(settings_sync_util::CreateAdd( | 453 change_list.push_back(settings_sync_util::CreateAdd( |
| 450 "s1", "bar", value2, model_type)); | 454 "s1", "bar", value2, model_type)); |
| 451 change_list.push_back(settings_sync_util::CreateAdd( | 455 change_list.push_back(settings_sync_util::CreateAdd( |
| 452 "s2", "foo", value1, model_type)); | 456 "s2", "foo", value1, model_type)); |
| 453 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 457 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 454 expected1.Set("bar", value2.DeepCopy()); | 458 expected1.Set("bar", value2.DeepCopy()); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 | 512 |
| 509 syncer::SyncDataList sync_data; | 513 syncer::SyncDataList sync_data; |
| 510 sync_data.push_back(settings_sync_util::CreateData( | 514 sync_data.push_back(settings_sync_util::CreateData( |
| 511 "s3", "bar", value2, model_type)); | 515 "s3", "bar", value2, model_type)); |
| 512 sync_data.push_back(settings_sync_util::CreateData( | 516 sync_data.push_back(settings_sync_util::CreateData( |
| 513 "s4", "bar", value2, model_type)); | 517 "s4", "bar", value2, model_type)); |
| 514 | 518 |
| 515 GetSyncableService(model_type) | 519 GetSyncableService(model_type) |
| 516 ->MergeDataAndStartSyncing( | 520 ->MergeDataAndStartSyncing( |
| 517 model_type, sync_data, std::move(sync_processor_wrapper_), | 521 model_type, sync_data, std::move(sync_processor_wrapper_), |
| 518 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 522 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 519 | 523 |
| 520 // Add something locally. | 524 // Add something locally. |
| 521 storage1->Set(DEFAULTS, "bar", value2); | 525 storage1->Set(DEFAULTS, "bar", value2); |
| 522 storage2->Set(DEFAULTS, "bar", value2); | 526 storage2->Set(DEFAULTS, "bar", value2); |
| 523 storage3->Set(DEFAULTS, "foo", value1); | 527 storage3->Set(DEFAULTS, "foo", value1); |
| 524 storage4->Set(DEFAULTS, "foo", value1); | 528 storage4->Set(DEFAULTS, "foo", value1); |
| 525 | 529 |
| 526 SettingSyncData* change = sync_processor_->GetOnlyChange("s1", "bar"); | 530 SettingSyncData* change = sync_processor_->GetOnlyChange("s1", "bar"); |
| 527 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); | 531 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
| 528 EXPECT_TRUE(value2.Equals(&change->value())); | 532 EXPECT_TRUE(value2.Equals(&change->value())); |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 646 | 650 |
| 647 // Stop each separately, there should be no changes either time. | 651 // Stop each separately, there should be no changes either time. |
| 648 syncer::SyncDataList sync_data; | 652 syncer::SyncDataList sync_data; |
| 649 sync_data.push_back(settings_sync_util::CreateData( | 653 sync_data.push_back(settings_sync_util::CreateData( |
| 650 "s1", "foo", value1, syncer::EXTENSION_SETTINGS)); | 654 "s1", "foo", value1, syncer::EXTENSION_SETTINGS)); |
| 651 | 655 |
| 652 GetSyncableService(syncer::EXTENSION_SETTINGS) | 656 GetSyncableService(syncer::EXTENSION_SETTINGS) |
| 653 ->MergeDataAndStartSyncing( | 657 ->MergeDataAndStartSyncing( |
| 654 syncer::EXTENSION_SETTINGS, sync_data, | 658 syncer::EXTENSION_SETTINGS, sync_data, |
| 655 std::move(sync_processor_wrapper_), | 659 std::move(sync_processor_wrapper_), |
| 656 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 660 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 657 GetSyncableService(syncer::EXTENSION_SETTINGS)-> | 661 GetSyncableService(syncer::EXTENSION_SETTINGS)-> |
| 658 StopSyncing(syncer::EXTENSION_SETTINGS); | 662 StopSyncing(syncer::EXTENSION_SETTINGS); |
| 659 EXPECT_EQ(0u, sync_processor_->changes().size()); | 663 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 660 | 664 |
| 661 sync_data.clear(); | 665 sync_data.clear(); |
| 662 sync_data.push_back(settings_sync_util::CreateData( | 666 sync_data.push_back(settings_sync_util::CreateData( |
| 663 "s2", "bar", value2, syncer::APP_SETTINGS)); | 667 "s2", "bar", value2, syncer::APP_SETTINGS)); |
| 664 | 668 |
| 665 scoped_ptr<syncer::SyncChangeProcessorWrapperForTest> app_settings_delegate_( | 669 std::unique_ptr<syncer::SyncChangeProcessorWrapperForTest> |
| 666 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); | 670 app_settings_delegate_( |
| 671 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
| 667 GetSyncableService(syncer::APP_SETTINGS) | 672 GetSyncableService(syncer::APP_SETTINGS) |
| 668 ->MergeDataAndStartSyncing( | 673 ->MergeDataAndStartSyncing( |
| 669 syncer::APP_SETTINGS, sync_data, std::move(app_settings_delegate_), | 674 syncer::APP_SETTINGS, sync_data, std::move(app_settings_delegate_), |
| 670 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 675 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 671 GetSyncableService(syncer::APP_SETTINGS)-> | 676 GetSyncableService(syncer::APP_SETTINGS)-> |
| 672 StopSyncing(syncer::APP_SETTINGS); | 677 StopSyncing(syncer::APP_SETTINGS); |
| 673 EXPECT_EQ(0u, sync_processor_->changes().size()); | 678 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 674 } | 679 } |
| 675 | 680 |
| 676 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { | 681 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
| 677 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS; | 682 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS; |
| 678 Manifest::Type type = Manifest::TYPE_EXTENSION; | 683 Manifest::Type type = Manifest::TYPE_EXTENSION; |
| 679 | 684 |
| 680 base::StringValue fooValue("fooValue"); | 685 base::StringValue fooValue("fooValue"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 691 GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); | 696 GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
| 692 { | 697 { |
| 693 syncer::SyncDataList sync_data; | 698 syncer::SyncDataList sync_data; |
| 694 sync_data.push_back(settings_sync_util::CreateData( | 699 sync_data.push_back(settings_sync_util::CreateData( |
| 695 "good", "foo", fooValue, model_type)); | 700 "good", "foo", fooValue, model_type)); |
| 696 sync_data.push_back(settings_sync_util::CreateData( | 701 sync_data.push_back(settings_sync_util::CreateData( |
| 697 "bad", "foo", fooValue, model_type)); | 702 "bad", "foo", fooValue, model_type)); |
| 698 GetSyncableService(model_type) | 703 GetSyncableService(model_type) |
| 699 ->MergeDataAndStartSyncing( | 704 ->MergeDataAndStartSyncing( |
| 700 model_type, sync_data, std::move(sync_processor_wrapper_), | 705 model_type, sync_data, std::move(sync_processor_wrapper_), |
| 701 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 706 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 702 } | 707 } |
| 703 GetExisting("bad")->set_status_code(ValueStore::OK); | 708 GetExisting("bad")->set_status_code(ValueStore::OK); |
| 704 | 709 |
| 705 { | 710 { |
| 706 base::DictionaryValue dict; | 711 base::DictionaryValue dict; |
| 707 dict.Set("foo", fooValue.DeepCopy()); | 712 dict.Set("foo", fooValue.DeepCopy()); |
| 708 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 713 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 709 } | 714 } |
| 710 { | 715 { |
| 711 base::DictionaryValue dict; | 716 base::DictionaryValue dict; |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 807 | 812 |
| 808 // Restarting sync should make bad start syncing again. | 813 // Restarting sync should make bad start syncing again. |
| 809 sync_processor_->ClearChanges(); | 814 sync_processor_->ClearChanges(); |
| 810 GetSyncableService(model_type)->StopSyncing(model_type); | 815 GetSyncableService(model_type)->StopSyncing(model_type); |
| 811 sync_processor_wrapper_.reset( | 816 sync_processor_wrapper_.reset( |
| 812 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); | 817 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
| 813 GetSyncableService(model_type) | 818 GetSyncableService(model_type) |
| 814 ->MergeDataAndStartSyncing( | 819 ->MergeDataAndStartSyncing( |
| 815 model_type, syncer::SyncDataList(), | 820 model_type, syncer::SyncDataList(), |
| 816 std::move(sync_processor_wrapper_), | 821 std::move(sync_processor_wrapper_), |
| 817 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 822 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 818 | 823 |
| 819 // Local settings will have been pushed to sync, since it's empty (in this | 824 // Local settings will have been pushed to sync, since it's empty (in this |
| 820 // test; presumably it wouldn't be live, since we've been getting changes). | 825 // test; presumably it wouldn't be live, since we've been getting changes). |
| 821 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 826 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 822 sync_processor_->GetOnlyChange("good", "foo")->change_type()); | 827 sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
| 823 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 828 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 824 sync_processor_->GetOnlyChange("good", "bar")->change_type()); | 829 sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
| 825 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 830 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 826 sync_processor_->GetOnlyChange("bad", "bar")->change_type()); | 831 sync_processor_->GetOnlyChange("bad", "bar")->change_type()); |
| 827 EXPECT_EQ(3u, sync_processor_->changes().size()); | 832 EXPECT_EQ(3u, sync_processor_->changes().size()); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 875 // Unlike before, initially succeeding MergeDataAndStartSyncing. | 880 // Unlike before, initially succeeding MergeDataAndStartSyncing. |
| 876 { | 881 { |
| 877 syncer::SyncDataList sync_data; | 882 syncer::SyncDataList sync_data; |
| 878 sync_data.push_back(settings_sync_util::CreateData( | 883 sync_data.push_back(settings_sync_util::CreateData( |
| 879 "good", "foo", fooValue, model_type)); | 884 "good", "foo", fooValue, model_type)); |
| 880 sync_data.push_back(settings_sync_util::CreateData( | 885 sync_data.push_back(settings_sync_util::CreateData( |
| 881 "bad", "foo", fooValue, model_type)); | 886 "bad", "foo", fooValue, model_type)); |
| 882 GetSyncableService(model_type) | 887 GetSyncableService(model_type) |
| 883 ->MergeDataAndStartSyncing( | 888 ->MergeDataAndStartSyncing( |
| 884 model_type, sync_data, std::move(sync_processor_wrapper_), | 889 model_type, sync_data, std::move(sync_processor_wrapper_), |
| 885 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 890 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 886 } | 891 } |
| 887 | 892 |
| 888 EXPECT_EQ(0u, sync_processor_->changes().size()); | 893 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 889 | 894 |
| 890 { | 895 { |
| 891 base::DictionaryValue dict; | 896 base::DictionaryValue dict; |
| 892 dict.Set("foo", fooValue.DeepCopy()); | 897 dict.Set("foo", fooValue.DeepCopy()); |
| 893 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 898 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 894 } | 899 } |
| 895 { | 900 { |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 976 EXPECT_EQ(1u, all_sync_data.size()); | 981 EXPECT_EQ(1u, all_sync_data.size()); |
| 977 EXPECT_EQ("good/foo", syncer::SyncDataLocal(all_sync_data[0]).GetTag()); | 982 EXPECT_EQ("good/foo", syncer::SyncDataLocal(all_sync_data[0]).GetTag()); |
| 978 } | 983 } |
| 979 GetExisting("bad")->set_status_code(ValueStore::OK); | 984 GetExisting("bad")->set_status_code(ValueStore::OK); |
| 980 | 985 |
| 981 // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). | 986 // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). |
| 982 GetSyncableService(model_type) | 987 GetSyncableService(model_type) |
| 983 ->MergeDataAndStartSyncing( | 988 ->MergeDataAndStartSyncing( |
| 984 model_type, syncer::SyncDataList(), | 989 model_type, syncer::SyncDataList(), |
| 985 std::move(sync_processor_wrapper_), | 990 std::move(sync_processor_wrapper_), |
| 986 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 991 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 987 | 992 |
| 988 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 993 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 989 sync_processor_->GetOnlyChange("good", "foo")->change_type()); | 994 sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
| 990 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 995 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 991 sync_processor_->GetOnlyChange("bad", "foo")->change_type()); | 996 sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
| 992 EXPECT_EQ(2u, sync_processor_->changes().size()); | 997 EXPECT_EQ(2u, sync_processor_->changes().size()); |
| 993 | 998 |
| 994 sync_processor_->ClearChanges(); | 999 sync_processor_->ClearChanges(); |
| 995 good->Set(DEFAULTS, "bar", barValue); | 1000 good->Set(DEFAULTS, "bar", barValue); |
| 996 bad->Set(DEFAULTS, "bar", barValue); | 1001 bad->Set(DEFAULTS, "bar", barValue); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1015 good->Set(DEFAULTS, "foo", fooValue); | 1020 good->Set(DEFAULTS, "foo", fooValue); |
| 1016 bad->Set(DEFAULTS, "foo", fooValue); | 1021 bad->Set(DEFAULTS, "foo", fooValue); |
| 1017 | 1022 |
| 1018 // good will successfully push foo:fooValue to sync, but bad will fail to | 1023 // good will successfully push foo:fooValue to sync, but bad will fail to |
| 1019 // get them so won't. | 1024 // get them so won't. |
| 1020 GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); | 1025 GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
| 1021 GetSyncableService(model_type) | 1026 GetSyncableService(model_type) |
| 1022 ->MergeDataAndStartSyncing( | 1027 ->MergeDataAndStartSyncing( |
| 1023 model_type, syncer::SyncDataList(), | 1028 model_type, syncer::SyncDataList(), |
| 1024 std::move(sync_processor_wrapper_), | 1029 std::move(sync_processor_wrapper_), |
| 1025 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1030 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1026 GetExisting("bad")->set_status_code(ValueStore::OK); | 1031 GetExisting("bad")->set_status_code(ValueStore::OK); |
| 1027 | 1032 |
| 1028 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1033 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1029 sync_processor_->GetOnlyChange("good", "foo")->change_type()); | 1034 sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
| 1030 EXPECT_EQ(1u, sync_processor_->changes().size()); | 1035 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| 1031 | 1036 |
| 1032 // bad should now be disabled for sync. | 1037 // bad should now be disabled for sync. |
| 1033 sync_processor_->ClearChanges(); | 1038 sync_processor_->ClearChanges(); |
| 1034 good->Set(DEFAULTS, "bar", barValue); | 1039 good->Set(DEFAULTS, "bar", barValue); |
| 1035 bad->Set(DEFAULTS, "bar", barValue); | 1040 bad->Set(DEFAULTS, "bar", barValue); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1065 // Re-enabling sync without failing should cause the local changes from bad | 1070 // Re-enabling sync without failing should cause the local changes from bad |
| 1066 // to be pushed to sync successfully, as should future changes to bad. | 1071 // to be pushed to sync successfully, as should future changes to bad. |
| 1067 sync_processor_->ClearChanges(); | 1072 sync_processor_->ClearChanges(); |
| 1068 GetSyncableService(model_type)->StopSyncing(model_type); | 1073 GetSyncableService(model_type)->StopSyncing(model_type); |
| 1069 sync_processor_wrapper_.reset( | 1074 sync_processor_wrapper_.reset( |
| 1070 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); | 1075 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
| 1071 GetSyncableService(model_type) | 1076 GetSyncableService(model_type) |
| 1072 ->MergeDataAndStartSyncing( | 1077 ->MergeDataAndStartSyncing( |
| 1073 model_type, syncer::SyncDataList(), | 1078 model_type, syncer::SyncDataList(), |
| 1074 std::move(sync_processor_wrapper_), | 1079 std::move(sync_processor_wrapper_), |
| 1075 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1080 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1076 | 1081 |
| 1077 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1082 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1078 sync_processor_->GetOnlyChange("good", "foo")->change_type()); | 1083 sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
| 1079 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1084 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1080 sync_processor_->GetOnlyChange("good", "bar")->change_type()); | 1085 sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
| 1081 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1086 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1082 sync_processor_->GetOnlyChange("bad", "foo")->change_type()); | 1087 sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
| 1083 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1088 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1084 sync_processor_->GetOnlyChange("bad", "bar")->change_type()); | 1089 sync_processor_->GetOnlyChange("bad", "bar")->change_type()); |
| 1085 EXPECT_EQ(4u, sync_processor_->changes().size()); | 1090 EXPECT_EQ(4u, sync_processor_->changes().size()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1106 ValueStore* bad = AddExtensionAndGetStorage("bad", type); | 1111 ValueStore* bad = AddExtensionAndGetStorage("bad", type); |
| 1107 | 1112 |
| 1108 // Only set bad; setting good will cause it to fail below. | 1113 // Only set bad; setting good will cause it to fail below. |
| 1109 bad->Set(DEFAULTS, "foo", fooValue); | 1114 bad->Set(DEFAULTS, "foo", fooValue); |
| 1110 | 1115 |
| 1111 sync_processor_->set_fail_all_requests(true); | 1116 sync_processor_->set_fail_all_requests(true); |
| 1112 GetSyncableService(model_type) | 1117 GetSyncableService(model_type) |
| 1113 ->MergeDataAndStartSyncing( | 1118 ->MergeDataAndStartSyncing( |
| 1114 model_type, syncer::SyncDataList(), | 1119 model_type, syncer::SyncDataList(), |
| 1115 std::move(sync_processor_wrapper_), | 1120 std::move(sync_processor_wrapper_), |
| 1116 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1121 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1117 sync_processor_->set_fail_all_requests(false); | 1122 sync_processor_->set_fail_all_requests(false); |
| 1118 | 1123 |
| 1119 // Changes from good will be send to sync, changes from bad won't. | 1124 // Changes from good will be send to sync, changes from bad won't. |
| 1120 sync_processor_->ClearChanges(); | 1125 sync_processor_->ClearChanges(); |
| 1121 good->Set(DEFAULTS, "foo", barValue); | 1126 good->Set(DEFAULTS, "foo", barValue); |
| 1122 bad->Set(DEFAULTS, "foo", barValue); | 1127 bad->Set(DEFAULTS, "foo", barValue); |
| 1123 | 1128 |
| 1124 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1129 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1125 sync_processor_->GetOnlyChange("good", "foo")->change_type()); | 1130 sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
| 1126 EXPECT_EQ(1u, sync_processor_->changes().size()); | 1131 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1149 | 1154 |
| 1150 // Restarting sync makes everything work again. | 1155 // Restarting sync makes everything work again. |
| 1151 sync_processor_->ClearChanges(); | 1156 sync_processor_->ClearChanges(); |
| 1152 GetSyncableService(model_type)->StopSyncing(model_type); | 1157 GetSyncableService(model_type)->StopSyncing(model_type); |
| 1153 sync_processor_wrapper_.reset( | 1158 sync_processor_wrapper_.reset( |
| 1154 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); | 1159 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
| 1155 GetSyncableService(model_type) | 1160 GetSyncableService(model_type) |
| 1156 ->MergeDataAndStartSyncing( | 1161 ->MergeDataAndStartSyncing( |
| 1157 model_type, syncer::SyncDataList(), | 1162 model_type, syncer::SyncDataList(), |
| 1158 std::move(sync_processor_wrapper_), | 1163 std::move(sync_processor_wrapper_), |
| 1159 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1164 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1160 | 1165 |
| 1161 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1166 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1162 sync_processor_->GetOnlyChange("good", "foo")->change_type()); | 1167 sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
| 1163 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1168 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1164 sync_processor_->GetOnlyChange("good", "bar")->change_type()); | 1169 sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
| 1165 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1170 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1166 sync_processor_->GetOnlyChange("bad", "foo")->change_type()); | 1171 sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
| 1167 EXPECT_EQ(3u, sync_processor_->changes().size()); | 1172 EXPECT_EQ(3u, sync_processor_->changes().size()); |
| 1168 | 1173 |
| 1169 sync_processor_->ClearChanges(); | 1174 sync_processor_->ClearChanges(); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1184 base::StringValue fooValue("fooValue"); | 1189 base::StringValue fooValue("fooValue"); |
| 1185 base::StringValue barValue("barValue"); | 1190 base::StringValue barValue("barValue"); |
| 1186 | 1191 |
| 1187 ValueStore* good = AddExtensionAndGetStorage("good", type); | 1192 ValueStore* good = AddExtensionAndGetStorage("good", type); |
| 1188 ValueStore* bad = AddExtensionAndGetStorage("bad", type); | 1193 ValueStore* bad = AddExtensionAndGetStorage("bad", type); |
| 1189 | 1194 |
| 1190 GetSyncableService(model_type) | 1195 GetSyncableService(model_type) |
| 1191 ->MergeDataAndStartSyncing( | 1196 ->MergeDataAndStartSyncing( |
| 1192 model_type, syncer::SyncDataList(), | 1197 model_type, syncer::SyncDataList(), |
| 1193 std::move(sync_processor_wrapper_), | 1198 std::move(sync_processor_wrapper_), |
| 1194 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1199 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1195 | 1200 |
| 1196 // bad will fail to send changes. | 1201 // bad will fail to send changes. |
| 1197 good->Set(DEFAULTS, "foo", fooValue); | 1202 good->Set(DEFAULTS, "foo", fooValue); |
| 1198 sync_processor_->set_fail_all_requests(true); | 1203 sync_processor_->set_fail_all_requests(true); |
| 1199 bad->Set(DEFAULTS, "foo", fooValue); | 1204 bad->Set(DEFAULTS, "foo", fooValue); |
| 1200 sync_processor_->set_fail_all_requests(false); | 1205 sync_processor_->set_fail_all_requests(false); |
| 1201 | 1206 |
| 1202 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1207 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1203 sync_processor_->GetOnlyChange("good", "foo")->change_type()); | 1208 sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
| 1204 EXPECT_EQ(1u, sync_processor_->changes().size()); | 1209 EXPECT_EQ(1u, sync_processor_->changes().size()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1236 | 1241 |
| 1237 // Restarting sync makes everything work again. | 1242 // Restarting sync makes everything work again. |
| 1238 sync_processor_->ClearChanges(); | 1243 sync_processor_->ClearChanges(); |
| 1239 GetSyncableService(model_type)->StopSyncing(model_type); | 1244 GetSyncableService(model_type)->StopSyncing(model_type); |
| 1240 sync_processor_wrapper_.reset( | 1245 sync_processor_wrapper_.reset( |
| 1241 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); | 1246 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
| 1242 GetSyncableService(model_type) | 1247 GetSyncableService(model_type) |
| 1243 ->MergeDataAndStartSyncing( | 1248 ->MergeDataAndStartSyncing( |
| 1244 model_type, syncer::SyncDataList(), | 1249 model_type, syncer::SyncDataList(), |
| 1245 std::move(sync_processor_wrapper_), | 1250 std::move(sync_processor_wrapper_), |
| 1246 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1251 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1247 | 1252 |
| 1248 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1253 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1249 sync_processor_->GetOnlyChange("good", "foo")->change_type()); | 1254 sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
| 1250 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1255 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1251 sync_processor_->GetOnlyChange("good", "bar")->change_type()); | 1256 sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
| 1252 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, | 1257 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
| 1253 sync_processor_->GetOnlyChange("bad", "foo")->change_type()); | 1258 sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
| 1254 EXPECT_EQ(3u, sync_processor_->changes().size()); | 1259 EXPECT_EQ(3u, sync_processor_->changes().size()); |
| 1255 | 1260 |
| 1256 sync_processor_->ClearChanges(); | 1261 sync_processor_->ClearChanges(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1273 std::string string_10k; | 1278 std::string string_10k; |
| 1274 for (size_t i = 0; i < 10000; ++i) { | 1279 for (size_t i = 0; i < 10000; ++i) { |
| 1275 string_10k.append("a"); | 1280 string_10k.append("a"); |
| 1276 } | 1281 } |
| 1277 base::StringValue large_value(string_10k); | 1282 base::StringValue large_value(string_10k); |
| 1278 | 1283 |
| 1279 GetSyncableService(model_type) | 1284 GetSyncableService(model_type) |
| 1280 ->MergeDataAndStartSyncing( | 1285 ->MergeDataAndStartSyncing( |
| 1281 model_type, syncer::SyncDataList(), | 1286 model_type, syncer::SyncDataList(), |
| 1282 std::move(sync_processor_wrapper_), | 1287 std::move(sync_processor_wrapper_), |
| 1283 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1288 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1284 | 1289 |
| 1285 // Large local change rejected and doesn't get sent out. | 1290 // Large local change rejected and doesn't get sent out. |
| 1286 ValueStore* storage1 = AddExtensionAndGetStorage("s1", type); | 1291 ValueStore* storage1 = AddExtensionAndGetStorage("s1", type); |
| 1287 EXPECT_FALSE( | 1292 EXPECT_FALSE( |
| 1288 storage1->Set(DEFAULTS, "large_value", large_value)->status().ok()); | 1293 storage1->Set(DEFAULTS, "large_value", large_value)->status().ok()); |
| 1289 EXPECT_EQ(0u, sync_processor_->changes().size()); | 1294 EXPECT_EQ(0u, sync_processor_->changes().size()); |
| 1290 | 1295 |
| 1291 // Large incoming change should still get accepted. | 1296 // Large incoming change should still get accepted. |
| 1292 ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); | 1297 ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); |
| 1293 { | 1298 { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1309 } | 1314 } |
| 1310 | 1315 |
| 1311 TEST_F(ExtensionSettingsSyncTest, Dots) { | 1316 TEST_F(ExtensionSettingsSyncTest, Dots) { |
| 1312 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS; | 1317 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS; |
| 1313 Manifest::Type type = Manifest::TYPE_EXTENSION; | 1318 Manifest::Type type = Manifest::TYPE_EXTENSION; |
| 1314 | 1319 |
| 1315 ValueStore* storage = AddExtensionAndGetStorage("ext", type); | 1320 ValueStore* storage = AddExtensionAndGetStorage("ext", type); |
| 1316 | 1321 |
| 1317 { | 1322 { |
| 1318 syncer::SyncDataList sync_data_list; | 1323 syncer::SyncDataList sync_data_list; |
| 1319 scoped_ptr<base::Value> string_value(new base::StringValue("value")); | 1324 std::unique_ptr<base::Value> string_value(new base::StringValue("value")); |
| 1320 sync_data_list.push_back(settings_sync_util::CreateData( | 1325 sync_data_list.push_back(settings_sync_util::CreateData( |
| 1321 "ext", "key.with.dot", *string_value, model_type)); | 1326 "ext", "key.with.dot", *string_value, model_type)); |
| 1322 | 1327 |
| 1323 GetSyncableService(model_type) | 1328 GetSyncableService(model_type) |
| 1324 ->MergeDataAndStartSyncing( | 1329 ->MergeDataAndStartSyncing( |
| 1325 model_type, sync_data_list, std::move(sync_processor_wrapper_), | 1330 model_type, sync_data_list, std::move(sync_processor_wrapper_), |
| 1326 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1331 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1327 } | 1332 } |
| 1328 | 1333 |
| 1329 // Test dots in keys that come from sync. | 1334 // Test dots in keys that come from sync. |
| 1330 { | 1335 { |
| 1331 ValueStore::ReadResult data = storage->Get(); | 1336 ValueStore::ReadResult data = storage->Get(); |
| 1332 ASSERT_TRUE(data->status().ok()); | 1337 ASSERT_TRUE(data->status().ok()); |
| 1333 | 1338 |
| 1334 base::DictionaryValue expected_data; | 1339 base::DictionaryValue expected_data; |
| 1335 expected_data.SetWithoutPathExpansion( | 1340 expected_data.SetWithoutPathExpansion( |
| 1336 "key.with.dot", | 1341 "key.with.dot", |
| 1337 new base::StringValue("value")); | 1342 new base::StringValue("value")); |
| 1338 EXPECT_TRUE(base::Value::Equals(&expected_data, &data->settings())); | 1343 EXPECT_TRUE(base::Value::Equals(&expected_data, &data->settings())); |
| 1339 } | 1344 } |
| 1340 | 1345 |
| 1341 // Test dots in keys going to sync. | 1346 // Test dots in keys going to sync. |
| 1342 { | 1347 { |
| 1343 scoped_ptr<base::Value> string_value(new base::StringValue("spot")); | 1348 std::unique_ptr<base::Value> string_value(new base::StringValue("spot")); |
| 1344 storage->Set(DEFAULTS, "key.with.spot", *string_value); | 1349 storage->Set(DEFAULTS, "key.with.spot", *string_value); |
| 1345 | 1350 |
| 1346 ASSERT_EQ(1u, sync_processor_->changes().size()); | 1351 ASSERT_EQ(1u, sync_processor_->changes().size()); |
| 1347 SettingSyncData* sync_data = sync_processor_->changes()[0]; | 1352 SettingSyncData* sync_data = sync_processor_->changes()[0]; |
| 1348 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, sync_data->change_type()); | 1353 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, sync_data->change_type()); |
| 1349 EXPECT_EQ("ext", sync_data->extension_id()); | 1354 EXPECT_EQ("ext", sync_data->extension_id()); |
| 1350 EXPECT_EQ("key.with.spot", sync_data->key()); | 1355 EXPECT_EQ("key.with.spot", sync_data->key()); |
| 1351 EXPECT_TRUE(sync_data->value().Equals(string_value.get())); | 1356 EXPECT_TRUE(sync_data->value().Equals(string_value.get())); |
| 1352 } | 1357 } |
| 1353 } | 1358 } |
| 1354 | 1359 |
| 1355 // In other (frontend) tests, we assume that the result of GetStorage | 1360 // In other (frontend) tests, we assume that the result of GetStorage |
| 1356 // is a pointer to the a Storage owned by a Frontend object, but for | 1361 // is a pointer to the a Storage owned by a Frontend object, but for |
| 1357 // the unlimitedStorage case, this might not be true. So, write the | 1362 // the unlimitedStorage case, this might not be true. So, write the |
| 1358 // tests in a "callback" style. We should really rewrite all tests to | 1363 // tests in a "callback" style. We should really rewrite all tests to |
| 1359 // be asynchronous in this way. | 1364 // be asynchronous in this way. |
| 1360 | 1365 |
| 1361 namespace { | 1366 namespace { |
| 1362 | 1367 |
| 1363 static void UnlimitedSyncStorageTestCallback(ValueStore* sync_storage) { | 1368 static void UnlimitedSyncStorageTestCallback(ValueStore* sync_storage) { |
| 1364 // Sync storage should still run out after ~100K; the unlimitedStorage | 1369 // Sync storage should still run out after ~100K; the unlimitedStorage |
| 1365 // permission can't apply to sync. | 1370 // permission can't apply to sync. |
| 1366 scoped_ptr<base::Value> kilobyte = util::CreateKilobyte(); | 1371 std::unique_ptr<base::Value> kilobyte = util::CreateKilobyte(); |
| 1367 for (int i = 0; i < 100; ++i) { | 1372 for (int i = 0; i < 100; ++i) { |
| 1368 sync_storage->Set(ValueStore::DEFAULTS, base::IntToString(i), *kilobyte); | 1373 sync_storage->Set(ValueStore::DEFAULTS, base::IntToString(i), *kilobyte); |
| 1369 } | 1374 } |
| 1370 | 1375 |
| 1371 EXPECT_FALSE(sync_storage->Set(ValueStore::DEFAULTS, "WillError", *kilobyte) | 1376 EXPECT_FALSE(sync_storage->Set(ValueStore::DEFAULTS, "WillError", *kilobyte) |
| 1372 ->status().ok()); | 1377 ->status().ok()); |
| 1373 } | 1378 } |
| 1374 | 1379 |
| 1375 static void UnlimitedLocalStorageTestCallback(ValueStore* local_storage) { | 1380 static void UnlimitedLocalStorageTestCallback(ValueStore* local_storage) { |
| 1376 // Local storage should never run out. | 1381 // Local storage should never run out. |
| 1377 scoped_ptr<base::Value> megabyte = util::CreateMegabyte(); | 1382 std::unique_ptr<base::Value> megabyte = util::CreateMegabyte(); |
| 1378 for (int i = 0; i < 7; ++i) { | 1383 for (int i = 0; i < 7; ++i) { |
| 1379 local_storage->Set(ValueStore::DEFAULTS, base::IntToString(i), *megabyte); | 1384 local_storage->Set(ValueStore::DEFAULTS, base::IntToString(i), *megabyte); |
| 1380 } | 1385 } |
| 1381 | 1386 |
| 1382 EXPECT_TRUE(local_storage->Set(ValueStore::DEFAULTS, "WontError", *megabyte) | 1387 EXPECT_TRUE(local_storage->Set(ValueStore::DEFAULTS, "WontError", *megabyte) |
| 1383 ->status().ok()); | 1388 ->status().ok()); |
| 1384 } | 1389 } |
| 1385 | 1390 |
| 1386 } // namespace | 1391 } // namespace |
| 1387 | 1392 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1405 settings_namespace::SYNC, | 1410 settings_namespace::SYNC, |
| 1406 base::Bind(&UnlimitedSyncStorageTestCallback)); | 1411 base::Bind(&UnlimitedSyncStorageTestCallback)); |
| 1407 frontend_->RunWithStorage(extension, | 1412 frontend_->RunWithStorage(extension, |
| 1408 settings_namespace::LOCAL, | 1413 settings_namespace::LOCAL, |
| 1409 base::Bind(&UnlimitedLocalStorageTestCallback)); | 1414 base::Bind(&UnlimitedLocalStorageTestCallback)); |
| 1410 | 1415 |
| 1411 base::MessageLoop::current()->RunUntilIdle(); | 1416 base::MessageLoop::current()->RunUntilIdle(); |
| 1412 } | 1417 } |
| 1413 | 1418 |
| 1414 } // namespace extensions | 1419 } // namespace extensions |
| OLD | NEW |