| 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "chrome/browser/sync/engine/apply_updates_command.h" | 10 #include "chrome/browser/sync/engine/apply_updates_command.h" |
| (...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 558 } | 558 } |
| 559 | 559 |
| 560 browser_sync::KeyParams params = {"localhost", "dummy", "foobar"}; | 560 browser_sync::KeyParams params = {"localhost", "dummy", "foobar"}; |
| 561 cryptographer->AddKey(params); | 561 cryptographer->AddKey(params); |
| 562 | 562 |
| 563 sync_pb::EntitySpecifics specifics; | 563 sync_pb::EntitySpecifics specifics; |
| 564 sync_pb::PasswordSpecificsData data; | 564 sync_pb::PasswordSpecificsData data; |
| 565 data.set_origin("http://example.com"); | 565 data.set_origin("http://example.com"); |
| 566 | 566 |
| 567 cryptographer->Encrypt(data, | 567 cryptographer->Encrypt(data, |
| 568 specifics.MutableExtension(sync_pb::password)->mutable_encrypted()); | 568 specifics.mutable_password()->mutable_encrypted()); |
| 569 CreateUnappliedNewItem("item", specifics, false); | 569 CreateUnappliedNewItem("item", specifics, false); |
| 570 | 570 |
| 571 ExpectGroupToChange(apply_updates_command_, GROUP_PASSWORD); | 571 ExpectGroupToChange(apply_updates_command_, GROUP_PASSWORD); |
| 572 apply_updates_command_.ExecuteImpl(session()); | 572 apply_updates_command_.ExecuteImpl(session()); |
| 573 | 573 |
| 574 sessions::StatusController* status = session()->mutable_status_controller(); | 574 sessions::StatusController* status = session()->mutable_status_controller(); |
| 575 sessions::ScopedModelSafeGroupRestriction r(status, GROUP_PASSWORD); | 575 sessions::ScopedModelSafeGroupRestriction r(status, GROUP_PASSWORD); |
| 576 ASSERT_TRUE(status->update_progress()); | 576 ASSERT_TRUE(status->update_progress()); |
| 577 EXPECT_EQ(1, status->update_progress()->AppliedUpdatesSize()) | 577 EXPECT_EQ(1, status->update_progress()->AppliedUpdatesSize()) |
| 578 << "All updates should have been attempted"; | 578 << "All updates should have been attempted"; |
| 579 ASSERT_TRUE(status->conflict_progress()); | 579 ASSERT_TRUE(status->conflict_progress()); |
| 580 EXPECT_EQ(0, status->conflict_progress()->SimpleConflictingItemsSize()) | 580 EXPECT_EQ(0, status->conflict_progress()->SimpleConflictingItemsSize()) |
| 581 << "No update should be in conflict because they're all decryptable"; | 581 << "No update should be in conflict because they're all decryptable"; |
| 582 EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount()) | 582 EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount()) |
| 583 << "The updates that can be decrypted should be applied"; | 583 << "The updates that can be decrypted should be applied"; |
| 584 } | 584 } |
| 585 | 585 |
| 586 TEST_F(ApplyUpdatesCommandTest, UndecryptableData) { | 586 TEST_F(ApplyUpdatesCommandTest, UndecryptableData) { |
| 587 // Undecryptable updates should not be applied. | 587 // Undecryptable updates should not be applied. |
| 588 sync_pb::EntitySpecifics encrypted_bookmark; | 588 sync_pb::EntitySpecifics encrypted_bookmark; |
| 589 encrypted_bookmark.mutable_encrypted(); | 589 encrypted_bookmark.mutable_encrypted(); |
| 590 AddDefaultExtensionValue(syncable::BOOKMARKS, &encrypted_bookmark); | 590 AddDefaultExtensionValue(syncable::BOOKMARKS, &encrypted_bookmark); |
| 591 string root_server_id = syncable::GetNullId().GetServerId(); | 591 string root_server_id = syncable::GetNullId().GetServerId(); |
| 592 CreateUnappliedNewItemWithParent("folder", | 592 CreateUnappliedNewItemWithParent("folder", |
| 593 encrypted_bookmark, | 593 encrypted_bookmark, |
| 594 root_server_id); | 594 root_server_id); |
| 595 CreateUnappliedNewItem("item2", encrypted_bookmark, false); | 595 CreateUnappliedNewItem("item2", encrypted_bookmark, false); |
| 596 sync_pb::EntitySpecifics encrypted_password; | 596 sync_pb::EntitySpecifics encrypted_password; |
| 597 encrypted_password.MutableExtension(sync_pb::password); | 597 encrypted_password.mutable_password(); |
| 598 CreateUnappliedNewItem("item3", encrypted_password, false); | 598 CreateUnappliedNewItem("item3", encrypted_password, false); |
| 599 | 599 |
| 600 ExpectGroupsToChange(apply_updates_command_, GROUP_UI, GROUP_PASSWORD); | 600 ExpectGroupsToChange(apply_updates_command_, GROUP_UI, GROUP_PASSWORD); |
| 601 apply_updates_command_.ExecuteImpl(session()); | 601 apply_updates_command_.ExecuteImpl(session()); |
| 602 | 602 |
| 603 sessions::StatusController* status = session()->mutable_status_controller(); | 603 sessions::StatusController* status = session()->mutable_status_controller(); |
| 604 EXPECT_TRUE(status->HasConflictingUpdates()) | 604 EXPECT_TRUE(status->HasConflictingUpdates()) |
| 605 << "Updates that can't be decrypted should trigger the syncer to have " | 605 << "Updates that can't be decrypted should trigger the syncer to have " |
| 606 << "conflicting updates."; | 606 << "conflicting updates."; |
| 607 { | 607 { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 646 ScopedDirLookup dir(syncdb()->manager(), syncdb()->name()); | 646 ScopedDirLookup dir(syncdb()->manager(), syncdb()->name()); |
| 647 ASSERT_TRUE(dir.good()); | 647 ASSERT_TRUE(dir.good()); |
| 648 ReadTransaction trans(FROM_HERE, dir); | 648 ReadTransaction trans(FROM_HERE, dir); |
| 649 Cryptographer* cryptographer = | 649 Cryptographer* cryptographer = |
| 650 session()->context()->directory_manager()->GetCryptographer(&trans); | 650 session()->context()->directory_manager()->GetCryptographer(&trans); |
| 651 | 651 |
| 652 KeyParams params = {"localhost", "dummy", "foobar"}; | 652 KeyParams params = {"localhost", "dummy", "foobar"}; |
| 653 cryptographer->AddKey(params); | 653 cryptographer->AddKey(params); |
| 654 | 654 |
| 655 cryptographer->Encrypt(data, | 655 cryptographer->Encrypt(data, |
| 656 specifics.MutableExtension(sync_pb::password)->mutable_encrypted()); | 656 specifics.mutable_password()->mutable_encrypted()); |
| 657 } | 657 } |
| 658 CreateUnappliedNewItem("item1", specifics, false); | 658 CreateUnappliedNewItem("item1", specifics, false); |
| 659 } | 659 } |
| 660 { | 660 { |
| 661 // Create a new cryptographer, independent of the one in the session. | 661 // Create a new cryptographer, independent of the one in the session. |
| 662 Cryptographer cryptographer; | 662 Cryptographer cryptographer; |
| 663 KeyParams params = {"localhost", "dummy", "bazqux"}; | 663 KeyParams params = {"localhost", "dummy", "bazqux"}; |
| 664 cryptographer.AddKey(params); | 664 cryptographer.AddKey(params); |
| 665 | 665 |
| 666 sync_pb::EntitySpecifics specifics; | 666 sync_pb::EntitySpecifics specifics; |
| 667 sync_pb::PasswordSpecificsData data; | 667 sync_pb::PasswordSpecificsData data; |
| 668 data.set_origin("http://example.com/2"); | 668 data.set_origin("http://example.com/2"); |
| 669 | 669 |
| 670 cryptographer.Encrypt(data, | 670 cryptographer.Encrypt(data, |
| 671 specifics.MutableExtension(sync_pb::password)->mutable_encrypted()); | 671 specifics.mutable_password()->mutable_encrypted()); |
| 672 CreateUnappliedNewItem("item2", specifics, false); | 672 CreateUnappliedNewItem("item2", specifics, false); |
| 673 } | 673 } |
| 674 | 674 |
| 675 ExpectGroupToChange(apply_updates_command_, GROUP_PASSWORD); | 675 ExpectGroupToChange(apply_updates_command_, GROUP_PASSWORD); |
| 676 apply_updates_command_.ExecuteImpl(session()); | 676 apply_updates_command_.ExecuteImpl(session()); |
| 677 | 677 |
| 678 sessions::StatusController* status = session()->mutable_status_controller(); | 678 sessions::StatusController* status = session()->mutable_status_controller(); |
| 679 EXPECT_TRUE(status->HasConflictingUpdates()) | 679 EXPECT_TRUE(status->HasConflictingUpdates()) |
| 680 << "Updates that can't be decrypted should trigger the syncer to have " | 680 << "Updates that can't be decrypted should trigger the syncer to have " |
| 681 << "conflicting updates."; | 681 << "conflicting updates."; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 711 session()->context()->directory_manager()->GetCryptographer(&trans); | 711 session()->context()->directory_manager()->GetCryptographer(&trans); |
| 712 EXPECT_TRUE(cryptographer->GetEncryptedTypes().Equals(encrypted_types)); | 712 EXPECT_TRUE(cryptographer->GetEncryptedTypes().Equals(encrypted_types)); |
| 713 } | 713 } |
| 714 | 714 |
| 715 // Nigori node updates should update the Cryptographer. | 715 // Nigori node updates should update the Cryptographer. |
| 716 Cryptographer other_cryptographer; | 716 Cryptographer other_cryptographer; |
| 717 KeyParams params = {"localhost", "dummy", "foobar"}; | 717 KeyParams params = {"localhost", "dummy", "foobar"}; |
| 718 other_cryptographer.AddKey(params); | 718 other_cryptographer.AddKey(params); |
| 719 | 719 |
| 720 sync_pb::EntitySpecifics specifics; | 720 sync_pb::EntitySpecifics specifics; |
| 721 sync_pb::NigoriSpecifics* nigori = | 721 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); |
| 722 specifics.MutableExtension(sync_pb::nigori); | |
| 723 other_cryptographer.GetKeys(nigori->mutable_encrypted()); | 722 other_cryptographer.GetKeys(nigori->mutable_encrypted()); |
| 724 nigori->set_encrypt_bookmarks(true); | 723 nigori->set_encrypt_bookmarks(true); |
| 725 encrypted_types.Put(syncable::BOOKMARKS); | 724 encrypted_types.Put(syncable::BOOKMARKS); |
| 726 CreateUnappliedNewItem(syncable::ModelTypeToRootTag(syncable::NIGORI), | 725 CreateUnappliedNewItem(syncable::ModelTypeToRootTag(syncable::NIGORI), |
| 727 specifics, true); | 726 specifics, true); |
| 728 EXPECT_FALSE(cryptographer->has_pending_keys()); | 727 EXPECT_FALSE(cryptographer->has_pending_keys()); |
| 729 | 728 |
| 730 ExpectGroupToChange(apply_updates_command_, GROUP_PASSIVE); | 729 ExpectGroupToChange(apply_updates_command_, GROUP_PASSIVE); |
| 731 apply_updates_command_.ExecuteImpl(session()); | 730 apply_updates_command_.ExecuteImpl(session()); |
| 732 | 731 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 763 session()->context()->directory_manager()->GetCryptographer(&trans); | 762 session()->context()->directory_manager()->GetCryptographer(&trans); |
| 764 EXPECT_TRUE(cryptographer->GetEncryptedTypes().Equals(encrypted_types)); | 763 EXPECT_TRUE(cryptographer->GetEncryptedTypes().Equals(encrypted_types)); |
| 765 } | 764 } |
| 766 | 765 |
| 767 // Nigori node updates should update the Cryptographer. | 766 // Nigori node updates should update the Cryptographer. |
| 768 Cryptographer other_cryptographer; | 767 Cryptographer other_cryptographer; |
| 769 KeyParams params = {"localhost", "dummy", "foobar"}; | 768 KeyParams params = {"localhost", "dummy", "foobar"}; |
| 770 other_cryptographer.AddKey(params); | 769 other_cryptographer.AddKey(params); |
| 771 | 770 |
| 772 sync_pb::EntitySpecifics specifics; | 771 sync_pb::EntitySpecifics specifics; |
| 773 sync_pb::NigoriSpecifics* nigori = | 772 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); |
| 774 specifics.MutableExtension(sync_pb::nigori); | |
| 775 other_cryptographer.GetKeys(nigori->mutable_encrypted()); | 773 other_cryptographer.GetKeys(nigori->mutable_encrypted()); |
| 776 nigori->set_encrypt_sessions(true); | 774 nigori->set_encrypt_sessions(true); |
| 777 nigori->set_encrypt_themes(true); | 775 nigori->set_encrypt_themes(true); |
| 778 encrypted_types.Put(syncable::SESSIONS); | 776 encrypted_types.Put(syncable::SESSIONS); |
| 779 encrypted_types.Put(syncable::THEMES); | 777 encrypted_types.Put(syncable::THEMES); |
| 780 CreateUnappliedNewItem(syncable::ModelTypeToRootTag(syncable::NIGORI), | 778 CreateUnappliedNewItem(syncable::ModelTypeToRootTag(syncable::NIGORI), |
| 781 specifics, true); | 779 specifics, true); |
| 782 EXPECT_FALSE(cryptographer->has_pending_keys()); | 780 EXPECT_FALSE(cryptographer->has_pending_keys()); |
| 783 | 781 |
| 784 ExpectGroupToChange(apply_updates_command_, GROUP_PASSIVE); | 782 ExpectGroupToChange(apply_updates_command_, GROUP_PASSIVE); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 842 // Next five items are children of the root. | 840 // Next five items are children of the root. |
| 843 for (; i < 2*batch_s; ++i) { | 841 for (; i < 2*batch_s; ++i) { |
| 844 CreateUnsyncedItem(id_factory_.NewLocalId(), id_factory_.root(), | 842 CreateUnsyncedItem(id_factory_.NewLocalId(), id_factory_.root(), |
| 845 base::StringPrintf("Item %"PRIuS"", i), false, | 843 base::StringPrintf("Item %"PRIuS"", i), false, |
| 846 syncable::BOOKMARKS, NULL); | 844 syncable::BOOKMARKS, NULL); |
| 847 } | 845 } |
| 848 | 846 |
| 849 KeyParams params = {"localhost", "dummy", "foobar"}; | 847 KeyParams params = {"localhost", "dummy", "foobar"}; |
| 850 cryptographer->AddKey(params); | 848 cryptographer->AddKey(params); |
| 851 sync_pb::EntitySpecifics specifics; | 849 sync_pb::EntitySpecifics specifics; |
| 852 sync_pb::NigoriSpecifics* nigori = | 850 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); |
| 853 specifics.MutableExtension(sync_pb::nigori); | |
| 854 cryptographer->GetKeys(nigori->mutable_encrypted()); | 851 cryptographer->GetKeys(nigori->mutable_encrypted()); |
| 855 nigori->set_encrypt_bookmarks(true); | 852 nigori->set_encrypt_bookmarks(true); |
| 856 encrypted_types.Put(syncable::BOOKMARKS); | 853 encrypted_types.Put(syncable::BOOKMARKS); |
| 857 CreateUnappliedNewItem(syncable::ModelTypeToRootTag(syncable::NIGORI), | 854 CreateUnappliedNewItem(syncable::ModelTypeToRootTag(syncable::NIGORI), |
| 858 specifics, true); | 855 specifics, true); |
| 859 EXPECT_FALSE(cryptographer->has_pending_keys()); | 856 EXPECT_FALSE(cryptographer->has_pending_keys()); |
| 860 EXPECT_TRUE(cryptographer->is_ready()); | 857 EXPECT_TRUE(cryptographer->is_ready()); |
| 861 | 858 |
| 862 { | 859 { |
| 863 // Ensure we have unsynced nodes that aren't properly encrypted. | 860 // Ensure we have unsynced nodes that aren't properly encrypted. |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 947 base::StringPrintf("Item %"PRIuS"", i), false, | 944 base::StringPrintf("Item %"PRIuS"", i), false, |
| 948 syncable::BOOKMARKS, NULL); | 945 syncable::BOOKMARKS, NULL); |
| 949 } | 946 } |
| 950 | 947 |
| 951 // We encrypt with new keys, triggering the local cryptographer to be unready | 948 // We encrypt with new keys, triggering the local cryptographer to be unready |
| 952 // and unable to decrypt data (once updated). | 949 // and unable to decrypt data (once updated). |
| 953 Cryptographer other_cryptographer; | 950 Cryptographer other_cryptographer; |
| 954 KeyParams params = {"localhost", "dummy", "foobar"}; | 951 KeyParams params = {"localhost", "dummy", "foobar"}; |
| 955 other_cryptographer.AddKey(params); | 952 other_cryptographer.AddKey(params); |
| 956 sync_pb::EntitySpecifics specifics; | 953 sync_pb::EntitySpecifics specifics; |
| 957 sync_pb::NigoriSpecifics* nigori = | 954 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); |
| 958 specifics.MutableExtension(sync_pb::nigori); | |
| 959 other_cryptographer.GetKeys(nigori->mutable_encrypted()); | 955 other_cryptographer.GetKeys(nigori->mutable_encrypted()); |
| 960 nigori->set_encrypt_bookmarks(true); | 956 nigori->set_encrypt_bookmarks(true); |
| 961 encrypted_types.Put(syncable::BOOKMARKS); | 957 encrypted_types.Put(syncable::BOOKMARKS); |
| 962 CreateUnappliedNewItem(syncable::ModelTypeToRootTag(syncable::NIGORI), | 958 CreateUnappliedNewItem(syncable::ModelTypeToRootTag(syncable::NIGORI), |
| 963 specifics, true); | 959 specifics, true); |
| 964 EXPECT_FALSE(cryptographer->has_pending_keys()); | 960 EXPECT_FALSE(cryptographer->has_pending_keys()); |
| 965 | 961 |
| 966 { | 962 { |
| 967 // Ensure we have unsynced nodes that aren't properly encrypted. | 963 // Ensure we have unsynced nodes that aren't properly encrypted. |
| 968 ScopedDirLookup dir(syncdb()->manager(), syncdb()->name()); | 964 ScopedDirLookup dir(syncdb()->manager(), syncdb()->name()); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1006 EXPECT_FALSE(cryptographer->is_ready()); | 1002 EXPECT_FALSE(cryptographer->is_ready()); |
| 1007 EXPECT_TRUE(cryptographer->has_pending_keys()); | 1003 EXPECT_TRUE(cryptographer->has_pending_keys()); |
| 1008 | 1004 |
| 1009 Syncer::UnsyncedMetaHandles handles; | 1005 Syncer::UnsyncedMetaHandles handles; |
| 1010 SyncerUtil::GetUnsyncedEntries(&trans, &handles); | 1006 SyncerUtil::GetUnsyncedEntries(&trans, &handles); |
| 1011 EXPECT_EQ(2*batch_s+1, handles.size()); | 1007 EXPECT_EQ(2*batch_s+1, handles.size()); |
| 1012 } | 1008 } |
| 1013 } | 1009 } |
| 1014 | 1010 |
| 1015 } // namespace browser_sync | 1011 } // namespace browser_sync |
| OLD | NEW |