| Index: components/sync_sessions/synced_session_tracker_unittest.cc
|
| diff --git a/components/sync_sessions/synced_session_tracker_unittest.cc b/components/sync_sessions/synced_session_tracker_unittest.cc
|
| index f7886e3ddf66c0aa4a995ee6741f8b390bef307d..346964061039ef9ac0bd4e50b0de8b8c298374ec 100644
|
| --- a/components/sync_sessions/synced_session_tracker_unittest.cc
|
| +++ b/components/sync_sessions/synced_session_tracker_unittest.cc
|
| @@ -70,7 +70,7 @@ TEST_F(SyncedSessionTrackerTest, PutTabInWindow) {
|
|
|
| TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) {
|
| std::vector<const sync_driver::SyncedSession*> sessions;
|
| - ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions));
|
| + ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions, true));
|
| GetTracker()->GetSession("tag1");
|
| GetTracker()->PutWindowInSession("tag1", 0);
|
| GetTracker()->PutTabInWindow("tag1", 0, 15, 0);
|
| @@ -88,10 +88,13 @@ TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) {
|
| tab->navigations.push_back(
|
| sessions::SerializedNavigationEntryTestHelper::CreateNavigation(
|
| kInvalidUrl, "title"));
|
| - ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(&sessions));
|
| + ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(&sessions, true));
|
| // Only the session with a valid window and tab gets returned.
|
| ASSERT_EQ(1U, sessions.size());
|
| ASSERT_EQ("tag1", sessions[0]->session_tag);
|
| +
|
| + ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(&sessions, false));
|
| + ASSERT_EQ(3U, sessions.size());
|
| }
|
|
|
| TEST_F(SyncedSessionTrackerTest, LookupSessionWindows) {
|
| @@ -146,6 +149,7 @@ TEST_F(SyncedSessionTrackerTest, Complex) {
|
| sync_driver::SyncedSession* session = GetTracker()->GetSession(tag1);
|
| sync_driver::SyncedSession* session2 = GetTracker()->GetSession(tag2);
|
| sync_driver::SyncedSession* session3 = GetTracker()->GetSession(tag3);
|
| + session3->device_type = sync_driver::SyncedSession::TYPE_OTHER;
|
| ASSERT_EQ(3U, GetTracker()->num_synced_sessions());
|
|
|
| ASSERT_TRUE(session);
|
| @@ -176,7 +180,9 @@ TEST_F(SyncedSessionTrackerTest, Complex) {
|
|
|
| // The sessions don't have valid tabs, lookup should not succeed.
|
| std::vector<const sync_driver::SyncedSession*> sessions;
|
| - ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions));
|
| + ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions, true));
|
| + ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(&sessions, false));
|
| + ASSERT_EQ(2U, sessions.size());
|
|
|
| GetTracker()->Clear();
|
| ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1));
|
| @@ -242,16 +248,25 @@ TEST_F(SyncedSessionTrackerTest, LookupTabNodeIds) {
|
| GetTracker()->PutTabInWindow(tag3, 1, 5, 0);
|
| EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag3, &result));
|
| EXPECT_TRUE(result.empty());
|
| - EXPECT_TRUE(GetTracker()->DeleteSession(tag3));
|
| + EXPECT_FALSE(GetTracker()->DeleteSession(tag3));
|
| EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result));
|
|
|
| - EXPECT_TRUE(GetTracker()->DeleteSession(tag1));
|
| + EXPECT_FALSE(GetTracker()->DeleteSession(tag1));
|
| EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag1, &result));
|
| EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result));
|
| EXPECT_EQ(2U, result.size());
|
| EXPECT_FALSE(result.end() == result.find(21));
|
| EXPECT_FALSE(result.end() == result.find(22));
|
| - EXPECT_TRUE(GetTracker()->DeleteSession(tag2));
|
| +
|
| + GetTracker()->GetTab(tag2, 1, 21);
|
| + GetTracker()->GetTab(tag2, 2, 23);
|
| + EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result));
|
| + EXPECT_EQ(3U, result.size());
|
| + EXPECT_FALSE(result.end() == result.find(21));
|
| + EXPECT_FALSE(result.end() == result.find(22));
|
| + EXPECT_FALSE(result.end() == result.find(23));
|
| +
|
| + EXPECT_FALSE(GetTracker()->DeleteSession(tag2));
|
| EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag2, &result));
|
| }
|
|
|
| @@ -315,4 +330,90 @@ TEST_F(SyncedSessionTrackerTest, SessionTracking) {
|
| // SyncedSessionTracker.
|
| }
|
|
|
| +TEST_F(SyncedSessionTrackerTest, TryDeleteTabUnowned) {
|
| + std::string session_tag = "session_tag";
|
| + int tab_id = 1;
|
| + int node_id = 2;
|
| + int wrong = 3;
|
| +
|
| + // Make sure TryDeleteTab doesn't crash when nothing exists.
|
| + GetTracker()->TryDeleteTab(session_tag, wrong, wrong);
|
| +
|
| + GetTracker()->GetTab(session_tag, tab_id, node_id);
|
| + EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
|
| + GetTracker()->TryDeleteTab("wrong session tag", tab_id, node_id);
|
| + EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
|
| + GetTracker()->TryDeleteTab(session_tag, wrong, node_id);
|
| + EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
|
| + GetTracker()->TryDeleteTab(session_tag, tab_id, wrong);
|
| + EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
|
| + GetTracker()->TryDeleteTab(session_tag, tab_id, node_id);
|
| + EXPECT_EQ(0U, GetTracker()->num_synced_tabs(session_tag));
|
| +}
|
| +
|
| +TEST_F(SyncedSessionTrackerTest, TryDeleteTabUnownedWithSharedIds) {
|
| + std::string session_tag = "session_tag";
|
| + int tab_id = 1;
|
| + int tab_node_id_2 = 2;
|
| + int tab_node_id_3 = 3;
|
| + std::set<int> result;
|
| +
|
| + GetTracker()->GetTab(session_tag, tab_id, tab_node_id_2);
|
| + GetTracker()->GetTab(session_tag, tab_id, tab_node_id_3);
|
| + GetTracker()->LookupTabNodeIds(session_tag, &result);
|
| + EXPECT_EQ(2U, result.size());
|
| +
|
| + GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_3);
|
| + EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
|
| + GetTracker()->LookupTabNodeIds(session_tag, &result);
|
| + EXPECT_EQ(1U, result.size());
|
| + EXPECT_EQ(tab_node_id_2, *result.begin());
|
| + GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_2);
|
| + EXPECT_EQ(0U, GetTracker()->num_synced_tabs(session_tag));
|
| +
|
| + // Repeat same as above, only delete in opposite order.
|
| + GetTracker()->GetTab(session_tag, tab_id, tab_node_id_2);
|
| + GetTracker()->GetTab(session_tag, tab_id, tab_node_id_3);
|
| + GetTracker()->LookupTabNodeIds(session_tag, &result);
|
| + EXPECT_EQ(2U, result.size());
|
| +
|
| + GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_2);
|
| + EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
|
| + GetTracker()->LookupTabNodeIds(session_tag, &result);
|
| + EXPECT_EQ(1U, result.size());
|
| + EXPECT_EQ(tab_node_id_3, *result.begin());
|
| + GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_3);
|
| + EXPECT_EQ(0U, GetTracker()->num_synced_tabs(session_tag));
|
| +}
|
| +
|
| +TEST_F(SyncedSessionTrackerTest, TryDeleteTabOwned) {
|
| + std::string session_tag = "sessoin_tag";
|
| + int tab_id = 1;
|
| + int tab_node_id_2 = 2;
|
| + int tab_node_id_3 = 3;
|
| + int tab_index = 4;
|
| + int window_id = 5;
|
| + std::set<int> result;
|
| +
|
| + GetTracker()->GetTab(session_tag, tab_id, tab_node_id_2);
|
| + GetTracker()->GetTab(session_tag, tab_id, tab_node_id_3);
|
| + GetTracker()->PutWindowInSession(session_tag, window_id);
|
| + GetTracker()->PutTabInWindow(session_tag, window_id, tab_id, tab_index);
|
| + EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
|
| + GetTracker()->LookupTabNodeIds(session_tag, &result);
|
| + EXPECT_EQ(2U, result.size());
|
| +
|
| + GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_3);
|
| + EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
|
| + GetTracker()->LookupTabNodeIds(session_tag, &result);
|
| + EXPECT_EQ(1U, result.size());
|
| + EXPECT_EQ(tab_node_id_2, *result.begin());
|
| +
|
| + // Tab cannot be deleted, still owned. However, no valid nodes.
|
| + GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_2);
|
| + EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
|
| + GetTracker()->LookupTabNodeIds(session_tag, &result);
|
| + EXPECT_EQ(0U, result.size());
|
| +}
|
| +
|
| } // namespace browser_sync
|
|
|