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

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: 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 142 ASSERT_EQ(0U, 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(0U, 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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); 241 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result));
236 EXPECT_EQ(3U, result.size()); 242 EXPECT_EQ(3U, result.size());
237 EXPECT_FALSE(result.end() == result.find(1)); 243 EXPECT_FALSE(result.end() == result.find(1));
238 EXPECT_FALSE(result.end() == result.find(2)); 244 EXPECT_FALSE(result.end() == result.find(2));
239 245
240 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result)); 246 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result));
241 GetTracker()->PutWindowInSession(tag3, 1); 247 GetTracker()->PutWindowInSession(tag3, 1);
242 GetTracker()->PutTabInWindow(tag3, 1, 5, 0); 248 GetTracker()->PutTabInWindow(tag3, 1, 5, 0);
243 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag3, &result)); 249 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag3, &result));
244 EXPECT_TRUE(result.empty()); 250 EXPECT_TRUE(result.empty());
245 EXPECT_TRUE(GetTracker()->DeleteSession(tag3)); 251 EXPECT_FALSE(GetTracker()->DeleteSession(tag3));
246 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result)); 252 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result));
247 253
248 EXPECT_TRUE(GetTracker()->DeleteSession(tag1)); 254 EXPECT_FALSE(GetTracker()->DeleteSession(tag1));
249 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag1, &result)); 255 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag1, &result));
250 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result)); 256 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result));
251 EXPECT_EQ(2U, result.size()); 257 EXPECT_EQ(2U, result.size());
252 EXPECT_FALSE(result.end() == result.find(21)); 258 EXPECT_FALSE(result.end() == result.find(21));
253 EXPECT_FALSE(result.end() == result.find(22)); 259 EXPECT_FALSE(result.end() == result.find(22));
254 EXPECT_TRUE(GetTracker()->DeleteSession(tag2)); 260
261 GetTracker()->GetTab(tag2, 1, 21);
262 GetTracker()->GetTab(tag2, 2, 23);
263 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result));
264 EXPECT_EQ(3U, result.size());
265 EXPECT_FALSE(result.end() == result.find(21));
266 EXPECT_FALSE(result.end() == result.find(22));
267 EXPECT_FALSE(result.end() == result.find(23));
268
269 EXPECT_FALSE(GetTracker()->DeleteSession(tag2));
255 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag2, &result)); 270 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag2, &result));
256 } 271 }
257 272
258 TEST_F(SyncedSessionTrackerTest, SessionTracking) { 273 TEST_F(SyncedSessionTrackerTest, SessionTracking) {
259 ASSERT_TRUE(GetTracker()->Empty()); 274 ASSERT_TRUE(GetTracker()->Empty());
260 std::string tag1 = "tag1"; 275 std::string tag1 = "tag1";
261 std::string tag2 = "tag2"; 276 std::string tag2 = "tag2";
262 277
263 // Create some session information that is stale. 278 // Create some session information that is stale.
264 sync_driver::SyncedSession* session1 = GetTracker()->GetSession(tag1); 279 sync_driver::SyncedSession* session1 = GetTracker()->GetSession(tag1);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 ASSERT_EQ(1U, session2->windows.size()); 323 ASSERT_EQ(1U, session2->windows.size());
309 ASSERT_EQ(1U, session2->windows[2]->tabs.size()); 324 ASSERT_EQ(1U, session2->windows[2]->tabs.size());
310 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); 325 ASSERT_EQ(2U, GetTracker()->num_synced_sessions());
311 ASSERT_EQ(4U, GetTracker()->num_synced_tabs(tag1)); 326 ASSERT_EQ(4U, GetTracker()->num_synced_tabs(tag1));
312 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2)); 327 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2));
313 328
314 // All memory should be properly deallocated by destructor for the 329 // All memory should be properly deallocated by destructor for the
315 // SyncedSessionTracker. 330 // SyncedSessionTracker.
316 } 331 }
317 332
333 TEST_F(SyncedSessionTrackerTest, TryDeleteTabUnowned) {
334 std::string session_tag = "session_tag";
335 int tab_id = 1;
336 int node_id = 2;
337 int wrong = 3;
338
339 // Make sure TryDeleteTab doesn't crash when nothing exists.
340 GetTracker()->TryDeleteTab(session_tag, wrong, wrong);
341
342 GetTracker()->GetTab(session_tag, tab_id, node_id);
343 EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
344 GetTracker()->TryDeleteTab("wrong session tag", tab_id, node_id);
345 EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
346 GetTracker()->TryDeleteTab(session_tag, wrong, node_id);
347 EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
348 GetTracker()->TryDeleteTab(session_tag, tab_id, wrong);
349 EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
350 GetTracker()->TryDeleteTab(session_tag, tab_id, node_id);
351 EXPECT_EQ(0U, GetTracker()->num_synced_tabs(session_tag));
352 }
353
354 TEST_F(SyncedSessionTrackerTest, TryDeleteTabUnownedWithSharedIds) {
355 std::string session_tag = "session_tag";
356 int tab_id = 1;
357 int tab_node_id_2 = 2;
358 int tab_node_id_3 = 3;
359 std::set<int> result;
360
361 GetTracker()->GetTab(session_tag, tab_id, tab_node_id_2);
362 GetTracker()->GetTab(session_tag, tab_id, tab_node_id_3);
363 GetTracker()->LookupTabNodeIds(session_tag, &result);
364 EXPECT_EQ(2U, result.size());
365
366 GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_3);
367 EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
368 GetTracker()->LookupTabNodeIds(session_tag, &result);
369 EXPECT_EQ(1U, result.size());
370 EXPECT_EQ(tab_node_id_2, *result.begin());
371 GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_2);
372 EXPECT_EQ(0U, GetTracker()->num_synced_tabs(session_tag));
373
374 // Repeat same as above, only delete in opposite order.
375 GetTracker()->GetTab(session_tag, tab_id, tab_node_id_2);
376 GetTracker()->GetTab(session_tag, tab_id, tab_node_id_3);
377 GetTracker()->LookupTabNodeIds(session_tag, &result);
378 EXPECT_EQ(2U, result.size());
379
380 GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_2);
381 EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
382 GetTracker()->LookupTabNodeIds(session_tag, &result);
383 EXPECT_EQ(1U, result.size());
384 EXPECT_EQ(tab_node_id_3, *result.begin());
385 GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_3);
386 EXPECT_EQ(0U, GetTracker()->num_synced_tabs(session_tag));
387 }
388
389 TEST_F(SyncedSessionTrackerTest, TryDeleteTabOwned) {
390 std::string session_tag = "sessoin_tag";
391 int tab_id = 1;
392 int tab_node_id_2 = 2;
393 int tab_node_id_3 = 3;
394 int tab_index = 4;
395 int window_id = 5;
396 std::set<int> result;
397
398 GetTracker()->GetTab(session_tag, tab_id, tab_node_id_2);
399 GetTracker()->GetTab(session_tag, tab_id, tab_node_id_3);
400 GetTracker()->PutWindowInSession(session_tag, window_id);
401 GetTracker()->PutTabInWindow(session_tag, window_id, tab_id, tab_index);
402 EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
403 GetTracker()->LookupTabNodeIds(session_tag, &result);
404 EXPECT_EQ(2U, result.size());
405
406 GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_3);
407 EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
408 GetTracker()->LookupTabNodeIds(session_tag, &result);
409 EXPECT_EQ(1U, result.size());
410 EXPECT_EQ(tab_node_id_2, *result.begin());
411
412 // Tab cannot be deleted, still owned. However, no valid nodes.
413 GetTracker()->TryDeleteTab(session_tag, tab_id, tab_node_id_2);
414 EXPECT_EQ(1U, GetTracker()->num_synced_tabs(session_tag));
415 GetTracker()->LookupTabNodeIds(session_tag, &result);
416 EXPECT_EQ(0U, result.size());
417 }
418
318 } // namespace browser_sync 419 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698