| 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" |
| 11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| 12 #include "chrome/browser/sync/glue/synced_session_tracker.h" | 12 #include "chrome/browser/sync/glue/synced_session_tracker.h" |
| 13 #include "components/sessions/core/serialized_navigation_entry_test_helper.h" | 13 #include "components/sessions/core/serialized_navigation_entry_test_helper.h" |
| 14 #include "components/sessions/core/session_types.h" | 14 #include "components/sessions/core/session_types.h" |
| 15 #include "components/sync_sessions/fake_sync_sessions_client.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 17 |
| 17 namespace browser_sync { | 18 namespace browser_sync { |
| 18 | 19 |
| 19 typedef testing::Test SyncedSessionTrackerTest; | 20 namespace { |
| 21 |
| 22 const std::string kValidUrl = "http://www.example.com"; |
| 23 const std::string kInvalidUrl = "invalid.url"; |
| 24 |
| 25 } // namespace |
| 26 |
| 27 class SyncedSessionTrackerTest : public testing::Test { |
| 28 public: |
| 29 SyncedSessionTrackerTest() : tracker_(&sessions_client_) {} |
| 30 ~SyncedSessionTrackerTest() override {} |
| 31 |
| 32 SyncedSessionTracker* GetTracker() { return &tracker_; } |
| 33 |
| 34 private: |
| 35 sync_sessions::FakeSyncSessionsClient sessions_client_; |
| 36 SyncedSessionTracker tracker_; |
| 37 }; |
| 20 | 38 |
| 21 TEST_F(SyncedSessionTrackerTest, GetSession) { | 39 TEST_F(SyncedSessionTrackerTest, GetSession) { |
| 22 SyncedSessionTracker tracker; | 40 sync_driver::SyncedSession* session1 = GetTracker()->GetSession("tag"); |
| 23 sync_driver::SyncedSession* session1 = tracker.GetSession("tag"); | 41 sync_driver::SyncedSession* session2 = GetTracker()->GetSession("tag2"); |
| 24 sync_driver::SyncedSession* session2 = tracker.GetSession("tag2"); | 42 ASSERT_EQ(session1, GetTracker()->GetSession("tag")); |
| 25 ASSERT_EQ(session1, tracker.GetSession("tag")); | |
| 26 ASSERT_NE(session1, session2); | 43 ASSERT_NE(session1, session2); |
| 27 // Should clean up memory on its own. | 44 // Should clean up memory on its own. |
| 28 } | 45 } |
| 29 | 46 |
| 30 TEST_F(SyncedSessionTrackerTest, GetTabUnmapped) { | 47 TEST_F(SyncedSessionTrackerTest, GetTabUnmapped) { |
| 31 SyncedSessionTracker tracker; | 48 sessions::SessionTab* tab = GetTracker()->GetTab("tag", 0, 0); |
| 32 sessions::SessionTab* tab = tracker.GetTab("tag", 0, 0); | 49 ASSERT_EQ(tab, GetTracker()->GetTab("tag", 0, 0)); |
| 33 ASSERT_EQ(tab, tracker.GetTab("tag", 0, 0)); | |
| 34 // Should clean up memory on its own. | 50 // Should clean up memory on its own. |
| 35 } | 51 } |
| 36 | 52 |
| 37 TEST_F(SyncedSessionTrackerTest, PutWindowInSession) { | 53 TEST_F(SyncedSessionTrackerTest, PutWindowInSession) { |
| 38 SyncedSessionTracker tracker; | 54 GetTracker()->PutWindowInSession("tag", 0); |
| 39 tracker.PutWindowInSession("tag", 0); | 55 sync_driver::SyncedSession* session = GetTracker()->GetSession("tag"); |
| 40 sync_driver::SyncedSession* session = tracker.GetSession("tag"); | |
| 41 ASSERT_EQ(1U, session->windows.size()); | 56 ASSERT_EQ(1U, session->windows.size()); |
| 42 // Should clean up memory on its own. | 57 // Should clean up memory on its own. |
| 43 } | 58 } |
| 44 | 59 |
| 45 TEST_F(SyncedSessionTrackerTest, PutTabInWindow) { | 60 TEST_F(SyncedSessionTrackerTest, PutTabInWindow) { |
| 46 SyncedSessionTracker tracker; | 61 GetTracker()->PutWindowInSession("tag", 10); |
| 47 tracker.PutWindowInSession("tag", 10); | 62 GetTracker()->PutTabInWindow("tag", 10, 15, |
| 48 tracker.PutTabInWindow("tag", 10, 15, 0); // win id 10, tab id 15, tab ind 0. | 63 0); // win id 10, tab id 15, tab ind 0. |
| 49 sync_driver::SyncedSession* session = tracker.GetSession("tag"); | 64 sync_driver::SyncedSession* session = GetTracker()->GetSession("tag"); |
| 50 ASSERT_EQ(1U, session->windows.size()); | 65 ASSERT_EQ(1U, session->windows.size()); |
| 51 ASSERT_EQ(1U, session->windows[10]->tabs.size()); | 66 ASSERT_EQ(1U, session->windows[10]->tabs.size()); |
| 52 ASSERT_EQ(tracker.GetTab("tag", 15, 1), session->windows[10]->tabs[0]); | 67 ASSERT_EQ(GetTracker()->GetTab("tag", 15, 1), session->windows[10]->tabs[0]); |
| 53 // Should clean up memory on its own. | 68 // Should clean up memory on its own. |
| 54 } | 69 } |
| 55 | 70 |
| 56 TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) { | 71 TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) { |
| 57 SyncedSessionTracker tracker; | |
| 58 std::vector<const sync_driver::SyncedSession*> sessions; | 72 std::vector<const sync_driver::SyncedSession*> sessions; |
| 59 ASSERT_FALSE(tracker.LookupAllForeignSessions(&sessions)); | 73 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions)); |
| 60 tracker.GetSession("tag1"); | 74 GetTracker()->GetSession("tag1"); |
| 61 tracker.GetSession("tag2"); | 75 GetTracker()->PutWindowInSession("tag1", 0); |
| 62 tracker.PutWindowInSession("tag1", 0); | 76 GetTracker()->PutTabInWindow("tag1", 0, 15, 0); |
| 63 tracker.PutTabInWindow("tag1", 0, 15, 0); | 77 sessions::SessionTab* tab = GetTracker()->GetTab("tag1", 15, 1); |
| 64 sessions::SessionTab* tab = tracker.GetTab("tag1", 15, 1); | 78 ASSERT_TRUE(tab); |
| 79 tab->navigations.push_back( |
| 80 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(kValidUrl, |
| 81 "title")); |
| 82 GetTracker()->GetSession("tag2"); |
| 83 GetTracker()->GetSession("tag3"); |
| 84 GetTracker()->PutWindowInSession("tag3", 0); |
| 85 GetTracker()->PutTabInWindow("tag3", 0, 15, 0); |
| 86 tab = GetTracker()->GetTab("tag3", 15, 1); |
| 65 ASSERT_TRUE(tab); | 87 ASSERT_TRUE(tab); |
| 66 tab->navigations.push_back( | 88 tab->navigations.push_back( |
| 67 sessions::SerializedNavigationEntryTestHelper::CreateNavigation( | 89 sessions::SerializedNavigationEntryTestHelper::CreateNavigation( |
| 68 "bla://valid_url", "title")); | 90 kInvalidUrl, "title")); |
| 69 ASSERT_TRUE(tracker.LookupAllForeignSessions(&sessions)); | 91 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(&sessions)); |
| 70 // Only the session with a valid window and tab gets returned. | 92 // Only the session with a valid window and tab gets returned. |
| 71 ASSERT_EQ(1U, sessions.size()); | 93 ASSERT_EQ(1U, sessions.size()); |
| 72 ASSERT_EQ("tag1", sessions[0]->session_tag); | 94 ASSERT_EQ("tag1", sessions[0]->session_tag); |
| 73 } | 95 } |
| 74 | 96 |
| 75 TEST_F(SyncedSessionTrackerTest, LookupSessionWindows) { | 97 TEST_F(SyncedSessionTrackerTest, LookupSessionWindows) { |
| 76 SyncedSessionTracker tracker; | |
| 77 std::vector<const sessions::SessionWindow*> windows; | 98 std::vector<const sessions::SessionWindow*> windows; |
| 78 ASSERT_FALSE(tracker.LookupSessionWindows("tag1", &windows)); | 99 ASSERT_FALSE(GetTracker()->LookupSessionWindows("tag1", &windows)); |
| 79 tracker.GetSession("tag1"); | 100 GetTracker()->GetSession("tag1"); |
| 80 tracker.PutWindowInSession("tag1", 0); | 101 GetTracker()->PutWindowInSession("tag1", 0); |
| 81 tracker.PutWindowInSession("tag1", 2); | 102 GetTracker()->PutWindowInSession("tag1", 2); |
| 82 tracker.GetSession("tag2"); | 103 GetTracker()->GetSession("tag2"); |
| 83 tracker.PutWindowInSession("tag2", 0); | 104 GetTracker()->PutWindowInSession("tag2", 0); |
| 84 tracker.PutWindowInSession("tag2", 2); | 105 GetTracker()->PutWindowInSession("tag2", 2); |
| 85 ASSERT_TRUE(tracker.LookupSessionWindows("tag1", &windows)); | 106 ASSERT_TRUE(GetTracker()->LookupSessionWindows("tag1", &windows)); |
| 86 ASSERT_EQ(2U, windows.size()); // Only windows from tag1 session. | 107 ASSERT_EQ(2U, windows.size()); // Only windows from tag1 session. |
| 87 ASSERT_NE((sessions::SessionWindow*)nullptr, windows[0]); | 108 ASSERT_NE((sessions::SessionWindow*)nullptr, windows[0]); |
| 88 ASSERT_NE((sessions::SessionWindow*)nullptr, windows[1]); | 109 ASSERT_NE((sessions::SessionWindow*)nullptr, windows[1]); |
| 89 ASSERT_NE(windows[1], windows[0]); | 110 ASSERT_NE(windows[1], windows[0]); |
| 90 } | 111 } |
| 91 | 112 |
| 92 TEST_F(SyncedSessionTrackerTest, LookupSessionTab) { | 113 TEST_F(SyncedSessionTrackerTest, LookupSessionTab) { |
| 93 SyncedSessionTracker tracker; | |
| 94 const sessions::SessionTab* tab; | 114 const sessions::SessionTab* tab; |
| 95 ASSERT_FALSE(tracker.LookupSessionTab("tag1", 5, &tab)); | 115 ASSERT_FALSE(GetTracker()->LookupSessionTab("tag1", 5, &tab)); |
| 96 tracker.GetSession("tag1"); | 116 GetTracker()->GetSession("tag1"); |
| 97 tracker.PutWindowInSession("tag1", 0); | 117 GetTracker()->PutWindowInSession("tag1", 0); |
| 98 tracker.PutTabInWindow("tag1", 0, 5, 0); | 118 GetTracker()->PutTabInWindow("tag1", 0, 5, 0); |
| 99 ASSERT_TRUE(tracker.LookupSessionTab("tag1", 5, &tab)); | 119 ASSERT_TRUE(GetTracker()->LookupSessionTab("tag1", 5, &tab)); |
| 100 ASSERT_NE((sessions::SessionTab*)nullptr, tab); | 120 ASSERT_NE((sessions::SessionTab*)nullptr, tab); |
| 101 } | 121 } |
| 102 | 122 |
| 103 TEST_F(SyncedSessionTrackerTest, Complex) { | 123 TEST_F(SyncedSessionTrackerTest, Complex) { |
| 104 const std::string tag1 = "tag"; | 124 const std::string tag1 = "tag"; |
| 105 const std::string tag2 = "tag2"; | 125 const std::string tag2 = "tag2"; |
| 106 const std::string tag3 = "tag3"; | 126 const std::string tag3 = "tag3"; |
| 107 SyncedSessionTracker tracker; | |
| 108 std::vector<sessions::SessionTab*> tabs1, tabs2; | 127 std::vector<sessions::SessionTab*> tabs1, tabs2; |
| 109 sessions::SessionTab* temp_tab; | 128 sessions::SessionTab* temp_tab; |
| 110 ASSERT_TRUE(tracker.Empty()); | 129 ASSERT_TRUE(GetTracker()->Empty()); |
| 111 ASSERT_EQ(0U, tracker.num_synced_sessions()); | 130 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); |
| 112 ASSERT_EQ(0U, tracker.num_synced_tabs(tag1)); | 131 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1)); |
| 113 tabs1.push_back(tracker.GetTab(tag1, 0, 0)); | 132 tabs1.push_back(GetTracker()->GetTab(tag1, 0, 0)); |
| 114 tabs1.push_back(tracker.GetTab(tag1, 1, 1)); | 133 tabs1.push_back(GetTracker()->GetTab(tag1, 1, 1)); |
| 115 tabs1.push_back(tracker.GetTab(tag1, 2, 2)); | 134 tabs1.push_back(GetTracker()->GetTab(tag1, 2, 2)); |
| 116 ASSERT_EQ(3U, tracker.num_synced_tabs(tag1)); | 135 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1)); |
| 117 ASSERT_EQ(0U, tracker.num_synced_sessions()); | 136 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); |
| 118 temp_tab = tracker.GetTab(tag1, 0, 0); // Already created. | 137 temp_tab = GetTracker()->GetTab(tag1, 0, 0); // Already created. |
| 119 ASSERT_EQ(3U, tracker.num_synced_tabs(tag1)); | 138 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1)); |
| 120 ASSERT_EQ(0U, tracker.num_synced_sessions()); | 139 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); |
| 121 ASSERT_EQ(tabs1[0], temp_tab); | 140 ASSERT_EQ(tabs1[0], temp_tab); |
| 122 tabs2.push_back(tracker.GetTab(tag2, 0, 0)); | 141 tabs2.push_back(GetTracker()->GetTab(tag2, 0, 0)); |
| 123 ASSERT_EQ(1U, tracker.num_synced_tabs(tag2)); | 142 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2)); |
| 124 ASSERT_EQ(0U, tracker.num_synced_sessions()); | 143 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); |
| 125 ASSERT_FALSE(tracker.DeleteSession(tag3)); | 144 ASSERT_FALSE(GetTracker()->DeleteSession(tag3)); |
| 126 | 145 |
| 127 sync_driver::SyncedSession* session = tracker.GetSession(tag1); | 146 sync_driver::SyncedSession* session = GetTracker()->GetSession(tag1); |
| 128 sync_driver::SyncedSession* session2 = tracker.GetSession(tag2); | 147 sync_driver::SyncedSession* session2 = GetTracker()->GetSession(tag2); |
| 129 sync_driver::SyncedSession* session3 = tracker.GetSession(tag3); | 148 sync_driver::SyncedSession* session3 = GetTracker()->GetSession(tag3); |
| 130 ASSERT_EQ(3U, tracker.num_synced_sessions()); | 149 ASSERT_EQ(3U, GetTracker()->num_synced_sessions()); |
| 131 | 150 |
| 132 ASSERT_TRUE(session); | 151 ASSERT_TRUE(session); |
| 133 ASSERT_TRUE(session2); | 152 ASSERT_TRUE(session2); |
| 134 ASSERT_TRUE(session3); | 153 ASSERT_TRUE(session3); |
| 135 ASSERT_NE(session, session2); | 154 ASSERT_NE(session, session2); |
| 136 ASSERT_NE(session2, session3); | 155 ASSERT_NE(session2, session3); |
| 137 ASSERT_TRUE(tracker.DeleteSession(tag3)); | 156 ASSERT_TRUE(GetTracker()->DeleteSession(tag3)); |
| 138 ASSERT_EQ(2U, tracker.num_synced_sessions()); | 157 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); |
| 139 | 158 |
| 140 tracker.PutWindowInSession(tag1, 0); // Create a window. | 159 GetTracker()->PutWindowInSession(tag1, 0); // Create a window. |
| 141 tracker.PutTabInWindow(tag1, 0, 2, 0); // No longer unmapped. | 160 GetTracker()->PutTabInWindow(tag1, 0, 2, 0); // No longer unmapped. |
| 142 ASSERT_EQ(3U, tracker.num_synced_tabs(tag1)); // Has not changed. | 161 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1)); // Has not changed. |
| 143 | 162 |
| 144 const sessions::SessionTab *tab_ptr; | 163 const sessions::SessionTab *tab_ptr; |
| 145 ASSERT_TRUE(tracker.LookupSessionTab(tag1, 0, &tab_ptr)); | 164 ASSERT_TRUE(GetTracker()->LookupSessionTab(tag1, 0, &tab_ptr)); |
| 146 ASSERT_EQ(tab_ptr, tabs1[0]); | 165 ASSERT_EQ(tab_ptr, tabs1[0]); |
| 147 ASSERT_TRUE(tracker.LookupSessionTab(tag1, 2, &tab_ptr)); | 166 ASSERT_TRUE(GetTracker()->LookupSessionTab(tag1, 2, &tab_ptr)); |
| 148 ASSERT_EQ(tab_ptr, tabs1[2]); | 167 ASSERT_EQ(tab_ptr, tabs1[2]); |
| 149 ASSERT_FALSE(tracker.LookupSessionTab(tag1, 3, &tab_ptr)); | 168 ASSERT_FALSE(GetTracker()->LookupSessionTab(tag1, 3, &tab_ptr)); |
| 150 ASSERT_EQ(static_cast<const sessions::SessionTab*>(NULL), tab_ptr); | 169 ASSERT_EQ(static_cast<const sessions::SessionTab*>(NULL), tab_ptr); |
| 151 | 170 |
| 152 std::vector<const sessions::SessionWindow*> windows; | 171 std::vector<const sessions::SessionWindow*> windows; |
| 153 ASSERT_TRUE(tracker.LookupSessionWindows(tag1, &windows)); | 172 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag1, &windows)); |
| 154 ASSERT_EQ(1U, windows.size()); | 173 ASSERT_EQ(1U, windows.size()); |
| 155 ASSERT_TRUE(tracker.LookupSessionWindows(tag2, &windows)); | 174 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag2, &windows)); |
| 156 ASSERT_EQ(0U, windows.size()); | 175 ASSERT_EQ(0U, windows.size()); |
| 157 | 176 |
| 158 // The sessions don't have valid tabs, lookup should not succeed. | 177 // The sessions don't have valid tabs, lookup should not succeed. |
| 159 std::vector<const sync_driver::SyncedSession*> sessions; | 178 std::vector<const sync_driver::SyncedSession*> sessions; |
| 160 ASSERT_FALSE(tracker.LookupAllForeignSessions(&sessions)); | 179 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions)); |
| 161 | 180 |
| 162 tracker.Clear(); | 181 GetTracker()->Clear(); |
| 163 ASSERT_EQ(0U, tracker.num_synced_tabs(tag1)); | 182 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1)); |
| 164 ASSERT_EQ(0U, tracker.num_synced_tabs(tag2)); | 183 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag2)); |
| 165 ASSERT_EQ(0U, tracker.num_synced_sessions()); | 184 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); |
| 166 } | 185 } |
| 167 | 186 |
| 168 TEST_F(SyncedSessionTrackerTest, ManyGetTabs) { | 187 TEST_F(SyncedSessionTrackerTest, ManyGetTabs) { |
| 169 SyncedSessionTracker tracker; | 188 ASSERT_TRUE(GetTracker()->Empty()); |
| 170 ASSERT_TRUE(tracker.Empty()); | |
| 171 const int kMaxSessions = 10; | 189 const int kMaxSessions = 10; |
| 172 const int kMaxTabs = 1000; | 190 const int kMaxTabs = 1000; |
| 173 const int kMaxAttempts = 10000; | 191 const int kMaxAttempts = 10000; |
| 174 for (int j=0; j<kMaxSessions; ++j) { | 192 for (int j=0; j<kMaxSessions; ++j) { |
| 175 std::string tag = base::StringPrintf("tag%d", j); | 193 std::string tag = base::StringPrintf("tag%d", j); |
| 176 for (int i=0; i<kMaxAttempts; ++i) { | 194 for (int i=0; i<kMaxAttempts; ++i) { |
| 177 // More attempts than tabs means we'll sometimes get the same tabs, | 195 // More attempts than tabs means we'll sometimes get the same tabs, |
| 178 // sometimes have to allocate new tabs. | 196 // sometimes have to allocate new tabs. |
| 179 int rand_tab_num = base::RandInt(0, kMaxTabs); | 197 int rand_tab_num = base::RandInt(0, kMaxTabs); |
| 180 sessions::SessionTab* tab = | 198 sessions::SessionTab* tab = |
| 181 tracker.GetTab(tag, rand_tab_num, rand_tab_num + 1); | 199 GetTracker()->GetTab(tag, rand_tab_num, rand_tab_num + 1); |
| 182 ASSERT_TRUE(tab); | 200 ASSERT_TRUE(tab); |
| 183 } | 201 } |
| 184 } | 202 } |
| 185 } | 203 } |
| 186 | 204 |
| 187 TEST_F(SyncedSessionTrackerTest, LookupTabNodeIds) { | 205 TEST_F(SyncedSessionTrackerTest, LookupTabNodeIds) { |
| 188 SyncedSessionTracker tracker; | |
| 189 std::set<int> result; | 206 std::set<int> result; |
| 190 std::string tag1 = "session1"; | 207 std::string tag1 = "session1"; |
| 191 std::string tag2 = "session2"; | 208 std::string tag2 = "session2"; |
| 192 std::string tag3 = "session3"; | 209 std::string tag3 = "session3"; |
| 193 | 210 |
| 194 tracker.GetTab(tag1, 1, 1); | 211 GetTracker()->GetTab(tag1, 1, 1); |
| 195 tracker.GetTab(tag1, 2, 2); | 212 GetTracker()->GetTab(tag1, 2, 2); |
| 196 EXPECT_TRUE(tracker.LookupTabNodeIds(tag1, &result)); | 213 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); |
| 197 EXPECT_EQ(2U, result.size()); | 214 EXPECT_EQ(2U, result.size()); |
| 198 EXPECT_FALSE(result.end() == result.find(1)); | 215 EXPECT_FALSE(result.end() == result.find(1)); |
| 199 EXPECT_FALSE(result.end() == result.find(2)); | 216 EXPECT_FALSE(result.end() == result.find(2)); |
| 200 EXPECT_FALSE(tracker.LookupTabNodeIds(tag2, &result)); | 217 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag2, &result)); |
| 201 | 218 |
| 202 tracker.PutWindowInSession(tag1, 0); | 219 GetTracker()->PutWindowInSession(tag1, 0); |
| 203 tracker.PutTabInWindow(tag1, 0, 3, 0); | 220 GetTracker()->PutTabInWindow(tag1, 0, 3, 0); |
| 204 EXPECT_TRUE(tracker.LookupTabNodeIds(tag1, &result)); | 221 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); |
| 205 EXPECT_EQ(2U, result.size()); | 222 EXPECT_EQ(2U, result.size()); |
| 206 | 223 |
| 207 tracker.GetTab(tag1, 3, 3); | 224 GetTracker()->GetTab(tag1, 3, 3); |
| 208 EXPECT_TRUE(tracker.LookupTabNodeIds(tag1, &result)); | 225 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); |
| 209 EXPECT_EQ(3U, result.size()); | 226 EXPECT_EQ(3U, result.size()); |
| 210 EXPECT_FALSE(result.end() == result.find(3)); | 227 EXPECT_FALSE(result.end() == result.find(3)); |
| 211 | 228 |
| 212 tracker.GetTab(tag2, 1, 21); | 229 GetTracker()->GetTab(tag2, 1, 21); |
| 213 tracker.GetTab(tag2, 2, 22); | 230 GetTracker()->GetTab(tag2, 2, 22); |
| 214 EXPECT_TRUE(tracker.LookupTabNodeIds(tag2, &result)); | 231 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result)); |
| 215 EXPECT_EQ(2U, result.size()); | 232 EXPECT_EQ(2U, result.size()); |
| 216 EXPECT_FALSE(result.end() == result.find(21)); | 233 EXPECT_FALSE(result.end() == result.find(21)); |
| 217 EXPECT_FALSE(result.end() == result.find(22)); | 234 EXPECT_FALSE(result.end() == result.find(22)); |
| 218 EXPECT_TRUE(tracker.LookupTabNodeIds(tag1, &result)); | 235 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); |
| 219 EXPECT_EQ(3U, result.size()); | 236 EXPECT_EQ(3U, result.size()); |
| 220 EXPECT_FALSE(result.end() == result.find(1)); | 237 EXPECT_FALSE(result.end() == result.find(1)); |
| 221 EXPECT_FALSE(result.end() == result.find(2)); | 238 EXPECT_FALSE(result.end() == result.find(2)); |
| 222 | 239 |
| 223 EXPECT_FALSE(tracker.LookupTabNodeIds(tag3, &result)); | 240 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result)); |
| 224 tracker.PutWindowInSession(tag3, 1); | 241 GetTracker()->PutWindowInSession(tag3, 1); |
| 225 tracker.PutTabInWindow(tag3, 1, 5, 0); | 242 GetTracker()->PutTabInWindow(tag3, 1, 5, 0); |
| 226 EXPECT_TRUE(tracker.LookupTabNodeIds(tag3, &result)); | 243 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag3, &result)); |
| 227 EXPECT_TRUE(result.empty()); | 244 EXPECT_TRUE(result.empty()); |
| 228 EXPECT_TRUE(tracker.DeleteSession(tag3)); | 245 EXPECT_TRUE(GetTracker()->DeleteSession(tag3)); |
| 229 EXPECT_FALSE(tracker.LookupTabNodeIds(tag3, &result)); | 246 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result)); |
| 230 | 247 |
| 231 EXPECT_TRUE(tracker.DeleteSession(tag1)); | 248 EXPECT_TRUE(GetTracker()->DeleteSession(tag1)); |
| 232 EXPECT_FALSE(tracker.LookupTabNodeIds(tag1, &result)); | 249 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag1, &result)); |
| 233 EXPECT_TRUE(tracker.LookupTabNodeIds(tag2, &result)); | 250 EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result)); |
| 234 EXPECT_EQ(2U, result.size()); | 251 EXPECT_EQ(2U, result.size()); |
| 235 EXPECT_FALSE(result.end() == result.find(21)); | 252 EXPECT_FALSE(result.end() == result.find(21)); |
| 236 EXPECT_FALSE(result.end() == result.find(22)); | 253 EXPECT_FALSE(result.end() == result.find(22)); |
| 237 EXPECT_TRUE(tracker.DeleteSession(tag2)); | 254 EXPECT_TRUE(GetTracker()->DeleteSession(tag2)); |
| 238 EXPECT_FALSE(tracker.LookupTabNodeIds(tag2, &result)); | 255 EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag2, &result)); |
| 239 } | 256 } |
| 240 | 257 |
| 241 TEST_F(SyncedSessionTrackerTest, SessionTracking) { | 258 TEST_F(SyncedSessionTrackerTest, SessionTracking) { |
| 242 SyncedSessionTracker tracker; | 259 ASSERT_TRUE(GetTracker()->Empty()); |
| 243 ASSERT_TRUE(tracker.Empty()); | |
| 244 std::string tag1 = "tag1"; | 260 std::string tag1 = "tag1"; |
| 245 std::string tag2 = "tag2"; | 261 std::string tag2 = "tag2"; |
| 246 | 262 |
| 247 // Create some session information that is stale. | 263 // Create some session information that is stale. |
| 248 sync_driver::SyncedSession* session1 = tracker.GetSession(tag1); | 264 sync_driver::SyncedSession* session1 = GetTracker()->GetSession(tag1); |
| 249 tracker.PutWindowInSession(tag1, 0); | 265 GetTracker()->PutWindowInSession(tag1, 0); |
| 250 tracker.PutTabInWindow(tag1, 0, 0, 0); | 266 GetTracker()->PutTabInWindow(tag1, 0, 0, 0); |
| 251 tracker.PutTabInWindow(tag1, 0, 1, 1); | 267 GetTracker()->PutTabInWindow(tag1, 0, 1, 1); |
| 252 tracker.GetTab(tag1, 2, 3U)->window_id.set_id(0); // Will be unmapped. | 268 GetTracker()->GetTab(tag1, 2, 3U)->window_id.set_id(0); // Will be unmapped. |
| 253 tracker.GetTab(tag1, 3, 4U)->window_id.set_id(0); // Will be unmapped. | 269 GetTracker()->GetTab(tag1, 3, 4U)->window_id.set_id(0); // Will be unmapped. |
| 254 tracker.PutWindowInSession(tag1, 1); | 270 GetTracker()->PutWindowInSession(tag1, 1); |
| 255 tracker.PutTabInWindow(tag1, 1, 4, 0); | 271 GetTracker()->PutTabInWindow(tag1, 1, 4, 0); |
| 256 tracker.PutTabInWindow(tag1, 1, 5, 1); | 272 GetTracker()->PutTabInWindow(tag1, 1, 5, 1); |
| 257 ASSERT_EQ(2U, session1->windows.size()); | 273 ASSERT_EQ(2U, session1->windows.size()); |
| 258 ASSERT_EQ(2U, session1->windows[0]->tabs.size()); | 274 ASSERT_EQ(2U, session1->windows[0]->tabs.size()); |
| 259 ASSERT_EQ(2U, session1->windows[1]->tabs.size()); | 275 ASSERT_EQ(2U, session1->windows[1]->tabs.size()); |
| 260 ASSERT_EQ(6U, tracker.num_synced_tabs(tag1)); | 276 ASSERT_EQ(6U, GetTracker()->num_synced_tabs(tag1)); |
| 261 | 277 |
| 262 // Create a session that should not be affected. | 278 // Create a session that should not be affected. |
| 263 sync_driver::SyncedSession* session2 = tracker.GetSession(tag2); | 279 sync_driver::SyncedSession* session2 = GetTracker()->GetSession(tag2); |
| 264 tracker.PutWindowInSession(tag2, 2); | 280 GetTracker()->PutWindowInSession(tag2, 2); |
| 265 tracker.PutTabInWindow(tag2, 2, 1, 0); | 281 GetTracker()->PutTabInWindow(tag2, 2, 1, 0); |
| 266 ASSERT_EQ(1U, session2->windows.size()); | 282 ASSERT_EQ(1U, session2->windows.size()); |
| 267 ASSERT_EQ(1U, session2->windows[2]->tabs.size()); | 283 ASSERT_EQ(1U, session2->windows[2]->tabs.size()); |
| 268 ASSERT_EQ(1U, tracker.num_synced_tabs(tag2)); | 284 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2)); |
| 269 | 285 |
| 270 // Reset tracking and get the current windows/tabs. | 286 // Reset tracking and get the current windows/tabs. |
| 271 // We simulate moving a tab from one window to another, then closing the | 287 // We simulate moving a tab from one window to another, then closing the |
| 272 // first window (including its one remaining tab), and opening a new tab | 288 // first window (including its one remaining tab), and opening a new tab |
| 273 // on the remaining window. | 289 // on the remaining window. |
| 274 | 290 |
| 275 // New tab, arrived before meta node so unmapped. | 291 // New tab, arrived before meta node so unmapped. |
| 276 tracker.GetTab(tag1, 6, 7U); | 292 GetTracker()->GetTab(tag1, 6, 7U); |
| 277 tracker.ResetSessionTracking(tag1); | 293 GetTracker()->ResetSessionTracking(tag1); |
| 278 tracker.PutWindowInSession(tag1, 0); | 294 GetTracker()->PutWindowInSession(tag1, 0); |
| 279 tracker.PutTabInWindow(tag1, 0, 0, 0); | 295 GetTracker()->PutTabInWindow(tag1, 0, 0, 0); |
| 280 // Tab 1 is closed. | 296 // Tab 1 is closed. |
| 281 tracker.PutTabInWindow(tag1, 0, 2, 1); // No longer unmapped. | 297 GetTracker()->PutTabInWindow(tag1, 0, 2, 1); // No longer unmapped. |
| 282 // Tab 3 was unmapped and does not get used. | 298 // Tab 3 was unmapped and does not get used. |
| 283 tracker.PutTabInWindow(tag1, 0, 4, 2); // Moved from window 1. | 299 GetTracker()->PutTabInWindow(tag1, 0, 4, 2); // Moved from window 1. |
| 284 // Window 1 was closed, along with tab 5. | 300 // Window 1 was closed, along with tab 5. |
| 285 tracker.PutTabInWindow(tag1, 0, 6, 3); // No longer unmapped. | 301 GetTracker()->PutTabInWindow(tag1, 0, 6, 3); // No longer unmapped. |
| 286 // Session 2 should not be affected. | 302 // Session 2 should not be affected. |
| 287 tracker.CleanupSession(tag1); | 303 GetTracker()->CleanupSession(tag1); |
| 288 | 304 |
| 289 // Verify that only those parts of the session not owned have been removed. | 305 // Verify that only those parts of the session not owned have been removed. |
| 290 ASSERT_EQ(1U, session1->windows.size()); | 306 ASSERT_EQ(1U, session1->windows.size()); |
| 291 ASSERT_EQ(4U, session1->windows[0]->tabs.size()); | 307 ASSERT_EQ(4U, session1->windows[0]->tabs.size()); |
| 292 ASSERT_EQ(1U, session2->windows.size()); | 308 ASSERT_EQ(1U, session2->windows.size()); |
| 293 ASSERT_EQ(1U, session2->windows[2]->tabs.size()); | 309 ASSERT_EQ(1U, session2->windows[2]->tabs.size()); |
| 294 ASSERT_EQ(2U, tracker.num_synced_sessions()); | 310 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); |
| 295 ASSERT_EQ(4U, tracker.num_synced_tabs(tag1)); | 311 ASSERT_EQ(4U, GetTracker()->num_synced_tabs(tag1)); |
| 296 ASSERT_EQ(1U, tracker.num_synced_tabs(tag2)); | 312 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2)); |
| 297 | 313 |
| 298 // All memory should be properly deallocated by destructor for the | 314 // All memory should be properly deallocated by destructor for the |
| 299 // SyncedSessionTracker. | 315 // SyncedSessionTracker. |
| 300 } | 316 } |
| 301 | 317 |
| 302 } // namespace browser_sync | 318 } // namespace browser_sync |
| OLD | NEW |