| Index: sync/internal_api/sync_manager_impl_unittest.cc
|
| diff --git a/sync/internal_api/sync_manager_impl_unittest.cc b/sync/internal_api/sync_manager_impl_unittest.cc
|
| index bd2ffeff0ad07d9f90775a906c44fdbf12e7fc7d..b7a615dda5867186438f43458eba40275c62409b 100644
|
| --- a/sync/internal_api/sync_manager_impl_unittest.cc
|
| +++ b/sync/internal_api/sync_manager_impl_unittest.cc
|
| @@ -36,6 +36,7 @@
|
| #include "sync/internal_api/public/test/test_user_share.h"
|
| #include "sync/internal_api/public/write_node.h"
|
| #include "sync/internal_api/public/write_transaction.h"
|
| +#include "sync/internal_api/sync_encryption_handler_impl.h"
|
| #include "sync/internal_api/sync_manager_impl.h"
|
| #include "sync/internal_api/syncapi_internal.h"
|
| #include "sync/js/js_arg_list.h"
|
| @@ -77,6 +78,7 @@ using testing::AtLeast;
|
| using testing::DoAll;
|
| using testing::InSequence;
|
| using testing::Invoke;
|
| +using testing::NiceMock;
|
| using testing::Return;
|
| using testing::SaveArg;
|
| using testing::StrictMock;
|
| @@ -225,15 +227,26 @@ class SyncApiTest : public testing::Test {
|
| public:
|
| virtual void SetUp() {
|
| test_user_share_.SetUp();
|
| + SetUpEncryption();
|
| }
|
|
|
| virtual void TearDown() {
|
| test_user_share_.TearDown();
|
| }
|
|
|
| + void SetUpEncryption() {
|
| + ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
|
| + encryption_handler_.reset(
|
| + new SyncEncryptionHandlerImpl(test_user_share_.user_share(),
|
| + trans.GetCryptographer()));
|
| + trans.GetCryptographer()->SetSyncEncryptionHandlerDelegate(
|
| + encryption_handler_.get());
|
| + }
|
| +
|
| protected:
|
| MessageLoop message_loop_;
|
| TestUserShare test_user_share_;
|
| + scoped_ptr<SyncEncryptionHandler> encryption_handler_;
|
| };
|
|
|
| TEST_F(SyncApiTest, SanityCheckTest) {
|
| @@ -472,8 +485,8 @@ TEST_F(SyncApiTest, WriteEncryptedTitle) {
|
| {
|
| ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
|
| trans.GetCryptographer()->AddKey(params);
|
| - trans.GetCryptographer()->set_encrypt_everything();
|
| }
|
| + encryption_handler_->EnableEncryptEverything();
|
| {
|
| WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
|
| ReadNode root_node(&trans);
|
| @@ -680,18 +693,24 @@ class SyncManagerObserverMock : public SyncManager::Observer {
|
| void(const WeakHandle<JsBackend>&, bool,
|
| syncer::ModelTypeSet)); // NOLINT
|
| MOCK_METHOD1(OnConnectionStatusChange, void(ConnectionStatus)); // NOLINT
|
| + MOCK_METHOD0(OnStopSyncingPermanently, void()); // NOLINT
|
| + MOCK_METHOD1(OnUpdatedToken, void(const std::string&)); // NOLINT
|
| + MOCK_METHOD1(OnActionableError,
|
| + void(const SyncProtocolError&)); // NOLINT
|
| +};
|
| +
|
| +class SyncEncryptionHandlerObserverMock
|
| + : public SyncEncryptionHandler::Observer {
|
| + public:
|
| MOCK_METHOD2(OnPassphraseRequired,
|
| void(PassphraseRequiredReason,
|
| const sync_pb::EncryptedData&)); // NOLINT
|
| MOCK_METHOD0(OnPassphraseAccepted, void()); // NOLINT
|
| MOCK_METHOD1(OnBootstrapTokenUpdated, void(const std::string&)); // NOLINT
|
| - MOCK_METHOD0(OnStopSyncingPermanently, void()); // NOLINT
|
| - MOCK_METHOD1(OnUpdatedToken, void(const std::string&)); // NOLINT
|
| MOCK_METHOD2(OnEncryptedTypesChanged,
|
| void(ModelTypeSet, bool)); // NOLINT
|
| MOCK_METHOD0(OnEncryptionComplete, void()); // NOLINT
|
| - MOCK_METHOD1(OnActionableError,
|
| - void(const SyncProtocolError&)); // NOLINT
|
| + MOCK_METHOD1(OnCryptographerStateChanged, void(Cryptographer*)); // NOLINT
|
| };
|
|
|
| class SyncNotifierMock : public SyncNotifier {
|
| @@ -743,8 +762,8 @@ class SyncManagerTest : public testing::Test,
|
| EXPECT_CALL(*sync_notifier_mock_,
|
| UpdateCredentials(credentials.email, credentials.sync_token));
|
|
|
| - sync_manager_.AddObserver(&observer_);
|
| - EXPECT_CALL(observer_, OnInitializationComplete(_, _, _)).
|
| + sync_manager_.AddObserver(&manager_observer_);
|
| + EXPECT_CALL(manager_observer_, OnInitializationComplete(_, _, _)).
|
| WillOnce(SaveArg<0>(&js_backend_));
|
|
|
| EXPECT_FALSE(js_backend_.IsInitialized());
|
| @@ -770,6 +789,8 @@ class SyncManagerTest : public testing::Test,
|
| &handler_,
|
| NULL);
|
|
|
| + sync_manager_.GetEncryptionHandler()->AddObserver(&encryption_observer_);
|
| +
|
| EXPECT_TRUE(js_backend_.IsInitialized());
|
|
|
| for (ModelSafeRoutingInfo::iterator i = routing_info.begin();
|
| @@ -781,7 +802,7 @@ class SyncManagerTest : public testing::Test,
|
| }
|
|
|
| void TearDown() {
|
| - sync_manager_.RemoveObserver(&observer_);
|
| + sync_manager_.RemoveObserver(&manager_observer_);
|
| EXPECT_CALL(*sync_notifier_mock_, UpdateRegisteredIds(_, ObjectIdSet()));
|
| sync_manager_.ShutdownOnSyncThread();
|
| sync_notifier_mock_ = NULL;
|
| @@ -816,6 +837,9 @@ class SyncManagerTest : public testing::Test,
|
| return false;
|
|
|
| // Set the nigori cryptographer information.
|
| + if (encryption_status == FULL_ENCRYPTION)
|
| + sync_manager_.GetEncryptionHandler()->EnableEncryptEverything();
|
| +
|
| WriteTransaction trans(FROM_HERE, share);
|
| Cryptographer* cryptographer = trans.GetCryptographer();
|
| if (!cryptographer)
|
| @@ -826,8 +850,6 @@ class SyncManagerTest : public testing::Test,
|
| } else {
|
| DCHECK_NE(nigori_status, WRITE_TO_NIGORI);
|
| }
|
| - if (encryption_status == FULL_ENCRYPTION)
|
| - cryptographer->set_encrypt_everything();
|
| if (nigori_status == WRITE_TO_NIGORI) {
|
| sync_pb::NigoriSpecifics nigori;
|
| cryptographer->GetKeys(nigori.mutable_encrypted());
|
| @@ -887,8 +909,7 @@ class SyncManagerTest : public testing::Test,
|
| // Returns true if we are currently encrypting all sync data. May
|
| // be called on any thread.
|
| bool EncryptEverythingEnabledForTest() {
|
| - ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| - return trans.GetCryptographer()->encrypt_everything();
|
| + return sync_manager_.GetEncryptionHandler()->EncryptEverythingEnabled();
|
| }
|
|
|
| // Gets the set of encrypted types from the cryptographer
|
| @@ -949,7 +970,8 @@ class SyncManagerTest : public testing::Test,
|
| StrictMock<SyncNotifierMock>* sync_notifier_mock_;
|
| SyncManagerImpl sync_manager_;
|
| WeakHandle<JsBackend> js_backend_;
|
| - StrictMock<SyncManagerObserverMock> observer_;
|
| + StrictMock<SyncManagerObserverMock> manager_observer_;
|
| + StrictMock<SyncEncryptionHandlerObserverMock> encryption_observer_;
|
| };
|
|
|
| TEST_F(SyncManagerTest, UpdateEnabledTypes) {
|
| @@ -1330,9 +1352,10 @@ TEST_F(SyncManagerTest, OnIncomingNotification) {
|
|
|
| TEST_F(SyncManagerTest, RefreshEncryptionReady) {
|
| EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION));
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
|
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| + sync_manager_.GetEncryptionHandler()->ReloadNigori();
|
| PumpLoop();
|
|
|
| const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest();
|
| @@ -1356,8 +1379,11 @@ TEST_F(SyncManagerTest, RefreshEncryptionReady) {
|
| TEST_F(SyncManagerTest, RefreshEncryptionNotReady) {
|
| // Don't set up encryption (no nigori node created).
|
|
|
| - // Should fail.
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| + // Should fail. Triggers an OnPassphraseRequired because the cryptographer
|
| + // is not ready.
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseRequired(_, _)).Times(1);
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->ReloadNigori();
|
| PumpLoop();
|
|
|
| const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest();
|
| @@ -1368,10 +1394,11 @@ TEST_F(SyncManagerTest, RefreshEncryptionNotReady) {
|
| // Attempt to refresh encryption when nigori is empty.
|
| TEST_F(SyncManagerTest, RefreshEncryptionEmptyNigori) {
|
| EXPECT_TRUE(SetUpEncryption(DONT_WRITE_NIGORI, DEFAULT_ENCRYPTION));
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete()).Times(1);
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
|
|
| // Should write to nigori.
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| + sync_manager_.GetEncryptionHandler()->ReloadNigori();
|
| PumpLoop();
|
|
|
| const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest();
|
| @@ -1393,11 +1420,11 @@ TEST_F(SyncManagerTest, RefreshEncryptionEmptyNigori) {
|
|
|
| TEST_F(SyncManagerTest, EncryptDataTypesWithNoData) {
|
| EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION));
|
| - EXPECT_CALL(observer_,
|
| + EXPECT_CALL(encryption_observer_,
|
| OnEncryptedTypesChanged(
|
| HasModelTypes(ModelTypeSet::All()), true));
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.EnableEncryptEverything();
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + sync_manager_.GetEncryptionHandler()->EnableEncryptEverything();
|
| EXPECT_TRUE(EncryptEverythingEnabledForTest());
|
| }
|
|
|
| @@ -1432,7 +1459,7 @@ TEST_F(SyncManagerTest, EncryptDataTypesWithData) {
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(
|
| - Cryptographer::SensitiveTypes()));
|
| + SyncEncryptionHandler::SensitiveTypes()));
|
| EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest(
|
| trans.GetWrappedTrans(),
|
| trans.GetCryptographer(),
|
| @@ -1450,11 +1477,11 @@ TEST_F(SyncManagerTest, EncryptDataTypesWithData) {
|
| false /* not encrypted */));
|
| }
|
|
|
| - EXPECT_CALL(observer_,
|
| + EXPECT_CALL(encryption_observer_,
|
| OnEncryptedTypesChanged(
|
| HasModelTypes(ModelTypeSet::All()), true));
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.EnableEncryptEverything();
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + sync_manager_.GetEncryptionHandler()->EnableEncryptEverything();
|
| EXPECT_TRUE(EncryptEverythingEnabledForTest());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| @@ -1478,11 +1505,13 @@ TEST_F(SyncManagerTest, EncryptDataTypesWithData) {
|
| }
|
|
|
| // Trigger's a ReEncryptEverything with new passphrase.
|
| - testing::Mock::VerifyAndClearExpectations(&observer_);
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_));
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted());
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.SetEncryptionPassphrase("new_passphrase", true);
|
| + testing::Mock::VerifyAndClearExpectations(&encryption_observer_);
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_));
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase(
|
| + "new_passphrase", true);
|
| EXPECT_TRUE(EncryptEverythingEnabledForTest());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| @@ -1505,12 +1534,11 @@ TEST_F(SyncManagerTest, EncryptDataTypesWithData) {
|
| }
|
| // Calling EncryptDataTypes with an empty encrypted types should not trigger
|
| // a reencryption and should just notify immediately.
|
| - // TODO(zea): add logic to ensure nothing was written.
|
| - testing::Mock::VerifyAndClearExpectations(&observer_);
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)).Times(0);
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted()).Times(0);
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.EnableEncryptEverything();
|
| + testing::Mock::VerifyAndClearExpectations(&encryption_observer_);
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_)).Times(0);
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()).Times(0);
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete()).Times(0);
|
| + sync_manager_.GetEncryptionHandler()->EnableEncryptEverything();
|
| }
|
|
|
| // Test that when there are no pending keys and the cryptographer is not
|
| @@ -1518,10 +1546,15 @@ TEST_F(SyncManagerTest, EncryptDataTypesWithData) {
|
| // (case 1 in SyncManager::SyncInternal::SetEncryptionPassphrase)
|
| TEST_F(SyncManagerTest, SetInitialGaiaPass) {
|
| EXPECT_FALSE(SetUpEncryption(DONT_WRITE_NIGORI, UNINITIALIZED));
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_));
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted());
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.SetEncryptionPassphrase("new_passphrase", false);
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_));
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase(
|
| + "new_passphrase",
|
| + false);
|
| + EXPECT_FALSE(
|
| + sync_manager_.GetEncryptionHandler()->IsUsingExplicitPassphrase());
|
| EXPECT_FALSE(EncryptEverythingEnabledForTest());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| @@ -1547,10 +1580,15 @@ TEST_F(SyncManagerTest, UpdateGaiaPass) {
|
| cryptographer->GetBootstrapToken(&bootstrap_token);
|
| verifier.Bootstrap(bootstrap_token);
|
| }
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_));
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted());
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.SetEncryptionPassphrase("new_passphrase", false);
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_));
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase(
|
| + "new_passphrase",
|
| + false);
|
| + EXPECT_FALSE(
|
| + sync_manager_.GetEncryptionHandler()->IsUsingExplicitPassphrase());
|
| EXPECT_FALSE(EncryptEverythingEnabledForTest());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| @@ -1589,10 +1627,15 @@ TEST_F(SyncManagerTest, SetPassphraseWithPassword) {
|
| data.set_password_value("secret");
|
| password_node.SetPasswordSpecifics(data);
|
| }
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_));
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted());
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.SetEncryptionPassphrase("new_passphrase", true);
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_));
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase(
|
| + "new_passphrase",
|
| + true);
|
| + EXPECT_TRUE(
|
| + sync_manager_.GetEncryptionHandler()->IsUsingExplicitPassphrase());
|
| EXPECT_FALSE(EncryptEverythingEnabledForTest());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| @@ -1635,14 +1678,17 @@ TEST_F(SyncManagerTest, SupplyPendingGAIAPass) {
|
| EXPECT_EQ(BaseNode::INIT_OK, node.InitByTagLookup(kNigoriTag));
|
| sync_pb::NigoriSpecifics nigori;
|
| other_cryptographer.GetKeys(nigori.mutable_encrypted());
|
| - cryptographer->Update(nigori);
|
| + cryptographer->SetPendingKeys(nigori.encrypted());
|
| EXPECT_TRUE(cryptographer->has_pending_keys());
|
| node.SetNigoriSpecifics(nigori);
|
| }
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_));
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted());
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.SetDecryptionPassphrase("passphrase2");
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_));
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetDecryptionPassphrase("passphrase2");
|
| + EXPECT_FALSE(
|
| + sync_manager_.GetEncryptionHandler()->IsUsingExplicitPassphrase());
|
| EXPECT_FALSE(EncryptEverythingEnabledForTest());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| @@ -1680,7 +1726,7 @@ TEST_F(SyncManagerTest, SupplyPendingOldGAIAPass) {
|
| sync_pb::NigoriSpecifics nigori;
|
| other_cryptographer.GetKeys(nigori.mutable_encrypted());
|
| node.SetNigoriSpecifics(nigori);
|
| - cryptographer->Update(nigori);
|
| + cryptographer->SetPendingKeys(nigori.encrypted());
|
|
|
| // other_cryptographer now contains all encryption keys, and is encrypting
|
| // with the newest gaia.
|
| @@ -1690,12 +1736,17 @@ TEST_F(SyncManagerTest, SupplyPendingOldGAIAPass) {
|
| // The bootstrap token should have been updated. Save it to ensure it's based
|
| // on the new GAIA password.
|
| std::string bootstrap_token;
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_))
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_))
|
| .WillOnce(SaveArg<0>(&bootstrap_token));
|
| - EXPECT_CALL(observer_, OnPassphraseRequired(_,_));
|
| - sync_manager_.SetEncryptionPassphrase("new_gaia", false);
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseRequired(_,_));
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase(
|
| + "new_gaia",
|
| + false);
|
| + EXPECT_FALSE(
|
| + sync_manager_.GetEncryptionHandler()->IsUsingExplicitPassphrase());
|
| EXPECT_FALSE(EncryptEverythingEnabledForTest());
|
| - testing::Mock::VerifyAndClearExpectations(&observer_);
|
| + testing::Mock::VerifyAndClearExpectations(&encryption_observer_);
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| Cryptographer* cryptographer = trans.GetCryptographer();
|
| @@ -1707,10 +1758,15 @@ TEST_F(SyncManagerTest, SupplyPendingOldGAIAPass) {
|
| other_cryptographer.GetKeys(&encrypted);
|
| EXPECT_TRUE(cryptographer->CanDecrypt(encrypted));
|
| }
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_));
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted());
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.SetEncryptionPassphrase("old_gaia", false);
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_));
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase(
|
| + "old_gaia",
|
| + false);
|
| + EXPECT_FALSE(
|
| + sync_manager_.GetEncryptionHandler()->IsUsingExplicitPassphrase());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| Cryptographer* cryptographer = trans.GetCryptographer();
|
| @@ -1750,15 +1806,18 @@ TEST_F(SyncManagerTest, SupplyPendingExplicitPass) {
|
| EXPECT_EQ(BaseNode::INIT_OK, node.InitByTagLookup(kNigoriTag));
|
| sync_pb::NigoriSpecifics nigori;
|
| other_cryptographer.GetKeys(nigori.mutable_encrypted());
|
| - cryptographer->Update(nigori);
|
| + cryptographer->SetPendingKeys(nigori.encrypted());
|
| EXPECT_TRUE(cryptographer->has_pending_keys());
|
| nigori.set_using_explicit_passphrase(true);
|
| node.SetNigoriSpecifics(nigori);
|
| }
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_));
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted());
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.SetDecryptionPassphrase("explicit");
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_));
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetDecryptionPassphrase("explicit");
|
| + EXPECT_TRUE(
|
| + sync_manager_.GetEncryptionHandler()->IsUsingExplicitPassphrase());
|
| EXPECT_FALSE(EncryptEverythingEnabledForTest());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| @@ -1790,13 +1849,18 @@ TEST_F(SyncManagerTest, SupplyPendingGAIAPassUserProvided) {
|
| sync_pb::NigoriSpecifics nigori;
|
| other_cryptographer.GetKeys(nigori.mutable_encrypted());
|
| node.SetNigoriSpecifics(nigori);
|
| - cryptographer->Update(nigori);
|
| + cryptographer->SetPendingKeys(nigori.encrypted());
|
| EXPECT_FALSE(cryptographer->is_ready());
|
| }
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_));
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted());
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.SetEncryptionPassphrase("passphrase", false);
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_));
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase(
|
| + "passphrase",
|
| + false);
|
| + EXPECT_FALSE(
|
| + sync_manager_.GetEncryptionHandler()->IsUsingExplicitPassphrase());
|
| EXPECT_FALSE(EncryptEverythingEnabledForTest());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| @@ -1820,10 +1884,15 @@ TEST_F(SyncManagerTest, SetPassphraseWithEmptyPasswordNode) {
|
| EXPECT_EQ(WriteNode::INIT_SUCCESS, result);
|
| node_id = password_node.GetId();
|
| }
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_));
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted());
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.SetEncryptionPassphrase("new_passphrase", true);
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_));
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase(
|
| + "new_passphrase",
|
| + true);
|
| + EXPECT_TRUE(
|
| + sync_manager_.GetEncryptionHandler()->IsUsingExplicitPassphrase());
|
| EXPECT_FALSE(EncryptEverythingEnabledForTest());
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| @@ -1925,11 +1994,11 @@ TEST_F(SyncManagerTest, EncryptBookmarksWithLegacyData) {
|
| false /* not encrypted */));
|
| }
|
|
|
| - EXPECT_CALL(observer_,
|
| + EXPECT_CALL(encryption_observer_,
|
| OnEncryptedTypesChanged(
|
| HasModelTypes(ModelTypeSet::All()), true));
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.EnableEncryptEverything();
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + sync_manager_.GetEncryptionHandler()->EnableEncryptEverything();
|
| EXPECT_TRUE(EncryptEverythingEnabledForTest());
|
|
|
| {
|
| @@ -2013,13 +2082,14 @@ TEST_F(SyncManagerTest, UpdateEntryWithEncryption) {
|
| EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag));
|
|
|
| // Encrypt the datatatype, should set is_unsynced.
|
| - EXPECT_CALL(observer_,
|
| + EXPECT_CALL(encryption_observer_,
|
| OnEncryptedTypesChanged(
|
| HasModelTypes(ModelTypeSet::All()), true));
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION));
|
|
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->ReloadNigori();
|
| PumpLoop();
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| @@ -2038,11 +2108,14 @@ TEST_F(SyncManagerTest, UpdateEntryWithEncryption) {
|
| EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag));
|
|
|
| // Set a new passphrase. Should set is_unsynced.
|
| - testing::Mock::VerifyAndClearExpectations(&observer_);
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_));
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted());
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.SetEncryptionPassphrase("new_passphrase", true);
|
| + testing::Mock::VerifyAndClearExpectations(&encryption_observer_);
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_));
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase(
|
| + "new_passphrase",
|
| + true);
|
| {
|
| ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
|
| ReadNode node(&trans);
|
| @@ -2060,10 +2133,11 @@ TEST_F(SyncManagerTest, UpdateEntryWithEncryption) {
|
| EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag));
|
|
|
| // Force a re-encrypt everything. Should not set is_unsynced.
|
| - testing::Mock::VerifyAndClearExpectations(&observer_);
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| + testing::Mock::VerifyAndClearExpectations(&encryption_observer_);
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
|
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| + sync_manager_.GetEncryptionHandler()->ReloadNigori();
|
| PumpLoop();
|
|
|
| {
|
| @@ -2229,11 +2303,16 @@ TEST_F(SyncManagerTest, UpdatePasswordNewPassphrase) {
|
| EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag));
|
|
|
| // Set a new passphrase. Should set is_unsynced.
|
| - testing::Mock::VerifyAndClearExpectations(&observer_);
|
| - EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_));
|
| - EXPECT_CALL(observer_, OnPassphraseAccepted());
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.SetEncryptionPassphrase("new_passphrase", true);
|
| + testing::Mock::VerifyAndClearExpectations(&encryption_observer_);
|
| + EXPECT_CALL(encryption_observer_, OnBootstrapTokenUpdated(_));
|
| + EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->SetEncryptionPassphrase(
|
| + "new_passphrase",
|
| + true);
|
| + EXPECT_TRUE(
|
| + sync_manager_.GetEncryptionHandler()->IsUsingExplicitPassphrase());
|
| EXPECT_TRUE(ResetUnsyncedEntry(PASSWORDS, client_tag));
|
| }
|
|
|
| @@ -2260,9 +2339,10 @@ TEST_F(SyncManagerTest, UpdatePasswordReencryptEverything) {
|
| EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag));
|
|
|
| // Force a re-encrypt everything. Should not set is_unsynced.
|
| - testing::Mock::VerifyAndClearExpectations(&observer_);
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| + testing::Mock::VerifyAndClearExpectations(&encryption_observer_);
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->ReloadNigori();
|
| PumpLoop();
|
| EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag));
|
| }
|
| @@ -2318,12 +2398,13 @@ TEST_F(SyncManagerTest, SetBookmarkTitleWithEncryption) {
|
| EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag));
|
|
|
| // Encrypt the datatatype, should set is_unsynced.
|
| - EXPECT_CALL(observer_,
|
| + EXPECT_CALL(encryption_observer_,
|
| OnEncryptedTypesChanged(
|
| HasModelTypes(ModelTypeSet::All()), true));
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION));
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->ReloadNigori();
|
| PumpLoop();
|
| EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag));
|
|
|
| @@ -2413,12 +2494,13 @@ TEST_F(SyncManagerTest, SetNonBookmarkTitleWithEncryption) {
|
| EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag));
|
|
|
| // Encrypt the datatatype, should set is_unsynced.
|
| - EXPECT_CALL(observer_,
|
| + EXPECT_CALL(encryption_observer_,
|
| OnEncryptedTypesChanged(
|
| HasModelTypes(ModelTypeSet::All()), true));
|
| - EXPECT_CALL(observer_, OnEncryptionComplete());
|
| + EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
|
| EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION));
|
| - sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing));
|
| + EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
|
| + sync_manager_.GetEncryptionHandler()->ReloadNigori();
|
| PumpLoop();
|
| EXPECT_TRUE(ResetUnsyncedEntry(PREFERENCES, client_tag));
|
|
|
|
|