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