OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // Unit tests for the SyncApi. Note that a lot of the underlying | 5 // Unit tests for the SyncApi. Note that a lot of the underlying |
6 // functionality is provided by the Syncable layer, which has its own | 6 // functionality is provided by the Syncable layer, which has its own |
7 // unit tests. We'll test SyncApi specific things in this harness. | 7 // unit tests. We'll test SyncApi specific things in this harness. |
8 | 8 |
9 #include <cstddef> | 9 #include <cstddef> |
10 #include <map> | 10 #include <map> |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 using browser_sync::JsReplyHandler; | 67 using browser_sync::JsReplyHandler; |
68 using browser_sync::MockJsEventHandler; | 68 using browser_sync::MockJsEventHandler; |
69 using browser_sync::MockJsReplyHandler; | 69 using browser_sync::MockJsReplyHandler; |
70 using browser_sync::ModelSafeRoutingInfo; | 70 using browser_sync::ModelSafeRoutingInfo; |
71 using browser_sync::ModelSafeWorker; | 71 using browser_sync::ModelSafeWorker; |
72 using browser_sync::ModelSafeWorkerRegistrar; | 72 using browser_sync::ModelSafeWorkerRegistrar; |
73 using browser_sync::sessions::SyncSessionSnapshot; | 73 using browser_sync::sessions::SyncSessionSnapshot; |
74 using browser_sync::WeakHandle; | 74 using browser_sync::WeakHandle; |
75 using content::BrowserThread; | 75 using content::BrowserThread; |
76 using syncable::kEncryptedString; | 76 using syncable::kEncryptedString; |
77 using syncable::ModelEnumSet; | 77 using syncable::ModelTypeSet; |
78 using syncable::ModelType; | 78 using syncable::ModelType; |
79 using test::ExpectDictStringValue; | 79 using test::ExpectDictStringValue; |
80 using testing::_; | 80 using testing::_; |
81 using testing::AnyNumber; | 81 using testing::AnyNumber; |
82 using testing::AtLeast; | 82 using testing::AtLeast; |
83 using testing::InSequence; | 83 using testing::InSequence; |
84 using testing::Invoke; | 84 using testing::Invoke; |
85 using testing::SaveArg; | 85 using testing::SaveArg; |
86 using testing::StrictMock; | 86 using testing::StrictMock; |
87 | 87 |
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
625 void(const WeakHandle<JsBackend>&, bool)); // NOLINT | 625 void(const WeakHandle<JsBackend>&, bool)); // NOLINT |
626 MOCK_METHOD1(OnAuthError, void(const GoogleServiceAuthError&)); // NOLINT | 626 MOCK_METHOD1(OnAuthError, void(const GoogleServiceAuthError&)); // NOLINT |
627 MOCK_METHOD1(OnPassphraseRequired, | 627 MOCK_METHOD1(OnPassphraseRequired, |
628 void(sync_api::PassphraseRequiredReason)); // NOLINT | 628 void(sync_api::PassphraseRequiredReason)); // NOLINT |
629 MOCK_METHOD1(OnPassphraseAccepted, void(const std::string&)); // NOLINT | 629 MOCK_METHOD1(OnPassphraseAccepted, void(const std::string&)); // NOLINT |
630 MOCK_METHOD0(OnStopSyncingPermanently, void()); // NOLINT | 630 MOCK_METHOD0(OnStopSyncingPermanently, void()); // NOLINT |
631 MOCK_METHOD1(OnUpdatedToken, void(const std::string&)); // NOLINT | 631 MOCK_METHOD1(OnUpdatedToken, void(const std::string&)); // NOLINT |
632 MOCK_METHOD0(OnClearServerDataFailed, void()); // NOLINT | 632 MOCK_METHOD0(OnClearServerDataFailed, void()); // NOLINT |
633 MOCK_METHOD0(OnClearServerDataSucceeded, void()); // NOLINT | 633 MOCK_METHOD0(OnClearServerDataSucceeded, void()); // NOLINT |
634 MOCK_METHOD2(OnEncryptedTypesChanged, | 634 MOCK_METHOD2(OnEncryptedTypesChanged, |
635 void(ModelEnumSet, bool)); // NOLINT | 635 void(ModelTypeSet, bool)); // NOLINT |
636 MOCK_METHOD0(OnEncryptionComplete, void()); // NOLINT | 636 MOCK_METHOD0(OnEncryptionComplete, void()); // NOLINT |
637 MOCK_METHOD1(OnActionableError, | 637 MOCK_METHOD1(OnActionableError, |
638 void(const browser_sync::SyncProtocolError&)); // NOLINT | 638 void(const browser_sync::SyncProtocolError&)); // NOLINT |
639 }; | 639 }; |
640 | 640 |
641 class SyncNotifierMock : public sync_notifier::SyncNotifier { | 641 class SyncNotifierMock : public sync_notifier::SyncNotifier { |
642 public: | 642 public: |
643 MOCK_METHOD1(AddObserver, void(sync_notifier::SyncNotifierObserver*)); | 643 MOCK_METHOD1(AddObserver, void(sync_notifier::SyncNotifierObserver*)); |
644 MOCK_METHOD1(RemoveObserver, void(sync_notifier::SyncNotifierObserver*)); | 644 MOCK_METHOD1(RemoveObserver, void(sync_notifier::SyncNotifierObserver*)); |
645 MOCK_METHOD1(SetUniqueId, void(const std::string&)); | 645 MOCK_METHOD1(SetUniqueId, void(const std::string&)); |
646 MOCK_METHOD1(SetState, void(const std::string&)); | 646 MOCK_METHOD1(SetState, void(const std::string&)); |
647 MOCK_METHOD2(UpdateCredentials, | 647 MOCK_METHOD2(UpdateCredentials, |
648 void(const std::string&, const std::string&)); | 648 void(const std::string&, const std::string&)); |
649 MOCK_METHOD1(UpdateEnabledTypes, | 649 MOCK_METHOD1(UpdateEnabledTypes, |
650 void(syncable::ModelEnumSet)); | 650 void(syncable::ModelTypeSet)); |
651 MOCK_METHOD1(SendNotification, void(syncable::ModelEnumSet)); | 651 MOCK_METHOD1(SendNotification, void(syncable::ModelTypeSet)); |
652 }; | 652 }; |
653 | 653 |
654 class SyncManagerTest : public testing::Test, | 654 class SyncManagerTest : public testing::Test, |
655 public ModelSafeWorkerRegistrar, | 655 public ModelSafeWorkerRegistrar, |
656 public SyncManager::ChangeDelegate { | 656 public SyncManager::ChangeDelegate { |
657 protected: | 657 protected: |
658 SyncManagerTest() | 658 SyncManagerTest() |
659 : ui_thread_(BrowserThread::UI, &ui_loop_), | 659 : ui_thread_(BrowserThread::UI, &ui_loop_), |
660 sync_notifier_mock_(NULL), | 660 sync_notifier_mock_(NULL), |
661 sync_manager_("Test sync manager"), | 661 sync_manager_("Test sync manager"), |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
794 EXPECT_EQ(NULL, sync_notifier_observer_); | 794 EXPECT_EQ(NULL, sync_notifier_observer_); |
795 sync_notifier_observer_ = sync_notifier_observer; | 795 sync_notifier_observer_ = sync_notifier_observer; |
796 } | 796 } |
797 | 797 |
798 void SyncNotifierRemoveObserver( | 798 void SyncNotifierRemoveObserver( |
799 sync_notifier::SyncNotifierObserver* sync_notifier_observer) { | 799 sync_notifier::SyncNotifierObserver* sync_notifier_observer) { |
800 EXPECT_EQ(sync_notifier_observer_, sync_notifier_observer); | 800 EXPECT_EQ(sync_notifier_observer_, sync_notifier_observer); |
801 sync_notifier_observer_ = NULL; | 801 sync_notifier_observer_ = NULL; |
802 } | 802 } |
803 | 803 |
804 void SyncNotifierUpdateEnabledTypes(syncable::ModelEnumSet types) { | 804 void SyncNotifierUpdateEnabledTypes(syncable::ModelTypeSet types) { |
805 ModelSafeRoutingInfo routes; | 805 ModelSafeRoutingInfo routes; |
806 GetModelSafeRoutingInfo(&routes); | 806 GetModelSafeRoutingInfo(&routes); |
807 const syncable::ModelEnumSet expected_types = | 807 const syncable::ModelTypeSet expected_types = |
808 GetRoutingInfoTypes(routes); | 808 GetRoutingInfoTypes(routes); |
809 EXPECT_TRUE(types.Equals(expected_types)); | 809 EXPECT_TRUE(types.Equals(expected_types)); |
810 ++update_enabled_types_call_count_; | 810 ++update_enabled_types_call_count_; |
811 } | 811 } |
812 | 812 |
813 void PumpLoop() { | 813 void PumpLoop() { |
814 ui_loop_.RunAllPending(); | 814 ui_loop_.RunAllPending(); |
815 } | 815 } |
816 | 816 |
817 void SendJsMessage(const std::string& name, const JsArgList& args, | 817 void SendJsMessage(const std::string& name, const JsArgList& args, |
(...skipping 29 matching lines...) Expand all Loading... |
847 }; | 847 }; |
848 | 848 |
849 TEST_F(SyncManagerTest, UpdateEnabledTypes) { | 849 TEST_F(SyncManagerTest, UpdateEnabledTypes) { |
850 EXPECT_EQ(1, update_enabled_types_call_count_); | 850 EXPECT_EQ(1, update_enabled_types_call_count_); |
851 // Triggers SyncNotifierUpdateEnabledTypes. | 851 // Triggers SyncNotifierUpdateEnabledTypes. |
852 sync_manager_.UpdateEnabledTypes(); | 852 sync_manager_.UpdateEnabledTypes(); |
853 EXPECT_EQ(2, update_enabled_types_call_count_); | 853 EXPECT_EQ(2, update_enabled_types_call_count_); |
854 } | 854 } |
855 | 855 |
856 TEST_F(SyncManagerTest, DoNotSyncTabsInNigoriNode) { | 856 TEST_F(SyncManagerTest, DoNotSyncTabsInNigoriNode) { |
857 const syncable::ModelEnumSet encrypted_types(syncable::TYPED_URLS); | 857 const syncable::ModelTypeSet encrypted_types(syncable::TYPED_URLS); |
858 sync_manager_.MaybeSetSyncTabsInNigoriNode(encrypted_types); | 858 sync_manager_.MaybeSetSyncTabsInNigoriNode(encrypted_types); |
859 | 859 |
860 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 860 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
861 ReadNode node(&trans); | 861 ReadNode node(&trans); |
862 ASSERT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); | 862 ASSERT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); |
863 EXPECT_FALSE(node.GetNigoriSpecifics().sync_tabs()); | 863 EXPECT_FALSE(node.GetNigoriSpecifics().sync_tabs()); |
864 } | 864 } |
865 | 865 |
866 TEST_F(SyncManagerTest, SyncTabsInNigoriNode) { | 866 TEST_F(SyncManagerTest, SyncTabsInNigoriNode) { |
867 const syncable::ModelEnumSet encrypted_types(syncable::SESSIONS); | 867 const syncable::ModelTypeSet encrypted_types(syncable::SESSIONS); |
868 sync_manager_.MaybeSetSyncTabsInNigoriNode(encrypted_types); | 868 sync_manager_.MaybeSetSyncTabsInNigoriNode(encrypted_types); |
869 | 869 |
870 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 870 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
871 ReadNode node(&trans); | 871 ReadNode node(&trans); |
872 ASSERT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); | 872 ASSERT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); |
873 EXPECT_TRUE(node.GetNigoriSpecifics().sync_tabs()); | 873 EXPECT_TRUE(node.GetNigoriSpecifics().sync_tabs()); |
874 } | 874 } |
875 | 875 |
876 TEST_F(SyncManagerTest, ProcessJsMessage) { | 876 TEST_F(SyncManagerTest, ProcessJsMessage) { |
877 const JsArgList kNoArgs; | 877 const JsArgList kNoArgs; |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1151 sync_manager_.TriggerOnNotificationStateChangeForTest(true); | 1151 sync_manager_.TriggerOnNotificationStateChangeForTest(true); |
1152 sync_manager_.TriggerOnNotificationStateChangeForTest(false); | 1152 sync_manager_.TriggerOnNotificationStateChangeForTest(false); |
1153 | 1153 |
1154 // Should trigger the replies. | 1154 // Should trigger the replies. |
1155 PumpLoop(); | 1155 PumpLoop(); |
1156 } | 1156 } |
1157 | 1157 |
1158 TEST_F(SyncManagerTest, OnIncomingNotification) { | 1158 TEST_F(SyncManagerTest, OnIncomingNotification) { |
1159 StrictMock<MockJsEventHandler> event_handler; | 1159 StrictMock<MockJsEventHandler> event_handler; |
1160 | 1160 |
1161 const syncable::ModelEnumSet empty_model_types; | 1161 const syncable::ModelTypeSet empty_model_types; |
1162 const syncable::ModelEnumSet model_types( | 1162 const syncable::ModelTypeSet model_types( |
1163 syncable::BOOKMARKS, syncable::THEMES); | 1163 syncable::BOOKMARKS, syncable::THEMES); |
1164 | 1164 |
1165 // Build expected_args to have a single argument with the string | 1165 // Build expected_args to have a single argument with the string |
1166 // equivalents of model_types. | 1166 // equivalents of model_types. |
1167 DictionaryValue expected_details; | 1167 DictionaryValue expected_details; |
1168 { | 1168 { |
1169 ListValue* model_type_list = new ListValue(); | 1169 ListValue* model_type_list = new ListValue(); |
1170 expected_details.Set("changedTypes", model_type_list); | 1170 expected_details.Set("changedTypes", model_type_list); |
1171 for (syncable::ModelEnumSet::Iterator it = model_types.First(); | 1171 for (syncable::ModelTypeSet::Iterator it = model_types.First(); |
1172 it.Good(); it.Inc()) { | 1172 it.Good(); it.Inc()) { |
1173 model_type_list->Append( | 1173 model_type_list->Append( |
1174 Value::CreateStringValue( | 1174 Value::CreateStringValue( |
1175 syncable::ModelTypeToString(it.Get()))); | 1175 syncable::ModelTypeToString(it.Get()))); |
1176 } | 1176 } |
1177 } | 1177 } |
1178 | 1178 |
1179 EXPECT_CALL(event_handler, | 1179 EXPECT_CALL(event_handler, |
1180 HandleJsEvent("onIncomingNotification", | 1180 HandleJsEvent("onIncomingNotification", |
1181 HasDetailsAsDictionary(expected_details))); | 1181 HasDetailsAsDictionary(expected_details))); |
1182 | 1182 |
1183 sync_manager_.TriggerOnIncomingNotificationForTest(empty_model_types); | 1183 sync_manager_.TriggerOnIncomingNotificationForTest(empty_model_types); |
1184 sync_manager_.TriggerOnIncomingNotificationForTest(model_types); | 1184 sync_manager_.TriggerOnIncomingNotificationForTest(model_types); |
1185 | 1185 |
1186 SetJsEventHandler(event_handler.AsWeakHandle()); | 1186 SetJsEventHandler(event_handler.AsWeakHandle()); |
1187 sync_manager_.TriggerOnIncomingNotificationForTest(model_types); | 1187 sync_manager_.TriggerOnIncomingNotificationForTest(model_types); |
1188 SetJsEventHandler(WeakHandle<JsEventHandler>()); | 1188 SetJsEventHandler(WeakHandle<JsEventHandler>()); |
1189 | 1189 |
1190 sync_manager_.TriggerOnIncomingNotificationForTest(empty_model_types); | 1190 sync_manager_.TriggerOnIncomingNotificationForTest(empty_model_types); |
1191 sync_manager_.TriggerOnIncomingNotificationForTest(model_types); | 1191 sync_manager_.TriggerOnIncomingNotificationForTest(model_types); |
1192 | 1192 |
1193 // Should trigger the replies. | 1193 // Should trigger the replies. |
1194 PumpLoop(); | 1194 PumpLoop(); |
1195 } | 1195 } |
1196 | 1196 |
1197 TEST_F(SyncManagerTest, RefreshEncryptionReady) { | 1197 TEST_F(SyncManagerTest, RefreshEncryptionReady) { |
1198 EXPECT_TRUE(SetUpEncryption(true)); | 1198 EXPECT_TRUE(SetUpEncryption(true)); |
1199 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1199 EXPECT_CALL(observer_, OnEncryptionComplete()); |
1200 sync_manager_.RefreshEncryption(); | 1200 sync_manager_.RefreshEncryption(); |
1201 const syncable::ModelEnumSet encrypted_types = | 1201 const syncable::ModelTypeSet encrypted_types = |
1202 sync_manager_.GetEncryptedDataTypesForTest(); | 1202 sync_manager_.GetEncryptedDataTypesForTest(); |
1203 EXPECT_TRUE(encrypted_types.Has(syncable::PASSWORDS)); | 1203 EXPECT_TRUE(encrypted_types.Has(syncable::PASSWORDS)); |
1204 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); | 1204 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); |
1205 { | 1205 { |
1206 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1206 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1207 ReadNode node(&trans); | 1207 ReadNode node(&trans); |
1208 EXPECT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); | 1208 EXPECT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); |
1209 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); | 1209 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); |
1210 EXPECT_TRUE(nigori.has_encrypted()); | 1210 EXPECT_TRUE(nigori.has_encrypted()); |
1211 Cryptographer* cryptographer = trans.GetCryptographer(); | 1211 Cryptographer* cryptographer = trans.GetCryptographer(); |
1212 EXPECT_TRUE(cryptographer->is_ready()); | 1212 EXPECT_TRUE(cryptographer->is_ready()); |
1213 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); | 1213 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); |
1214 } | 1214 } |
1215 } | 1215 } |
1216 | 1216 |
1217 // Attempt to refresh encryption when nigori not downloaded. | 1217 // Attempt to refresh encryption when nigori not downloaded. |
1218 TEST_F(SyncManagerTest, RefreshEncryptionNotReady) { | 1218 TEST_F(SyncManagerTest, RefreshEncryptionNotReady) { |
1219 // Don't set up encryption (no nigori node created). | 1219 // Don't set up encryption (no nigori node created). |
1220 sync_manager_.RefreshEncryption(); // Should fail. | 1220 sync_manager_.RefreshEncryption(); // Should fail. |
1221 const syncable::ModelEnumSet encrypted_types = | 1221 const syncable::ModelTypeSet encrypted_types = |
1222 sync_manager_.GetEncryptedDataTypesForTest(); | 1222 sync_manager_.GetEncryptedDataTypesForTest(); |
1223 EXPECT_TRUE(encrypted_types.Has(syncable::PASSWORDS)); // Hardcoded. | 1223 EXPECT_TRUE(encrypted_types.Has(syncable::PASSWORDS)); // Hardcoded. |
1224 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); | 1224 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); |
1225 } | 1225 } |
1226 | 1226 |
1227 // Attempt to refresh encryption when nigori is empty. | 1227 // Attempt to refresh encryption when nigori is empty. |
1228 TEST_F(SyncManagerTest, RefreshEncryptionEmptyNigori) { | 1228 TEST_F(SyncManagerTest, RefreshEncryptionEmptyNigori) { |
1229 EXPECT_TRUE(SetUpEncryption(false)); | 1229 EXPECT_TRUE(SetUpEncryption(false)); |
1230 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1230 EXPECT_CALL(observer_, OnEncryptionComplete()); |
1231 sync_manager_.RefreshEncryption(); // Should write to nigori. | 1231 sync_manager_.RefreshEncryption(); // Should write to nigori. |
1232 const syncable::ModelEnumSet encrypted_types = | 1232 const syncable::ModelTypeSet encrypted_types = |
1233 sync_manager_.GetEncryptedDataTypesForTest(); | 1233 sync_manager_.GetEncryptedDataTypesForTest(); |
1234 EXPECT_TRUE(encrypted_types.Has(syncable::PASSWORDS)); // Hardcoded. | 1234 EXPECT_TRUE(encrypted_types.Has(syncable::PASSWORDS)); // Hardcoded. |
1235 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); | 1235 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); |
1236 { | 1236 { |
1237 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1237 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1238 ReadNode node(&trans); | 1238 ReadNode node(&trans); |
1239 EXPECT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); | 1239 EXPECT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); |
1240 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); | 1240 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); |
1241 EXPECT_TRUE(nigori.has_encrypted()); | 1241 EXPECT_TRUE(nigori.has_encrypted()); |
1242 Cryptographer* cryptographer = trans.GetCryptographer(); | 1242 Cryptographer* cryptographer = trans.GetCryptographer(); |
1243 EXPECT_TRUE(cryptographer->is_ready()); | 1243 EXPECT_TRUE(cryptographer->is_ready()); |
1244 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); | 1244 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); |
1245 } | 1245 } |
1246 } | 1246 } |
1247 | 1247 |
1248 TEST_F(SyncManagerTest, EncryptDataTypesWithNoData) { | 1248 TEST_F(SyncManagerTest, EncryptDataTypesWithNoData) { |
1249 EXPECT_TRUE(SetUpEncryption(true)); | 1249 EXPECT_TRUE(SetUpEncryption(true)); |
1250 EXPECT_CALL(observer_, | 1250 EXPECT_CALL(observer_, |
1251 OnEncryptedTypesChanged( | 1251 OnEncryptedTypesChanged( |
1252 HasModelTypes(syncable::ModelEnumSet::All()), true)); | 1252 HasModelTypes(syncable::ModelTypeSet::All()), true)); |
1253 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1253 EXPECT_CALL(observer_, OnEncryptionComplete()); |
1254 sync_manager_.EnableEncryptEverything(); | 1254 sync_manager_.EnableEncryptEverything(); |
1255 EXPECT_TRUE(sync_manager_.EncryptEverythingEnabledForTest()); | 1255 EXPECT_TRUE(sync_manager_.EncryptEverythingEnabledForTest()); |
1256 } | 1256 } |
1257 | 1257 |
1258 TEST_F(SyncManagerTest, EncryptDataTypesWithData) { | 1258 TEST_F(SyncManagerTest, EncryptDataTypesWithData) { |
1259 size_t batch_size = 5; | 1259 size_t batch_size = 5; |
1260 EXPECT_TRUE(SetUpEncryption(true)); | 1260 EXPECT_TRUE(SetUpEncryption(true)); |
1261 | 1261 |
1262 // Create some unencrypted unsynced data. | 1262 // Create some unencrypted unsynced data. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1299 false /* not encrypted */)); | 1299 false /* not encrypted */)); |
1300 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1300 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1301 trans.GetWrappedTrans(), | 1301 trans.GetWrappedTrans(), |
1302 trans.GetCryptographer(), | 1302 trans.GetCryptographer(), |
1303 syncable::THEMES, | 1303 syncable::THEMES, |
1304 false /* not encrypted */)); | 1304 false /* not encrypted */)); |
1305 } | 1305 } |
1306 | 1306 |
1307 EXPECT_CALL(observer_, | 1307 EXPECT_CALL(observer_, |
1308 OnEncryptedTypesChanged( | 1308 OnEncryptedTypesChanged( |
1309 HasModelTypes(syncable::ModelEnumSet::All()), true)); | 1309 HasModelTypes(syncable::ModelTypeSet::All()), true)); |
1310 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1310 EXPECT_CALL(observer_, OnEncryptionComplete()); |
1311 sync_manager_.EnableEncryptEverything(); | 1311 sync_manager_.EnableEncryptEverything(); |
1312 EXPECT_TRUE(sync_manager_.EncryptEverythingEnabledForTest()); | 1312 EXPECT_TRUE(sync_manager_.EncryptEverythingEnabledForTest()); |
1313 { | 1313 { |
1314 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1314 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1315 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( | 1315 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( |
1316 syncable::ModelEnumSet::All())); | 1316 syncable::ModelTypeSet::All())); |
1317 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1317 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1318 trans.GetWrappedTrans(), | 1318 trans.GetWrappedTrans(), |
1319 trans.GetCryptographer(), | 1319 trans.GetCryptographer(), |
1320 syncable::BOOKMARKS, | 1320 syncable::BOOKMARKS, |
1321 true /* is encrypted */)); | 1321 true /* is encrypted */)); |
1322 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1322 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1323 trans.GetWrappedTrans(), | 1323 trans.GetWrappedTrans(), |
1324 trans.GetCryptographer(), | 1324 trans.GetCryptographer(), |
1325 syncable::SESSIONS, | 1325 syncable::SESSIONS, |
1326 true /* is encrypted */)); | 1326 true /* is encrypted */)); |
1327 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1327 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1328 trans.GetWrappedTrans(), | 1328 trans.GetWrappedTrans(), |
1329 trans.GetCryptographer(), | 1329 trans.GetCryptographer(), |
1330 syncable::THEMES, | 1330 syncable::THEMES, |
1331 true /* is encrypted */)); | 1331 true /* is encrypted */)); |
1332 } | 1332 } |
1333 | 1333 |
1334 // Trigger's a ReEncryptEverything with new passphrase. | 1334 // Trigger's a ReEncryptEverything with new passphrase. |
1335 testing::Mock::VerifyAndClearExpectations(&observer_); | 1335 testing::Mock::VerifyAndClearExpectations(&observer_); |
1336 EXPECT_CALL(observer_, OnPassphraseAccepted(_)); | 1336 EXPECT_CALL(observer_, OnPassphraseAccepted(_)); |
1337 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1337 EXPECT_CALL(observer_, OnEncryptionComplete()); |
1338 sync_manager_.SetPassphrase("new_passphrase", true); | 1338 sync_manager_.SetPassphrase("new_passphrase", true); |
1339 EXPECT_TRUE(sync_manager_.EncryptEverythingEnabledForTest()); | 1339 EXPECT_TRUE(sync_manager_.EncryptEverythingEnabledForTest()); |
1340 { | 1340 { |
1341 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1341 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1342 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( | 1342 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( |
1343 syncable::ModelEnumSet::All())); | 1343 syncable::ModelTypeSet::All())); |
1344 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1344 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1345 trans.GetWrappedTrans(), | 1345 trans.GetWrappedTrans(), |
1346 trans.GetCryptographer(), | 1346 trans.GetCryptographer(), |
1347 syncable::BOOKMARKS, | 1347 syncable::BOOKMARKS, |
1348 true /* is encrypted */)); | 1348 true /* is encrypted */)); |
1349 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1349 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1350 trans.GetWrappedTrans(), | 1350 trans.GetWrappedTrans(), |
1351 trans.GetCryptographer(), | 1351 trans.GetCryptographer(), |
1352 syncable::SESSIONS, | 1352 syncable::SESSIONS, |
1353 true /* is encrypted */)); | 1353 true /* is encrypted */)); |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1494 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1494 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1495 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1495 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1496 trans.GetWrappedTrans(), | 1496 trans.GetWrappedTrans(), |
1497 trans.GetCryptographer(), | 1497 trans.GetCryptographer(), |
1498 syncable::BOOKMARKS, | 1498 syncable::BOOKMARKS, |
1499 false /* not encrypted */)); | 1499 false /* not encrypted */)); |
1500 } | 1500 } |
1501 | 1501 |
1502 EXPECT_CALL(observer_, | 1502 EXPECT_CALL(observer_, |
1503 OnEncryptedTypesChanged( | 1503 OnEncryptedTypesChanged( |
1504 HasModelTypes(syncable::ModelEnumSet::All()), true)); | 1504 HasModelTypes(syncable::ModelTypeSet::All()), true)); |
1505 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1505 EXPECT_CALL(observer_, OnEncryptionComplete()); |
1506 sync_manager_.EnableEncryptEverything(); | 1506 sync_manager_.EnableEncryptEverything(); |
1507 EXPECT_TRUE(sync_manager_.EncryptEverythingEnabledForTest()); | 1507 EXPECT_TRUE(sync_manager_.EncryptEverythingEnabledForTest()); |
1508 | 1508 |
1509 { | 1509 { |
1510 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1510 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1511 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( | 1511 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( |
1512 syncable::ModelEnumSet::All())); | 1512 syncable::ModelTypeSet::All())); |
1513 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1513 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1514 trans.GetWrappedTrans(), | 1514 trans.GetWrappedTrans(), |
1515 trans.GetCryptographer(), | 1515 trans.GetCryptographer(), |
1516 syncable::BOOKMARKS, | 1516 syncable::BOOKMARKS, |
1517 true /* is encrypted */)); | 1517 true /* is encrypted */)); |
1518 | 1518 |
1519 ReadNode node(&trans); | 1519 ReadNode node(&trans); |
1520 EXPECT_TRUE(node.InitByIdLookup(node_id1)); | 1520 EXPECT_TRUE(node.InitByIdLookup(node_id1)); |
1521 EXPECT_EQ(syncable::BOOKMARKS, node.GetModelType()); | 1521 EXPECT_EQ(syncable::BOOKMARKS, node.GetModelType()); |
1522 EXPECT_EQ(title, node.GetTitle()); | 1522 EXPECT_EQ(title, node.GetTitle()); |
1523 EXPECT_EQ(title, node.GetBookmarkSpecifics().title()); | 1523 EXPECT_EQ(title, node.GetBookmarkSpecifics().title()); |
1524 EXPECT_EQ(url, node.GetBookmarkSpecifics().url()); | 1524 EXPECT_EQ(url, node.GetBookmarkSpecifics().url()); |
1525 | 1525 |
1526 ReadNode node2(&trans); | 1526 ReadNode node2(&trans); |
1527 EXPECT_TRUE(node2.InitByIdLookup(node_id2)); | 1527 EXPECT_TRUE(node2.InitByIdLookup(node_id2)); |
1528 EXPECT_EQ(syncable::BOOKMARKS, node2.GetModelType()); | 1528 EXPECT_EQ(syncable::BOOKMARKS, node2.GetModelType()); |
1529 // We should de-canonicalize the title in GetTitle(), but the title in the | 1529 // We should de-canonicalize the title in GetTitle(), but the title in the |
1530 // specifics should be stored in the server legal form. | 1530 // specifics should be stored in the server legal form. |
1531 EXPECT_EQ(raw_title2, node2.GetTitle()); | 1531 EXPECT_EQ(raw_title2, node2.GetTitle()); |
1532 EXPECT_EQ(title2, node2.GetBookmarkSpecifics().title()); | 1532 EXPECT_EQ(title2, node2.GetBookmarkSpecifics().title()); |
1533 EXPECT_EQ(url2, node2.GetBookmarkSpecifics().url()); | 1533 EXPECT_EQ(url2, node2.GetBookmarkSpecifics().url()); |
1534 } | 1534 } |
1535 } | 1535 } |
1536 | 1536 |
1537 } // namespace browser_sync | 1537 } // namespace browser_sync |
OLD | NEW |