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

Side by Side 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: Moved tab_node_ids to session object, resumed aggressive cleanup. 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 unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 #include <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/rand_util.h" 9 #include "base/rand_util.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 0); // win id 10, tab id 15, tab ind 0. 63 0); // win id 10, tab id 15, tab ind 0.
64 sync_driver::SyncedSession* session = GetTracker()->GetSession("tag"); 64 sync_driver::SyncedSession* session = GetTracker()->GetSession("tag");
65 ASSERT_EQ(1U, session->windows.size()); 65 ASSERT_EQ(1U, session->windows.size());
66 ASSERT_EQ(1U, session->windows[10]->tabs.size()); 66 ASSERT_EQ(1U, session->windows[10]->tabs.size());
67 ASSERT_EQ(GetTracker()->GetTab("tag", 15, 1), session->windows[10]->tabs[0]); 67 ASSERT_EQ(GetTracker()->GetTab("tag", 15, 1), session->windows[10]->tabs[0]);
68 // Should clean up memory on its own. 68 // Should clean up memory on its own.
69 } 69 }
70 70
71 TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) { 71 TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) {
72 std::vector<const sync_driver::SyncedSession*> sessions; 72 std::vector<const sync_driver::SyncedSession*> sessions;
73 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions)); 73 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions, true));
74 GetTracker()->GetSession("tag1"); 74 GetTracker()->GetSession("tag1");
75 GetTracker()->PutWindowInSession("tag1", 0); 75 GetTracker()->PutWindowInSession("tag1", 0);
76 GetTracker()->PutTabInWindow("tag1", 0, 15, 0); 76 GetTracker()->PutTabInWindow("tag1", 0, 15, 0);
77 sessions::SessionTab* tab = GetTracker()->GetTab("tag1", 15, 1); 77 sessions::SessionTab* tab = GetTracker()->GetTab("tag1", 15, 1);
78 ASSERT_TRUE(tab); 78 ASSERT_TRUE(tab);
79 tab->navigations.push_back( 79 tab->navigations.push_back(
80 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(kValidUrl, 80 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(kValidUrl,
81 "title")); 81 "title"));
82 GetTracker()->GetSession("tag2"); 82 GetTracker()->GetSession("tag2");
83 GetTracker()->GetSession("tag3"); 83 GetTracker()->GetSession("tag3");
84 GetTracker()->PutWindowInSession("tag3", 0); 84 GetTracker()->PutWindowInSession("tag3", 0);
85 GetTracker()->PutTabInWindow("tag3", 0, 15, 0); 85 GetTracker()->PutTabInWindow("tag3", 0, 15, 0);
86 tab = GetTracker()->GetTab("tag3", 15, 1); 86 tab = GetTracker()->GetTab("tag3", 15, 1);
87 ASSERT_TRUE(tab); 87 ASSERT_TRUE(tab);
88 tab->navigations.push_back( 88 tab->navigations.push_back(
89 sessions::SerializedNavigationEntryTestHelper::CreateNavigation( 89 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(
90 kInvalidUrl, "title")); 90 kInvalidUrl, "title"));
91 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(&sessions)); 91 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(&sessions, true));
92 // Only the session with a valid window and tab gets returned. 92 // Only the session with a valid window and tab gets returned.
93 ASSERT_EQ(1U, sessions.size()); 93 ASSERT_EQ(1U, sessions.size());
94 ASSERT_EQ("tag1", sessions[0]->session_tag); 94 ASSERT_EQ("tag1", sessions[0]->session_tag);
95
96 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(&sessions, false));
97 ASSERT_EQ(3U, sessions.size());
95 } 98 }
96 99
97 TEST_F(SyncedSessionTrackerTest, LookupSessionWindows) { 100 TEST_F(SyncedSessionTrackerTest, LookupSessionWindows) {
98 std::vector<const sessions::SessionWindow*> windows; 101 std::vector<const sessions::SessionWindow*> windows;
99 ASSERT_FALSE(GetTracker()->LookupSessionWindows("tag1", &windows)); 102 ASSERT_FALSE(GetTracker()->LookupSessionWindows("tag1", &windows));
100 GetTracker()->GetSession("tag1"); 103 GetTracker()->GetSession("tag1");
101 GetTracker()->PutWindowInSession("tag1", 0); 104 GetTracker()->PutWindowInSession("tag1", 0);
102 GetTracker()->PutWindowInSession("tag1", 2); 105 GetTracker()->PutWindowInSession("tag1", 2);
103 GetTracker()->GetSession("tag2"); 106 GetTracker()->GetSession("tag2");
104 GetTracker()->PutWindowInSession("tag2", 0); 107 GetTracker()->PutWindowInSession("tag2", 0);
(...skipping 21 matching lines...) Expand all
126 const std::string tag3 = "tag3"; 129 const std::string tag3 = "tag3";
127 std::vector<sessions::SessionTab *> tabs1, tabs2; 130 std::vector<sessions::SessionTab *> tabs1, tabs2;
128 sessions::SessionTab* temp_tab; 131 sessions::SessionTab* temp_tab;
129 ASSERT_TRUE(GetTracker()->Empty()); 132 ASSERT_TRUE(GetTracker()->Empty());
130 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 133 ASSERT_EQ(0U, GetTracker()->num_synced_sessions());
131 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1)); 134 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1));
132 tabs1.push_back(GetTracker()->GetTab(tag1, 0, 0)); 135 tabs1.push_back(GetTracker()->GetTab(tag1, 0, 0));
133 tabs1.push_back(GetTracker()->GetTab(tag1, 1, 1)); 136 tabs1.push_back(GetTracker()->GetTab(tag1, 1, 1));
134 tabs1.push_back(GetTracker()->GetTab(tag1, 2, 2)); 137 tabs1.push_back(GetTracker()->GetTab(tag1, 2, 2));
135 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1)); 138 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1));
136 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 139 ASSERT_EQ(1U, GetTracker()->num_synced_sessions());
137 temp_tab = GetTracker()->GetTab(tag1, 0, 0); // Already created. 140 temp_tab = GetTracker()->GetTab(tag1, 0, 0); // Already created.
138 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1)); 141 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1));
139 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 142 ASSERT_EQ(1U, GetTracker()->num_synced_sessions());
140 ASSERT_EQ(tabs1[0], temp_tab); 143 ASSERT_EQ(tabs1[0], temp_tab);
141 tabs2.push_back(GetTracker()->GetTab(tag2, 0, 0)); 144 tabs2.push_back(GetTracker()->GetTab(tag2, 0, 0));
142 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2)); 145 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2));
143 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 146 ASSERT_EQ(2U, GetTracker()->num_synced_sessions());
144 ASSERT_FALSE(GetTracker()->DeleteSession(tag3)); 147 ASSERT_FALSE(GetTracker()->DeleteSession(tag3));
145 148
146 sync_driver::SyncedSession* session = GetTracker()->GetSession(tag1); 149 sync_driver::SyncedSession* session = GetTracker()->GetSession(tag1);
147 sync_driver::SyncedSession* session2 = GetTracker()->GetSession(tag2); 150 sync_driver::SyncedSession* session2 = GetTracker()->GetSession(tag2);
148 sync_driver::SyncedSession* session3 = GetTracker()->GetSession(tag3); 151 sync_driver::SyncedSession* session3 = GetTracker()->GetSession(tag3);
152 session3->device_type = sync_driver::SyncedSession::TYPE_OTHER;
149 ASSERT_EQ(3U, GetTracker()->num_synced_sessions()); 153 ASSERT_EQ(3U, GetTracker()->num_synced_sessions());
150 154
151 ASSERT_TRUE(session); 155 ASSERT_TRUE(session);
152 ASSERT_TRUE(session2); 156 ASSERT_TRUE(session2);
153 ASSERT_TRUE(session3); 157 ASSERT_TRUE(session3);
154 ASSERT_NE(session, session2); 158 ASSERT_NE(session, session2);
155 ASSERT_NE(session2, session3); 159 ASSERT_NE(session2, session3);
156 ASSERT_TRUE(GetTracker()->DeleteSession(tag3)); 160 ASSERT_TRUE(GetTracker()->DeleteSession(tag3));
157 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); 161 ASSERT_EQ(2U, GetTracker()->num_synced_sessions());
158 162
(...skipping 10 matching lines...) Expand all
169 ASSERT_EQ(static_cast<const sessions::SessionTab*>(NULL), tab_ptr); 173 ASSERT_EQ(static_cast<const sessions::SessionTab*>(NULL), tab_ptr);
170 174
171 std::vector<const sessions::SessionWindow*> windows; 175 std::vector<const sessions::SessionWindow*> windows;
172 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag1, &windows)); 176 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag1, &windows));
173 ASSERT_EQ(1U, windows.size()); 177 ASSERT_EQ(1U, windows.size());
174 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag2, &windows)); 178 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag2, &windows));
175 ASSERT_EQ(0U, windows.size()); 179 ASSERT_EQ(0U, windows.size());
176 180
177 // The sessions don't have valid tabs, lookup should not succeed. 181 // The sessions don't have valid tabs, lookup should not succeed.
178 std::vector<const sync_driver::SyncedSession*> sessions; 182 std::vector<const sync_driver::SyncedSession*> sessions;
179 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions)); 183 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions, true));
184 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(&sessions, false));
185 ASSERT_EQ(2U, sessions.size());
180 186
181 GetTracker()->Clear(); 187 GetTracker()->Clear();
182 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1)); 188 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1));
183 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag2)); 189 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag2));
184 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 190 ASSERT_EQ(0U, GetTracker()->num_synced_sessions());
185 } 191 }
186 192
187 TEST_F(SyncedSessionTrackerTest, ManyGetTabs) { 193 TEST_F(SyncedSessionTrackerTest, ManyGetTabs) {
188 ASSERT_TRUE(GetTracker()->Empty()); 194 ASSERT_TRUE(GetTracker()->Empty());
189 const int kMaxSessions = 10; 195 const int kMaxSessions = 10;
(...skipping 13 matching lines...) Expand all
203 } 209 }
204 210
205 TEST_F(SyncedSessionTrackerTest, LookupTabNodeIds) { 211 TEST_F(SyncedSessionTrackerTest, LookupTabNodeIds) {
206 std::set<int> result; 212 std::set<int> result;
207 std::string tag1 = "session1"; 213 std::string tag1 = "session1";
208 std::string tag2 = "session2"; 214 std::string tag2 = "session2";
209 std::string tag3 = "session3"; 215 std::string tag3 = "session3";
210 216
211 GetTracker()->GetTab(tag1, 1, 1); 217 GetTracker()->GetTab(tag1, 1, 1);
212 GetTracker()->GetTab(tag1, 2, 2); 218 GetTracker()->GetTab(tag1, 2, 2);
213 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); 219 GetTracker()->LookupTabNodeIds(tag1, &result);
214 EXPECT_EQ(2U, result.size()); 220 EXPECT_EQ(2U, result.size());
215 EXPECT_FALSE(result.end() == result.find(1)); 221 EXPECT_FALSE(result.end() == result.find(1));
216 EXPECT_FALSE(result.end() == result.find(2)); 222 EXPECT_FALSE(result.end() == result.find(2));
217 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag2, &result)); 223 GetTracker()->LookupTabNodeIds(tag2, &result);
224 EXPECT_TRUE(result.empty());
218 225
219 GetTracker()->PutWindowInSession(tag1, 0); 226 GetTracker()->PutWindowInSession(tag1, 0);
220 GetTracker()->PutTabInWindow(tag1, 0, 3, 0); 227 GetTracker()->PutTabInWindow(tag1, 0, 3, 0);
221 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); 228 GetTracker()->LookupTabNodeIds(tag1, &result);
222 EXPECT_EQ(2U, result.size()); 229 EXPECT_EQ(2U, result.size());
223 230
224 GetTracker()->GetTab(tag1, 3, 3); 231 GetTracker()->GetTab(tag1, 3, 3);
225 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); 232 GetTracker()->LookupTabNodeIds(tag1, &result);
226 EXPECT_EQ(3U, result.size()); 233 EXPECT_EQ(3U, result.size());
227 EXPECT_FALSE(result.end() == result.find(3)); 234 EXPECT_FALSE(result.end() == result.find(3));
228 235
229 GetTracker()->GetTab(tag2, 1, 21); 236 GetTracker()->GetTab(tag2, 1, 21);
230 GetTracker()->GetTab(tag2, 2, 22); 237 GetTracker()->GetTab(tag2, 2, 22);
231 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result)); 238 GetTracker()->LookupTabNodeIds(tag2, &result);
232 EXPECT_EQ(2U, result.size()); 239 EXPECT_EQ(2U, result.size());
233 EXPECT_FALSE(result.end() == result.find(21)); 240 EXPECT_FALSE(result.end() == result.find(21));
234 EXPECT_FALSE(result.end() == result.find(22)); 241 EXPECT_FALSE(result.end() == result.find(22));
235 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); 242 GetTracker()->LookupTabNodeIds(tag1, &result);
236 EXPECT_EQ(3U, result.size()); 243 EXPECT_EQ(3U, result.size());
237 EXPECT_FALSE(result.end() == result.find(1)); 244 EXPECT_FALSE(result.end() == result.find(1));
238 EXPECT_FALSE(result.end() == result.find(2)); 245 EXPECT_FALSE(result.end() == result.find(2));
239 246
240 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result)); 247 GetTracker()->LookupTabNodeIds(tag3, &result);
248 EXPECT_TRUE(result.empty());
241 GetTracker()->PutWindowInSession(tag3, 1); 249 GetTracker()->PutWindowInSession(tag3, 1);
242 GetTracker()->PutTabInWindow(tag3, 1, 5, 0); 250 GetTracker()->PutTabInWindow(tag3, 1, 5, 0);
243 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag3, &result)); 251 GetTracker()->LookupTabNodeIds(tag3, &result);
244 EXPECT_TRUE(result.empty()); 252 EXPECT_TRUE(result.empty());
245 EXPECT_TRUE(GetTracker()->DeleteSession(tag3)); 253 EXPECT_FALSE(GetTracker()->DeleteSession(tag3));
246 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result)); 254 GetTracker()->LookupTabNodeIds(tag3, &result);
255 EXPECT_TRUE(result.empty());
247 256
248 EXPECT_TRUE(GetTracker()->DeleteSession(tag1)); 257 EXPECT_FALSE(GetTracker()->DeleteSession(tag1));
249 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag1, &result)); 258 GetTracker()->LookupTabNodeIds(tag1, &result);
250 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result)); 259 EXPECT_TRUE(result.empty());
260 GetTracker()->LookupTabNodeIds(tag2, &result);
251 EXPECT_EQ(2U, result.size()); 261 EXPECT_EQ(2U, result.size());
252 EXPECT_FALSE(result.end() == result.find(21)); 262 EXPECT_FALSE(result.end() == result.find(21));
253 EXPECT_FALSE(result.end() == result.find(22)); 263 EXPECT_FALSE(result.end() == result.find(22));
254 EXPECT_TRUE(GetTracker()->DeleteSession(tag2)); 264
255 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag2, &result)); 265 GetTracker()->GetTab(tag2, 1, 21);
266 GetTracker()->GetTab(tag2, 2, 23);
267 GetTracker()->LookupTabNodeIds(tag2, &result);
268 EXPECT_EQ(3U, result.size());
269 EXPECT_FALSE(result.end() == result.find(21));
270 EXPECT_FALSE(result.end() == result.find(22));
271 EXPECT_FALSE(result.end() == result.find(23));
272
273 EXPECT_FALSE(GetTracker()->DeleteSession(tag2));
274 GetTracker()->LookupTabNodeIds(tag2, &result);
275 EXPECT_TRUE(result.empty());
256 } 276 }
257 277
258 TEST_F(SyncedSessionTrackerTest, SessionTracking) { 278 TEST_F(SyncedSessionTrackerTest, SessionTracking) {
259 ASSERT_TRUE(GetTracker()->Empty()); 279 ASSERT_TRUE(GetTracker()->Empty());
260 std::string tag1 = "tag1"; 280 std::string tag1 = "tag1";
261 std::string tag2 = "tag2"; 281 std::string tag2 = "tag2";
262 282
263 // Create some session information that is stale. 283 // Create some session information that is stale.
264 sync_driver::SyncedSession* session1 = GetTracker()->GetSession(tag1); 284 sync_driver::SyncedSession* session1 = GetTracker()->GetSession(tag1);
265 GetTracker()->PutWindowInSession(tag1, 0); 285 GetTracker()->PutWindowInSession(tag1, 0);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 ASSERT_EQ(1U, session2->windows.size()); 328 ASSERT_EQ(1U, session2->windows.size());
309 ASSERT_EQ(1U, session2->windows[2]->tabs.size()); 329 ASSERT_EQ(1U, session2->windows[2]->tabs.size());
310 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); 330 ASSERT_EQ(2U, GetTracker()->num_synced_sessions());
311 ASSERT_EQ(4U, GetTracker()->num_synced_tabs(tag1)); 331 ASSERT_EQ(4U, GetTracker()->num_synced_tabs(tag1));
312 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2)); 332 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2));
313 333
314 // All memory should be properly deallocated by destructor for the 334 // All memory should be properly deallocated by destructor for the
315 // SyncedSessionTracker. 335 // SyncedSessionTracker.
316 } 336 }
317 337
338 TEST_F(SyncedSessionTrackerTest, DeleteForeignTab) {
339 std::string session_tag = "session_tag";
340 int tab_id_1 = 1;
341 int tab_id_2 = 2;
342 int tab_node_id_3 = 3;
343 int tab_node_id_4 = 4;
344 std::set<int> result;
345
346 GetTracker()->GetTab(session_tag, tab_id_1, tab_node_id_3);
347 GetTracker()->GetTab(session_tag, tab_id_1, tab_node_id_4);
348 GetTracker()->GetTab(session_tag, tab_id_2, tab_node_id_3);
349 GetTracker()->GetTab(session_tag, tab_id_2, tab_node_id_4);
350
351 GetTracker()->LookupTabNodeIds(session_tag, &result);
352 EXPECT_EQ(2U, result.size());
353 EXPECT_TRUE(result.find(tab_node_id_3) != result.end());
354 EXPECT_TRUE(result.find(tab_node_id_4) != result.end());
355
356 GetTracker()->DeleteForeignTab(session_tag, tab_node_id_3);
357 GetTracker()->LookupTabNodeIds(session_tag, &result);
358 EXPECT_EQ(1U, result.size());
359 EXPECT_TRUE(result.find(tab_node_id_4) != result.end());
360
361 GetTracker()->DeleteForeignTab(session_tag, tab_node_id_4);
362 GetTracker()->LookupTabNodeIds(session_tag, &result);
363 EXPECT_TRUE(result.empty());
364 }
365
318 } // namespace browser_sync 366 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698