| 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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 for (SettingSyncDataList::iterator it = changes_.begin(); | 118 for (SettingSyncDataList::iterator it = changes_.begin(); |
| 119 it != changes_.end(); ++it) { | 119 it != changes_.end(); ++it) { |
| 120 if (it->extension_id() == extension_id && it->key() == key) { | 120 if (it->extension_id() == extension_id && it->key() == key) { |
| 121 matching_changes.push_back(*it); | 121 matching_changes.push_back(*it); |
| 122 } | 122 } |
| 123 } | 123 } |
| 124 if (matching_changes.empty()) { | 124 if (matching_changes.empty()) { |
| 125 ADD_FAILURE() << "No matching changes for " << extension_id << "/" << | 125 ADD_FAILURE() << "No matching changes for " << extension_id << "/" << |
| 126 key << " (out of " << changes_.size() << ")"; | 126 key << " (out of " << changes_.size() << ")"; |
| 127 return SettingSyncData( | 127 return SettingSyncData( |
| 128 SyncChange::ACTION_INVALID, "", "", new DictionaryValue()); | 128 SyncChange::ACTION_INVALID, "", "", |
| 129 scoped_ptr<Value>(new DictionaryValue())); |
| 129 } | 130 } |
| 130 if (matching_changes.size() != 1u) { | 131 if (matching_changes.size() != 1u) { |
| 131 ADD_FAILURE() << matching_changes.size() << " matching changes for " << | 132 ADD_FAILURE() << matching_changes.size() << " matching changes for " << |
| 132 extension_id << "/" << key << " (out of " << changes_.size() << ")"; | 133 extension_id << "/" << key << " (out of " << changes_.size() << ")"; |
| 133 } | 134 } |
| 134 return matching_changes[0]; | 135 return matching_changes[0]; |
| 135 } | 136 } |
| 136 | 137 |
| 137 private: | 138 private: |
| 138 SettingSyncDataList changes_; | 139 SettingSyncDataList changes_; |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 std::map<std::string, SettingSyncDataList> all_sync_data = | 280 std::map<std::string, SettingSyncDataList> all_sync_data = |
| 280 GetAllSyncData(model_type); | 281 GetAllSyncData(model_type); |
| 281 EXPECT_EQ(2u, all_sync_data.size()); | 282 EXPECT_EQ(2u, all_sync_data.size()); |
| 282 EXPECT_EQ(1u, all_sync_data["s1"].size()); | 283 EXPECT_EQ(1u, all_sync_data["s1"].size()); |
| 283 EXPECT_PRED_FORMAT2(ValuesEq, &value1, &all_sync_data["s1"][0].value()); | 284 EXPECT_PRED_FORMAT2(ValuesEq, &value1, &all_sync_data["s1"][0].value()); |
| 284 EXPECT_EQ(1u, all_sync_data["s2"].size()); | 285 EXPECT_EQ(1u, all_sync_data["s2"].size()); |
| 285 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value()); | 286 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value()); |
| 286 | 287 |
| 287 SyncDataList sync_data; | 288 SyncDataList sync_data; |
| 288 sync_data.push_back(settings_sync_util::CreateData( | 289 sync_data.push_back(settings_sync_util::CreateData( |
| 289 "s1", "foo", value1)); | 290 "s1", "foo", value1, model_type)); |
| 290 sync_data.push_back(settings_sync_util::CreateData( | 291 sync_data.push_back(settings_sync_util::CreateData( |
| 291 "s2", "bar", value2)); | 292 "s2", "bar", value2, model_type)); |
| 292 | 293 |
| 293 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 294 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 294 model_type, sync_data, &sync_); | 295 model_type, sync_data, &sync_); |
| 295 | 296 |
| 296 // Already in sync, so no changes. | 297 // Already in sync, so no changes. |
| 297 EXPECT_EQ(0u, sync_.changes().size()); | 298 EXPECT_EQ(0u, sync_.changes().size()); |
| 298 | 299 |
| 299 // Regression test: not-changing the synced value shouldn't result in a sync | 300 // Regression test: not-changing the synced value shouldn't result in a sync |
| 300 // change, and changing the synced value should result in an update. | 301 // change, and changing the synced value should result in an update. |
| 301 storage1->Set(DEFAULTS, "foo", value1); | 302 storage1->Set(DEFAULTS, "foo", value1); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 // Maintain dictionaries mirrored to the expected values of the settings in | 351 // Maintain dictionaries mirrored to the expected values of the settings in |
| 351 // each storage area. | 352 // each storage area. |
| 352 DictionaryValue expected1, expected2; | 353 DictionaryValue expected1, expected2; |
| 353 | 354 |
| 354 // Pre-populate one of the storage areas. | 355 // Pre-populate one of the storage areas. |
| 355 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 356 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| 356 storage1->Set(DEFAULTS, "overwriteMe", value1); | 357 storage1->Set(DEFAULTS, "overwriteMe", value1); |
| 357 | 358 |
| 358 SyncDataList sync_data; | 359 SyncDataList sync_data; |
| 359 sync_data.push_back(settings_sync_util::CreateData( | 360 sync_data.push_back(settings_sync_util::CreateData( |
| 360 "s1", "foo", value1)); | 361 "s1", "foo", value1, model_type)); |
| 361 sync_data.push_back(settings_sync_util::CreateData( | 362 sync_data.push_back(settings_sync_util::CreateData( |
| 362 "s2", "bar", value2)); | 363 "s2", "bar", value2, model_type)); |
| 363 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 364 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 364 model_type, sync_data, &sync_); | 365 model_type, sync_data, &sync_); |
| 365 expected1.Set("foo", value1.DeepCopy()); | 366 expected1.Set("foo", value1.DeepCopy()); |
| 366 expected2.Set("bar", value2.DeepCopy()); | 367 expected2.Set("bar", value2.DeepCopy()); |
| 367 | 368 |
| 368 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 369 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| 369 | 370 |
| 370 // All changes should be local, so no sync changes. | 371 // All changes should be local, so no sync changes. |
| 371 EXPECT_EQ(0u, sync_.changes().size()); | 372 EXPECT_EQ(0u, sync_.changes().size()); |
| 372 | 373 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 391 | 392 |
| 392 // Make storage1 initialised from local data, storage2 initialised from sync. | 393 // Make storage1 initialised from local data, storage2 initialised from sync. |
| 393 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 394 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| 394 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 395 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| 395 | 396 |
| 396 storage1->Set(DEFAULTS, "foo", value1); | 397 storage1->Set(DEFAULTS, "foo", value1); |
| 397 expected1.Set("foo", value1.DeepCopy()); | 398 expected1.Set("foo", value1.DeepCopy()); |
| 398 | 399 |
| 399 SyncDataList sync_data; | 400 SyncDataList sync_data; |
| 400 sync_data.push_back(settings_sync_util::CreateData( | 401 sync_data.push_back(settings_sync_util::CreateData( |
| 401 "s2", "bar", value2)); | 402 "s2", "bar", value2, model_type)); |
| 402 | 403 |
| 403 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 404 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 404 model_type, sync_data, &sync_); | 405 model_type, sync_data, &sync_); |
| 405 expected2.Set("bar", value2.DeepCopy()); | 406 expected2.Set("bar", value2.DeepCopy()); |
| 406 | 407 |
| 407 // Make sync add some settings. | 408 // Make sync add some settings. |
| 408 SyncChangeList change_list; | 409 SyncChangeList change_list; |
| 409 change_list.push_back(settings_sync_util::CreateAdd( | 410 change_list.push_back(settings_sync_util::CreateAdd( |
| 410 "s1", "bar", value2)); | 411 "s1", "bar", value2, model_type)); |
| 411 change_list.push_back(settings_sync_util::CreateAdd( | 412 change_list.push_back(settings_sync_util::CreateAdd( |
| 412 "s2", "foo", value1)); | 413 "s2", "foo", value1, model_type)); |
| 413 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 414 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 414 expected1.Set("bar", value2.DeepCopy()); | 415 expected1.Set("bar", value2.DeepCopy()); |
| 415 expected2.Set("foo", value1.DeepCopy()); | 416 expected2.Set("foo", value1.DeepCopy()); |
| 416 | 417 |
| 417 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); | 418 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
| 418 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); | 419 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
| 419 | 420 |
| 420 // Make sync update some settings, storage1 the new setting, storage2 the | 421 // Make sync update some settings, storage1 the new setting, storage2 the |
| 421 // initial setting. | 422 // initial setting. |
| 422 change_list.clear(); | 423 change_list.clear(); |
| 423 change_list.push_back(settings_sync_util::CreateUpdate( | 424 change_list.push_back(settings_sync_util::CreateUpdate( |
| 424 "s1", "bar", value2)); | 425 "s1", "bar", value2, model_type)); |
| 425 change_list.push_back(settings_sync_util::CreateUpdate( | 426 change_list.push_back(settings_sync_util::CreateUpdate( |
| 426 "s2", "bar", value1)); | 427 "s2", "bar", value1, model_type)); |
| 427 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 428 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 428 expected1.Set("bar", value2.DeepCopy()); | 429 expected1.Set("bar", value2.DeepCopy()); |
| 429 expected2.Set("bar", value1.DeepCopy()); | 430 expected2.Set("bar", value1.DeepCopy()); |
| 430 | 431 |
| 431 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); | 432 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
| 432 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); | 433 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
| 433 | 434 |
| 434 // Make sync remove some settings, storage1 the initial setting, storage2 the | 435 // Make sync remove some settings, storage1 the initial setting, storage2 the |
| 435 // new setting. | 436 // new setting. |
| 436 change_list.clear(); | 437 change_list.clear(); |
| 437 change_list.push_back(settings_sync_util::CreateDelete( | 438 change_list.push_back(settings_sync_util::CreateDelete( |
| 438 "s1", "foo")); | 439 "s1", "foo", model_type)); |
| 439 change_list.push_back(settings_sync_util::CreateDelete( | 440 change_list.push_back(settings_sync_util::CreateDelete( |
| 440 "s2", "foo")); | 441 "s2", "foo", model_type)); |
| 441 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 442 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 442 expected1.Remove("foo", NULL); | 443 expected1.Remove("foo", NULL); |
| 443 expected2.Remove("foo", NULL); | 444 expected2.Remove("foo", NULL); |
| 444 | 445 |
| 445 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); | 446 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
| 446 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); | 447 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
| 447 | 448 |
| 448 GetSyncableService(model_type)->StopSyncing(model_type); | 449 GetSyncableService(model_type)->StopSyncing(model_type); |
| 449 } | 450 } |
| 450 | 451 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 461 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 462 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| 462 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 463 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| 463 SettingsStorage* storage3 = AddExtensionAndGetStorage("s3", type); | 464 SettingsStorage* storage3 = AddExtensionAndGetStorage("s3", type); |
| 464 SettingsStorage* storage4 = AddExtensionAndGetStorage("s4", type); | 465 SettingsStorage* storage4 = AddExtensionAndGetStorage("s4", type); |
| 465 | 466 |
| 466 storage1->Set(DEFAULTS, "foo", value1); | 467 storage1->Set(DEFAULTS, "foo", value1); |
| 467 storage2->Set(DEFAULTS, "foo", value1); | 468 storage2->Set(DEFAULTS, "foo", value1); |
| 468 | 469 |
| 469 SyncDataList sync_data; | 470 SyncDataList sync_data; |
| 470 sync_data.push_back(settings_sync_util::CreateData( | 471 sync_data.push_back(settings_sync_util::CreateData( |
| 471 "s3", "bar", value2)); | 472 "s3", "bar", value2, model_type)); |
| 472 sync_data.push_back(settings_sync_util::CreateData( | 473 sync_data.push_back(settings_sync_util::CreateData( |
| 473 "s4", "bar", value2)); | 474 "s4", "bar", value2, model_type)); |
| 474 | 475 |
| 475 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 476 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 476 model_type, sync_data, &sync_); | 477 model_type, sync_data, &sync_); |
| 477 | 478 |
| 478 // Add something locally. | 479 // Add something locally. |
| 479 storage1->Set(DEFAULTS, "bar", value2); | 480 storage1->Set(DEFAULTS, "bar", value2); |
| 480 storage2->Set(DEFAULTS, "bar", value2); | 481 storage2->Set(DEFAULTS, "bar", value2); |
| 481 storage3->Set(DEFAULTS, "foo", value1); | 482 storage3->Set(DEFAULTS, "foo", value1); |
| 482 storage4->Set(DEFAULTS, "foo", value1); | 483 storage4->Set(DEFAULTS, "foo", value1); |
| 483 | 484 |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 | 611 |
| 611 std::map<std::string, SettingSyncDataList> app_sync_data = | 612 std::map<std::string, SettingSyncDataList> app_sync_data = |
| 612 GetAllSyncData(syncable::APP_SETTINGS); | 613 GetAllSyncData(syncable::APP_SETTINGS); |
| 613 EXPECT_EQ(1u, app_sync_data.size()); | 614 EXPECT_EQ(1u, app_sync_data.size()); |
| 614 EXPECT_EQ(1u, app_sync_data["s2"].size()); | 615 EXPECT_EQ(1u, app_sync_data["s2"].size()); |
| 615 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &app_sync_data["s2"][0].value()); | 616 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &app_sync_data["s2"][0].value()); |
| 616 | 617 |
| 617 // Stop each separately, there should be no changes either time. | 618 // Stop each separately, there should be no changes either time. |
| 618 SyncDataList sync_data; | 619 SyncDataList sync_data; |
| 619 sync_data.push_back(settings_sync_util::CreateData( | 620 sync_data.push_back(settings_sync_util::CreateData( |
| 620 "s1", "foo", value1)); | 621 "s1", "foo", value1, syncable::EXTENSION_SETTINGS)); |
| 621 | 622 |
| 622 GetSyncableService(syncable::EXTENSION_SETTINGS)-> | 623 GetSyncableService(syncable::EXTENSION_SETTINGS)-> |
| 623 MergeDataAndStartSyncing(syncable::EXTENSION_SETTINGS, sync_data, &sync_); | 624 MergeDataAndStartSyncing(syncable::EXTENSION_SETTINGS, sync_data, &sync_); |
| 624 GetSyncableService(syncable::EXTENSION_SETTINGS)-> | 625 GetSyncableService(syncable::EXTENSION_SETTINGS)-> |
| 625 StopSyncing(syncable::EXTENSION_SETTINGS); | 626 StopSyncing(syncable::EXTENSION_SETTINGS); |
| 626 EXPECT_EQ(0u, sync_.changes().size()); | 627 EXPECT_EQ(0u, sync_.changes().size()); |
| 627 | 628 |
| 628 sync_data.clear(); | 629 sync_data.clear(); |
| 629 sync_data.push_back(settings_sync_util::CreateData( | 630 sync_data.push_back(settings_sync_util::CreateData( |
| 630 "s2", "bar", value2)); | 631 "s2", "bar", value2, syncable::APP_SETTINGS)); |
| 631 | 632 |
| 632 GetSyncableService(syncable::APP_SETTINGS)-> | 633 GetSyncableService(syncable::APP_SETTINGS)-> |
| 633 MergeDataAndStartSyncing(syncable::APP_SETTINGS, sync_data, &sync_); | 634 MergeDataAndStartSyncing(syncable::APP_SETTINGS, sync_data, &sync_); |
| 634 GetSyncableService(syncable::APP_SETTINGS)-> | 635 GetSyncableService(syncable::APP_SETTINGS)-> |
| 635 StopSyncing(syncable::APP_SETTINGS); | 636 StopSyncing(syncable::APP_SETTINGS); |
| 636 EXPECT_EQ(0u, sync_.changes().size()); | 637 EXPECT_EQ(0u, sync_.changes().size()); |
| 637 } | 638 } |
| 638 | 639 |
| 639 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { | 640 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
| 640 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 641 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
| 641 Extension::Type type = Extension::TYPE_EXTENSION; | 642 Extension::Type type = Extension::TYPE_EXTENSION; |
| 642 | 643 |
| 643 StringValue fooValue("fooValue"); | 644 StringValue fooValue("fooValue"); |
| 644 StringValue barValue("barValue"); | 645 StringValue barValue("barValue"); |
| 645 | 646 |
| 646 // There is a bit of a convoluted method to get storage areas that can fail; | 647 // There is a bit of a convoluted method to get storage areas that can fail; |
| 647 // hand out TestingSettingsStorage object then toggle them failing/succeeding | 648 // hand out TestingSettingsStorage object then toggle them failing/succeeding |
| 648 // as necessary. | 649 // as necessary. |
| 649 TestingSettingsStorageFactory* testing_factory = | 650 TestingSettingsStorageFactory* testing_factory = |
| 650 new TestingSettingsStorageFactory(); | 651 new TestingSettingsStorageFactory(); |
| 651 storage_factory_->Reset(testing_factory); | 652 storage_factory_->Reset(testing_factory); |
| 652 | 653 |
| 653 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 654 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
| 654 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 655 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
| 655 | 656 |
| 656 // Make bad fail for incoming sync changes. | 657 // Make bad fail for incoming sync changes. |
| 657 testing_factory->GetExisting("bad")->SetFailAllRequests(true); | 658 testing_factory->GetExisting("bad")->SetFailAllRequests(true); |
| 658 { | 659 { |
| 659 SyncDataList sync_data; | 660 SyncDataList sync_data; |
| 660 sync_data.push_back( | 661 sync_data.push_back(settings_sync_util::CreateData( |
| 661 settings_sync_util::CreateData("good", "foo", fooValue)); | 662 "good", "foo", fooValue, model_type)); |
| 662 sync_data.push_back( | 663 sync_data.push_back(settings_sync_util::CreateData( |
| 663 settings_sync_util::CreateData("bad", "foo", fooValue)); | 664 "bad", "foo", fooValue, model_type)); |
| 664 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 665 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 665 model_type, sync_data, &sync_); | 666 model_type, sync_data, &sync_); |
| 666 } | 667 } |
| 667 testing_factory->GetExisting("bad")->SetFailAllRequests(false); | 668 testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
| 668 | 669 |
| 669 { | 670 { |
| 670 DictionaryValue dict; | 671 DictionaryValue dict; |
| 671 dict.Set("foo", fooValue.DeepCopy()); | 672 dict.Set("foo", fooValue.DeepCopy()); |
| 672 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 673 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 673 } | 674 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 695 { | 696 { |
| 696 DictionaryValue dict; | 697 DictionaryValue dict; |
| 697 dict.Set("bar", barValue.DeepCopy()); | 698 dict.Set("bar", barValue.DeepCopy()); |
| 698 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 699 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| 699 } | 700 } |
| 700 | 701 |
| 701 // Changes received from sync should go to good but not bad (even when it's | 702 // Changes received from sync should go to good but not bad (even when it's |
| 702 // not failing). | 703 // not failing). |
| 703 { | 704 { |
| 704 SyncChangeList change_list; | 705 SyncChangeList change_list; |
| 705 change_list.push_back( | 706 change_list.push_back(settings_sync_util::CreateUpdate( |
| 706 settings_sync_util::CreateUpdate("good", "foo", barValue)); | 707 "good", "foo", barValue, model_type)); |
| 707 // (Sending UPDATE here even though it's adding, since that's what the state | 708 // (Sending UPDATE here even though it's adding, since that's what the state |
| 708 // of sync is. In any case, it won't work.) | 709 // of sync is. In any case, it won't work.) |
| 709 change_list.push_back( | 710 change_list.push_back(settings_sync_util::CreateUpdate( |
| 710 settings_sync_util::CreateUpdate("bad", "foo", barValue)); | 711 "bad", "foo", barValue, model_type)); |
| 711 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 712 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 712 } | 713 } |
| 713 | 714 |
| 714 { | 715 { |
| 715 DictionaryValue dict; | 716 DictionaryValue dict; |
| 716 dict.Set("foo", barValue.DeepCopy()); | 717 dict.Set("foo", barValue.DeepCopy()); |
| 717 dict.Set("bar", barValue.DeepCopy()); | 718 dict.Set("bar", barValue.DeepCopy()); |
| 718 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 719 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 719 } | 720 } |
| 720 { | 721 { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 743 { | 744 { |
| 744 DictionaryValue dict; | 745 DictionaryValue dict; |
| 745 dict.Set("bar", fooValue.DeepCopy()); | 746 dict.Set("bar", fooValue.DeepCopy()); |
| 746 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 747 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| 747 } | 748 } |
| 748 | 749 |
| 749 // Failing ProcessSyncChanges shouldn't go to the storage. | 750 // Failing ProcessSyncChanges shouldn't go to the storage. |
| 750 testing_factory->GetExisting("bad")->SetFailAllRequests(true); | 751 testing_factory->GetExisting("bad")->SetFailAllRequests(true); |
| 751 { | 752 { |
| 752 SyncChangeList change_list; | 753 SyncChangeList change_list; |
| 753 change_list.push_back( | 754 change_list.push_back(settings_sync_util::CreateUpdate( |
| 754 settings_sync_util::CreateUpdate("good", "foo", fooValue)); | 755 "good", "foo", fooValue, model_type)); |
| 755 // (Ditto.) | 756 // (Ditto.) |
| 756 change_list.push_back( | 757 change_list.push_back(settings_sync_util::CreateUpdate( |
| 757 settings_sync_util::CreateUpdate("bad", "foo", fooValue)); | 758 "bad", "foo", fooValue, model_type)); |
| 758 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 759 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 759 } | 760 } |
| 760 testing_factory->GetExisting("bad")->SetFailAllRequests(false); | 761 testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
| 761 | 762 |
| 762 { | 763 { |
| 763 DictionaryValue dict; | 764 DictionaryValue dict; |
| 764 dict.Set("foo", fooValue.DeepCopy()); | 765 dict.Set("foo", fooValue.DeepCopy()); |
| 765 dict.Set("bar", fooValue.DeepCopy()); | 766 dict.Set("bar", fooValue.DeepCopy()); |
| 766 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 767 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 767 } | 768 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 799 SyncChange::ACTION_UPDATE, | 800 SyncChange::ACTION_UPDATE, |
| 800 sync_.GetOnlyChange("good", "bar").change_type()); | 801 sync_.GetOnlyChange("good", "bar").change_type()); |
| 801 EXPECT_EQ( | 802 EXPECT_EQ( |
| 802 SyncChange::ACTION_UPDATE, | 803 SyncChange::ACTION_UPDATE, |
| 803 sync_.GetOnlyChange("bad", "bar").change_type()); | 804 sync_.GetOnlyChange("bad", "bar").change_type()); |
| 804 EXPECT_EQ(2u, sync_.changes().size()); | 805 EXPECT_EQ(2u, sync_.changes().size()); |
| 805 | 806 |
| 806 // And ProcessSyncChanges work, too. | 807 // And ProcessSyncChanges work, too. |
| 807 { | 808 { |
| 808 SyncChangeList change_list; | 809 SyncChangeList change_list; |
| 809 change_list.push_back( | 810 change_list.push_back(settings_sync_util::CreateUpdate( |
| 810 settings_sync_util::CreateUpdate("good", "bar", fooValue)); | 811 "good", "bar", fooValue, model_type)); |
| 811 change_list.push_back( | 812 change_list.push_back(settings_sync_util::CreateUpdate( |
| 812 settings_sync_util::CreateUpdate("bad", "bar", fooValue)); | 813 "bad", "bar", fooValue, model_type)); |
| 813 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 814 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 814 } | 815 } |
| 815 | 816 |
| 816 { | 817 { |
| 817 DictionaryValue dict; | 818 DictionaryValue dict; |
| 818 dict.Set("foo", fooValue.DeepCopy()); | 819 dict.Set("foo", fooValue.DeepCopy()); |
| 819 dict.Set("bar", fooValue.DeepCopy()); | 820 dict.Set("bar", fooValue.DeepCopy()); |
| 820 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 821 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 821 } | 822 } |
| 822 { | 823 { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 838 TestingSettingsStorageFactory* testing_factory = | 839 TestingSettingsStorageFactory* testing_factory = |
| 839 new TestingSettingsStorageFactory(); | 840 new TestingSettingsStorageFactory(); |
| 840 storage_factory_->Reset(testing_factory); | 841 storage_factory_->Reset(testing_factory); |
| 841 | 842 |
| 842 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 843 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
| 843 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 844 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
| 844 | 845 |
| 845 // Unlike before, initially succeeding MergeDataAndStartSyncing. | 846 // Unlike before, initially succeeding MergeDataAndStartSyncing. |
| 846 { | 847 { |
| 847 SyncDataList sync_data; | 848 SyncDataList sync_data; |
| 848 sync_data.push_back( | 849 sync_data.push_back(settings_sync_util::CreateData( |
| 849 settings_sync_util::CreateData("good", "foo", fooValue)); | 850 "good", "foo", fooValue, model_type)); |
| 850 sync_data.push_back( | 851 sync_data.push_back(settings_sync_util::CreateData( |
| 851 settings_sync_util::CreateData("bad", "foo", fooValue)); | 852 "bad", "foo", fooValue, model_type)); |
| 852 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 853 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| 853 model_type, sync_data, &sync_); | 854 model_type, sync_data, &sync_); |
| 854 } | 855 } |
| 855 | 856 |
| 856 EXPECT_EQ(0u, sync_.changes().size()); | 857 EXPECT_EQ(0u, sync_.changes().size()); |
| 857 | 858 |
| 858 { | 859 { |
| 859 DictionaryValue dict; | 860 DictionaryValue dict; |
| 860 dict.Set("foo", fooValue.DeepCopy()); | 861 dict.Set("foo", fooValue.DeepCopy()); |
| 861 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 862 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 862 } | 863 } |
| 863 { | 864 { |
| 864 DictionaryValue dict; | 865 DictionaryValue dict; |
| 865 dict.Set("foo", fooValue.DeepCopy()); | 866 dict.Set("foo", fooValue.DeepCopy()); |
| 866 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 867 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| 867 } | 868 } |
| 868 | 869 |
| 869 // Now fail ProcessSyncChanges for bad. | 870 // Now fail ProcessSyncChanges for bad. |
| 870 testing_factory->GetExisting("bad")->SetFailAllRequests(true); | 871 testing_factory->GetExisting("bad")->SetFailAllRequests(true); |
| 871 { | 872 { |
| 872 SyncChangeList change_list; | 873 SyncChangeList change_list; |
| 873 change_list.push_back( | 874 change_list.push_back(settings_sync_util::CreateAdd( |
| 874 settings_sync_util::CreateAdd("good", "bar", barValue)); | 875 "good", "bar", barValue, model_type)); |
| 875 change_list.push_back( | 876 change_list.push_back(settings_sync_util::CreateAdd( |
| 876 settings_sync_util::CreateAdd("bad", "bar", barValue)); | 877 "bad", "bar", barValue, model_type)); |
| 877 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 878 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 878 } | 879 } |
| 879 testing_factory->GetExisting("bad")->SetFailAllRequests(false); | 880 testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
| 880 | 881 |
| 881 { | 882 { |
| 882 DictionaryValue dict; | 883 DictionaryValue dict; |
| 883 dict.Set("foo", fooValue.DeepCopy()); | 884 dict.Set("foo", fooValue.DeepCopy()); |
| 884 dict.Set("bar", barValue.DeepCopy()); | 885 dict.Set("bar", barValue.DeepCopy()); |
| 885 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 886 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 886 } | 887 } |
| 887 { | 888 { |
| 888 DictionaryValue dict; | 889 DictionaryValue dict; |
| 889 dict.Set("foo", fooValue.DeepCopy()); | 890 dict.Set("foo", fooValue.DeepCopy()); |
| 890 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 891 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
| 891 } | 892 } |
| 892 | 893 |
| 893 // No more changes sent to sync for bad. | 894 // No more changes sent to sync for bad. |
| 894 sync_.ClearChanges(); | 895 sync_.ClearChanges(); |
| 895 good->Set(DEFAULTS, "foo", barValue); | 896 good->Set(DEFAULTS, "foo", barValue); |
| 896 bad->Set(DEFAULTS, "foo", barValue); | 897 bad->Set(DEFAULTS, "foo", barValue); |
| 897 | 898 |
| 898 EXPECT_EQ( | 899 EXPECT_EQ( |
| 899 SyncChange::ACTION_UPDATE, | 900 SyncChange::ACTION_UPDATE, |
| 900 sync_.GetOnlyChange("good", "foo").change_type()); | 901 sync_.GetOnlyChange("good", "foo").change_type()); |
| 901 EXPECT_EQ(1u, sync_.changes().size()); | 902 EXPECT_EQ(1u, sync_.changes().size()); |
| 902 | 903 |
| 903 // No more changes received from sync should go to bad. | 904 // No more changes received from sync should go to bad. |
| 904 { | 905 { |
| 905 SyncChangeList change_list; | 906 SyncChangeList change_list; |
| 906 change_list.push_back( | 907 change_list.push_back(settings_sync_util::CreateAdd( |
| 907 settings_sync_util::CreateAdd("good", "foo", fooValue)); | 908 "good", "foo", fooValue, model_type)); |
| 908 change_list.push_back( | 909 change_list.push_back(settings_sync_util::CreateAdd( |
| 909 settings_sync_util::CreateAdd("bad", "foo", fooValue)); | 910 "bad", "foo", fooValue, model_type)); |
| 910 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 911 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 911 } | 912 } |
| 912 | 913 |
| 913 { | 914 { |
| 914 DictionaryValue dict; | 915 DictionaryValue dict; |
| 915 dict.Set("foo", fooValue.DeepCopy()); | 916 dict.Set("foo", fooValue.DeepCopy()); |
| 916 dict.Set("bar", barValue.DeepCopy()); | 917 dict.Set("bar", barValue.DeepCopy()); |
| 917 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 918 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 918 } | 919 } |
| 919 { | 920 { |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1010 good->Set(DEFAULTS, "bar", barValue); | 1011 good->Set(DEFAULTS, "bar", barValue); |
| 1011 bad->Set(DEFAULTS, "bar", barValue); | 1012 bad->Set(DEFAULTS, "bar", barValue); |
| 1012 | 1013 |
| 1013 EXPECT_EQ( | 1014 EXPECT_EQ( |
| 1014 SyncChange::ACTION_ADD, | 1015 SyncChange::ACTION_ADD, |
| 1015 sync_.GetOnlyChange("good", "bar").change_type()); | 1016 sync_.GetOnlyChange("good", "bar").change_type()); |
| 1016 EXPECT_EQ(1u, sync_.changes().size()); | 1017 EXPECT_EQ(1u, sync_.changes().size()); |
| 1017 | 1018 |
| 1018 { | 1019 { |
| 1019 SyncChangeList change_list; | 1020 SyncChangeList change_list; |
| 1020 change_list.push_back( | 1021 change_list.push_back(settings_sync_util::CreateUpdate( |
| 1021 settings_sync_util::CreateUpdate("good", "foo", barValue)); | 1022 "good", "foo", barValue, model_type)); |
| 1022 // (Sending ADD here even though it's updating, since that's what the state | 1023 // (Sending ADD here even though it's updating, since that's what the state |
| 1023 // of sync is. In any case, it won't work.) | 1024 // of sync is. In any case, it won't work.) |
| 1024 change_list.push_back( | 1025 change_list.push_back(settings_sync_util::CreateAdd( |
| 1025 settings_sync_util::CreateAdd("bad", "foo", barValue)); | 1026 "bad", "foo", barValue, model_type)); |
| 1026 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1027 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 1027 } | 1028 } |
| 1028 | 1029 |
| 1029 { | 1030 { |
| 1030 DictionaryValue dict; | 1031 DictionaryValue dict; |
| 1031 dict.Set("foo", barValue.DeepCopy()); | 1032 dict.Set("foo", barValue.DeepCopy()); |
| 1032 dict.Set("bar", barValue.DeepCopy()); | 1033 dict.Set("bar", barValue.DeepCopy()); |
| 1033 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 1034 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 1034 } | 1035 } |
| 1035 { | 1036 { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1101 bad->Set(DEFAULTS, "foo", barValue); | 1102 bad->Set(DEFAULTS, "foo", barValue); |
| 1102 | 1103 |
| 1103 EXPECT_EQ( | 1104 EXPECT_EQ( |
| 1104 SyncChange::ACTION_ADD, | 1105 SyncChange::ACTION_ADD, |
| 1105 sync_.GetOnlyChange("good", "foo").change_type()); | 1106 sync_.GetOnlyChange("good", "foo").change_type()); |
| 1106 EXPECT_EQ(1u, sync_.changes().size()); | 1107 EXPECT_EQ(1u, sync_.changes().size()); |
| 1107 | 1108 |
| 1108 // Changes from sync will be sent to good, not to bad. | 1109 // Changes from sync will be sent to good, not to bad. |
| 1109 { | 1110 { |
| 1110 SyncChangeList change_list; | 1111 SyncChangeList change_list; |
| 1111 change_list.push_back( | 1112 change_list.push_back(settings_sync_util::CreateAdd( |
| 1112 settings_sync_util::CreateAdd("good", "bar", barValue)); | 1113 "good", "bar", barValue, model_type)); |
| 1113 change_list.push_back( | 1114 change_list.push_back(settings_sync_util::CreateAdd( |
| 1114 settings_sync_util::CreateAdd("bad", "bar", barValue)); | 1115 "bad", "bar", barValue, model_type)); |
| 1115 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1116 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 1116 } | 1117 } |
| 1117 | 1118 |
| 1118 { | 1119 { |
| 1119 DictionaryValue dict; | 1120 DictionaryValue dict; |
| 1120 dict.Set("foo", barValue.DeepCopy()); | 1121 dict.Set("foo", barValue.DeepCopy()); |
| 1121 dict.Set("bar", barValue.DeepCopy()); | 1122 dict.Set("bar", barValue.DeepCopy()); |
| 1122 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 1123 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 1123 } | 1124 } |
| 1124 { | 1125 { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1191 bad->Set(DEFAULTS, "foo", barValue); | 1192 bad->Set(DEFAULTS, "foo", barValue); |
| 1192 | 1193 |
| 1193 EXPECT_EQ( | 1194 EXPECT_EQ( |
| 1194 SyncChange::ACTION_UPDATE, | 1195 SyncChange::ACTION_UPDATE, |
| 1195 sync_.GetOnlyChange("good", "foo").change_type()); | 1196 sync_.GetOnlyChange("good", "foo").change_type()); |
| 1196 EXPECT_EQ(1u, sync_.changes().size()); | 1197 EXPECT_EQ(1u, sync_.changes().size()); |
| 1197 | 1198 |
| 1198 // Changes from sync will be sent to good, not to bad. | 1199 // Changes from sync will be sent to good, not to bad. |
| 1199 { | 1200 { |
| 1200 SyncChangeList change_list; | 1201 SyncChangeList change_list; |
| 1201 change_list.push_back( | 1202 change_list.push_back(settings_sync_util::CreateAdd( |
| 1202 settings_sync_util::CreateAdd("good", "bar", barValue)); | 1203 "good", "bar", barValue, model_type)); |
| 1203 change_list.push_back( | 1204 change_list.push_back(settings_sync_util::CreateAdd( |
| 1204 settings_sync_util::CreateAdd("bad", "bar", barValue)); | 1205 "bad", "bar", barValue, model_type)); |
| 1205 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1206 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 1206 } | 1207 } |
| 1207 | 1208 |
| 1208 { | 1209 { |
| 1209 DictionaryValue dict; | 1210 DictionaryValue dict; |
| 1210 dict.Set("foo", barValue.DeepCopy()); | 1211 dict.Set("foo", barValue.DeepCopy()); |
| 1211 dict.Set("bar", barValue.DeepCopy()); | 1212 dict.Set("bar", barValue.DeepCopy()); |
| 1212 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 1213 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
| 1213 } | 1214 } |
| 1214 { | 1215 { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1264 | 1265 |
| 1265 // Large local change rejected and doesn't get sent out. | 1266 // Large local change rejected and doesn't get sent out. |
| 1266 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 1267 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| 1267 EXPECT_TRUE(storage1->Set(DEFAULTS, "large_value", large_value).HasError()); | 1268 EXPECT_TRUE(storage1->Set(DEFAULTS, "large_value", large_value).HasError()); |
| 1268 EXPECT_EQ(0u, sync_.changes().size()); | 1269 EXPECT_EQ(0u, sync_.changes().size()); |
| 1269 | 1270 |
| 1270 // Large incoming change should still get accepted. | 1271 // Large incoming change should still get accepted. |
| 1271 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 1272 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| 1272 { | 1273 { |
| 1273 SyncChangeList change_list; | 1274 SyncChangeList change_list; |
| 1274 change_list.push_back( | 1275 change_list.push_back(settings_sync_util::CreateAdd( |
| 1275 settings_sync_util::CreateAdd("s1", "large_value", large_value)); | 1276 "s1", "large_value", large_value, model_type)); |
| 1276 change_list.push_back( | 1277 change_list.push_back(settings_sync_util::CreateAdd( |
| 1277 settings_sync_util::CreateAdd("s2", "large_value", large_value)); | 1278 "s2", "large_value", large_value, model_type)); |
| 1278 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1279 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| 1279 } | 1280 } |
| 1280 { | 1281 { |
| 1281 DictionaryValue expected; | 1282 DictionaryValue expected; |
| 1282 expected.Set("large_value", large_value.DeepCopy()); | 1283 expected.Set("large_value", large_value.DeepCopy()); |
| 1283 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); | 1284 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); |
| 1284 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); | 1285 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); |
| 1285 } | 1286 } |
| 1286 | 1287 |
| 1287 GetSyncableService(model_type)->StopSyncing(model_type); | 1288 GetSyncableService(model_type)->StopSyncing(model_type); |
| 1288 } | 1289 } |
| 1289 | 1290 |
| 1290 } // namespace extensions | 1291 } // namespace extensions |
| OLD | NEW |