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

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: Fixing comment for zea. 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
« no previous file with comments | « components/sync_sessions/synced_session_tracker.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
74 &sessions, SyncedSessionTracker::PRESENTABLE));
74 GetTracker()->GetSession("tag1"); 75 GetTracker()->GetSession("tag1");
75 GetTracker()->PutWindowInSession("tag1", 0); 76 GetTracker()->PutWindowInSession("tag1", 0);
76 GetTracker()->PutTabInWindow("tag1", 0, 15, 0); 77 GetTracker()->PutTabInWindow("tag1", 0, 15, 0);
77 sessions::SessionTab* tab = GetTracker()->GetTab("tag1", 15, 1); 78 sessions::SessionTab* tab = GetTracker()->GetTab("tag1", 15, 1);
78 ASSERT_TRUE(tab); 79 ASSERT_TRUE(tab);
79 tab->navigations.push_back( 80 tab->navigations.push_back(
80 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(kValidUrl, 81 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(kValidUrl,
81 "title")); 82 "title"));
82 GetTracker()->GetSession("tag2"); 83 GetTracker()->GetSession("tag2");
83 GetTracker()->GetSession("tag3"); 84 GetTracker()->GetSession("tag3");
84 GetTracker()->PutWindowInSession("tag3", 0); 85 GetTracker()->PutWindowInSession("tag3", 0);
85 GetTracker()->PutTabInWindow("tag3", 0, 15, 0); 86 GetTracker()->PutTabInWindow("tag3", 0, 15, 0);
86 tab = GetTracker()->GetTab("tag3", 15, 1); 87 tab = GetTracker()->GetTab("tag3", 15, 1);
87 ASSERT_TRUE(tab); 88 ASSERT_TRUE(tab);
88 tab->navigations.push_back( 89 tab->navigations.push_back(
89 sessions::SerializedNavigationEntryTestHelper::CreateNavigation( 90 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(
90 kInvalidUrl, "title")); 91 kInvalidUrl, "title"));
91 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(&sessions)); 92 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(
93 &sessions, SyncedSessionTracker::PRESENTABLE));
92 // Only the session with a valid window and tab gets returned. 94 // Only the session with a valid window and tab gets returned.
93 ASSERT_EQ(1U, sessions.size()); 95 ASSERT_EQ(1U, sessions.size());
94 ASSERT_EQ("tag1", sessions[0]->session_tag); 96 ASSERT_EQ("tag1", sessions[0]->session_tag);
97
98 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(
99 &sessions, SyncedSessionTracker::RAW));
100 ASSERT_EQ(3U, sessions.size());
95 } 101 }
96 102
97 TEST_F(SyncedSessionTrackerTest, LookupSessionWindows) { 103 TEST_F(SyncedSessionTrackerTest, LookupSessionWindows) {
98 std::vector<const sessions::SessionWindow*> windows; 104 std::vector<const sessions::SessionWindow*> windows;
99 ASSERT_FALSE(GetTracker()->LookupSessionWindows("tag1", &windows)); 105 ASSERT_FALSE(GetTracker()->LookupSessionWindows("tag1", &windows));
100 GetTracker()->GetSession("tag1"); 106 GetTracker()->GetSession("tag1");
101 GetTracker()->PutWindowInSession("tag1", 0); 107 GetTracker()->PutWindowInSession("tag1", 0);
102 GetTracker()->PutWindowInSession("tag1", 2); 108 GetTracker()->PutWindowInSession("tag1", 2);
103 GetTracker()->GetSession("tag2"); 109 GetTracker()->GetSession("tag2");
104 GetTracker()->PutWindowInSession("tag2", 0); 110 GetTracker()->PutWindowInSession("tag2", 0);
(...skipping 21 matching lines...) Expand all
126 const std::string tag3 = "tag3"; 132 const std::string tag3 = "tag3";
127 std::vector<sessions::SessionTab *> tabs1, tabs2; 133 std::vector<sessions::SessionTab *> tabs1, tabs2;
128 sessions::SessionTab* temp_tab; 134 sessions::SessionTab* temp_tab;
129 ASSERT_TRUE(GetTracker()->Empty()); 135 ASSERT_TRUE(GetTracker()->Empty());
130 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 136 ASSERT_EQ(0U, GetTracker()->num_synced_sessions());
131 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1)); 137 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1));
132 tabs1.push_back(GetTracker()->GetTab(tag1, 0, 0)); 138 tabs1.push_back(GetTracker()->GetTab(tag1, 0, 0));
133 tabs1.push_back(GetTracker()->GetTab(tag1, 1, 1)); 139 tabs1.push_back(GetTracker()->GetTab(tag1, 1, 1));
134 tabs1.push_back(GetTracker()->GetTab(tag1, 2, 2)); 140 tabs1.push_back(GetTracker()->GetTab(tag1, 2, 2));
135 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1)); 141 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1));
136 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 142 ASSERT_EQ(1U, GetTracker()->num_synced_sessions());
137 temp_tab = GetTracker()->GetTab(tag1, 0, 0); // Already created. 143 temp_tab = GetTracker()->GetTab(tag1, 0, 0); // Already created.
138 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1)); 144 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1));
139 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 145 ASSERT_EQ(1U, GetTracker()->num_synced_sessions());
140 ASSERT_EQ(tabs1[0], temp_tab); 146 ASSERT_EQ(tabs1[0], temp_tab);
141 tabs2.push_back(GetTracker()->GetTab(tag2, 0, 0)); 147 tabs2.push_back(GetTracker()->GetTab(tag2, 0, 0));
142 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2)); 148 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2));
143 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 149 ASSERT_EQ(2U, GetTracker()->num_synced_sessions());
144 ASSERT_FALSE(GetTracker()->DeleteSession(tag3)); 150 ASSERT_FALSE(GetTracker()->DeleteSession(tag3));
145 151
146 sync_driver::SyncedSession* session = GetTracker()->GetSession(tag1); 152 sync_driver::SyncedSession* session = GetTracker()->GetSession(tag1);
147 sync_driver::SyncedSession* session2 = GetTracker()->GetSession(tag2); 153 sync_driver::SyncedSession* session2 = GetTracker()->GetSession(tag2);
148 sync_driver::SyncedSession* session3 = GetTracker()->GetSession(tag3); 154 sync_driver::SyncedSession* session3 = GetTracker()->GetSession(tag3);
155 session3->device_type = sync_driver::SyncedSession::TYPE_OTHER;
149 ASSERT_EQ(3U, GetTracker()->num_synced_sessions()); 156 ASSERT_EQ(3U, GetTracker()->num_synced_sessions());
150 157
151 ASSERT_TRUE(session); 158 ASSERT_TRUE(session);
152 ASSERT_TRUE(session2); 159 ASSERT_TRUE(session2);
153 ASSERT_TRUE(session3); 160 ASSERT_TRUE(session3);
154 ASSERT_NE(session, session2); 161 ASSERT_NE(session, session2);
155 ASSERT_NE(session2, session3); 162 ASSERT_NE(session2, session3);
156 ASSERT_TRUE(GetTracker()->DeleteSession(tag3)); 163 ASSERT_TRUE(GetTracker()->DeleteSession(tag3));
157 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); 164 ASSERT_EQ(2U, GetTracker()->num_synced_sessions());
158 165
(...skipping 10 matching lines...) Expand all
169 ASSERT_EQ(static_cast<const sessions::SessionTab*>(NULL), tab_ptr); 176 ASSERT_EQ(static_cast<const sessions::SessionTab*>(NULL), tab_ptr);
170 177
171 std::vector<const sessions::SessionWindow*> windows; 178 std::vector<const sessions::SessionWindow*> windows;
172 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag1, &windows)); 179 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag1, &windows));
173 ASSERT_EQ(1U, windows.size()); 180 ASSERT_EQ(1U, windows.size());
174 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag2, &windows)); 181 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag2, &windows));
175 ASSERT_EQ(0U, windows.size()); 182 ASSERT_EQ(0U, windows.size());
176 183
177 // The sessions don't have valid tabs, lookup should not succeed. 184 // The sessions don't have valid tabs, lookup should not succeed.
178 std::vector<const sync_driver::SyncedSession*> sessions; 185 std::vector<const sync_driver::SyncedSession*> sessions;
179 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions)); 186 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(
187 &sessions, SyncedSessionTracker::PRESENTABLE));
188 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(
189 &sessions, SyncedSessionTracker::RAW));
190 ASSERT_EQ(2U, sessions.size());
180 191
181 GetTracker()->Clear(); 192 GetTracker()->Clear();
182 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1)); 193 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1));
183 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag2)); 194 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag2));
184 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 195 ASSERT_EQ(0U, GetTracker()->num_synced_sessions());
185 } 196 }
186 197
187 TEST_F(SyncedSessionTrackerTest, ManyGetTabs) { 198 TEST_F(SyncedSessionTrackerTest, ManyGetTabs) {
188 ASSERT_TRUE(GetTracker()->Empty()); 199 ASSERT_TRUE(GetTracker()->Empty());
189 const int kMaxSessions = 10; 200 const int kMaxSessions = 10;
(...skipping 13 matching lines...) Expand all
203 } 214 }
204 215
205 TEST_F(SyncedSessionTrackerTest, LookupTabNodeIds) { 216 TEST_F(SyncedSessionTrackerTest, LookupTabNodeIds) {
206 std::set<int> result; 217 std::set<int> result;
207 std::string tag1 = "session1"; 218 std::string tag1 = "session1";
208 std::string tag2 = "session2"; 219 std::string tag2 = "session2";
209 std::string tag3 = "session3"; 220 std::string tag3 = "session3";
210 221
211 GetTracker()->GetTab(tag1, 1, 1); 222 GetTracker()->GetTab(tag1, 1, 1);
212 GetTracker()->GetTab(tag1, 2, 2); 223 GetTracker()->GetTab(tag1, 2, 2);
213 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); 224 GetTracker()->LookupTabNodeIds(tag1, &result);
214 EXPECT_EQ(2U, result.size()); 225 EXPECT_EQ(2U, result.size());
215 EXPECT_FALSE(result.end() == result.find(1)); 226 EXPECT_FALSE(result.end() == result.find(1));
216 EXPECT_FALSE(result.end() == result.find(2)); 227 EXPECT_FALSE(result.end() == result.find(2));
217 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag2, &result)); 228 GetTracker()->LookupTabNodeIds(tag2, &result);
229 EXPECT_TRUE(result.empty());
218 230
219 GetTracker()->PutWindowInSession(tag1, 0); 231 GetTracker()->PutWindowInSession(tag1, 0);
220 GetTracker()->PutTabInWindow(tag1, 0, 3, 0); 232 GetTracker()->PutTabInWindow(tag1, 0, 3, 0);
221 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); 233 GetTracker()->LookupTabNodeIds(tag1, &result);
222 EXPECT_EQ(2U, result.size()); 234 EXPECT_EQ(2U, result.size());
223 235
224 GetTracker()->GetTab(tag1, 3, 3); 236 GetTracker()->GetTab(tag1, 3, 3);
225 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); 237 GetTracker()->LookupTabNodeIds(tag1, &result);
226 EXPECT_EQ(3U, result.size()); 238 EXPECT_EQ(3U, result.size());
227 EXPECT_FALSE(result.end() == result.find(3)); 239 EXPECT_FALSE(result.end() == result.find(3));
228 240
229 GetTracker()->GetTab(tag2, 1, 21); 241 GetTracker()->GetTab(tag2, 1, 21);
230 GetTracker()->GetTab(tag2, 2, 22); 242 GetTracker()->GetTab(tag2, 2, 22);
231 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result)); 243 GetTracker()->LookupTabNodeIds(tag2, &result);
232 EXPECT_EQ(2U, result.size()); 244 EXPECT_EQ(2U, result.size());
233 EXPECT_FALSE(result.end() == result.find(21)); 245 EXPECT_FALSE(result.end() == result.find(21));
234 EXPECT_FALSE(result.end() == result.find(22)); 246 EXPECT_FALSE(result.end() == result.find(22));
235 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); 247 GetTracker()->LookupTabNodeIds(tag1, &result);
236 EXPECT_EQ(3U, result.size()); 248 EXPECT_EQ(3U, result.size());
237 EXPECT_FALSE(result.end() == result.find(1)); 249 EXPECT_FALSE(result.end() == result.find(1));
238 EXPECT_FALSE(result.end() == result.find(2)); 250 EXPECT_FALSE(result.end() == result.find(2));
239 251
240 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result)); 252 GetTracker()->LookupTabNodeIds(tag3, &result);
253 EXPECT_TRUE(result.empty());
241 GetTracker()->PutWindowInSession(tag3, 1); 254 GetTracker()->PutWindowInSession(tag3, 1);
242 GetTracker()->PutTabInWindow(tag3, 1, 5, 0); 255 GetTracker()->PutTabInWindow(tag3, 1, 5, 0);
243 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag3, &result)); 256 GetTracker()->LookupTabNodeIds(tag3, &result);
244 EXPECT_TRUE(result.empty()); 257 EXPECT_TRUE(result.empty());
245 EXPECT_TRUE(GetTracker()->DeleteSession(tag3)); 258 EXPECT_FALSE(GetTracker()->DeleteSession(tag3));
246 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result)); 259 GetTracker()->LookupTabNodeIds(tag3, &result);
260 EXPECT_TRUE(result.empty());
247 261
248 EXPECT_TRUE(GetTracker()->DeleteSession(tag1)); 262 EXPECT_FALSE(GetTracker()->DeleteSession(tag1));
249 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag1, &result)); 263 GetTracker()->LookupTabNodeIds(tag1, &result);
250 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result)); 264 EXPECT_TRUE(result.empty());
265 GetTracker()->LookupTabNodeIds(tag2, &result);
251 EXPECT_EQ(2U, result.size()); 266 EXPECT_EQ(2U, result.size());
252 EXPECT_FALSE(result.end() == result.find(21)); 267 EXPECT_FALSE(result.end() == result.find(21));
253 EXPECT_FALSE(result.end() == result.find(22)); 268 EXPECT_FALSE(result.end() == result.find(22));
254 EXPECT_TRUE(GetTracker()->DeleteSession(tag2)); 269
255 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag2, &result)); 270 GetTracker()->GetTab(tag2, 1, 21);
271 GetTracker()->GetTab(tag2, 2, 23);
272 GetTracker()->LookupTabNodeIds(tag2, &result);
273 EXPECT_EQ(3U, result.size());
274 EXPECT_FALSE(result.end() == result.find(21));
275 EXPECT_FALSE(result.end() == result.find(22));
276 EXPECT_FALSE(result.end() == result.find(23));
277
278 EXPECT_FALSE(GetTracker()->DeleteSession(tag2));
279 GetTracker()->LookupTabNodeIds(tag2, &result);
280 EXPECT_TRUE(result.empty());
256 } 281 }
257 282
258 TEST_F(SyncedSessionTrackerTest, SessionTracking) { 283 TEST_F(SyncedSessionTrackerTest, SessionTracking) {
259 ASSERT_TRUE(GetTracker()->Empty()); 284 ASSERT_TRUE(GetTracker()->Empty());
260 std::string tag1 = "tag1"; 285 std::string tag1 = "tag1";
261 std::string tag2 = "tag2"; 286 std::string tag2 = "tag2";
262 287
263 // Create some session information that is stale. 288 // Create some session information that is stale.
264 sync_driver::SyncedSession* session1 = GetTracker()->GetSession(tag1); 289 sync_driver::SyncedSession* session1 = GetTracker()->GetSession(tag1);
265 GetTracker()->PutWindowInSession(tag1, 0); 290 GetTracker()->PutWindowInSession(tag1, 0);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 ASSERT_EQ(1U, session2->windows.size()); 333 ASSERT_EQ(1U, session2->windows.size());
309 ASSERT_EQ(1U, session2->windows[2]->tabs.size()); 334 ASSERT_EQ(1U, session2->windows[2]->tabs.size());
310 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); 335 ASSERT_EQ(2U, GetTracker()->num_synced_sessions());
311 ASSERT_EQ(4U, GetTracker()->num_synced_tabs(tag1)); 336 ASSERT_EQ(4U, GetTracker()->num_synced_tabs(tag1));
312 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2)); 337 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2));
313 338
314 // All memory should be properly deallocated by destructor for the 339 // All memory should be properly deallocated by destructor for the
315 // SyncedSessionTracker. 340 // SyncedSessionTracker.
316 } 341 }
317 342
343 TEST_F(SyncedSessionTrackerTest, DeleteForeignTab) {
344 std::string session_tag = "session_tag";
345 int tab_id_1 = 1;
346 int tab_id_2 = 2;
347 int tab_node_id_3 = 3;
348 int tab_node_id_4 = 4;
349 std::set<int> result;
350
351 GetTracker()->GetTab(session_tag, tab_id_1, tab_node_id_3);
352 GetTracker()->GetTab(session_tag, tab_id_1, tab_node_id_4);
353 GetTracker()->GetTab(session_tag, tab_id_2, tab_node_id_3);
354 GetTracker()->GetTab(session_tag, tab_id_2, tab_node_id_4);
355
356 GetTracker()->LookupTabNodeIds(session_tag, &result);
357 EXPECT_EQ(2U, result.size());
358 EXPECT_TRUE(result.find(tab_node_id_3) != result.end());
359 EXPECT_TRUE(result.find(tab_node_id_4) != result.end());
360
361 GetTracker()->DeleteForeignTab(session_tag, tab_node_id_3);
362 GetTracker()->LookupTabNodeIds(session_tag, &result);
363 EXPECT_EQ(1U, result.size());
364 EXPECT_TRUE(result.find(tab_node_id_4) != result.end());
365
366 GetTracker()->DeleteForeignTab(session_tag, tab_node_id_4);
367 GetTracker()->LookupTabNodeIds(session_tag, &result);
368 EXPECT_TRUE(result.empty());
369 }
370
318 } // namespace browser_sync 371 } // namespace browser_sync
OLDNEW
« no previous file with comments | « components/sync_sessions/synced_session_tracker.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698