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 |