Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(419)

Unified Diff: components/sync_sessions/synced_session_tracker_unittest.cc

Issue 1877083002: [Sync] Moved tab_node_id tracking to session object and improved foreign session garbage collection. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698