OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include "chrome/browser/sync/sessions2/sessions_sync_manager.h" | 5 #include "chrome/browser/sync/sessions2/sessions_sync_manager.h" |
6 | 6 |
7 #include "base/strings/string_util.h" | 7 #include "base/strings/string_util.h" |
8 #include "chrome/browser/chrome_notification_types.h" | 8 #include "chrome/browser/chrome_notification_types.h" |
9 #include "chrome/browser/sessions/session_id.h" | 9 #include "chrome/browser/sessions/session_id.h" |
10 #include "chrome/browser/sessions/session_tab_helper.h" | 10 #include "chrome/browser/sessions/session_tab_helper.h" |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 | 271 |
272 void SetSyncData(const syncer::SyncDataList& data) { | 272 void SetSyncData(const syncer::SyncDataList& data) { |
273 test_processor_->SetSyncDataToReturn(data); | 273 test_processor_->SetSyncDataToReturn(data); |
274 } | 274 } |
275 | 275 |
276 syncer::SyncChangeList* FilterOutLocalHeaderChanges( | 276 syncer::SyncChangeList* FilterOutLocalHeaderChanges( |
277 syncer::SyncChangeList* list) { | 277 syncer::SyncChangeList* list) { |
278 syncer::SyncChangeList::iterator it = list->begin(); | 278 syncer::SyncChangeList::iterator it = list->begin(); |
279 bool found = false; | 279 bool found = false; |
280 while (it != list->end()) { | 280 while (it != list->end()) { |
281 if (it->sync_data().GetTag() == manager_->current_machine_tag()) { | 281 if (it->sync_data().AsLocal().GetTag() == |
| 282 manager_->current_machine_tag()) { |
282 EXPECT_TRUE(SyncChange::ACTION_ADD == it->change_type() || | 283 EXPECT_TRUE(SyncChange::ACTION_ADD == it->change_type() || |
283 SyncChange::ACTION_UPDATE == it->change_type()); | 284 SyncChange::ACTION_UPDATE == it->change_type()); |
284 it = list->erase(it); | 285 it = list->erase(it); |
285 found = true; | 286 found = true; |
286 } else { | 287 } else { |
287 ++it; | 288 ++it; |
288 } | 289 } |
289 } | 290 } |
290 EXPECT_TRUE(found); | 291 EXPECT_TRUE(found); |
291 return list; | 292 return list; |
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
630 // presence of no other session activity, once and only once. | 631 // presence of no other session activity, once and only once. |
631 TEST_F(SessionsSyncManagerTest, MergeLocalSessionNoTabs) { | 632 TEST_F(SessionsSyncManagerTest, MergeLocalSessionNoTabs) { |
632 syncer::SyncChangeList out; | 633 syncer::SyncChangeList out; |
633 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 634 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
634 EXPECT_FALSE(manager()->current_machine_tag().empty()); | 635 EXPECT_FALSE(manager()->current_machine_tag().empty()); |
635 | 636 |
636 EXPECT_EQ(2U, out.size()); | 637 EXPECT_EQ(2U, out.size()); |
637 EXPECT_TRUE(out[0].IsValid()); | 638 EXPECT_TRUE(out[0].IsValid()); |
638 EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type()); | 639 EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type()); |
639 const SyncData data(out[0].sync_data()); | 640 const SyncData data(out[0].sync_data()); |
640 EXPECT_EQ(manager()->current_machine_tag(), data.GetTag()); | 641 EXPECT_EQ(manager()->current_machine_tag(), data.AsLocal().GetTag()); |
641 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); | 642 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); |
642 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); | 643 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); |
643 EXPECT_TRUE(specifics.has_header()); | 644 EXPECT_TRUE(specifics.has_header()); |
644 const sync_pb::SessionHeader& header_s = specifics.header(); | 645 const sync_pb::SessionHeader& header_s = specifics.header(); |
645 EXPECT_TRUE(header_s.has_device_type()); | 646 EXPECT_TRUE(header_s.has_device_type()); |
646 EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name()); | 647 EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name()); |
647 EXPECT_EQ(0, header_s.window_size()); | 648 EXPECT_EQ(0, header_s.window_size()); |
648 | 649 |
649 EXPECT_TRUE(out[1].IsValid()); | 650 EXPECT_TRUE(out[1].IsValid()); |
650 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[1].change_type()); | 651 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[1].change_type()); |
651 const SyncData data_2(out[1].sync_data()); | 652 const SyncData data_2(out[1].sync_data()); |
652 EXPECT_EQ(manager()->current_machine_tag(), data_2.GetTag()); | 653 EXPECT_EQ(manager()->current_machine_tag(), data_2.AsLocal().GetTag()); |
653 const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session()); | 654 const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session()); |
654 EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag()); | 655 EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag()); |
655 EXPECT_TRUE(specifics2.has_header()); | 656 EXPECT_TRUE(specifics2.has_header()); |
656 const sync_pb::SessionHeader& header_s2 = specifics2.header(); | 657 const sync_pb::SessionHeader& header_s2 = specifics2.header(); |
657 EXPECT_EQ(0, header_s2.window_size()); | 658 EXPECT_EQ(0, header_s2.window_size()); |
658 | 659 |
659 // Now take that header node and feed it in as input. | 660 // Now take that header node and feed it in as input. |
660 SyncData d(SyncData::CreateRemoteData(1, data.GetSpecifics(), base::Time())); | 661 SyncData d(SyncData::CreateRemoteData(1, data.GetSpecifics(), base::Time())); |
661 syncer::SyncDataList in(&d, &d + 1); | 662 syncer::SyncDataList in(&d, &d + 1); |
662 out.clear(); | 663 out.clear(); |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
818 AddTabsToSyncDataList(tabs1, &foreign_data); | 819 AddTabsToSyncDataList(tabs1, &foreign_data); |
819 | 820 |
820 syncer::SyncChangeList output; | 821 syncer::SyncChangeList output; |
821 InitWithSyncDataTakeOutput(foreign_data, &output); | 822 InitWithSyncDataTakeOutput(foreign_data, &output); |
822 ASSERT_EQ(4U, output.size()); | 823 ASSERT_EQ(4U, output.size()); |
823 | 824 |
824 // Verify the local header. | 825 // Verify the local header. |
825 EXPECT_TRUE(output[0].IsValid()); | 826 EXPECT_TRUE(output[0].IsValid()); |
826 EXPECT_EQ(SyncChange::ACTION_ADD, output[0].change_type()); | 827 EXPECT_EQ(SyncChange::ACTION_ADD, output[0].change_type()); |
827 const SyncData data(output[0].sync_data()); | 828 const SyncData data(output[0].sync_data()); |
828 EXPECT_EQ(manager()->current_machine_tag(), data.GetTag()); | 829 EXPECT_EQ(manager()->current_machine_tag(), data.AsLocal().GetTag()); |
829 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); | 830 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); |
830 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); | 831 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); |
831 EXPECT_TRUE(specifics.has_header()); | 832 EXPECT_TRUE(specifics.has_header()); |
832 const sync_pb::SessionHeader& header_s = specifics.header(); | 833 const sync_pb::SessionHeader& header_s = specifics.header(); |
833 EXPECT_TRUE(header_s.has_device_type()); | 834 EXPECT_TRUE(header_s.has_device_type()); |
834 EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name()); | 835 EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name()); |
835 EXPECT_EQ(0, header_s.window_size()); | 836 EXPECT_EQ(0, header_s.window_size()); |
836 | 837 |
837 // Verify the tab node creations and updates with content. | 838 // Verify the tab node creations and updates with content. |
838 for (int i = 1; i < 3; i++) { | 839 for (int i = 1; i < 3; i++) { |
839 EXPECT_TRUE(output[i].IsValid()); | 840 EXPECT_TRUE(output[i].IsValid()); |
840 const SyncData data(output[i].sync_data()); | 841 const SyncData data(output[i].sync_data()); |
841 EXPECT_TRUE(StartsWithASCII(data.GetTag(), | 842 EXPECT_TRUE(StartsWithASCII(data.AsLocal().GetTag(), |
842 manager()->current_machine_tag(), true)); | 843 manager()->current_machine_tag(), true)); |
843 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); | 844 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); |
844 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); | 845 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); |
845 } | 846 } |
846 EXPECT_EQ(SyncChange::ACTION_ADD, output[1].change_type()); | 847 EXPECT_EQ(SyncChange::ACTION_ADD, output[1].change_type()); |
847 EXPECT_EQ(SyncChange::ACTION_UPDATE, output[2].change_type()); | 848 EXPECT_EQ(SyncChange::ACTION_UPDATE, output[2].change_type()); |
848 EXPECT_TRUE(output[2].sync_data().GetSpecifics().session().has_tab()); | 849 EXPECT_TRUE(output[2].sync_data().GetSpecifics().session().has_tab()); |
849 | 850 |
850 // Verify the header was updated to reflect window state. | 851 // Verify the header was updated to reflect window state. |
851 EXPECT_TRUE(output[3].IsValid()); | 852 EXPECT_TRUE(output[3].IsValid()); |
852 EXPECT_EQ(SyncChange::ACTION_UPDATE, output[3].change_type()); | 853 EXPECT_EQ(SyncChange::ACTION_UPDATE, output[3].change_type()); |
853 const SyncData data_2(output[3].sync_data()); | 854 const SyncData data_2(output[3].sync_data()); |
854 EXPECT_EQ(manager()->current_machine_tag(), data_2.GetTag()); | 855 EXPECT_EQ(manager()->current_machine_tag(), data_2.AsLocal().GetTag()); |
855 const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session()); | 856 const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session()); |
856 EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag()); | 857 EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag()); |
857 EXPECT_TRUE(specifics2.has_header()); | 858 EXPECT_TRUE(specifics2.has_header()); |
858 const sync_pb::SessionHeader& header_s2 = specifics2.header(); | 859 const sync_pb::SessionHeader& header_s2 = specifics2.header(); |
859 EXPECT_EQ(1, header_s2.window_size()); | 860 EXPECT_EQ(1, header_s2.window_size()); |
860 | 861 |
861 // Verify foreign data. | 862 // Verify foreign data. |
862 std::vector<const SyncedSession*> foreign_sessions; | 863 std::vector<const SyncedSession*> foreign_sessions; |
863 ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions)); | 864 ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions)); |
864 std::vector<std::vector<SessionID::id_type> > session_reference; | 865 std::vector<std::vector<SessionID::id_type> > session_reference; |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1001 EXPECT_EQ(5U, changes.size()); | 1002 EXPECT_EQ(5U, changes.size()); |
1002 std::set<std::string> expected_tags(&tag, &tag + 1); | 1003 std::set<std::string> expected_tags(&tag, &tag + 1); |
1003 for (int i = 0; i < 5; i++) | 1004 for (int i = 0; i < 5; i++) |
1004 expected_tags.insert(TabNodePool2::TabIdToTag(tag, i)); | 1005 expected_tags.insert(TabNodePool2::TabIdToTag(tag, i)); |
1005 | 1006 |
1006 for (int i = 0; i < 5; i++) { | 1007 for (int i = 0; i < 5; i++) { |
1007 SCOPED_TRACE(changes[i].ToString()); | 1008 SCOPED_TRACE(changes[i].ToString()); |
1008 EXPECT_TRUE(changes[i].IsValid()); | 1009 EXPECT_TRUE(changes[i].IsValid()); |
1009 EXPECT_EQ(SyncChange::ACTION_DELETE, changes[i].change_type()); | 1010 EXPECT_EQ(SyncChange::ACTION_DELETE, changes[i].change_type()); |
1010 EXPECT_TRUE(changes[i].sync_data().IsValid()); | 1011 EXPECT_TRUE(changes[i].sync_data().IsValid()); |
1011 EXPECT_EQ(1U, expected_tags.erase(changes[i].sync_data().GetTag())); | 1012 EXPECT_EQ(1U, |
| 1013 expected_tags.erase(changes[i].sync_data().AsLocal().GetTag())); |
1012 } | 1014 } |
1013 } | 1015 } |
1014 | 1016 |
1015 // Write a foreign session to a node, with the tabs arriving first, and then | 1017 // Write a foreign session to a node, with the tabs arriving first, and then |
1016 // retrieve it. | 1018 // retrieve it. |
1017 TEST_F(SessionsSyncManagerTest, WriteForeignSessionToNodeTabsFirst) { | 1019 TEST_F(SessionsSyncManagerTest, WriteForeignSessionToNodeTabsFirst) { |
1018 InitWithNoSyncData(); | 1020 InitWithNoSyncData(); |
1019 | 1021 |
1020 // Fill an instance of session specifics with a foreign session's data. | 1022 // Fill an instance of session specifics with a foreign session's data. |
1021 std::string tag = "tag1"; | 1023 std::string tag = "tag1"; |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1124 // notification triggers association of the tab, and the subsequent window | 1126 // notification triggers association of the tab, and the subsequent window |
1125 // update. So we should see 4 changes at the SyncChangeProcessor. | 1127 // update. So we should see 4 changes at the SyncChangeProcessor. |
1126 ASSERT_EQ(4U, out.size()); | 1128 ASSERT_EQ(4U, out.size()); |
1127 | 1129 |
1128 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[0].change_type()); | 1130 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[0].change_type()); |
1129 ASSERT_TRUE(out[0].sync_data().GetSpecifics().session().has_header()); | 1131 ASSERT_TRUE(out[0].sync_data().GetSpecifics().session().has_header()); |
1130 EXPECT_EQ(SyncChange::ACTION_ADD, out[1].change_type()); | 1132 EXPECT_EQ(SyncChange::ACTION_ADD, out[1].change_type()); |
1131 int tab_node_id = out[1].sync_data().GetSpecifics().session().tab_node_id(); | 1133 int tab_node_id = out[1].sync_data().GetSpecifics().session().tab_node_id(); |
1132 EXPECT_EQ(TabNodePool2::TabIdToTag( | 1134 EXPECT_EQ(TabNodePool2::TabIdToTag( |
1133 manager()->current_machine_tag(), tab_node_id), | 1135 manager()->current_machine_tag(), tab_node_id), |
1134 out[1].sync_data().GetTag()); | 1136 out[1].sync_data().AsLocal().GetTag()); |
1135 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[2].change_type()); | 1137 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[2].change_type()); |
1136 ASSERT_TRUE(out[2].sync_data().GetSpecifics().session().has_tab()); | 1138 ASSERT_TRUE(out[2].sync_data().GetSpecifics().session().has_tab()); |
1137 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[3].change_type()); | 1139 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[3].change_type()); |
1138 ASSERT_TRUE(out[3].sync_data().GetSpecifics().session().has_header()); | 1140 ASSERT_TRUE(out[3].sync_data().GetSpecifics().session().has_header()); |
1139 | 1141 |
1140 // Verify the actual content. | 1142 // Verify the actual content. |
1141 const sync_pb::SessionHeader& session_header = | 1143 const sync_pb::SessionHeader& session_header = |
1142 out[3].sync_data().GetSpecifics().session().header(); | 1144 out[3].sync_data().GetSpecifics().session().header(); |
1143 ASSERT_EQ(1, session_header.window_size()); | 1145 ASSERT_EQ(1, session_header.window_size()); |
1144 EXPECT_EQ(1, session_header.window(0).tab_size()); | 1146 EXPECT_EQ(1, session_header.window(0).tab_size()); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1223 SyncData d(SyncData::CreateRemoteData( | 1225 SyncData d(SyncData::CreateRemoteData( |
1224 1, changes[0].sync_data().GetSpecifics(), base::Time())); | 1226 1, changes[0].sync_data().GetSpecifics(), base::Time())); |
1225 syncer::SyncDataList in(&d, &d + 1); | 1227 syncer::SyncDataList in(&d, &d + 1); |
1226 changes.clear(); | 1228 changes.clear(); |
1227 TearDown(); | 1229 TearDown(); |
1228 SetUp(); | 1230 SetUp(); |
1229 InitWithSyncDataTakeOutput(in, &changes); | 1231 InitWithSyncDataTakeOutput(in, &changes); |
1230 EXPECT_EQ(1U, FilterOutLocalHeaderChanges(&changes)->size()); | 1232 EXPECT_EQ(1U, FilterOutLocalHeaderChanges(&changes)->size()); |
1231 EXPECT_EQ(SyncChange::ACTION_DELETE, changes[0].change_type()); | 1233 EXPECT_EQ(SyncChange::ACTION_DELETE, changes[0].change_type()); |
1232 EXPECT_EQ(TabNodePool2::TabIdToTag(local_tag, tab_node_id), | 1234 EXPECT_EQ(TabNodePool2::TabIdToTag(local_tag, tab_node_id), |
1233 changes[0].sync_data().GetTag()); | 1235 changes[0].sync_data().AsLocal().GetTag()); |
1234 } | 1236 } |
1235 | 1237 |
1236 // Test that things work if a tab is initially ignored. | 1238 // Test that things work if a tab is initially ignored. |
1237 TEST_F(SessionsSyncManagerTest, AssociateWindowsDontReloadTabs) { | 1239 TEST_F(SessionsSyncManagerTest, AssociateWindowsDontReloadTabs) { |
1238 syncer::SyncChangeList out; | 1240 syncer::SyncChangeList out; |
1239 // Go to a URL that is ignored by session syncing. | 1241 // Go to a URL that is ignored by session syncing. |
1240 AddTab(browser(), GURL("chrome://preferences/")); | 1242 AddTab(browser(), GURL("chrome://preferences/")); |
1241 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 1243 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
1242 ASSERT_EQ(2U, out.size()); // Header add and update. | 1244 ASSERT_EQ(2U, out.size()); // Header add and update. |
1243 EXPECT_EQ( | 1245 EXPECT_EQ( |
1244 0, | 1246 0, |
1245 out[1].sync_data().GetSpecifics().session().header().window_size()); | 1247 out[1].sync_data().GetSpecifics().session().header().window_size()); |
1246 out.clear(); | 1248 out.clear(); |
1247 | 1249 |
1248 // Go to a sync-interesting URL. | 1250 // Go to a sync-interesting URL. |
1249 NavigateAndCommitActiveTab(GURL("http://foo2")); | 1251 NavigateAndCommitActiveTab(GURL("http://foo2")); |
1250 | 1252 |
1251 EXPECT_EQ(3U, out.size()); // Tab add, update, and header update. | 1253 EXPECT_EQ(3U, out.size()); // Tab add, update, and header update. |
1252 | 1254 |
1253 EXPECT_TRUE(StartsWithASCII(out[0].sync_data().GetTag(), | 1255 EXPECT_TRUE(StartsWithASCII(out[0].sync_data().AsLocal().GetTag(), |
1254 manager()->current_machine_tag(), true)); | 1256 manager()->current_machine_tag(), true)); |
1255 EXPECT_EQ(manager()->current_machine_tag(), | 1257 EXPECT_EQ(manager()->current_machine_tag(), |
1256 out[0].sync_data().GetSpecifics().session().session_tag()); | 1258 out[0].sync_data().GetSpecifics().session().session_tag()); |
1257 EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type()); | 1259 EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type()); |
1258 | 1260 |
1259 EXPECT_TRUE(StartsWithASCII(out[1].sync_data().GetTag(), | 1261 EXPECT_TRUE(StartsWithASCII(out[1].sync_data().AsLocal().GetTag(), |
1260 manager()->current_machine_tag(), true)); | 1262 manager()->current_machine_tag(), true)); |
1261 EXPECT_EQ(manager()->current_machine_tag(), | 1263 EXPECT_EQ(manager()->current_machine_tag(), |
1262 out[1].sync_data().GetSpecifics().session().session_tag()); | 1264 out[1].sync_data().GetSpecifics().session().session_tag()); |
1263 EXPECT_TRUE(out[1].sync_data().GetSpecifics().session().has_tab()); | 1265 EXPECT_TRUE(out[1].sync_data().GetSpecifics().session().has_tab()); |
1264 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[1].change_type()); | 1266 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[1].change_type()); |
1265 | 1267 |
1266 EXPECT_TRUE(out[2].IsValid()); | 1268 EXPECT_TRUE(out[2].IsValid()); |
1267 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[2].change_type()); | 1269 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[2].change_type()); |
1268 const SyncData data(out[2].sync_data()); | 1270 const SyncData data(out[2].sync_data()); |
1269 EXPECT_EQ(manager()->current_machine_tag(), data.GetTag()); | 1271 EXPECT_EQ(manager()->current_machine_tag(), data.AsLocal().GetTag()); |
1270 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); | 1272 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); |
1271 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); | 1273 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); |
1272 EXPECT_TRUE(specifics.has_header()); | 1274 EXPECT_TRUE(specifics.has_header()); |
1273 const sync_pb::SessionHeader& header_s = specifics.header(); | 1275 const sync_pb::SessionHeader& header_s = specifics.header(); |
1274 EXPECT_EQ(1, header_s.window_size()); | 1276 EXPECT_EQ(1, header_s.window_size()); |
1275 EXPECT_EQ(1, header_s.window(0).tab_size()); | 1277 EXPECT_EQ(1, header_s.window(0).tab_size()); |
1276 } | 1278 } |
1277 | 1279 |
1278 // Tests that the SyncSessionManager responds to local tab events properly. | 1280 // Tests that the SyncSessionManager responds to local tab events properly. |
1279 TEST_F(SessionsSyncManagerTest, OnLocalTabModified) { | 1281 TEST_F(SessionsSyncManagerTest, OnLocalTabModified) { |
(...skipping 23 matching lines...) Expand all Loading... |
1303 // = 6 total header updates. | 1305 // = 6 total header updates. |
1304 // 12 total updates. | 1306 // 12 total updates. |
1305 ASSERT_EQ(12U, out.size()); | 1307 ASSERT_EQ(12U, out.size()); |
1306 | 1308 |
1307 // Verify the tab node creations and updates to ensure the SyncProcessor | 1309 // Verify the tab node creations and updates to ensure the SyncProcessor |
1308 // sees the right operations. | 1310 // sees the right operations. |
1309 for (int i = 0; i < 12; i++) { | 1311 for (int i = 0; i < 12; i++) { |
1310 SCOPED_TRACE(i); | 1312 SCOPED_TRACE(i); |
1311 EXPECT_TRUE(out[i].IsValid()); | 1313 EXPECT_TRUE(out[i].IsValid()); |
1312 const SyncData data(out[i].sync_data()); | 1314 const SyncData data(out[i].sync_data()); |
1313 EXPECT_TRUE(StartsWithASCII(data.GetTag(), | 1315 EXPECT_TRUE(StartsWithASCII(data.AsLocal().GetTag(), |
1314 manager()->current_machine_tag(), true)); | 1316 manager()->current_machine_tag(), true)); |
1315 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); | 1317 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); |
1316 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); | 1318 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); |
1317 if (i % 6 == 0) { | 1319 if (i % 6 == 0) { |
1318 // First thing on an AddTab is a no-op header update for parented tab. | 1320 // First thing on an AddTab is a no-op header update for parented tab. |
1319 EXPECT_EQ(header.SerializeAsString(), | 1321 EXPECT_EQ(header.SerializeAsString(), |
1320 data.GetSpecifics().SerializeAsString()); | 1322 data.GetSpecifics().SerializeAsString()); |
1321 EXPECT_EQ(manager()->current_machine_tag(), data.GetTag()); | 1323 EXPECT_EQ(manager()->current_machine_tag(), data.AsLocal().GetTag()); |
1322 } else if (i % 6 == 1) { | 1324 } else if (i % 6 == 1) { |
1323 // Next, the TabNodePool should create the tab node. | 1325 // Next, the TabNodePool should create the tab node. |
1324 EXPECT_EQ(SyncChange::ACTION_ADD, out[i].change_type()); | 1326 EXPECT_EQ(SyncChange::ACTION_ADD, out[i].change_type()); |
1325 EXPECT_EQ(TabNodePool2::TabIdToTag( | 1327 EXPECT_EQ(TabNodePool2::TabIdToTag( |
1326 manager()->current_machine_tag(), | 1328 manager()->current_machine_tag(), |
1327 data.GetSpecifics().session().tab_node_id()), | 1329 data.GetSpecifics().session().tab_node_id()), |
1328 data.GetTag()); | 1330 data.AsLocal().GetTag()); |
1329 } else if (i % 6 == 2) { | 1331 } else if (i % 6 == 2) { |
1330 // Then we see the tab update to the URL. | 1332 // Then we see the tab update to the URL. |
1331 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type()); | 1333 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type()); |
1332 EXPECT_EQ(TabNodePool2::TabIdToTag( | 1334 EXPECT_EQ(TabNodePool2::TabIdToTag( |
1333 manager()->current_machine_tag(), | 1335 manager()->current_machine_tag(), |
1334 data.GetSpecifics().session().tab_node_id()), | 1336 data.GetSpecifics().session().tab_node_id()), |
1335 data.GetTag()); | 1337 data.AsLocal().GetTag()); |
1336 ASSERT_TRUE(specifics.has_tab()); | 1338 ASSERT_TRUE(specifics.has_tab()); |
1337 } else if (i % 6 == 3) { | 1339 } else if (i % 6 == 3) { |
1338 // The header needs to be updated to reflect the new window state. | 1340 // The header needs to be updated to reflect the new window state. |
1339 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type()); | 1341 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type()); |
1340 EXPECT_TRUE(specifics.has_header()); | 1342 EXPECT_TRUE(specifics.has_header()); |
1341 } else if (i % 6 == 4) { | 1343 } else if (i % 6 == 4) { |
1342 // Now we move on to NavigateAndCommit. Update the tab. | 1344 // Now we move on to NavigateAndCommit. Update the tab. |
1343 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type()); | 1345 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type()); |
1344 EXPECT_EQ(TabNodePool2::TabIdToTag( | 1346 EXPECT_EQ(TabNodePool2::TabIdToTag( |
1345 manager()->current_machine_tag(), | 1347 manager()->current_machine_tag(), |
1346 data.GetSpecifics().session().tab_node_id()), | 1348 data.GetSpecifics().session().tab_node_id()), |
1347 data.GetTag()); | 1349 data.AsLocal().GetTag()); |
1348 ASSERT_TRUE(specifics.has_tab()); | 1350 ASSERT_TRUE(specifics.has_tab()); |
1349 } else if (i % 6 == 5) { | 1351 } else if (i % 6 == 5) { |
1350 // The header needs to be updated to reflect the new window state. | 1352 // The header needs to be updated to reflect the new window state. |
1351 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type()); | 1353 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type()); |
1352 ASSERT_TRUE(specifics.has_header()); | 1354 ASSERT_TRUE(specifics.has_header()); |
1353 header = data.GetSpecifics(); | 1355 header = data.GetSpecifics(); |
1354 } | 1356 } |
1355 } | 1357 } |
1356 | 1358 |
1357 // Verify the actual content to ensure sync sees the right data. | 1359 // Verify the actual content to ensure sync sees the right data. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1396 ASSERT_EQ(6U, out.size()); | 1398 ASSERT_EQ(6U, out.size()); |
1397 | 1399 |
1398 // Check that this machine's data is not included in the foreign windows. | 1400 // Check that this machine's data is not included in the foreign windows. |
1399 std::vector<const SyncedSession*> foreign_sessions; | 1401 std::vector<const SyncedSession*> foreign_sessions; |
1400 ASSERT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions)); | 1402 ASSERT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions)); |
1401 | 1403 |
1402 // Verify the header. | 1404 // Verify the header. |
1403 EXPECT_TRUE(out[0].IsValid()); | 1405 EXPECT_TRUE(out[0].IsValid()); |
1404 EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type()); | 1406 EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type()); |
1405 const SyncData data(out[0].sync_data()); | 1407 const SyncData data(out[0].sync_data()); |
1406 EXPECT_EQ(manager()->current_machine_tag(), data.GetTag()); | 1408 EXPECT_EQ(manager()->current_machine_tag(), data.AsLocal().GetTag()); |
1407 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); | 1409 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); |
1408 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); | 1410 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); |
1409 EXPECT_TRUE(specifics.has_header()); | 1411 EXPECT_TRUE(specifics.has_header()); |
1410 const sync_pb::SessionHeader& header_s = specifics.header(); | 1412 const sync_pb::SessionHeader& header_s = specifics.header(); |
1411 EXPECT_TRUE(header_s.has_device_type()); | 1413 EXPECT_TRUE(header_s.has_device_type()); |
1412 EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name()); | 1414 EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name()); |
1413 EXPECT_EQ(0, header_s.window_size()); | 1415 EXPECT_EQ(0, header_s.window_size()); |
1414 | 1416 |
1415 // Verify the tab node creations and updates with content. | 1417 // Verify the tab node creations and updates with content. |
1416 for (int i = 1; i < 5; i++) { | 1418 for (int i = 1; i < 5; i++) { |
1417 EXPECT_TRUE(out[i].IsValid()); | 1419 EXPECT_TRUE(out[i].IsValid()); |
1418 const SyncData data(out[i].sync_data()); | 1420 const SyncData data(out[i].sync_data()); |
1419 EXPECT_TRUE(StartsWithASCII(data.GetTag(), | 1421 EXPECT_TRUE(StartsWithASCII(data.AsLocal().GetTag(), |
1420 manager()->current_machine_tag(), true)); | 1422 manager()->current_machine_tag(), true)); |
1421 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); | 1423 const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session()); |
1422 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); | 1424 EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag()); |
1423 if (i % 2 == 1) { | 1425 if (i % 2 == 1) { |
1424 EXPECT_EQ(SyncChange::ACTION_ADD, out[i].change_type()); | 1426 EXPECT_EQ(SyncChange::ACTION_ADD, out[i].change_type()); |
1425 } else { | 1427 } else { |
1426 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type()); | 1428 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type()); |
1427 EXPECT_TRUE(specifics.has_tab()); | 1429 EXPECT_TRUE(specifics.has_tab()); |
1428 } | 1430 } |
1429 } | 1431 } |
1430 | 1432 |
1431 // Verify the header was updated to reflect new window state. | 1433 // Verify the header was updated to reflect new window state. |
1432 EXPECT_TRUE(out[5].IsValid()); | 1434 EXPECT_TRUE(out[5].IsValid()); |
1433 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[5].change_type()); | 1435 EXPECT_EQ(SyncChange::ACTION_UPDATE, out[5].change_type()); |
1434 const SyncData data_2(out[5].sync_data()); | 1436 const SyncData data_2(out[5].sync_data()); |
1435 EXPECT_EQ(manager()->current_machine_tag(), data_2.GetTag()); | 1437 EXPECT_EQ(manager()->current_machine_tag(), data_2.AsLocal().GetTag()); |
1436 const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session()); | 1438 const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session()); |
1437 EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag()); | 1439 EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag()); |
1438 EXPECT_TRUE(specifics2.has_header()); | 1440 EXPECT_TRUE(specifics2.has_header()); |
1439 const sync_pb::SessionHeader& header_s2 = specifics2.header(); | 1441 const sync_pb::SessionHeader& header_s2 = specifics2.header(); |
1440 EXPECT_EQ(1, header_s2.window_size()); | 1442 EXPECT_EQ(1, header_s2.window_size()); |
1441 | 1443 |
1442 // Verify TabLinks. | 1444 // Verify TabLinks. |
1443 SessionsSyncManager::TabLinksMap tab_map = manager()->local_tab_map_; | 1445 SessionsSyncManager::TabLinksMap tab_map = manager()->local_tab_map_; |
1444 ASSERT_EQ(2U, tab_map.size()); | 1446 ASSERT_EQ(2U, tab_map.size()); |
1445 // Tabs are ordered by sessionid in tab_map, so should be able to traverse | 1447 // Tabs are ordered by sessionid in tab_map, so should be able to traverse |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1495 std::vector<const SyncedSession*> foreign_sessions; | 1497 std::vector<const SyncedSession*> foreign_sessions; |
1496 ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions)); | 1498 ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions)); |
1497 ASSERT_EQ(2U, foreign_sessions.size()); | 1499 ASSERT_EQ(2U, foreign_sessions.size()); |
1498 foreign_sessions.clear(); | 1500 foreign_sessions.clear(); |
1499 | 1501 |
1500 // Now garbage collect and verify the non-stale session is still there. | 1502 // Now garbage collect and verify the non-stale session is still there. |
1501 manager()->DoGarbageCollection(); | 1503 manager()->DoGarbageCollection(); |
1502 ASSERT_EQ(5U, output.size()); | 1504 ASSERT_EQ(5U, output.size()); |
1503 EXPECT_EQ(SyncChange::ACTION_DELETE, output[0].change_type()); | 1505 EXPECT_EQ(SyncChange::ACTION_DELETE, output[0].change_type()); |
1504 const SyncData data(output[0].sync_data()); | 1506 const SyncData data(output[0].sync_data()); |
1505 EXPECT_EQ(tag1, data.GetTag()); | 1507 EXPECT_EQ(tag1, data.AsLocal().GetTag()); |
1506 for (int i = 1; i < 5; i++) { | 1508 for (int i = 1; i < 5; i++) { |
1507 EXPECT_EQ(SyncChange::ACTION_DELETE, output[i].change_type()); | 1509 EXPECT_EQ(SyncChange::ACTION_DELETE, output[i].change_type()); |
1508 const SyncData data(output[i].sync_data()); | 1510 const SyncData data(output[i].sync_data()); |
1509 EXPECT_EQ(TabNodePool2::TabIdToTag(tag1, i), data.GetTag()); | 1511 EXPECT_EQ(TabNodePool2::TabIdToTag(tag1, i), data.AsLocal().GetTag()); |
1510 } | 1512 } |
1511 | 1513 |
1512 ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions)); | 1514 ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions)); |
1513 ASSERT_EQ(1U, foreign_sessions.size()); | 1515 ASSERT_EQ(1U, foreign_sessions.size()); |
1514 std::vector<std::vector<SessionID::id_type> > session_reference; | 1516 std::vector<std::vector<SessionID::id_type> > session_reference; |
1515 session_reference.push_back(tab_list2); | 1517 session_reference.push_back(tab_list2); |
1516 helper()->VerifySyncedSession(tag2, session_reference, | 1518 helper()->VerifySyncedSession(tag2, session_reference, |
1517 *(foreign_sessions[0])); | 1519 *(foreign_sessions[0])); |
1518 } | 1520 } |
1519 | 1521 |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1711 ASSERT_FALSE(observer.notified_of_refresh()); | 1713 ASSERT_FALSE(observer.notified_of_refresh()); |
1712 InitWithNoSyncData(); | 1714 InitWithNoSyncData(); |
1713 AddTab(browser(), GURL("http://foo1")); | 1715 AddTab(browser(), GURL("http://foo1")); |
1714 EXPECT_FALSE(observer.notified_of_refresh()); | 1716 EXPECT_FALSE(observer.notified_of_refresh()); |
1715 NavigateAndCommitActiveTab(GURL("chrome://newtab/#open_tabs")); | 1717 NavigateAndCommitActiveTab(GURL("chrome://newtab/#open_tabs")); |
1716 EXPECT_TRUE(observer.notified_of_refresh()); | 1718 EXPECT_TRUE(observer.notified_of_refresh()); |
1717 } | 1719 } |
1718 #endif // defined(OS_ANDROID) || defined(OS_IOS) | 1720 #endif // defined(OS_ANDROID) || defined(OS_IOS) |
1719 | 1721 |
1720 } // namespace browser_sync | 1722 } // namespace browser_sync |
OLD | NEW |