| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |