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 "components/sync_sessions/synced_session_tracker.h" | 5 #include "components/sync_sessions/synced_session_tracker.h" |
6 | 6 |
7 #include "base/rand_util.h" | 7 #include "base/rand_util.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "components/sessions/core/serialized_navigation_entry_test_helper.h" | 10 #include "components/sessions/core/serialized_navigation_entry_test_helper.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 TEST_F(SyncedSessionTrackerTest, GetTabUnmapped) { | 54 TEST_F(SyncedSessionTrackerTest, GetTabUnmapped) { |
55 sessions::SessionTab* tab = GetTracker()->GetTab(kTag, 0); | 55 sessions::SessionTab* tab = GetTracker()->GetTab(kTag, 0); |
56 ASSERT_EQ(tab, GetTracker()->GetTab(kTag, 0)); | 56 ASSERT_EQ(tab, GetTracker()->GetTab(kTag, 0)); |
57 // Should clean up memory on its own. | 57 // Should clean up memory on its own. |
58 } | 58 } |
59 | 59 |
60 TEST_F(SyncedSessionTrackerTest, PutWindowInSession) { | 60 TEST_F(SyncedSessionTrackerTest, PutWindowInSession) { |
61 GetTracker()->PutWindowInSession(kTag, 0); | 61 GetTracker()->PutWindowInSession(kTag, 0); |
62 SyncedSession* session = GetTracker()->GetSession(kTag); | 62 SyncedSession* session = GetTracker()->GetSession(kTag); |
63 ASSERT_EQ(1U, session->windows.size()); | 63 ASSERT_EQ(1U, session->windows.size()); |
| 64 |
| 65 // Doing it again should have no effect. |
| 66 GetTracker()->PutWindowInSession(kTag, 0); |
| 67 ASSERT_EQ(1U, session->windows.size()); |
64 // Should clean up memory on its own. | 68 // Should clean up memory on its own. |
65 } | 69 } |
66 | 70 |
67 TEST_F(SyncedSessionTrackerTest, PutTabInWindow) { | 71 TEST_F(SyncedSessionTrackerTest, PutTabInWindow) { |
68 GetTracker()->PutWindowInSession(kTag, 10); | 72 GetTracker()->PutWindowInSession(kTag, 10); |
69 GetTracker()->PutTabInWindow(kTag, 10, 15); // win id 10, tab id 15 | 73 GetTracker()->PutTabInWindow(kTag, 10, 15); // win id 10, tab id 15 |
70 SyncedSession* session = GetTracker()->GetSession(kTag); | 74 SyncedSession* session = GetTracker()->GetSession(kTag); |
71 ASSERT_EQ(1U, session->windows.size()); | 75 ASSERT_EQ(1U, session->windows.size()); |
72 ASSERT_EQ(1U, session->windows[10]->wrapped_window.tabs.size()); | 76 ASSERT_EQ(1U, session->windows[10]->wrapped_window.tabs.size()); |
73 ASSERT_EQ(GetTracker()->GetTab(kTag, 15), | 77 ASSERT_EQ(GetTracker()->GetTab(kTag, 15), |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 GetTracker()->ResetSessionTracking(kTag); | 321 GetTracker()->ResetSessionTracking(kTag); |
318 GetTracker()->PutWindowInSession(kTag, 0); | 322 GetTracker()->PutWindowInSession(kTag, 0); |
319 GetTracker()->PutTabInWindow(kTag, 0, 0); | 323 GetTracker()->PutTabInWindow(kTag, 0, 0); |
320 // Tab 1 is closed. | 324 // Tab 1 is closed. |
321 GetTracker()->PutTabInWindow(kTag, 0, 2); // No longer unmapped. | 325 GetTracker()->PutTabInWindow(kTag, 0, 2); // No longer unmapped. |
322 // Tab 3 was unmapped and does not get used. | 326 // Tab 3 was unmapped and does not get used. |
323 GetTracker()->PutTabInWindow(kTag, 0, 4); // Moved from window 1. | 327 GetTracker()->PutTabInWindow(kTag, 0, 4); // Moved from window 1. |
324 // Window 1 was closed, along with tab 5. | 328 // Window 1 was closed, along with tab 5. |
325 GetTracker()->PutTabInWindow(kTag, 0, 6); // No longer unmapped. | 329 GetTracker()->PutTabInWindow(kTag, 0, 6); // No longer unmapped. |
326 // Session 2 should not be affected. | 330 // Session 2 should not be affected. |
327 GetTracker()->CleanupForeignSession(kTag); | 331 GetTracker()->CleanupSession(kTag); |
328 | 332 |
329 // Verify that only those parts of the session not owned have been removed. | 333 // Verify that only those parts of the session not owned have been removed. |
330 ASSERT_EQ(1U, session1->windows.size()); | 334 ASSERT_EQ(1U, session1->windows.size()); |
331 ASSERT_EQ(4U, session1->windows[0]->wrapped_window.tabs.size()); | 335 ASSERT_EQ(4U, session1->windows[0]->wrapped_window.tabs.size()); |
332 ASSERT_EQ(1U, session2->windows.size()); | 336 ASSERT_EQ(1U, session2->windows.size()); |
333 ASSERT_EQ(1U, session2->windows[2]->wrapped_window.tabs.size()); | 337 ASSERT_EQ(1U, session2->windows[2]->wrapped_window.tabs.size()); |
334 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); | 338 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); |
335 ASSERT_EQ(4U, GetTracker()->num_synced_tabs(kTag)); | 339 ASSERT_EQ(4U, GetTracker()->num_synced_tabs(kTag)); |
336 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(kTag2)); | 340 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(kTag2)); |
337 | 341 |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 // Now that it's been mapped, it should be accessible both via the | 557 // Now that it's been mapped, it should be accessible both via the |
554 // GetSession as well as GetTab. | 558 // GetSession as well as GetTab. |
555 SyncedSession* session = GetTracker()->GetSession(kTag); | 559 SyncedSession* session = GetTracker()->GetSession(kTag); |
556 ASSERT_EQ(GetTracker()->GetTab(kTag, kTab2), | 560 ASSERT_EQ(GetTracker()->GetTab(kTag, kTab2), |
557 session->windows[kWindow1]->wrapped_window.tabs[0].get()); | 561 session->windows[kWindow1]->wrapped_window.tabs[0].get()); |
558 ASSERT_EQ(session->tab_node_ids.size(), | 562 ASSERT_EQ(session->tab_node_ids.size(), |
559 session->tab_node_ids.count(kTabNode)); | 563 session->tab_node_ids.count(kTabNode)); |
560 ASSERT_EQ(1U, GetTabNodePool()->Capacity()); | 564 ASSERT_EQ(1U, GetTabNodePool()->Capacity()); |
561 } | 565 } |
562 | 566 |
| 567 TEST_F(SyncedSessionTrackerTest, ReassociateTabMapMismatch) { |
| 568 std::set<int> free_node_ids; |
| 569 |
| 570 // First create the old tab in an unmapped state. |
| 571 GetTracker()->SetLocalSessionTag(kTag); |
| 572 EXPECT_FALSE(GetTracker()->IsLocalTabNodeAssociated(kTabNode)); |
| 573 GetTracker()->ReassociateLocalTab(kTabNode, kTab1); |
| 574 EXPECT_TRUE(GetTracker()->IsLocalTabNodeAssociated(kTabNode)); |
| 575 EXPECT_TRUE(GetTracker()->IsTabUnmappedForTesting(kTab1)); |
| 576 |
| 577 // Map an unseen tab to a window, then reassociate the existing tab to the |
| 578 // mapped tab id. |
| 579 GetTracker()->ResetSessionTracking(kTag); |
| 580 EXPECT_TRUE(GetTracker()->IsLocalTabNodeAssociated(kTabNode)); |
| 581 GetTracker()->PutWindowInSession(kTag, kWindow1); |
| 582 GetTracker()->PutTabInWindow(kTag, kWindow1, kTab2); |
| 583 GetTracker()->CleanupLocalTabs(&free_node_ids); |
| 584 EXPECT_FALSE(GetTracker()->IsTabUnmappedForTesting(kTab1)); |
| 585 EXPECT_FALSE(GetTracker()->IsTabUnmappedForTesting(kTab2)); |
| 586 GetTracker()->ReassociateLocalTab(kTabNode, kTab2); |
| 587 EXPECT_TRUE(free_node_ids.empty()); |
| 588 EXPECT_FALSE(GetTracker()->IsTabUnmappedForTesting(kTab1)); |
| 589 EXPECT_FALSE(GetTracker()->IsTabUnmappedForTesting(kTab2)); |
| 590 |
| 591 // Now that it's been mapped, it should be accessible both via the |
| 592 // GetSession as well as GetTab. |
| 593 SyncedSession* session = GetTracker()->GetSession(kTag); |
| 594 ASSERT_EQ(GetTracker()->GetTab(kTag, kTab2), |
| 595 session->windows[kWindow1]->wrapped_window.tabs[0].get()); |
| 596 ASSERT_EQ(session->tab_node_ids.size(), |
| 597 session->tab_node_ids.count(kTabNode)); |
| 598 ASSERT_EQ(1U, GetTabNodePool()->Capacity()); |
| 599 } |
| 600 |
563 } // namespace sync_sessions | 601 } // namespace sync_sessions |
OLD | NEW |