| 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 // Syncer unit tests. Unfortunately a lot of these tests | 5 // Syncer unit tests. Unfortunately a lot of these tests |
| 6 // are outdated and need to be reworked and updated. | 6 // are outdated and need to be reworked and updated. |
| 7 | 7 |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <list> | 10 #include <list> |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 virtual void TearDown() { | 227 virtual void TearDown() { |
| 228 mock_server_.reset(); | 228 mock_server_.reset(); |
| 229 delete syncer_; | 229 delete syncer_; |
| 230 syncer_ = NULL; | 230 syncer_ = NULL; |
| 231 dir_maker_.TearDown(); | 231 dir_maker_.TearDown(); |
| 232 } | 232 } |
| 233 void WriteTestDataToEntry(WriteTransaction* trans, MutableEntry* entry) { | 233 void WriteTestDataToEntry(WriteTransaction* trans, MutableEntry* entry) { |
| 234 EXPECT_FALSE(entry->Get(IS_DIR)); | 234 EXPECT_FALSE(entry->Get(IS_DIR)); |
| 235 EXPECT_FALSE(entry->Get(IS_DEL)); | 235 EXPECT_FALSE(entry->Get(IS_DEL)); |
| 236 sync_pb::EntitySpecifics specifics; | 236 sync_pb::EntitySpecifics specifics; |
| 237 specifics.MutableExtension(sync_pb::bookmark)->set_url("http://demo/"); | 237 specifics.mutable_bookmark()->set_url("http://demo/"); |
| 238 specifics.MutableExtension(sync_pb::bookmark)->set_favicon("PNG"); | 238 specifics.mutable_bookmark()->set_favicon("PNG"); |
| 239 entry->Put(syncable::SPECIFICS, specifics); | 239 entry->Put(syncable::SPECIFICS, specifics); |
| 240 entry->Put(syncable::IS_UNSYNCED, true); | 240 entry->Put(syncable::IS_UNSYNCED, true); |
| 241 } | 241 } |
| 242 void VerifyTestDataInEntry(BaseTransaction* trans, Entry* entry) { | 242 void VerifyTestDataInEntry(BaseTransaction* trans, Entry* entry) { |
| 243 EXPECT_FALSE(entry->Get(IS_DIR)); | 243 EXPECT_FALSE(entry->Get(IS_DIR)); |
| 244 EXPECT_FALSE(entry->Get(IS_DEL)); | 244 EXPECT_FALSE(entry->Get(IS_DEL)); |
| 245 VerifyTestBookmarkDataInEntry(entry); | 245 VerifyTestBookmarkDataInEntry(entry); |
| 246 } | 246 } |
| 247 void VerifyTestBookmarkDataInEntry(Entry* entry) { | 247 void VerifyTestBookmarkDataInEntry(Entry* entry) { |
| 248 const sync_pb::EntitySpecifics& specifics = entry->Get(syncable::SPECIFICS); | 248 const sync_pb::EntitySpecifics& specifics = entry->Get(syncable::SPECIFICS); |
| 249 EXPECT_TRUE(specifics.HasExtension(sync_pb::bookmark)); | 249 EXPECT_TRUE(specifics.has_bookmark()); |
| 250 EXPECT_EQ("PNG", specifics.GetExtension(sync_pb::bookmark).favicon()); | 250 EXPECT_EQ("PNG", specifics.bookmark().favicon()); |
| 251 EXPECT_EQ("http://demo/", specifics.GetExtension(sync_pb::bookmark).url()); | 251 EXPECT_EQ("http://demo/", specifics.bookmark().url()); |
| 252 } | 252 } |
| 253 | 253 |
| 254 void SyncRepeatedlyToTriggerConflictResolution(SyncSession* session) { | 254 void SyncRepeatedlyToTriggerConflictResolution(SyncSession* session) { |
| 255 // We should trigger after less than 6 syncs, but extra does no harm. | 255 // We should trigger after less than 6 syncs, but extra does no harm. |
| 256 for (int i = 0 ; i < 6 ; ++i) | 256 for (int i = 0 ; i < 6 ; ++i) |
| 257 syncer_->SyncShare(session, SYNCER_BEGIN, SYNCER_END); | 257 syncer_->SyncShare(session, SYNCER_BEGIN, SYNCER_END); |
| 258 } | 258 } |
| 259 void SyncRepeatedlyToTriggerStuckSignal(SyncSession* session) { | 259 void SyncRepeatedlyToTriggerStuckSignal(SyncSession* session) { |
| 260 // We should trigger after less than 10 syncs, but we want to avoid brittle | 260 // We should trigger after less than 10 syncs, but we want to avoid brittle |
| 261 // tests. | 261 // tests. |
| 262 for (int i = 0 ; i < 12 ; ++i) | 262 for (int i = 0 ; i < 12 ; ++i) |
| 263 syncer_->SyncShare(session, SYNCER_BEGIN, SYNCER_END); | 263 syncer_->SyncShare(session, SYNCER_BEGIN, SYNCER_END); |
| 264 } | 264 } |
| 265 sync_pb::EntitySpecifics DefaultBookmarkSpecifics() { | 265 sync_pb::EntitySpecifics DefaultBookmarkSpecifics() { |
| 266 sync_pb::EntitySpecifics result; | 266 sync_pb::EntitySpecifics result; |
| 267 AddDefaultExtensionValue(syncable::BOOKMARKS, &result); | 267 AddDefaultFieldValue(syncable::BOOKMARKS, &result); |
| 268 return result; | 268 return result; |
| 269 } | 269 } |
| 270 | 270 |
| 271 sync_pb::EntitySpecifics DefaultPreferencesSpecifics() { | 271 sync_pb::EntitySpecifics DefaultPreferencesSpecifics() { |
| 272 sync_pb::EntitySpecifics result; | 272 sync_pb::EntitySpecifics result; |
| 273 AddDefaultExtensionValue(syncable::PREFERENCES, &result); | 273 AddDefaultFieldValue(syncable::PREFERENCES, &result); |
| 274 return result; | 274 return result; |
| 275 } | 275 } |
| 276 // Enumeration of alterations to entries for commit ordering tests. | 276 // Enumeration of alterations to entries for commit ordering tests. |
| 277 enum EntryFeature { | 277 enum EntryFeature { |
| 278 LIST_END = 0, // Denotes the end of the list of features from below. | 278 LIST_END = 0, // Denotes the end of the list of features from below. |
| 279 SYNCED, // Items are unsynced by default | 279 SYNCED, // Items are unsynced by default |
| 280 DELETED, | 280 DELETED, |
| 281 OLD_MTIME, | 281 OLD_MTIME, |
| 282 MOVED_FROM_ROOT, | 282 MOVED_FROM_ROOT, |
| 283 }; | 283 }; |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 expected_order.push_back(ids_.MakeLocal("b")); | 574 expected_order.push_back(ids_.MakeLocal("b")); |
| 575 expected_order.push_back(ids_.MakeLocal("c")); | 575 expected_order.push_back(ids_.MakeLocal("c")); |
| 576 expected_order.push_back(ids_.MakeLocal("d")); | 576 expected_order.push_back(ids_.MakeLocal("d")); |
| 577 expected_order.push_back(ids_.MakeLocal("e")); | 577 expected_order.push_back(ids_.MakeLocal("e")); |
| 578 DoTruncationTest(unsynced_handle_view, expected_order); | 578 DoTruncationTest(unsynced_handle_view, expected_order); |
| 579 } | 579 } |
| 580 | 580 |
| 581 TEST_F(SyncerTest, GetCommitIdsFiltersThrottledEntries) { | 581 TEST_F(SyncerTest, GetCommitIdsFiltersThrottledEntries) { |
| 582 const syncable::ModelTypeSet throttled_types(syncable::BOOKMARKS); | 582 const syncable::ModelTypeSet throttled_types(syncable::BOOKMARKS); |
| 583 sync_pb::EntitySpecifics bookmark_data; | 583 sync_pb::EntitySpecifics bookmark_data; |
| 584 AddDefaultExtensionValue(syncable::BOOKMARKS, &bookmark_data); | 584 AddDefaultFieldValue(syncable::BOOKMARKS, &bookmark_data); |
| 585 | 585 |
| 586 mock_server_->AddUpdateDirectory(1, 0, "A", 10, 10); | 586 mock_server_->AddUpdateDirectory(1, 0, "A", 10, 10); |
| 587 SyncShareAsDelegate(); | 587 SyncShareAsDelegate(); |
| 588 | 588 |
| 589 { | 589 { |
| 590 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); | 590 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); |
| 591 MutableEntry A(&wtrans, GET_BY_ID, ids_.FromNumber(1)); | 591 MutableEntry A(&wtrans, GET_BY_ID, ids_.FromNumber(1)); |
| 592 ASSERT_TRUE(A.good()); | 592 ASSERT_TRUE(A.good()); |
| 593 A.Put(IS_UNSYNCED, true); | 593 A.Put(IS_UNSYNCED, true); |
| 594 A.Put(SPECIFICS, bookmark_data); | 594 A.Put(SPECIFICS, bookmark_data); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 639 EXPECT_TRUE(parent_id == -1 || \ | 639 EXPECT_TRUE(parent_id == -1 || \ |
| 640 entryA.Get(PARENT_ID) == id_fac.FromNumber(parent_id)); \ | 640 entryA.Get(PARENT_ID) == id_fac.FromNumber(parent_id)); \ |
| 641 EXPECT_EQ(version, entryA.Get(BASE_VERSION)); \ | 641 EXPECT_EQ(version, entryA.Get(BASE_VERSION)); \ |
| 642 EXPECT_EQ(server_version, entryA.Get(SERVER_VERSION)); \ | 642 EXPECT_EQ(server_version, entryA.Get(SERVER_VERSION)); \ |
| 643 } while (0) | 643 } while (0) |
| 644 | 644 |
| 645 TEST_F(SyncerTest, GetCommitIdsFiltersUnreadyEntries) { | 645 TEST_F(SyncerTest, GetCommitIdsFiltersUnreadyEntries) { |
| 646 KeyParams key_params = {"localhost", "dummy", "foobar"}; | 646 KeyParams key_params = {"localhost", "dummy", "foobar"}; |
| 647 KeyParams other_params = {"localhost", "dummy", "foobar2"}; | 647 KeyParams other_params = {"localhost", "dummy", "foobar2"}; |
| 648 sync_pb::EntitySpecifics bookmark, encrypted_bookmark; | 648 sync_pb::EntitySpecifics bookmark, encrypted_bookmark; |
| 649 bookmark.MutableExtension(sync_pb::bookmark)->set_url("url"); | 649 bookmark.mutable_bookmark()->set_url("url"); |
| 650 bookmark.MutableExtension(sync_pb::bookmark)->set_title("title"); | 650 bookmark.mutable_bookmark()->set_title("title"); |
| 651 AddDefaultExtensionValue(syncable::BOOKMARKS, &encrypted_bookmark); | 651 AddDefaultFieldValue(syncable::BOOKMARKS, &encrypted_bookmark); |
| 652 mock_server_->AddUpdateDirectory(1, 0, "A", 10, 10); | 652 mock_server_->AddUpdateDirectory(1, 0, "A", 10, 10); |
| 653 mock_server_->AddUpdateDirectory(2, 0, "B", 10, 10); | 653 mock_server_->AddUpdateDirectory(2, 0, "B", 10, 10); |
| 654 mock_server_->AddUpdateDirectory(3, 0, "C", 10, 10); | 654 mock_server_->AddUpdateDirectory(3, 0, "C", 10, 10); |
| 655 mock_server_->AddUpdateDirectory(4, 0, "D", 10, 10); | 655 mock_server_->AddUpdateDirectory(4, 0, "D", 10, 10); |
| 656 SyncShareAsDelegate(); | 656 SyncShareAsDelegate(); |
| 657 // Server side change will put A in conflict. | 657 // Server side change will put A in conflict. |
| 658 mock_server_->AddUpdateDirectory(1, 0, "A", 20, 20); | 658 mock_server_->AddUpdateDirectory(1, 0, "A", 20, 20); |
| 659 { | 659 { |
| 660 // Mark bookmarks as encrypted and set the cryptographer to have pending | 660 // Mark bookmarks as encrypted and set the cryptographer to have pending |
| 661 // keys. | 661 // keys. |
| 662 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); | 662 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); |
| 663 browser_sync::Cryptographer other_cryptographer(&encryptor_); | 663 browser_sync::Cryptographer other_cryptographer(&encryptor_); |
| 664 other_cryptographer.AddKey(other_params); | 664 other_cryptographer.AddKey(other_params); |
| 665 sync_pb::EntitySpecifics specifics; | 665 sync_pb::EntitySpecifics specifics; |
| 666 sync_pb::NigoriSpecifics* nigori = | 666 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); |
| 667 specifics.MutableExtension(sync_pb::nigori); | |
| 668 other_cryptographer.GetKeys(nigori->mutable_encrypted()); | 667 other_cryptographer.GetKeys(nigori->mutable_encrypted()); |
| 669 nigori->set_encrypt_bookmarks(true); | 668 nigori->set_encrypt_bookmarks(true); |
| 670 // Set up with an old passphrase, but have pending keys | 669 // Set up with an old passphrase, but have pending keys |
| 671 cryptographer(&wtrans)->AddKey(key_params); | 670 cryptographer(&wtrans)->AddKey(key_params); |
| 672 cryptographer(&wtrans)->Encrypt(bookmark, | 671 cryptographer(&wtrans)->Encrypt(bookmark, |
| 673 encrypted_bookmark.mutable_encrypted()); | 672 encrypted_bookmark.mutable_encrypted()); |
| 674 cryptographer(&wtrans)->Update(*nigori); | 673 cryptographer(&wtrans)->Update(*nigori); |
| 675 | 674 |
| 676 // In conflict but properly encrypted. | 675 // In conflict but properly encrypted. |
| 677 MutableEntry A(&wtrans, GET_BY_ID, ids_.FromNumber(1)); | 676 MutableEntry A(&wtrans, GET_BY_ID, ids_.FromNumber(1)); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 755 VERIFY_ENTRY(3, false, false, false, 0, 11, 11, ids_, &rtrans); | 754 VERIFY_ENTRY(3, false, false, false, 0, 11, 11, ids_, &rtrans); |
| 756 VERIFY_ENTRY(4, false, false, false, 0, 11, 11, ids_, &rtrans); | 755 VERIFY_ENTRY(4, false, false, false, 0, 11, 11, ids_, &rtrans); |
| 757 } | 756 } |
| 758 } | 757 } |
| 759 | 758 |
| 760 TEST_F(SyncerTest, EncryptionAwareConflicts) { | 759 TEST_F(SyncerTest, EncryptionAwareConflicts) { |
| 761 KeyParams key_params = {"localhost", "dummy", "foobar"}; | 760 KeyParams key_params = {"localhost", "dummy", "foobar"}; |
| 762 browser_sync::Cryptographer other_cryptographer(&encryptor_); | 761 browser_sync::Cryptographer other_cryptographer(&encryptor_); |
| 763 other_cryptographer.AddKey(key_params); | 762 other_cryptographer.AddKey(key_params); |
| 764 sync_pb::EntitySpecifics bookmark, encrypted_bookmark, modified_bookmark; | 763 sync_pb::EntitySpecifics bookmark, encrypted_bookmark, modified_bookmark; |
| 765 bookmark.MutableExtension(sync_pb::bookmark)->set_title("title"); | 764 bookmark.mutable_bookmark()->set_title("title"); |
| 766 other_cryptographer.Encrypt(bookmark, | 765 other_cryptographer.Encrypt(bookmark, |
| 767 encrypted_bookmark.mutable_encrypted()); | 766 encrypted_bookmark.mutable_encrypted()); |
| 768 AddDefaultExtensionValue(syncable::BOOKMARKS, &encrypted_bookmark); | 767 AddDefaultFieldValue(syncable::BOOKMARKS, &encrypted_bookmark); |
| 769 modified_bookmark.MutableExtension(sync_pb::bookmark)->set_title("title2"); | 768 modified_bookmark.mutable_bookmark()->set_title("title2"); |
| 770 other_cryptographer.Encrypt(modified_bookmark, | 769 other_cryptographer.Encrypt(modified_bookmark, |
| 771 modified_bookmark.mutable_encrypted()); | 770 modified_bookmark.mutable_encrypted()); |
| 772 sync_pb::EntitySpecifics pref, encrypted_pref, modified_pref; | 771 sync_pb::EntitySpecifics pref, encrypted_pref, modified_pref; |
| 773 pref.MutableExtension(sync_pb::preference)->set_name("name"); | 772 pref.mutable_preference()->set_name("name"); |
| 774 AddDefaultExtensionValue(syncable::PREFERENCES, &encrypted_pref); | 773 AddDefaultFieldValue(syncable::PREFERENCES, &encrypted_pref); |
| 775 other_cryptographer.Encrypt(pref, | 774 other_cryptographer.Encrypt(pref, |
| 776 encrypted_pref.mutable_encrypted()); | 775 encrypted_pref.mutable_encrypted()); |
| 777 modified_pref.MutableExtension(sync_pb::preference)->set_name("name2"); | 776 modified_pref.mutable_preference()->set_name("name2"); |
| 778 other_cryptographer.Encrypt(modified_pref, | 777 other_cryptographer.Encrypt(modified_pref, |
| 779 modified_pref.mutable_encrypted()); | 778 modified_pref.mutable_encrypted()); |
| 780 { | 779 { |
| 781 // Mark bookmarks and preferences as encrypted and set the cryptographer to | 780 // Mark bookmarks and preferences as encrypted and set the cryptographer to |
| 782 // have pending keys. | 781 // have pending keys. |
| 783 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); | 782 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); |
| 784 sync_pb::EntitySpecifics specifics; | 783 sync_pb::EntitySpecifics specifics; |
| 785 sync_pb::NigoriSpecifics* nigori = | 784 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); |
| 786 specifics.MutableExtension(sync_pb::nigori); | |
| 787 other_cryptographer.GetKeys(nigori->mutable_encrypted()); | 785 other_cryptographer.GetKeys(nigori->mutable_encrypted()); |
| 788 nigori->set_encrypt_bookmarks(true); | 786 nigori->set_encrypt_bookmarks(true); |
| 789 nigori->set_encrypt_preferences(true); | 787 nigori->set_encrypt_preferences(true); |
| 790 cryptographer(&wtrans)->Update(*nigori); | 788 cryptographer(&wtrans)->Update(*nigori); |
| 791 EXPECT_TRUE(cryptographer(&wtrans)->has_pending_keys()); | 789 EXPECT_TRUE(cryptographer(&wtrans)->has_pending_keys()); |
| 792 } | 790 } |
| 793 | 791 |
| 794 mock_server_->AddUpdateSpecifics(1, 0, "A", 10, 10, true, 0, bookmark); | 792 mock_server_->AddUpdateSpecifics(1, 0, "A", 10, 10, true, 0, bookmark); |
| 795 mock_server_->AddUpdateSpecifics(2, 1, "B", 10, 10, false, 2, bookmark); | 793 mock_server_->AddUpdateSpecifics(2, 1, "B", 10, 10, false, 2, bookmark); |
| 796 mock_server_->AddUpdateSpecifics(3, 1, "C", 10, 10, false, 1, bookmark); | 794 mock_server_->AddUpdateSpecifics(3, 1, "C", 10, 10, false, 1, bookmark); |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 940 | 938 |
| 941 #undef VERIFY_ENTRY | 939 #undef VERIFY_ENTRY |
| 942 | 940 |
| 943 TEST_F(SyncerTest, NigoriConflicts) { | 941 TEST_F(SyncerTest, NigoriConflicts) { |
| 944 KeyParams local_key_params = {"localhost", "dummy", "blargle"}; | 942 KeyParams local_key_params = {"localhost", "dummy", "blargle"}; |
| 945 KeyParams other_key_params = {"localhost", "dummy", "foobar"}; | 943 KeyParams other_key_params = {"localhost", "dummy", "foobar"}; |
| 946 browser_sync::Cryptographer other_cryptographer(&encryptor_); | 944 browser_sync::Cryptographer other_cryptographer(&encryptor_); |
| 947 other_cryptographer.AddKey(other_key_params); | 945 other_cryptographer.AddKey(other_key_params); |
| 948 syncable::ModelTypeSet encrypted_types(syncable::PASSWORDS, syncable::NIGORI); | 946 syncable::ModelTypeSet encrypted_types(syncable::PASSWORDS, syncable::NIGORI); |
| 949 sync_pb::EntitySpecifics initial_nigori_specifics; | 947 sync_pb::EntitySpecifics initial_nigori_specifics; |
| 950 initial_nigori_specifics.MutableExtension(sync_pb::nigori); | 948 initial_nigori_specifics.mutable_nigori(); |
| 951 mock_server_->SetNigori(1, 10, 10, initial_nigori_specifics); | 949 mock_server_->SetNigori(1, 10, 10, initial_nigori_specifics); |
| 952 | 950 |
| 953 // Data for testing encryption/decryption. | 951 // Data for testing encryption/decryption. |
| 954 sync_pb::EntitySpecifics other_encrypted_specifics; | 952 sync_pb::EntitySpecifics other_encrypted_specifics; |
| 955 other_encrypted_specifics.MutableExtension(sync_pb::bookmark)-> | 953 other_encrypted_specifics.mutable_bookmark()->set_title("title"); |
| 956 set_title("title"); | |
| 957 other_cryptographer.Encrypt( | 954 other_cryptographer.Encrypt( |
| 958 other_encrypted_specifics, | 955 other_encrypted_specifics, |
| 959 other_encrypted_specifics.mutable_encrypted()); | 956 other_encrypted_specifics.mutable_encrypted()); |
| 960 sync_pb::EntitySpecifics our_encrypted_specifics; | 957 sync_pb::EntitySpecifics our_encrypted_specifics; |
| 961 our_encrypted_specifics.MutableExtension(sync_pb::bookmark)-> | 958 our_encrypted_specifics.mutable_bookmark()->set_title("title2"); |
| 962 set_title("title2"); | |
| 963 | 959 |
| 964 // Receive the initial nigori node. | 960 // Receive the initial nigori node. |
| 965 SyncShareAsDelegate(); | 961 SyncShareAsDelegate(); |
| 966 encrypted_types = syncable::ModelTypeSet::All(); | 962 encrypted_types = syncable::ModelTypeSet::All(); |
| 967 { | 963 { |
| 968 // Local changes with different passphrase, different types, and sync_tabs. | 964 // Local changes with different passphrase, different types, and sync_tabs. |
| 969 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); | 965 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); |
| 970 sync_pb::EntitySpecifics specifics; | 966 sync_pb::EntitySpecifics specifics; |
| 971 sync_pb::NigoriSpecifics* nigori = | 967 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); |
| 972 specifics.MutableExtension(sync_pb::nigori); | |
| 973 cryptographer(&wtrans)->AddKey(local_key_params); | 968 cryptographer(&wtrans)->AddKey(local_key_params); |
| 974 cryptographer(&wtrans)->Encrypt( | 969 cryptographer(&wtrans)->Encrypt( |
| 975 our_encrypted_specifics, | 970 our_encrypted_specifics, |
| 976 our_encrypted_specifics.mutable_encrypted()); | 971 our_encrypted_specifics.mutable_encrypted()); |
| 977 cryptographer(&wtrans)->GetKeys( | 972 cryptographer(&wtrans)->GetKeys( |
| 978 nigori->mutable_encrypted()); | 973 nigori->mutable_encrypted()); |
| 979 cryptographer(&wtrans)->UpdateNigoriFromEncryptedTypes(nigori); | 974 cryptographer(&wtrans)->UpdateNigoriFromEncryptedTypes(nigori); |
| 980 nigori->set_sync_tabs(true); | 975 nigori->set_sync_tabs(true); |
| 981 cryptographer(&wtrans)->set_encrypt_everything(); | 976 cryptographer(&wtrans)->set_encrypt_everything(); |
| 982 MutableEntry nigori_entry(&wtrans, GET_BY_SERVER_TAG, | 977 MutableEntry nigori_entry(&wtrans, GET_BY_SERVER_TAG, |
| 983 syncable::ModelTypeToRootTag(syncable::NIGORI)); | 978 syncable::ModelTypeToRootTag(syncable::NIGORI)); |
| 984 ASSERT_TRUE(nigori_entry.good()); | 979 ASSERT_TRUE(nigori_entry.good()); |
| 985 nigori_entry.Put(SPECIFICS, specifics); | 980 nigori_entry.Put(SPECIFICS, specifics); |
| 986 nigori_entry.Put(IS_UNSYNCED, true); | 981 nigori_entry.Put(IS_UNSYNCED, true); |
| 987 EXPECT_FALSE(cryptographer(&wtrans)->has_pending_keys()); | 982 EXPECT_FALSE(cryptographer(&wtrans)->has_pending_keys()); |
| 988 EXPECT_TRUE(encrypted_types.Equals( | 983 EXPECT_TRUE(encrypted_types.Equals( |
| 989 cryptographer(&wtrans)->GetEncryptedTypes())); | 984 cryptographer(&wtrans)->GetEncryptedTypes())); |
| 990 } | 985 } |
| 991 { | 986 { |
| 992 sync_pb::EntitySpecifics specifics; | 987 sync_pb::EntitySpecifics specifics; |
| 993 sync_pb::NigoriSpecifics* nigori = | 988 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); |
| 994 specifics.MutableExtension(sync_pb::nigori); | |
| 995 other_cryptographer.GetKeys(nigori->mutable_encrypted()); | 989 other_cryptographer.GetKeys(nigori->mutable_encrypted()); |
| 996 nigori->set_encrypt_bookmarks(true); | 990 nigori->set_encrypt_bookmarks(true); |
| 997 nigori->set_encrypt_preferences(true); | 991 nigori->set_encrypt_preferences(true); |
| 998 nigori->set_encrypt_everything(false); | 992 nigori->set_encrypt_everything(false); |
| 999 mock_server_->SetNigori(1, 20, 20, specifics); | 993 mock_server_->SetNigori(1, 20, 20, specifics); |
| 1000 } | 994 } |
| 1001 | 995 |
| 1002 // Will result in downloading the server nigori, which puts the local nigori | 996 // Will result in downloading the server nigori, which puts the local nigori |
| 1003 // in a state of conflict. This is resolved by merging the local and server | 997 // in a state of conflict. This is resolved by merging the local and server |
| 1004 // data (with priority given to the server's encryption keys if they are | 998 // data (with priority given to the server's encryption keys if they are |
| 1005 // undecryptable), which we then commit. The cryptographer should have pending | 999 // undecryptable), which we then commit. The cryptographer should have pending |
| 1006 // keys and merge the set of encrypted types. | 1000 // keys and merge the set of encrypted types. |
| 1007 SyncShareAsDelegate(); // Resolve conflict in this cycle. | 1001 SyncShareAsDelegate(); // Resolve conflict in this cycle. |
| 1008 SyncShareAsDelegate(); // Commit local change in this cycle. | 1002 SyncShareAsDelegate(); // Commit local change in this cycle. |
| 1009 { | 1003 { |
| 1010 // Ensure the nigori data merged (encrypted types, sync_tabs). | 1004 // Ensure the nigori data merged (encrypted types, sync_tabs). |
| 1011 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); | 1005 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); |
| 1012 MutableEntry nigori_entry(&wtrans, GET_BY_SERVER_TAG, | 1006 MutableEntry nigori_entry(&wtrans, GET_BY_SERVER_TAG, |
| 1013 syncable::ModelTypeToRootTag(syncable::NIGORI)); | 1007 syncable::ModelTypeToRootTag(syncable::NIGORI)); |
| 1014 ASSERT_TRUE(nigori_entry.good()); | 1008 ASSERT_TRUE(nigori_entry.good()); |
| 1015 EXPECT_FALSE(nigori_entry.Get(IS_UNAPPLIED_UPDATE)); | 1009 EXPECT_FALSE(nigori_entry.Get(IS_UNAPPLIED_UPDATE)); |
| 1016 EXPECT_FALSE(nigori_entry.Get(IS_UNSYNCED)); | 1010 EXPECT_FALSE(nigori_entry.Get(IS_UNSYNCED)); |
| 1017 sync_pb::EntitySpecifics specifics = nigori_entry.Get(SPECIFICS); | 1011 sync_pb::EntitySpecifics specifics = nigori_entry.Get(SPECIFICS); |
| 1018 EXPECT_TRUE(cryptographer(&wtrans)->has_pending_keys()); | 1012 EXPECT_TRUE(cryptographer(&wtrans)->has_pending_keys()); |
| 1019 EXPECT_TRUE(encrypted_types.Equals( | 1013 EXPECT_TRUE(encrypted_types.Equals( |
| 1020 cryptographer(&wtrans)->GetEncryptedTypes())); | 1014 cryptographer(&wtrans)->GetEncryptedTypes())); |
| 1021 EXPECT_TRUE(cryptographer(&wtrans)->encrypt_everything()); | 1015 EXPECT_TRUE(cryptographer(&wtrans)->encrypt_everything()); |
| 1022 EXPECT_TRUE(specifics.GetExtension(sync_pb::nigori).sync_tabs()); | 1016 EXPECT_TRUE(specifics.nigori().sync_tabs()); |
| 1023 // Supply the pending keys. Afterwards, we should be able to decrypt both | 1017 // Supply the pending keys. Afterwards, we should be able to decrypt both |
| 1024 // our own encrypted data and data encrypted by the other cryptographer, | 1018 // our own encrypted data and data encrypted by the other cryptographer, |
| 1025 // but the key provided by the other cryptographer should be the default. | 1019 // but the key provided by the other cryptographer should be the default. |
| 1026 EXPECT_TRUE(cryptographer(&wtrans)->DecryptPendingKeys(other_key_params)); | 1020 EXPECT_TRUE(cryptographer(&wtrans)->DecryptPendingKeys(other_key_params)); |
| 1027 EXPECT_FALSE(cryptographer(&wtrans)->has_pending_keys()); | 1021 EXPECT_FALSE(cryptographer(&wtrans)->has_pending_keys()); |
| 1028 sync_pb::NigoriSpecifics* nigori = | 1022 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); |
| 1029 specifics.MutableExtension(sync_pb::nigori); | |
| 1030 cryptographer(&wtrans)->GetKeys(nigori->mutable_encrypted()); | 1023 cryptographer(&wtrans)->GetKeys(nigori->mutable_encrypted()); |
| 1031 cryptographer(&wtrans)->UpdateNigoriFromEncryptedTypes(nigori); | 1024 cryptographer(&wtrans)->UpdateNigoriFromEncryptedTypes(nigori); |
| 1032 // Normally this would be written as part of SetPassphrase, but we do it | 1025 // Normally this would be written as part of SetPassphrase, but we do it |
| 1033 // manually for the test. | 1026 // manually for the test. |
| 1034 nigori_entry.Put(SPECIFICS, specifics); | 1027 nigori_entry.Put(SPECIFICS, specifics); |
| 1035 nigori_entry.Put(IS_UNSYNCED, true); | 1028 nigori_entry.Put(IS_UNSYNCED, true); |
| 1036 } | 1029 } |
| 1037 | 1030 |
| 1038 SyncShareAsDelegate(); | 1031 SyncShareAsDelegate(); |
| 1039 { | 1032 { |
| 1040 // Ensure everything is committed and stable now. The cryptographer | 1033 // Ensure everything is committed and stable now. The cryptographer |
| 1041 // should be able to decrypt both sets of keys, sync_tabs should be true, | 1034 // should be able to decrypt both sets of keys, sync_tabs should be true, |
| 1042 // and the encrypted types should have been unioned. | 1035 // and the encrypted types should have been unioned. |
| 1043 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); | 1036 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); |
| 1044 MutableEntry nigori_entry(&wtrans, GET_BY_SERVER_TAG, | 1037 MutableEntry nigori_entry(&wtrans, GET_BY_SERVER_TAG, |
| 1045 syncable::ModelTypeToRootTag(syncable::NIGORI)); | 1038 syncable::ModelTypeToRootTag(syncable::NIGORI)); |
| 1046 ASSERT_TRUE(nigori_entry.good()); | 1039 ASSERT_TRUE(nigori_entry.good()); |
| 1047 EXPECT_FALSE(nigori_entry.Get(IS_UNAPPLIED_UPDATE)); | 1040 EXPECT_FALSE(nigori_entry.Get(IS_UNAPPLIED_UPDATE)); |
| 1048 EXPECT_FALSE(nigori_entry.Get(IS_UNSYNCED)); | 1041 EXPECT_FALSE(nigori_entry.Get(IS_UNSYNCED)); |
| 1049 EXPECT_TRUE(cryptographer(&wtrans)->CanDecrypt( | 1042 EXPECT_TRUE(cryptographer(&wtrans)->CanDecrypt( |
| 1050 our_encrypted_specifics.encrypted())); | 1043 our_encrypted_specifics.encrypted())); |
| 1051 EXPECT_FALSE(cryptographer(&wtrans)-> | 1044 EXPECT_FALSE(cryptographer(&wtrans)-> |
| 1052 CanDecryptUsingDefaultKey(our_encrypted_specifics.encrypted())); | 1045 CanDecryptUsingDefaultKey(our_encrypted_specifics.encrypted())); |
| 1053 EXPECT_TRUE(cryptographer(&wtrans)->CanDecrypt( | 1046 EXPECT_TRUE(cryptographer(&wtrans)->CanDecrypt( |
| 1054 other_encrypted_specifics.encrypted())); | 1047 other_encrypted_specifics.encrypted())); |
| 1055 EXPECT_TRUE(cryptographer(&wtrans)-> | 1048 EXPECT_TRUE(cryptographer(&wtrans)-> |
| 1056 CanDecryptUsingDefaultKey(other_encrypted_specifics.encrypted())); | 1049 CanDecryptUsingDefaultKey(other_encrypted_specifics.encrypted())); |
| 1057 EXPECT_TRUE(nigori_entry.Get(SPECIFICS).GetExtension(sync_pb::nigori) | 1050 EXPECT_TRUE(nigori_entry.Get(SPECIFICS).nigori().sync_tabs()); |
| 1058 .sync_tabs()); | |
| 1059 } | 1051 } |
| 1060 } | 1052 } |
| 1061 | 1053 |
| 1062 TEST_F(SyncerTest, TestGetUnsyncedAndSimpleCommit) { | 1054 TEST_F(SyncerTest, TestGetUnsyncedAndSimpleCommit) { |
| 1063 { | 1055 { |
| 1064 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); | 1056 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); |
| 1065 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), | 1057 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), |
| 1066 "Pete"); | 1058 "Pete"); |
| 1067 ASSERT_TRUE(parent.good()); | 1059 ASSERT_TRUE(parent.good()); |
| 1068 parent.Put(syncable::IS_UNSYNCED, true); | 1060 parent.Put(syncable::IS_UNSYNCED, true); |
| (...skipping 1223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2292 LoopSyncShare(); | 2284 LoopSyncShare(); |
| 2293 syncable::Directory::ChildHandles children; | 2285 syncable::Directory::ChildHandles children; |
| 2294 { | 2286 { |
| 2295 ReadTransaction trans(FROM_HERE, directory()); | 2287 ReadTransaction trans(FROM_HERE, directory()); |
| 2296 directory()->GetChildHandlesById(&trans, parent_id_, &children); | 2288 directory()->GetChildHandlesById(&trans, parent_id_, &children); |
| 2297 // We expect the conflict resolver to preserve the local entry. | 2289 // We expect the conflict resolver to preserve the local entry. |
| 2298 Entry child(&trans, syncable::GET_BY_ID, child_id_); | 2290 Entry child(&trans, syncable::GET_BY_ID, child_id_); |
| 2299 ASSERT_TRUE(child.good()); | 2291 ASSERT_TRUE(child.good()); |
| 2300 EXPECT_TRUE(child.Get(syncable::IS_UNSYNCED)); | 2292 EXPECT_TRUE(child.Get(syncable::IS_UNSYNCED)); |
| 2301 EXPECT_FALSE(child.Get(syncable::IS_UNAPPLIED_UPDATE)); | 2293 EXPECT_FALSE(child.Get(syncable::IS_UNAPPLIED_UPDATE)); |
| 2302 EXPECT_TRUE(child.Get(SPECIFICS).HasExtension(sync_pb::bookmark)); | 2294 EXPECT_TRUE(child.Get(SPECIFICS).has_bookmark()); |
| 2303 EXPECT_EQ("Pete.htm", child.Get(NON_UNIQUE_NAME)); | 2295 EXPECT_EQ("Pete.htm", child.Get(NON_UNIQUE_NAME)); |
| 2304 VerifyTestBookmarkDataInEntry(&child); | 2296 VerifyTestBookmarkDataInEntry(&child); |
| 2305 } | 2297 } |
| 2306 | 2298 |
| 2307 // Only one entry, since we just overwrite one. | 2299 // Only one entry, since we just overwrite one. |
| 2308 EXPECT_EQ(1u, children.size()); | 2300 EXPECT_EQ(1u, children.size()); |
| 2309 saw_syncer_event_ = false; | 2301 saw_syncer_event_ = false; |
| 2310 } | 2302 } |
| 2311 | 2303 |
| 2312 // We got this repro case when someone was editing bookmarks while sync was | 2304 // We got this repro case when someone was editing bookmarks while sync was |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2720 ASSERT_TRUE(server.good()); | 2712 ASSERT_TRUE(server.good()); |
| 2721 ASSERT_TRUE(local.good()); | 2713 ASSERT_TRUE(local.good()); |
| 2722 EXPECT_TRUE(local.Get(META_HANDLE) != server.Get(META_HANDLE)); | 2714 EXPECT_TRUE(local.Get(META_HANDLE) != server.Get(META_HANDLE)); |
| 2723 EXPECT_FALSE(server.Get(IS_UNAPPLIED_UPDATE)); | 2715 EXPECT_FALSE(server.Get(IS_UNAPPLIED_UPDATE)); |
| 2724 EXPECT_FALSE(local.Get(IS_UNAPPLIED_UPDATE)); | 2716 EXPECT_FALSE(local.Get(IS_UNAPPLIED_UPDATE)); |
| 2725 EXPECT_FALSE(server.Get(IS_UNSYNCED)); | 2717 EXPECT_FALSE(server.Get(IS_UNSYNCED)); |
| 2726 EXPECT_FALSE(local.Get(IS_UNSYNCED)); | 2718 EXPECT_FALSE(local.Get(IS_UNSYNCED)); |
| 2727 EXPECT_EQ("Bar.htm", server.Get(NON_UNIQUE_NAME)); | 2719 EXPECT_EQ("Bar.htm", server.Get(NON_UNIQUE_NAME)); |
| 2728 EXPECT_EQ("Bar.htm", local.Get(NON_UNIQUE_NAME)); | 2720 EXPECT_EQ("Bar.htm", local.Get(NON_UNIQUE_NAME)); |
| 2729 EXPECT_EQ("http://google.com", // Default from AddUpdateBookmark. | 2721 EXPECT_EQ("http://google.com", // Default from AddUpdateBookmark. |
| 2730 server.Get(SPECIFICS).GetExtension(sync_pb::bookmark).url()); | 2722 server.Get(SPECIFICS).bookmark().url()); |
| 2731 } | 2723 } |
| 2732 } | 2724 } |
| 2733 | 2725 |
| 2734 // Same as NewEntryAnddServerEntrySharePath, but using the old-style protocol. | 2726 // Same as NewEntryAnddServerEntrySharePath, but using the old-style protocol. |
| 2735 TEST_F(SyncerTest, NewEntryAndAlteredServerEntrySharePath_OldBookmarksProto) { | 2727 TEST_F(SyncerTest, NewEntryAndAlteredServerEntrySharePath_OldBookmarksProto) { |
| 2736 mock_server_->set_use_legacy_bookmarks_protocol(true); | 2728 mock_server_->set_use_legacy_bookmarks_protocol(true); |
| 2737 mock_server_->AddUpdateBookmark(1, 0, "Foo.htm", 10, 10); | 2729 mock_server_->AddUpdateBookmark(1, 0, "Foo.htm", 10, 10); |
| 2738 SyncShareAsDelegate(); | 2730 SyncShareAsDelegate(); |
| 2739 int64 local_folder_handle; | 2731 int64 local_folder_handle; |
| 2740 syncable::Id local_folder_id; | 2732 syncable::Id local_folder_id; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2786 ASSERT_TRUE(server.good()); | 2778 ASSERT_TRUE(server.good()); |
| 2787 ASSERT_TRUE(local.good()); | 2779 ASSERT_TRUE(local.good()); |
| 2788 EXPECT_TRUE(local.Get(META_HANDLE) != server.Get(META_HANDLE)); | 2780 EXPECT_TRUE(local.Get(META_HANDLE) != server.Get(META_HANDLE)); |
| 2789 EXPECT_FALSE(server.Get(IS_UNAPPLIED_UPDATE)); | 2781 EXPECT_FALSE(server.Get(IS_UNAPPLIED_UPDATE)); |
| 2790 EXPECT_FALSE(local.Get(IS_UNAPPLIED_UPDATE)); | 2782 EXPECT_FALSE(local.Get(IS_UNAPPLIED_UPDATE)); |
| 2791 EXPECT_FALSE(server.Get(IS_UNSYNCED)); | 2783 EXPECT_FALSE(server.Get(IS_UNSYNCED)); |
| 2792 EXPECT_FALSE(local.Get(IS_UNSYNCED)); | 2784 EXPECT_FALSE(local.Get(IS_UNSYNCED)); |
| 2793 EXPECT_EQ("Bar.htm", server.Get(NON_UNIQUE_NAME)); | 2785 EXPECT_EQ("Bar.htm", server.Get(NON_UNIQUE_NAME)); |
| 2794 EXPECT_EQ("Bar.htm", local.Get(NON_UNIQUE_NAME)); | 2786 EXPECT_EQ("Bar.htm", local.Get(NON_UNIQUE_NAME)); |
| 2795 EXPECT_EQ("http://google.com", // Default from AddUpdateBookmark. | 2787 EXPECT_EQ("http://google.com", // Default from AddUpdateBookmark. |
| 2796 server.Get(SPECIFICS).GetExtension(sync_pb::bookmark).url()); | 2788 server.Get(SPECIFICS).bookmark().url()); |
| 2797 } | 2789 } |
| 2798 } | 2790 } |
| 2799 | 2791 |
| 2800 // Circular links should be resolved by the server. | 2792 // Circular links should be resolved by the server. |
| 2801 TEST_F(SyncerTest, SiblingDirectoriesBecomeCircular) { | 2793 TEST_F(SyncerTest, SiblingDirectoriesBecomeCircular) { |
| 2802 // we don't currently resolve this. This test ensures we don't. | 2794 // we don't currently resolve this. This test ensures we don't. |
| 2803 mock_server_->AddUpdateDirectory(1, 0, "A", 10, 10); | 2795 mock_server_->AddUpdateDirectory(1, 0, "A", 10, 10); |
| 2804 mock_server_->AddUpdateDirectory(2, 0, "B", 10, 10); | 2796 mock_server_->AddUpdateDirectory(2, 0, "B", 10, 10); |
| 2805 SyncShareAsDelegate(); | 2797 SyncShareAsDelegate(); |
| 2806 { | 2798 { |
| (...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3514 EXPECT_FALSE(perm_folder.Get(IS_UNAPPLIED_UPDATE)); | 3506 EXPECT_FALSE(perm_folder.Get(IS_UNAPPLIED_UPDATE)); |
| 3515 EXPECT_FALSE(perm_folder.Get(IS_UNSYNCED)); | 3507 EXPECT_FALSE(perm_folder.Get(IS_UNSYNCED)); |
| 3516 EXPECT_EQ(perm_folder.Get(NON_UNIQUE_NAME), "permitem1"); | 3508 EXPECT_EQ(perm_folder.Get(NON_UNIQUE_NAME), "permitem1"); |
| 3517 } | 3509 } |
| 3518 } | 3510 } |
| 3519 | 3511 |
| 3520 TEST_F(SyncerTest, ClientTagUncommittedTagMatchesUpdate) { | 3512 TEST_F(SyncerTest, ClientTagUncommittedTagMatchesUpdate) { |
| 3521 int64 original_metahandle = 0; | 3513 int64 original_metahandle = 0; |
| 3522 | 3514 |
| 3523 sync_pb::EntitySpecifics local_bookmark(DefaultBookmarkSpecifics()); | 3515 sync_pb::EntitySpecifics local_bookmark(DefaultBookmarkSpecifics()); |
| 3524 local_bookmark.MutableExtension(sync_pb::bookmark)-> | 3516 local_bookmark.mutable_bookmark()->set_url("http://foo/localsite"); |
| 3525 set_url("http://foo/localsite"); | |
| 3526 sync_pb::EntitySpecifics server_bookmark(DefaultBookmarkSpecifics()); | 3517 sync_pb::EntitySpecifics server_bookmark(DefaultBookmarkSpecifics()); |
| 3527 server_bookmark.MutableExtension(sync_pb::bookmark)-> | 3518 server_bookmark.mutable_bookmark()->set_url("http://bar/serversite"); |
| 3528 set_url("http://bar/serversite"); | |
| 3529 | 3519 |
| 3530 { | 3520 { |
| 3531 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); | 3521 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); |
| 3532 MutableEntry perm_folder(&trans, CREATE, ids_.root(), "clientname"); | 3522 MutableEntry perm_folder(&trans, CREATE, ids_.root(), "clientname"); |
| 3533 ASSERT_TRUE(perm_folder.good()); | 3523 ASSERT_TRUE(perm_folder.good()); |
| 3534 perm_folder.Put(UNIQUE_CLIENT_TAG, "clientperm"); | 3524 perm_folder.Put(UNIQUE_CLIENT_TAG, "clientperm"); |
| 3535 perm_folder.Put(SPECIFICS, local_bookmark); | 3525 perm_folder.Put(SPECIFICS, local_bookmark); |
| 3536 perm_folder.Put(IS_UNSYNCED, true); | 3526 perm_folder.Put(IS_UNSYNCED, true); |
| 3537 EXPECT_FALSE(perm_folder.Get(IS_UNAPPLIED_UPDATE)); | 3527 EXPECT_FALSE(perm_folder.Get(IS_UNAPPLIED_UPDATE)); |
| 3538 EXPECT_FALSE(perm_folder.Get(ID).ServerKnows()); | 3528 EXPECT_FALSE(perm_folder.Get(ID).ServerKnows()); |
| (...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4522 Add(low_id_); | 4512 Add(low_id_); |
| 4523 Add(high_id_); | 4513 Add(high_id_); |
| 4524 SyncShareAsDelegate(); | 4514 SyncShareAsDelegate(); |
| 4525 ExpectLocalOrderIsByServerId(); | 4515 ExpectLocalOrderIsByServerId(); |
| 4526 } | 4516 } |
| 4527 | 4517 |
| 4528 const SyncerTest::CommitOrderingTest | 4518 const SyncerTest::CommitOrderingTest |
| 4529 SyncerTest::CommitOrderingTest::LAST_COMMIT_ITEM = {-1, TestIdFactory::root()}; | 4519 SyncerTest::CommitOrderingTest::LAST_COMMIT_ITEM = {-1, TestIdFactory::root()}; |
| 4530 | 4520 |
| 4531 } // namespace browser_sync | 4521 } // namespace browser_sync |
| OLD | NEW |