| 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 // 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 778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 789 void TearDown() { | 789 void TearDown() { |
| 790 sync_manager_.RemoveObserver(&observer_); | 790 sync_manager_.RemoveObserver(&observer_); |
| 791 // |sync_notifier_mock_| is strict, which ensures we don't do anything but | 791 // |sync_notifier_mock_| is strict, which ensures we don't do anything but |
| 792 // unregister |sync_manager_| as a handler on shutdown. | 792 // unregister |sync_manager_| as a handler on shutdown. |
| 793 sync_manager_.ShutdownOnSyncThread(); | 793 sync_manager_.ShutdownOnSyncThread(); |
| 794 sync_notifier_mock_ = NULL; | 794 sync_notifier_mock_ = NULL; |
| 795 PumpLoop(); | 795 PumpLoop(); |
| 796 } | 796 } |
| 797 | 797 |
| 798 void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) { | 798 void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) { |
| 799 (*out)[NIGORI] = GROUP_PASSIVE; | 799 (*out)[NIGORI] = GROUP_CONTROL; |
| 800 (*out)[PER_DEVICE_METADATA] = GROUP_CONTROL; |
| 801 (*out)[PER_USER_METADATA] = GROUP_CONTROL; |
| 800 (*out)[BOOKMARKS] = GROUP_PASSIVE; | 802 (*out)[BOOKMARKS] = GROUP_PASSIVE; |
| 801 (*out)[THEMES] = GROUP_PASSIVE; | 803 (*out)[THEMES] = GROUP_PASSIVE; |
| 802 (*out)[SESSIONS] = GROUP_PASSIVE; | 804 (*out)[SESSIONS] = GROUP_PASSIVE; |
| 803 (*out)[PASSWORDS] = GROUP_PASSIVE; | 805 (*out)[PASSWORDS] = GROUP_PASSIVE; |
| 804 (*out)[PREFERENCES] = GROUP_PASSIVE; | 806 (*out)[PREFERENCES] = GROUP_PASSIVE; |
| 805 } | 807 } |
| 806 | 808 |
| 807 virtual void OnChangesApplied( | 809 virtual void OnChangesApplied( |
| 808 ModelType model_type, | 810 ModelType model_type, |
| 809 const BaseTransaction* trans, | 811 const BaseTransaction* trans, |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 934 } else { | 936 } else { |
| 935 sync_pb::DataTypeProgressMarker marker; | 937 sync_pb::DataTypeProgressMarker marker; |
| 936 sync_manager_.directory()->SetDownloadProgress(type, marker); | 938 sync_manager_.directory()->SetDownloadProgress(type, marker); |
| 937 } | 939 } |
| 938 } | 940 } |
| 939 | 941 |
| 940 void SetInitialSyncEndedForType(ModelType type, bool value) { | 942 void SetInitialSyncEndedForType(ModelType type, bool value) { |
| 941 sync_manager_.directory()->set_initial_sync_ended_for_type(type, value); | 943 sync_manager_.directory()->set_initial_sync_ended_for_type(type, value); |
| 942 } | 944 } |
| 943 | 945 |
| 946 void RefreshEncryption() { |
| 947 sync_manager_.RefreshEncryption(); |
| 948 } |
| 949 |
| 950 void UpdateDeviceInformation(std::string version, std::string session_name) { |
| 951 sync_manager_.UpdateDeviceInformation(version, session_name); |
| 952 } |
| 953 |
| 944 private: | 954 private: |
| 945 // Needed by |sync_manager_|. | 955 // Needed by |sync_manager_|. |
| 946 MessageLoop message_loop_; | 956 MessageLoop message_loop_; |
| 947 // Needed by |sync_manager_|. | 957 // Needed by |sync_manager_|. |
| 948 ScopedTempDir temp_dir_; | 958 ScopedTempDir temp_dir_; |
| 949 // Sync Id's for the roots of the enabled datatypes. | 959 // Sync Id's for the roots of the enabled datatypes. |
| 950 std::map<ModelType, int64> type_roots_; | 960 std::map<ModelType, int64> type_roots_; |
| 951 FakeExtensionsActivityMonitor extensions_activity_monitor_; | 961 FakeExtensionsActivityMonitor extensions_activity_monitor_; |
| 952 | 962 |
| 953 protected: | 963 protected: |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1178 ListValue args; | 1188 ListValue args; |
| 1179 args.Append(Value::CreateStringValue("1")); | 1189 args.Append(Value::CreateStringValue("1")); |
| 1180 SendJsMessage("getChildNodeIds", | 1190 SendJsMessage("getChildNodeIds", |
| 1181 JsArgList(&args), reply_handler.AsWeakHandle()); | 1191 JsArgList(&args), reply_handler.AsWeakHandle()); |
| 1182 } | 1192 } |
| 1183 | 1193 |
| 1184 EXPECT_EQ(1u, return_args.Get().GetSize()); | 1194 EXPECT_EQ(1u, return_args.Get().GetSize()); |
| 1185 const ListValue* nodes = NULL; | 1195 const ListValue* nodes = NULL; |
| 1186 ASSERT_TRUE(return_args.Get().GetList(0, &nodes)); | 1196 ASSERT_TRUE(return_args.Get().GetList(0, &nodes)); |
| 1187 ASSERT_TRUE(nodes); | 1197 ASSERT_TRUE(nodes); |
| 1188 EXPECT_EQ(6u, nodes->GetSize()); | 1198 EXPECT_EQ(8u, nodes->GetSize()); |
| 1189 } | 1199 } |
| 1190 | 1200 |
| 1191 TEST_F(SyncManagerTest, GetChildNodeIdsFailure) { | 1201 TEST_F(SyncManagerTest, GetChildNodeIdsFailure) { |
| 1192 StrictMock<MockJsReplyHandler> reply_handler; | 1202 StrictMock<MockJsReplyHandler> reply_handler; |
| 1193 | 1203 |
| 1194 ListValue empty_list_args; | 1204 ListValue empty_list_args; |
| 1195 empty_list_args.Append(new ListValue()); | 1205 empty_list_args.Append(new ListValue()); |
| 1196 | 1206 |
| 1197 EXPECT_CALL(reply_handler, | 1207 EXPECT_CALL(reply_handler, |
| 1198 HandleJsReply("getChildNodeIds", | 1208 HandleJsReply("getChildNodeIds", |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1338 TriggerOnIncomingNotificationForTest(model_types); | 1348 TriggerOnIncomingNotificationForTest(model_types); |
| 1339 SetJsEventHandler(WeakHandle<JsEventHandler>()); | 1349 SetJsEventHandler(WeakHandle<JsEventHandler>()); |
| 1340 | 1350 |
| 1341 TriggerOnIncomingNotificationForTest(empty_model_types); | 1351 TriggerOnIncomingNotificationForTest(empty_model_types); |
| 1342 TriggerOnIncomingNotificationForTest(model_types); | 1352 TriggerOnIncomingNotificationForTest(model_types); |
| 1343 | 1353 |
| 1344 // Should trigger the replies. | 1354 // Should trigger the replies. |
| 1345 PumpLoop(); | 1355 PumpLoop(); |
| 1346 } | 1356 } |
| 1347 | 1357 |
| 1358 TEST_F(SyncManagerTest, CreateNewDeviceInformation) { |
| 1359 const std::string version("v1"); |
| 1360 const std::string session_name("session"); |
| 1361 const std::string cache_guid = |
| 1362 sync_manager_.GetUserShare()->directory->cache_guid(); |
| 1363 |
| 1364 { |
| 1365 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 1366 ReadNode node(&trans); |
| 1367 ASSERT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, |
| 1368 node.InitByClientTagLookup(PER_DEVICE_METADATA, cache_guid)); |
| 1369 } |
| 1370 |
| 1371 UpdateDeviceInformation("v1", "session"); |
| 1372 |
| 1373 { |
| 1374 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 1375 ReadNode node(&trans); |
| 1376 ASSERT_EQ(BaseNode::INIT_OK, |
| 1377 node.InitByClientTagLookup(PER_DEVICE_METADATA, cache_guid)); |
| 1378 sync_pb::PerDeviceSpecifics specifics = node.GetPerDeviceSpecifics(); |
| 1379 ASSERT_TRUE(specifics.has_device_information()); |
| 1380 const sync_pb::DeviceInformation& device_info = |
| 1381 specifics.device_information(); |
| 1382 |
| 1383 EXPECT_EQ(version, device_info.chrome_version()); |
| 1384 EXPECT_EQ(session_name, device_info.name()); |
| 1385 EXPECT_EQ(cache_guid, device_info.cache_guid()); |
| 1386 } |
| 1387 } |
| 1388 |
| 1389 TEST_F(SyncManagerTest, DontModifyExistingDeviceInformation) { |
| 1390 const std::string version("v1"); |
| 1391 const std::string session_name("session"); |
| 1392 const std::string cache_guid = |
| 1393 sync_manager_.GetUserShare()->directory->cache_guid(); |
| 1394 sync_pb::DeviceInformation old_device_info; |
| 1395 sync_pb::DeviceInformation new_device_info; |
| 1396 |
| 1397 UpdateDeviceInformation(version, session_name); |
| 1398 |
| 1399 { |
| 1400 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 1401 ReadNode node(&trans); |
| 1402 ASSERT_EQ(BaseNode::INIT_OK, |
| 1403 node.InitByClientTagLookup(PER_DEVICE_METADATA, cache_guid)); |
| 1404 sync_pb::PerDeviceSpecifics old_specifics = node.GetPerDeviceSpecifics(); |
| 1405 } |
| 1406 |
| 1407 UpdateDeviceInformation(version, session_name); |
| 1408 |
| 1409 { |
| 1410 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 1411 ReadNode node(&trans); |
| 1412 ASSERT_EQ(BaseNode::INIT_OK, |
| 1413 node.InitByClientTagLookup(PER_DEVICE_METADATA, cache_guid)); |
| 1414 sync_pb::PerDeviceSpecifics new_specifics = node.GetPerDeviceSpecifics(); |
| 1415 } |
| 1416 |
| 1417 EXPECT_EQ(old_device_info.chrome_version(), new_device_info.chrome_version()); |
| 1418 EXPECT_EQ(old_device_info.name(), new_device_info.name()); |
| 1419 EXPECT_EQ(old_device_info.cache_guid(), new_device_info.cache_guid()); |
| 1420 } |
| 1421 |
| 1422 TEST_F(SyncManagerTest, UpdateExistingDeviceInformation) { |
| 1423 const std::string old_version("v1"); |
| 1424 const std::string new_version("v2"); |
| 1425 const std::string session_name("session"); |
| 1426 const std::string cache_guid = |
| 1427 sync_manager_.GetUserShare()->directory->cache_guid(); |
| 1428 |
| 1429 UpdateDeviceInformation(old_version, session_name); |
| 1430 UpdateDeviceInformation(new_version, session_name); |
| 1431 |
| 1432 { |
| 1433 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 1434 WriteNode node(&trans); |
| 1435 ASSERT_EQ(BaseNode::INIT_OK, |
| 1436 node.InitByClientTagLookup(PER_DEVICE_METADATA, cache_guid)); |
| 1437 sync_pb::PerDeviceSpecifics specifics = node.GetPerDeviceSpecifics(); |
| 1438 ASSERT_TRUE(specifics.has_device_information()); |
| 1439 const sync_pb::DeviceInformation& device_info = |
| 1440 specifics.device_information(); |
| 1441 |
| 1442 EXPECT_EQ(new_version, device_info.chrome_version()); |
| 1443 } |
| 1444 } |
| 1445 |
| 1348 TEST_F(SyncManagerTest, RefreshEncryptionReady) { | 1446 TEST_F(SyncManagerTest, RefreshEncryptionReady) { |
| 1349 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); | 1447 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); |
| 1350 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1448 EXPECT_CALL(observer_, OnEncryptionComplete()); |
| 1351 | 1449 |
| 1352 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 1450 RefreshEncryption(); |
| 1353 PumpLoop(); | |
| 1354 | 1451 |
| 1355 const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest(); | 1452 const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest(); |
| 1356 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); | 1453 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); |
| 1357 EXPECT_FALSE(EncryptEverythingEnabledForTest()); | 1454 EXPECT_FALSE(EncryptEverythingEnabledForTest()); |
| 1358 | 1455 |
| 1359 { | 1456 { |
| 1360 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1457 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 1361 ReadNode node(&trans); | 1458 ReadNode node(&trans); |
| 1362 EXPECT_EQ(BaseNode::INIT_OK, | 1459 EXPECT_EQ(BaseNode::INIT_OK, |
| 1363 node.InitByIdLookup(GetIdForDataType(NIGORI))); | 1460 node.InitByIdLookup(GetIdForDataType(NIGORI))); |
| 1364 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); | 1461 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); |
| 1365 EXPECT_TRUE(nigori.has_encrypted()); | 1462 EXPECT_TRUE(nigori.has_encrypted()); |
| 1366 Cryptographer* cryptographer = trans.GetCryptographer(); | 1463 Cryptographer* cryptographer = trans.GetCryptographer(); |
| 1367 EXPECT_TRUE(cryptographer->is_ready()); | 1464 EXPECT_TRUE(cryptographer->is_ready()); |
| 1368 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); | 1465 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); |
| 1369 } | 1466 } |
| 1370 } | 1467 } |
| 1371 | 1468 |
| 1372 // Attempt to refresh encryption when nigori not downloaded. | |
| 1373 TEST_F(SyncManagerTest, RefreshEncryptionNotReady) { | |
| 1374 // Don't set up encryption (no nigori node created). | |
| 1375 | |
| 1376 // Should fail. | |
| 1377 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | |
| 1378 PumpLoop(); | |
| 1379 | |
| 1380 const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest(); | |
| 1381 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded. | |
| 1382 EXPECT_FALSE(EncryptEverythingEnabledForTest()); | |
| 1383 } | |
| 1384 | |
| 1385 // Attempt to refresh encryption when nigori is empty. | 1469 // Attempt to refresh encryption when nigori is empty. |
| 1386 TEST_F(SyncManagerTest, RefreshEncryptionEmptyNigori) { | 1470 TEST_F(SyncManagerTest, RefreshEncryptionEmptyNigori) { |
| 1387 EXPECT_TRUE(SetUpEncryption(DONT_WRITE_NIGORI, DEFAULT_ENCRYPTION)); | 1471 EXPECT_TRUE(SetUpEncryption(DONT_WRITE_NIGORI, DEFAULT_ENCRYPTION)); |
| 1388 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1472 EXPECT_CALL(observer_, OnEncryptionComplete()); |
| 1389 | 1473 |
| 1390 // Should write to nigori. | 1474 // Should write to nigori. |
| 1391 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 1475 RefreshEncryption(); |
| 1392 PumpLoop(); | |
| 1393 | 1476 |
| 1394 const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest(); | 1477 const ModelTypeSet encrypted_types = GetEncryptedDataTypesForTest(); |
| 1395 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded. | 1478 EXPECT_TRUE(encrypted_types.Has(PASSWORDS)); // Hardcoded. |
| 1396 EXPECT_FALSE(EncryptEverythingEnabledForTest()); | 1479 EXPECT_FALSE(EncryptEverythingEnabledForTest()); |
| 1397 | 1480 |
| 1398 { | 1481 { |
| 1399 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1482 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 1400 ReadNode node(&trans); | 1483 ReadNode node(&trans); |
| 1401 EXPECT_EQ(BaseNode::INIT_OK, | 1484 EXPECT_EQ(BaseNode::INIT_OK, |
| 1402 node.InitByIdLookup(GetIdForDataType(NIGORI))); | 1485 node.InitByIdLookup(GetIdForDataType(NIGORI))); |
| 1403 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); | 1486 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); |
| 1404 EXPECT_TRUE(nigori.has_encrypted()); | 1487 EXPECT_TRUE(nigori.has_encrypted()); |
| 1405 Cryptographer* cryptographer = trans.GetCryptographer(); | 1488 Cryptographer* cryptographer = trans.GetCryptographer(); |
| 1406 EXPECT_TRUE(cryptographer->is_ready()); | 1489 EXPECT_TRUE(cryptographer->is_ready()); |
| 1407 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); | 1490 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); |
| 1408 } | 1491 } |
| 1409 } | 1492 } |
| 1410 | 1493 |
| 1411 TEST_F(SyncManagerTest, EncryptDataTypesWithNoData) { | 1494 TEST_F(SyncManagerTest, EncryptDataTypesWithNoData) { |
| 1412 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); | 1495 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); |
| 1413 EXPECT_CALL(observer_, | 1496 EXPECT_CALL(observer_, |
| 1414 OnEncryptedTypesChanged( | 1497 OnEncryptedTypesChanged( |
| 1415 HasModelTypes(ModelTypeSet::All()), true)); | 1498 HasModelTypes(syncer::EncryptableTypes()), true)); |
| 1416 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1499 EXPECT_CALL(observer_, OnEncryptionComplete()); |
| 1417 sync_manager_.EnableEncryptEverything(); | 1500 sync_manager_.EnableEncryptEverything(); |
| 1418 EXPECT_TRUE(EncryptEverythingEnabledForTest()); | 1501 EXPECT_TRUE(EncryptEverythingEnabledForTest()); |
| 1419 } | 1502 } |
| 1420 | 1503 |
| 1421 TEST_F(SyncManagerTest, EncryptDataTypesWithData) { | 1504 TEST_F(SyncManagerTest, EncryptDataTypesWithData) { |
| 1422 size_t batch_size = 5; | 1505 size_t batch_size = 5; |
| 1423 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); | 1506 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); |
| 1424 | 1507 |
| 1425 // Create some unencrypted unsynced data. | 1508 // Create some unencrypted unsynced data. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1462 false /* not encrypted */)); | 1545 false /* not encrypted */)); |
| 1463 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1546 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
| 1464 trans.GetWrappedTrans(), | 1547 trans.GetWrappedTrans(), |
| 1465 trans.GetCryptographer(), | 1548 trans.GetCryptographer(), |
| 1466 THEMES, | 1549 THEMES, |
| 1467 false /* not encrypted */)); | 1550 false /* not encrypted */)); |
| 1468 } | 1551 } |
| 1469 | 1552 |
| 1470 EXPECT_CALL(observer_, | 1553 EXPECT_CALL(observer_, |
| 1471 OnEncryptedTypesChanged( | 1554 OnEncryptedTypesChanged( |
| 1472 HasModelTypes(ModelTypeSet::All()), true)); | 1555 HasModelTypes(syncer::EncryptableTypes()), true)); |
| 1473 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1556 EXPECT_CALL(observer_, OnEncryptionComplete()); |
| 1474 sync_manager_.EnableEncryptEverything(); | 1557 sync_manager_.EnableEncryptEverything(); |
| 1475 EXPECT_TRUE(EncryptEverythingEnabledForTest()); | 1558 EXPECT_TRUE(EncryptEverythingEnabledForTest()); |
| 1476 { | 1559 { |
| 1477 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1560 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 1478 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( | 1561 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( |
| 1479 ModelTypeSet::All())); | 1562 syncer::EncryptableTypes())); |
| 1480 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1563 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
| 1481 trans.GetWrappedTrans(), | 1564 trans.GetWrappedTrans(), |
| 1482 trans.GetCryptographer(), | 1565 trans.GetCryptographer(), |
| 1483 BOOKMARKS, | 1566 BOOKMARKS, |
| 1484 true /* is encrypted */)); | 1567 true /* is encrypted */)); |
| 1485 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1568 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
| 1486 trans.GetWrappedTrans(), | 1569 trans.GetWrappedTrans(), |
| 1487 trans.GetCryptographer(), | 1570 trans.GetCryptographer(), |
| 1488 SESSIONS, | 1571 SESSIONS, |
| 1489 true /* is encrypted */)); | 1572 true /* is encrypted */)); |
| 1490 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1573 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
| 1491 trans.GetWrappedTrans(), | 1574 trans.GetWrappedTrans(), |
| 1492 trans.GetCryptographer(), | 1575 trans.GetCryptographer(), |
| 1493 THEMES, | 1576 THEMES, |
| 1494 true /* is encrypted */)); | 1577 true /* is encrypted */)); |
| 1495 } | 1578 } |
| 1496 | 1579 |
| 1497 // Trigger's a ReEncryptEverything with new passphrase. | 1580 // Trigger's a ReEncryptEverything with new passphrase. |
| 1498 testing::Mock::VerifyAndClearExpectations(&observer_); | 1581 testing::Mock::VerifyAndClearExpectations(&observer_); |
| 1499 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); | 1582 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); |
| 1500 EXPECT_CALL(observer_, OnPassphraseAccepted()); | 1583 EXPECT_CALL(observer_, OnPassphraseAccepted()); |
| 1501 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1584 EXPECT_CALL(observer_, OnEncryptionComplete()); |
| 1502 sync_manager_.SetEncryptionPassphrase("new_passphrase", true); | 1585 sync_manager_.SetEncryptionPassphrase("new_passphrase", true); |
| 1503 EXPECT_TRUE(EncryptEverythingEnabledForTest()); | 1586 EXPECT_TRUE(EncryptEverythingEnabledForTest()); |
| 1504 { | 1587 { |
| 1505 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1588 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 1506 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(ModelTypeSet::All())); | 1589 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(syncer::EncryptableTypes())); |
| 1507 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1590 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
| 1508 trans.GetWrappedTrans(), | 1591 trans.GetWrappedTrans(), |
| 1509 trans.GetCryptographer(), | 1592 trans.GetCryptographer(), |
| 1510 BOOKMARKS, | 1593 BOOKMARKS, |
| 1511 true /* is encrypted */)); | 1594 true /* is encrypted */)); |
| 1512 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1595 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
| 1513 trans.GetWrappedTrans(), | 1596 trans.GetWrappedTrans(), |
| 1514 trans.GetCryptographer(), | 1597 trans.GetCryptographer(), |
| 1515 SESSIONS, | 1598 SESSIONS, |
| 1516 true /* is encrypted */)); | 1599 true /* is encrypted */)); |
| (...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1937 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2020 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 1938 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 2021 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
| 1939 trans.GetWrappedTrans(), | 2022 trans.GetWrappedTrans(), |
| 1940 trans.GetCryptographer(), | 2023 trans.GetCryptographer(), |
| 1941 BOOKMARKS, | 2024 BOOKMARKS, |
| 1942 false /* not encrypted */)); | 2025 false /* not encrypted */)); |
| 1943 } | 2026 } |
| 1944 | 2027 |
| 1945 EXPECT_CALL(observer_, | 2028 EXPECT_CALL(observer_, |
| 1946 OnEncryptedTypesChanged( | 2029 OnEncryptedTypesChanged( |
| 1947 HasModelTypes(ModelTypeSet::All()), true)); | 2030 HasModelTypes(syncer::EncryptableTypes()), true)); |
| 1948 EXPECT_CALL(observer_, OnEncryptionComplete()); | 2031 EXPECT_CALL(observer_, OnEncryptionComplete()); |
| 1949 sync_manager_.EnableEncryptEverything(); | 2032 sync_manager_.EnableEncryptEverything(); |
| 1950 EXPECT_TRUE(EncryptEverythingEnabledForTest()); | 2033 EXPECT_TRUE(EncryptEverythingEnabledForTest()); |
| 1951 | 2034 |
| 1952 { | 2035 { |
| 1953 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2036 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 1954 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(ModelTypeSet::All())); | 2037 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals(syncer::EncryptableTypes())); |
| 1955 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 2038 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
| 1956 trans.GetWrappedTrans(), | 2039 trans.GetWrappedTrans(), |
| 1957 trans.GetCryptographer(), | 2040 trans.GetCryptographer(), |
| 1958 BOOKMARKS, | 2041 BOOKMARKS, |
| 1959 true /* is encrypted */)); | 2042 true /* is encrypted */)); |
| 1960 | 2043 |
| 1961 ReadNode node(&trans); | 2044 ReadNode node(&trans); |
| 1962 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(node_id1)); | 2045 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(node_id1)); |
| 1963 EXPECT_EQ(BOOKMARKS, node.GetModelType()); | 2046 EXPECT_EQ(BOOKMARKS, node.GetModelType()); |
| 1964 EXPECT_EQ(title, node.GetTitle()); | 2047 EXPECT_EQ(title, node.GetTitle()); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2025 WriteNode node(&trans); | 2108 WriteNode node(&trans); |
| 2026 EXPECT_EQ(BaseNode::INIT_OK, | 2109 EXPECT_EQ(BaseNode::INIT_OK, |
| 2027 node.InitByClientTagLookup(BOOKMARKS, client_tag)); | 2110 node.InitByClientTagLookup(BOOKMARKS, client_tag)); |
| 2028 node.SetEntitySpecifics(entity_specifics); | 2111 node.SetEntitySpecifics(entity_specifics); |
| 2029 } | 2112 } |
| 2030 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2113 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
| 2031 | 2114 |
| 2032 // Encrypt the datatatype, should set is_unsynced. | 2115 // Encrypt the datatatype, should set is_unsynced. |
| 2033 EXPECT_CALL(observer_, | 2116 EXPECT_CALL(observer_, |
| 2034 OnEncryptedTypesChanged( | 2117 OnEncryptedTypesChanged( |
| 2035 HasModelTypes(ModelTypeSet::All()), true)); | 2118 HasModelTypes(syncer::EncryptableTypes()), true)); |
| 2036 EXPECT_CALL(observer_, OnEncryptionComplete()); | 2119 EXPECT_CALL(observer_, OnEncryptionComplete()); |
| 2037 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2120 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
| 2038 | 2121 |
| 2039 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 2122 RefreshEncryption(); |
| 2040 PumpLoop(); | |
| 2041 { | 2123 { |
| 2042 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2124 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 2043 ReadNode node(&trans); | 2125 ReadNode node(&trans); |
| 2044 EXPECT_EQ(BaseNode::INIT_OK, | 2126 EXPECT_EQ(BaseNode::INIT_OK, |
| 2045 node.InitByClientTagLookup(BOOKMARKS, client_tag)); | 2127 node.InitByClientTagLookup(BOOKMARKS, client_tag)); |
| 2046 const syncable::Entry* node_entry = node.GetEntry(); | 2128 const syncable::Entry* node_entry = node.GetEntry(); |
| 2047 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2129 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
| 2048 EXPECT_TRUE(specifics.has_encrypted()); | 2130 EXPECT_TRUE(specifics.has_encrypted()); |
| 2049 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2131 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
| 2050 Cryptographer* cryptographer = trans.GetCryptographer(); | 2132 Cryptographer* cryptographer = trans.GetCryptographer(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2073 EXPECT_TRUE(cryptographer->is_ready()); | 2155 EXPECT_TRUE(cryptographer->is_ready()); |
| 2074 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( | 2156 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( |
| 2075 specifics.encrypted())); | 2157 specifics.encrypted())); |
| 2076 } | 2158 } |
| 2077 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2159 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
| 2078 | 2160 |
| 2079 // Force a re-encrypt everything. Should not set is_unsynced. | 2161 // Force a re-encrypt everything. Should not set is_unsynced. |
| 2080 testing::Mock::VerifyAndClearExpectations(&observer_); | 2162 testing::Mock::VerifyAndClearExpectations(&observer_); |
| 2081 EXPECT_CALL(observer_, OnEncryptionComplete()); | 2163 EXPECT_CALL(observer_, OnEncryptionComplete()); |
| 2082 | 2164 |
| 2083 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 2165 RefreshEncryption(); |
| 2084 PumpLoop(); | |
| 2085 | |
| 2086 { | 2166 { |
| 2087 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2167 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 2088 ReadNode node(&trans); | 2168 ReadNode node(&trans); |
| 2089 EXPECT_EQ(BaseNode::INIT_OK, | 2169 EXPECT_EQ(BaseNode::INIT_OK, |
| 2090 node.InitByClientTagLookup(BOOKMARKS, client_tag)); | 2170 node.InitByClientTagLookup(BOOKMARKS, client_tag)); |
| 2091 const syncable::Entry* node_entry = node.GetEntry(); | 2171 const syncable::Entry* node_entry = node.GetEntry(); |
| 2092 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2172 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
| 2093 EXPECT_TRUE(specifics.has_encrypted()); | 2173 EXPECT_TRUE(specifics.has_encrypted()); |
| 2094 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2174 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
| 2095 Cryptographer* cryptographer = trans.GetCryptographer(); | 2175 Cryptographer* cryptographer = trans.GetCryptographer(); |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2272 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, | 2352 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, |
| 2273 BaseNode::GenerateSyncableHash(PASSWORDS, | 2353 BaseNode::GenerateSyncableHash(PASSWORDS, |
| 2274 client_tag), | 2354 client_tag), |
| 2275 entity_specifics); | 2355 entity_specifics); |
| 2276 // New node shouldn't start off unsynced. | 2356 // New node shouldn't start off unsynced. |
| 2277 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); | 2357 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); |
| 2278 | 2358 |
| 2279 // Force a re-encrypt everything. Should not set is_unsynced. | 2359 // Force a re-encrypt everything. Should not set is_unsynced. |
| 2280 testing::Mock::VerifyAndClearExpectations(&observer_); | 2360 testing::Mock::VerifyAndClearExpectations(&observer_); |
| 2281 EXPECT_CALL(observer_, OnEncryptionComplete()); | 2361 EXPECT_CALL(observer_, OnEncryptionComplete()); |
| 2282 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 2362 RefreshEncryption(); |
| 2283 PumpLoop(); | |
| 2284 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); | 2363 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); |
| 2285 } | 2364 } |
| 2286 | 2365 |
| 2287 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for bookmarks | 2366 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for bookmarks |
| 2288 // when we write the same data, but does set it when we write new data. | 2367 // when we write the same data, but does set it when we write new data. |
| 2289 TEST_F(SyncManagerTest, SetBookmarkTitle) { | 2368 TEST_F(SyncManagerTest, SetBookmarkTitle) { |
| 2290 std::string client_tag = "title"; | 2369 std::string client_tag = "title"; |
| 2291 sync_pb::EntitySpecifics entity_specifics; | 2370 sync_pb::EntitySpecifics entity_specifics; |
| 2292 entity_specifics.mutable_bookmark()->set_url("url"); | 2371 entity_specifics.mutable_bookmark()->set_url("url"); |
| 2293 entity_specifics.mutable_bookmark()->set_title("title"); | 2372 entity_specifics.mutable_bookmark()->set_title("title"); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2330 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, | 2409 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, |
| 2331 BaseNode::GenerateSyncableHash(BOOKMARKS, | 2410 BaseNode::GenerateSyncableHash(BOOKMARKS, |
| 2332 client_tag), | 2411 client_tag), |
| 2333 entity_specifics); | 2412 entity_specifics); |
| 2334 // New node shouldn't start off unsynced. | 2413 // New node shouldn't start off unsynced. |
| 2335 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2414 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
| 2336 | 2415 |
| 2337 // Encrypt the datatatype, should set is_unsynced. | 2416 // Encrypt the datatatype, should set is_unsynced. |
| 2338 EXPECT_CALL(observer_, | 2417 EXPECT_CALL(observer_, |
| 2339 OnEncryptedTypesChanged( | 2418 OnEncryptedTypesChanged( |
| 2340 HasModelTypes(ModelTypeSet::All()), true)); | 2419 HasModelTypes(syncer::EncryptableTypes()), true)); |
| 2341 EXPECT_CALL(observer_, OnEncryptionComplete()); | 2420 EXPECT_CALL(observer_, OnEncryptionComplete()); |
| 2342 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2421 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
| 2343 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 2422 RefreshEncryption(); |
| 2344 PumpLoop(); | |
| 2345 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2423 EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
| 2346 | 2424 |
| 2347 // Manually change to the same title. Should not set is_unsynced. | 2425 // Manually change to the same title. Should not set is_unsynced. |
| 2348 // NON_UNIQUE_NAME should be kEncryptedString. | 2426 // NON_UNIQUE_NAME should be kEncryptedString. |
| 2349 { | 2427 { |
| 2350 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2428 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 2351 WriteNode node(&trans); | 2429 WriteNode node(&trans); |
| 2352 EXPECT_EQ(BaseNode::INIT_OK, | 2430 EXPECT_EQ(BaseNode::INIT_OK, |
| 2353 node.InitByClientTagLookup(BOOKMARKS, client_tag)); | 2431 node.InitByClientTagLookup(BOOKMARKS, client_tag)); |
| 2354 node.SetTitle(UTF8ToWide(client_tag)); | 2432 node.SetTitle(UTF8ToWide(client_tag)); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2425 client_tag, | 2503 client_tag, |
| 2426 BaseNode::GenerateSyncableHash(PREFERENCES, | 2504 BaseNode::GenerateSyncableHash(PREFERENCES, |
| 2427 client_tag), | 2505 client_tag), |
| 2428 entity_specifics); | 2506 entity_specifics); |
| 2429 // New node shouldn't start off unsynced. | 2507 // New node shouldn't start off unsynced. |
| 2430 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); | 2508 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); |
| 2431 | 2509 |
| 2432 // Encrypt the datatatype, should set is_unsynced. | 2510 // Encrypt the datatatype, should set is_unsynced. |
| 2433 EXPECT_CALL(observer_, | 2511 EXPECT_CALL(observer_, |
| 2434 OnEncryptedTypesChanged( | 2512 OnEncryptedTypesChanged( |
| 2435 HasModelTypes(ModelTypeSet::All()), true)); | 2513 HasModelTypes(syncer::EncryptableTypes()), true)); |
| 2436 EXPECT_CALL(observer_, OnEncryptionComplete()); | 2514 EXPECT_CALL(observer_, OnEncryptionComplete()); |
| 2437 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2515 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
| 2438 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 2516 RefreshEncryption(); |
| 2439 PumpLoop(); | |
| 2440 EXPECT_TRUE(ResetUnsyncedEntry(PREFERENCES, client_tag)); | 2517 EXPECT_TRUE(ResetUnsyncedEntry(PREFERENCES, client_tag)); |
| 2441 | 2518 |
| 2442 // Manually change to the same title. Should not set is_unsynced. | 2519 // Manually change to the same title. Should not set is_unsynced. |
| 2443 // NON_UNIQUE_NAME should be kEncryptedString. | 2520 // NON_UNIQUE_NAME should be kEncryptedString. |
| 2444 { | 2521 { |
| 2445 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2522 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
| 2446 WriteNode node(&trans); | 2523 WriteNode node(&trans); |
| 2447 EXPECT_EQ(BaseNode::INIT_OK, | 2524 EXPECT_EQ(BaseNode::INIT_OK, |
| 2448 node.InitByClientTagLookup(PREFERENCES, client_tag)); | 2525 node.InitByClientTagLookup(PREFERENCES, client_tag)); |
| 2449 node.SetTitle(UTF8ToWide(client_tag)); | 2526 node.SetTitle(UTF8ToWide(client_tag)); |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2800 | 2877 |
| 2801 // Verify only the non-disabled types remain after cleanup. | 2878 // Verify only the non-disabled types remain after cleanup. |
| 2802 sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types); | 2879 sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types); |
| 2803 EXPECT_TRUE(new_enabled_types.Equals( | 2880 EXPECT_TRUE(new_enabled_types.Equals( |
| 2804 Union(sync_manager_.InitialSyncEndedTypes(), partial_enabled_types))); | 2881 Union(sync_manager_.InitialSyncEndedTypes(), partial_enabled_types))); |
| 2805 EXPECT_TRUE(disabled_types.Equals( | 2882 EXPECT_TRUE(disabled_types.Equals( |
| 2806 sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All()))); | 2883 sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All()))); |
| 2807 } | 2884 } |
| 2808 | 2885 |
| 2809 } // namespace | 2886 } // namespace |
| OLD | NEW |