| Index: chrome/browser/sync/util/cryptographer_unittest.cc
|
| diff --git a/chrome/browser/sync/util/cryptographer_unittest.cc b/chrome/browser/sync/util/cryptographer_unittest.cc
|
| index 9e51ada52e215e6f5ecf60a8215dedcf77036665..43a977122bd0700187baebba4c1a945d2ff4897c 100644
|
| --- a/chrome/browser/sync/util/cryptographer_unittest.cc
|
| +++ b/chrome/browser/sync/util/cryptographer_unittest.cc
|
| @@ -11,11 +11,24 @@
|
| #include "chrome/browser/password_manager/encryptor.h"
|
| #include "chrome/browser/sync/protocol/nigori_specifics.pb.h"
|
| #include "chrome/browser/sync/protocol/password_specifics.pb.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +namespace browser_sync {
|
| +
|
| +using ::testing::Mock;
|
| +using ::testing::StrictMock;
|
| using syncable::ModelTypeSet;
|
|
|
| -namespace browser_sync {
|
| +namespace {
|
| +
|
| +class MockObserver : public Cryptographer::Observer {
|
| + public:
|
| + MOCK_METHOD2(OnEncryptedTypesChanged,
|
| + void(const syncable::ModelTypeSet&, bool));
|
| +};
|
| +
|
| +} // namespace
|
|
|
| TEST(CryptographerTest, EmptyCantDecrypt) {
|
| Cryptographer cryptographer;
|
| @@ -185,37 +198,38 @@ TEST(CryptographerTest, NigoriEncryptionTypes) {
|
| Cryptographer cryptographer;
|
| Cryptographer cryptographer2;
|
| sync_pb::NigoriSpecifics nigori;
|
| - ModelTypeSet encrypted_types;
|
|
|
| - // Just set the sensitive types.
|
| - encrypted_types.insert(syncable::PASSWORDS);
|
| - encrypted_types.insert(syncable::NIGORI);
|
| - cryptographer.SetEncryptedTypes(encrypted_types);
|
| + StrictMock<MockObserver> observer;
|
| + cryptographer.AddObserver(&observer);
|
| + StrictMock<MockObserver> observer2;
|
| + cryptographer2.AddObserver(&observer2);
|
| +
|
| + // Just set the sensitive types (shouldn't trigger any
|
| + // notifications).
|
| + ModelTypeSet encrypted_types(Cryptographer::SensitiveTypes());
|
| + cryptographer.SetEncryptedTypesForTest(encrypted_types);
|
| cryptographer.UpdateNigoriFromEncryptedTypes(&nigori);
|
| cryptographer2.UpdateEncryptedTypesFromNigori(nigori);
|
| EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes());
|
| EXPECT_EQ(encrypted_types, cryptographer2.GetEncryptedTypes());
|
|
|
| + Mock::VerifyAndClearExpectations(&observer);
|
| + Mock::VerifyAndClearExpectations(&observer2);
|
| +
|
| + EXPECT_CALL(observer,
|
| + OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(),
|
| + false));
|
| + EXPECT_CALL(observer2,
|
| + OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(),
|
| + false));
|
| +
|
| // Set all encrypted types
|
| encrypted_types = syncable::GetAllRealModelTypes();
|
| - cryptographer.SetEncryptedTypes(encrypted_types);
|
| + cryptographer.SetEncryptedTypesForTest(encrypted_types);
|
| cryptographer.UpdateNigoriFromEncryptedTypes(&nigori);
|
| cryptographer2.UpdateEncryptedTypesFromNigori(nigori);
|
| EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes());
|
| EXPECT_EQ(encrypted_types, cryptographer2.GetEncryptedTypes());
|
| -
|
| - // Ensure encrypted types are never unset.
|
| - Cryptographer cryptographer3; // Empty cryptographer.
|
| - encrypted_types.erase(syncable::BOOKMARKS);
|
| - encrypted_types.erase(syncable::SESSIONS);
|
| - cryptographer.SetEncryptedTypes(encrypted_types);
|
| - cryptographer.UpdateNigoriFromEncryptedTypes(&nigori);
|
| - cryptographer2.UpdateEncryptedTypesFromNigori(nigori);
|
| - cryptographer3.UpdateEncryptedTypesFromNigori(nigori);
|
| - encrypted_types = syncable::GetAllRealModelTypes();
|
| - EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes());
|
| - EXPECT_EQ(encrypted_types, cryptographer2.GetEncryptedTypes());
|
| - EXPECT_EQ(encrypted_types, cryptographer3.GetEncryptedTypes());
|
| }
|
|
|
| TEST(CryptographerTest, EncryptEverythingExplicit) {
|
| @@ -224,6 +238,13 @@ TEST(CryptographerTest, EncryptEverythingExplicit) {
|
| specifics.set_encrypt_everything(true);
|
|
|
| Cryptographer cryptographer;
|
| + StrictMock<MockObserver> observer;
|
| + cryptographer.AddObserver(&observer);
|
| +
|
| + EXPECT_CALL(observer,
|
| + OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(),
|
| + true));
|
| +
|
| EXPECT_FALSE(cryptographer.encrypt_everything());
|
| ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes();
|
| for (ModelTypeSet::iterator iter = real_types.begin();
|
| @@ -244,14 +265,26 @@ TEST(CryptographerTest, EncryptEverythingExplicit) {
|
| ++iter) {
|
| EXPECT_EQ(1U, encrypted_types.count(*iter));
|
| }
|
| +
|
| + // Shouldn't trigger another notification.
|
| + specifics.set_encrypt_everything(true);
|
| +
|
| + cryptographer.RemoveObserver(&observer);
|
| }
|
|
|
| TEST(CryptographerTest, EncryptEverythingImplicit) {
|
| ModelTypeSet real_types = syncable::GetAllRealModelTypes();
|
| sync_pb::NigoriSpecifics specifics;
|
| - specifics.set_encrypt_bookmarks(true); // Non-passwords = encrypt everything.
|
| + specifics.set_encrypt_bookmarks(true); // Non-passwords = encrypt everything
|
|
|
| Cryptographer cryptographer;
|
| + StrictMock<MockObserver> observer;
|
| + cryptographer.AddObserver(&observer);
|
| +
|
| + EXPECT_CALL(observer,
|
| + OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(),
|
| + true));
|
| +
|
| EXPECT_FALSE(cryptographer.encrypt_everything());
|
| ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes();
|
| for (ModelTypeSet::iterator iter = real_types.begin();
|
| @@ -272,6 +305,11 @@ TEST(CryptographerTest, EncryptEverythingImplicit) {
|
| ++iter) {
|
| EXPECT_EQ(1U, encrypted_types.count(*iter));
|
| }
|
| +
|
| + // Shouldn't trigger another notification.
|
| + specifics.set_encrypt_everything(true);
|
| +
|
| + cryptographer.RemoveObserver(&observer);
|
| }
|
|
|
| TEST(CryptographerTest, UnknownSensitiveTypes) {
|
| @@ -283,6 +321,17 @@ TEST(CryptographerTest, UnknownSensitiveTypes) {
|
| specifics.set_encrypt_bookmarks(true);
|
|
|
| Cryptographer cryptographer;
|
| + StrictMock<MockObserver> observer;
|
| + cryptographer.AddObserver(&observer);
|
| +
|
| + syncable::ModelTypeSet expected_encrypted_types =
|
| + Cryptographer::SensitiveTypes();
|
| + expected_encrypted_types.insert(syncable::BOOKMARKS);
|
| +
|
| + EXPECT_CALL(observer,
|
| + OnEncryptedTypesChanged(expected_encrypted_types,
|
| + false));
|
| +
|
| EXPECT_FALSE(cryptographer.encrypt_everything());
|
| ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes();
|
| for (ModelTypeSet::iterator iter = real_types.begin();
|
| @@ -308,6 +357,8 @@ TEST(CryptographerTest, UnknownSensitiveTypes) {
|
| else
|
| EXPECT_EQ(0U, encrypted_types.count(*iter));
|
| }
|
| +
|
| + cryptographer.RemoveObserver(&observer);
|
| }
|
|
|
| } // namespace browser_sync
|
|
|