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

Side by Side Diff: components/sync_sessions/synced_session_tracker_unittest.cc

Issue 2507543002: Revert of [Sync] Put session tracker in charge of maintaining local state. (Closed)
Patch Set: Created 4 years, 1 month 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 "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"
11 #include "components/sync_sessions/fake_sync_sessions_client.h" 11 #include "components/sync_sessions/fake_sync_sessions_client.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 namespace sync_sessions { 14 namespace sync_sessions {
15 15
16 namespace { 16 namespace {
17 17
18 const char kValidUrl[] = "http://www.example.com"; 18 const char kValidUrl[] = "http://www.example.com";
19 const char kInvalidUrl[] = "invalid.url"; 19 const char kInvalidUrl[] = "invalid.url";
20 const char kTag[] = "tag";
21 const char kTag2[] = "tag2";
22 const char kTag3[] = "tag3";
23 const char kTitle[] = "title";
24 20
25 } // namespace 21 } // namespace
26 22
27 class SyncedSessionTrackerTest : public testing::Test { 23 class SyncedSessionTrackerTest : public testing::Test {
28 public: 24 public:
29 SyncedSessionTrackerTest() : tracker_(&sessions_client_) {} 25 SyncedSessionTrackerTest() : tracker_(&sessions_client_) {}
30 ~SyncedSessionTrackerTest() override {} 26 ~SyncedSessionTrackerTest() override {}
31 27
32 SyncedSessionTracker* GetTracker() { return &tracker_; } 28 SyncedSessionTracker* GetTracker() { return &tracker_; }
33 29
34 private: 30 private:
35 FakeSyncSessionsClient sessions_client_; 31 FakeSyncSessionsClient sessions_client_;
36 SyncedSessionTracker tracker_; 32 SyncedSessionTracker tracker_;
37 }; 33 };
38 34
39 TEST_F(SyncedSessionTrackerTest, GetSession) { 35 TEST_F(SyncedSessionTrackerTest, GetSession) {
40 SyncedSession* session1 = GetTracker()->GetSession(kTag); 36 SyncedSession* session1 = GetTracker()->GetSession("tag");
41 SyncedSession* session2 = GetTracker()->GetSession(kTag2); 37 SyncedSession* session2 = GetTracker()->GetSession("tag2");
42 ASSERT_EQ(session1, GetTracker()->GetSession(kTag)); 38 ASSERT_EQ(session1, GetTracker()->GetSession("tag"));
43 ASSERT_NE(session1, session2); 39 ASSERT_NE(session1, session2);
44 // Should clean up memory on its own. 40 // Should clean up memory on its own.
45 } 41 }
46 42
47 TEST_F(SyncedSessionTrackerTest, GetTabUnmapped) { 43 TEST_F(SyncedSessionTrackerTest, GetTabUnmapped) {
48 sessions::SessionTab* tab = GetTracker()->GetTab(kTag, 0, 0); 44 sessions::SessionTab* tab = GetTracker()->GetTab("tag", 0, 0);
49 ASSERT_EQ(tab, GetTracker()->GetTab(kTag, 0, 0)); 45 ASSERT_EQ(tab, GetTracker()->GetTab("tag", 0, 0));
50 // Should clean up memory on its own. 46 // Should clean up memory on its own.
51 } 47 }
52 48
53 TEST_F(SyncedSessionTrackerTest, PutWindowInSession) { 49 TEST_F(SyncedSessionTrackerTest, PutWindowInSession) {
54 GetTracker()->PutWindowInSession(kTag, 0); 50 GetTracker()->PutWindowInSession("tag", 0);
55 SyncedSession* session = GetTracker()->GetSession(kTag); 51 SyncedSession* session = GetTracker()->GetSession("tag");
56 ASSERT_EQ(1U, session->windows.size()); 52 ASSERT_EQ(1U, session->windows.size());
57 // Should clean up memory on its own. 53 // Should clean up memory on its own.
58 } 54 }
59 55
60 TEST_F(SyncedSessionTrackerTest, PutTabInWindow) { 56 TEST_F(SyncedSessionTrackerTest, PutTabInWindow) {
61 GetTracker()->PutWindowInSession(kTag, 10); 57 GetTracker()->PutWindowInSession("tag", 10);
62 GetTracker()->PutTabInWindow(kTag, 10, 15, 58 GetTracker()->PutTabInWindow("tag", 10, 15,
63 0); // win id 10, tab id 15, tab ind 0. 59 0); // win id 10, tab id 15, tab ind 0.
64 SyncedSession* session = GetTracker()->GetSession(kTag); 60 SyncedSession* session = GetTracker()->GetSession("tag");
65 ASSERT_EQ(1U, session->windows.size()); 61 ASSERT_EQ(1U, session->windows.size());
66 ASSERT_EQ(1U, session->windows[10]->tabs.size()); 62 ASSERT_EQ(1U, session->windows[10]->tabs.size());
67 ASSERT_EQ(GetTracker()->GetTab(kTag, 15, 1), 63 ASSERT_EQ(GetTracker()->GetTab("tag", 15, 1),
68 session->windows[10]->tabs[0].get()); 64 session->windows[10]->tabs[0].get());
69 // Should clean up memory on its own. 65 // Should clean up memory on its own.
70 } 66 }
71 67
72 TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) { 68 TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) {
73 std::vector<const SyncedSession*> sessions; 69 std::vector<const SyncedSession*> sessions;
74 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions( 70 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(
75 &sessions, SyncedSessionTracker::PRESENTABLE)); 71 &sessions, SyncedSessionTracker::PRESENTABLE));
76 GetTracker()->GetSession(kTag); 72 GetTracker()->GetSession("tag1");
77 GetTracker()->PutWindowInSession(kTag, 0); 73 GetTracker()->PutWindowInSession("tag1", 0);
78 GetTracker()->PutTabInWindow(kTag, 0, 15, 0); 74 GetTracker()->PutTabInWindow("tag1", 0, 15, 0);
79 sessions::SessionTab* tab = GetTracker()->GetTab(kTag, 15, 1); 75 sessions::SessionTab* tab = GetTracker()->GetTab("tag1", 15, 1);
80 ASSERT_TRUE(tab); 76 ASSERT_TRUE(tab);
81 tab->navigations.push_back( 77 tab->navigations.push_back(
82 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(kValidUrl, 78 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(kValidUrl,
83 kTitle)); 79 "title"));
84 GetTracker()->GetSession(kTag2); 80 GetTracker()->GetSession("tag2");
85 GetTracker()->GetSession(kTag3); 81 GetTracker()->GetSession("tag3");
86 GetTracker()->PutWindowInSession(kTag3, 0); 82 GetTracker()->PutWindowInSession("tag3", 0);
87 GetTracker()->PutTabInWindow(kTag3, 0, 15, 0); 83 GetTracker()->PutTabInWindow("tag3", 0, 15, 0);
88 tab = GetTracker()->GetTab(kTag3, 15, 1); 84 tab = GetTracker()->GetTab("tag3", 15, 1);
89 ASSERT_TRUE(tab); 85 ASSERT_TRUE(tab);
90 tab->navigations.push_back( 86 tab->navigations.push_back(
91 sessions::SerializedNavigationEntryTestHelper::CreateNavigation( 87 sessions::SerializedNavigationEntryTestHelper::CreateNavigation(
92 kInvalidUrl, kTitle)); 88 kInvalidUrl, "title"));
93 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions( 89 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(
94 &sessions, SyncedSessionTracker::PRESENTABLE)); 90 &sessions, SyncedSessionTracker::PRESENTABLE));
95 // Only the session with a valid window and tab gets returned. 91 // Only the session with a valid window and tab gets returned.
96 ASSERT_EQ(1U, sessions.size()); 92 ASSERT_EQ(1U, sessions.size());
97 ASSERT_EQ(kTag, sessions[0]->session_tag); 93 ASSERT_EQ("tag1", sessions[0]->session_tag);
98 94
99 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions( 95 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(
100 &sessions, SyncedSessionTracker::RAW)); 96 &sessions, SyncedSessionTracker::RAW));
101 ASSERT_EQ(3U, sessions.size()); 97 ASSERT_EQ(3U, sessions.size());
102 } 98 }
103 99
104 TEST_F(SyncedSessionTrackerTest, LookupSessionWindows) { 100 TEST_F(SyncedSessionTrackerTest, LookupSessionWindows) {
105 std::vector<const sessions::SessionWindow*> windows; 101 std::vector<const sessions::SessionWindow*> windows;
106 ASSERT_FALSE(GetTracker()->LookupSessionWindows(kTag, &windows)); 102 ASSERT_FALSE(GetTracker()->LookupSessionWindows("tag1", &windows));
107 GetTracker()->GetSession(kTag); 103 GetTracker()->GetSession("tag1");
108 GetTracker()->PutWindowInSession(kTag, 0); 104 GetTracker()->PutWindowInSession("tag1", 0);
109 GetTracker()->PutWindowInSession(kTag, 2); 105 GetTracker()->PutWindowInSession("tag1", 2);
110 GetTracker()->GetSession(kTag2); 106 GetTracker()->GetSession("tag2");
111 GetTracker()->PutWindowInSession(kTag2, 0); 107 GetTracker()->PutWindowInSession("tag2", 0);
112 GetTracker()->PutWindowInSession(kTag2, 2); 108 GetTracker()->PutWindowInSession("tag2", 2);
113 ASSERT_TRUE(GetTracker()->LookupSessionWindows(kTag, &windows)); 109 ASSERT_TRUE(GetTracker()->LookupSessionWindows("tag1", &windows));
114 ASSERT_EQ(2U, windows.size()); // Only windows from kTag session. 110 ASSERT_EQ(2U, windows.size()); // Only windows from tag1 session.
115 ASSERT_NE((sessions::SessionWindow*)nullptr, windows[0]); 111 ASSERT_NE((sessions::SessionWindow*)nullptr, windows[0]);
116 ASSERT_NE((sessions::SessionWindow*)nullptr, windows[1]); 112 ASSERT_NE((sessions::SessionWindow*)nullptr, windows[1]);
117 ASSERT_NE(windows[1], windows[0]); 113 ASSERT_NE(windows[1], windows[0]);
118 } 114 }
119 115
120 TEST_F(SyncedSessionTrackerTest, LookupSessionTab) { 116 TEST_F(SyncedSessionTrackerTest, LookupSessionTab) {
121 const sessions::SessionTab* tab; 117 const sessions::SessionTab* tab;
122 ASSERT_FALSE(GetTracker()->LookupSessionTab(kTag, 5, &tab)); 118 ASSERT_FALSE(GetTracker()->LookupSessionTab("tag1", 5, &tab));
123 GetTracker()->GetSession(kTag); 119 GetTracker()->GetSession("tag1");
124 GetTracker()->PutWindowInSession(kTag, 0); 120 GetTracker()->PutWindowInSession("tag1", 0);
125 GetTracker()->PutTabInWindow(kTag, 0, 5, 0); 121 GetTracker()->PutTabInWindow("tag1", 0, 5, 0);
126 ASSERT_TRUE(GetTracker()->LookupSessionTab(kTag, 5, &tab)); 122 ASSERT_TRUE(GetTracker()->LookupSessionTab("tag1", 5, &tab));
127 ASSERT_NE((sessions::SessionTab*)nullptr, tab); 123 ASSERT_NE((sessions::SessionTab*)nullptr, tab);
128 } 124 }
129 125
130 TEST_F(SyncedSessionTrackerTest, Complex) { 126 TEST_F(SyncedSessionTrackerTest, Complex) {
127 const std::string tag1 = "tag";
128 const std::string tag2 = "tag2";
129 const std::string tag3 = "tag3";
131 std::vector<sessions::SessionTab *> tabs1, tabs2; 130 std::vector<sessions::SessionTab *> tabs1, tabs2;
132 sessions::SessionTab* temp_tab; 131 sessions::SessionTab* temp_tab;
133 ASSERT_TRUE(GetTracker()->Empty()); 132 ASSERT_TRUE(GetTracker()->Empty());
134 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 133 ASSERT_EQ(0U, GetTracker()->num_synced_sessions());
135 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(kTag)); 134 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1));
136 tabs1.push_back(GetTracker()->GetTab(kTag, 0, 0)); 135 tabs1.push_back(GetTracker()->GetTab(tag1, 0, 0));
137 tabs1.push_back(GetTracker()->GetTab(kTag, 1, 1)); 136 tabs1.push_back(GetTracker()->GetTab(tag1, 1, 1));
138 tabs1.push_back(GetTracker()->GetTab(kTag, 2, 2)); 137 tabs1.push_back(GetTracker()->GetTab(tag1, 2, 2));
139 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(kTag)); 138 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1));
140 ASSERT_EQ(1U, GetTracker()->num_synced_sessions()); 139 ASSERT_EQ(1U, GetTracker()->num_synced_sessions());
141 temp_tab = GetTracker()->GetTab(kTag, 0, 0); // Already created. 140 temp_tab = GetTracker()->GetTab(tag1, 0, 0); // Already created.
142 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(kTag)); 141 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1));
143 ASSERT_EQ(1U, GetTracker()->num_synced_sessions()); 142 ASSERT_EQ(1U, GetTracker()->num_synced_sessions());
144 ASSERT_EQ(tabs1[0], temp_tab); 143 ASSERT_EQ(tabs1[0], temp_tab);
145 tabs2.push_back(GetTracker()->GetTab(kTag2, 0, 0)); 144 tabs2.push_back(GetTracker()->GetTab(tag2, 0, 0));
146 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(kTag2)); 145 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2));
147 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); 146 ASSERT_EQ(2U, GetTracker()->num_synced_sessions());
148 ASSERT_FALSE(GetTracker()->DeleteSession(kTag3)); 147 ASSERT_FALSE(GetTracker()->DeleteSession(tag3));
149 148
150 SyncedSession* session = GetTracker()->GetSession(kTag); 149 SyncedSession* session = GetTracker()->GetSession(tag1);
151 SyncedSession* session2 = GetTracker()->GetSession(kTag2); 150 SyncedSession* session2 = GetTracker()->GetSession(tag2);
152 SyncedSession* session3 = GetTracker()->GetSession(kTag3); 151 SyncedSession* session3 = GetTracker()->GetSession(tag3);
153 session3->device_type = SyncedSession::TYPE_OTHER; 152 session3->device_type = SyncedSession::TYPE_OTHER;
154 ASSERT_EQ(3U, GetTracker()->num_synced_sessions()); 153 ASSERT_EQ(3U, GetTracker()->num_synced_sessions());
155 154
156 ASSERT_TRUE(session); 155 ASSERT_TRUE(session);
157 ASSERT_TRUE(session2); 156 ASSERT_TRUE(session2);
158 ASSERT_TRUE(session3); 157 ASSERT_TRUE(session3);
159 ASSERT_NE(session, session2); 158 ASSERT_NE(session, session2);
160 ASSERT_NE(session2, session3); 159 ASSERT_NE(session2, session3);
161 ASSERT_TRUE(GetTracker()->DeleteSession(kTag3)); 160 ASSERT_TRUE(GetTracker()->DeleteSession(tag3));
162 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); 161 ASSERT_EQ(2U, GetTracker()->num_synced_sessions());
163 162
164 GetTracker()->PutWindowInSession(kTag, 0); // Create a window. 163 GetTracker()->PutWindowInSession(tag1, 0); // Create a window.
165 GetTracker()->PutTabInWindow(kTag, 0, 2, 0); // No longer unmapped. 164 GetTracker()->PutTabInWindow(tag1, 0, 2, 0); // No longer unmapped.
166 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(kTag)); // Has not changed. 165 ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1)); // Has not changed.
167 166
168 const sessions::SessionTab* tab_ptr; 167 const sessions::SessionTab* tab_ptr;
169 ASSERT_TRUE(GetTracker()->LookupSessionTab(kTag, 0, &tab_ptr)); 168 ASSERT_TRUE(GetTracker()->LookupSessionTab(tag1, 0, &tab_ptr));
170 ASSERT_EQ(tab_ptr, tabs1[0]); 169 ASSERT_EQ(tab_ptr, tabs1[0]);
171 ASSERT_TRUE(GetTracker()->LookupSessionTab(kTag, 2, &tab_ptr)); 170 ASSERT_TRUE(GetTracker()->LookupSessionTab(tag1, 2, &tab_ptr));
172 ASSERT_EQ(tab_ptr, tabs1[2]); 171 ASSERT_EQ(tab_ptr, tabs1[2]);
173 ASSERT_FALSE(GetTracker()->LookupSessionTab(kTag, 3, &tab_ptr)); 172 ASSERT_FALSE(GetTracker()->LookupSessionTab(tag1, 3, &tab_ptr));
174 ASSERT_FALSE(tab_ptr); 173 ASSERT_FALSE(tab_ptr);
175 174
176 std::vector<const sessions::SessionWindow*> windows; 175 std::vector<const sessions::SessionWindow*> windows;
177 ASSERT_TRUE(GetTracker()->LookupSessionWindows(kTag, &windows)); 176 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag1, &windows));
178 ASSERT_EQ(1U, windows.size()); 177 ASSERT_EQ(1U, windows.size());
179 ASSERT_TRUE(GetTracker()->LookupSessionWindows(kTag2, &windows)); 178 ASSERT_TRUE(GetTracker()->LookupSessionWindows(tag2, &windows));
180 ASSERT_EQ(0U, windows.size()); 179 ASSERT_EQ(0U, windows.size());
181 180
182 // The sessions don't have valid tabs, lookup should not succeed. 181 // The sessions don't have valid tabs, lookup should not succeed.
183 std::vector<const SyncedSession*> sessions; 182 std::vector<const SyncedSession*> sessions;
184 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions( 183 ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(
185 &sessions, SyncedSessionTracker::PRESENTABLE)); 184 &sessions, SyncedSessionTracker::PRESENTABLE));
186 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions( 185 ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(
187 &sessions, SyncedSessionTracker::RAW)); 186 &sessions, SyncedSessionTracker::RAW));
188 ASSERT_EQ(2U, sessions.size()); 187 ASSERT_EQ(2U, sessions.size());
189 188
190 GetTracker()->Clear(); 189 GetTracker()->Clear();
191 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(kTag)); 190 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1));
192 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(kTag2)); 191 ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag2));
193 ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); 192 ASSERT_EQ(0U, GetTracker()->num_synced_sessions());
194 } 193 }
195 194
196 TEST_F(SyncedSessionTrackerTest, ManyGetTabs) { 195 TEST_F(SyncedSessionTrackerTest, ManyGetTabs) {
197 ASSERT_TRUE(GetTracker()->Empty()); 196 ASSERT_TRUE(GetTracker()->Empty());
198 const int kMaxSessions = 10; 197 const int kMaxSessions = 10;
199 const int kMaxTabs = 1000; 198 const int kMaxTabs = 1000;
200 const int kMaxAttempts = 10000; 199 const int kMaxAttempts = 10000;
201 for (int j = 0; j < kMaxSessions; ++j) { 200 for (int j = 0; j < kMaxSessions; ++j) {
202 std::string tag = base::StringPrintf("tag%d", j); 201 std::string tag = base::StringPrintf("tag%d", j);
203 for (int i = 0; i < kMaxAttempts; ++i) { 202 for (int i = 0; i < kMaxAttempts; ++i) {
204 // More attempts than tabs means we'll sometimes get the same tabs, 203 // More attempts than tabs means we'll sometimes get the same tabs,
205 // sometimes have to allocate new tabs. 204 // sometimes have to allocate new tabs.
206 int rand_tab_num = base::RandInt(0, kMaxTabs); 205 int rand_tab_num = base::RandInt(0, kMaxTabs);
207 sessions::SessionTab* tab = 206 sessions::SessionTab* tab =
208 GetTracker()->GetTab(tag, rand_tab_num, rand_tab_num + 1); 207 GetTracker()->GetTab(tag, rand_tab_num, rand_tab_num + 1);
209 ASSERT_TRUE(tab); 208 ASSERT_TRUE(tab);
210 } 209 }
211 } 210 }
212 } 211 }
213 212
214 TEST_F(SyncedSessionTrackerTest, LookupTabNodeIds) { 213 TEST_F(SyncedSessionTrackerTest, LookupTabNodeIds) {
215 std::set<int> result; 214 std::set<int> result;
215 std::string tag1 = "session1";
216 std::string tag2 = "session2";
217 std::string tag3 = "session3";
216 218
217 GetTracker()->GetTab(kTag, 1, 1); 219 GetTracker()->GetTab(tag1, 1, 1);
218 GetTracker()->GetTab(kTag, 2, 2); 220 GetTracker()->GetTab(tag1, 2, 2);
219 GetTracker()->LookupTabNodeIds(kTag, &result); 221 GetTracker()->LookupTabNodeIds(tag1, &result);
220 EXPECT_EQ(2U, result.size()); 222 EXPECT_EQ(2U, result.size());
221 EXPECT_FALSE(result.end() == result.find(1)); 223 EXPECT_FALSE(result.end() == result.find(1));
222 EXPECT_FALSE(result.end() == result.find(2)); 224 EXPECT_FALSE(result.end() == result.find(2));
223 GetTracker()->LookupTabNodeIds(kTag2, &result); 225 GetTracker()->LookupTabNodeIds(tag2, &result);
224 EXPECT_TRUE(result.empty()); 226 EXPECT_TRUE(result.empty());
225 227
226 GetTracker()->PutWindowInSession(kTag, 0); 228 GetTracker()->PutWindowInSession(tag1, 0);
227 GetTracker()->PutTabInWindow(kTag, 0, 3, 0); 229 GetTracker()->PutTabInWindow(tag1, 0, 3, 0);
228 GetTracker()->LookupTabNodeIds(kTag, &result); 230 GetTracker()->LookupTabNodeIds(tag1, &result);
229 EXPECT_EQ(2U, result.size()); 231 EXPECT_EQ(2U, result.size());
230 232
231 GetTracker()->GetTab(kTag, 3, 3); 233 GetTracker()->GetTab(tag1, 3, 3);
232 GetTracker()->LookupTabNodeIds(kTag, &result); 234 GetTracker()->LookupTabNodeIds(tag1, &result);
233 EXPECT_EQ(3U, result.size()); 235 EXPECT_EQ(3U, result.size());
234 EXPECT_FALSE(result.end() == result.find(3)); 236 EXPECT_FALSE(result.end() == result.find(3));
235 237
236 GetTracker()->GetTab(kTag2, 1, 21); 238 GetTracker()->GetTab(tag2, 1, 21);
237 GetTracker()->GetTab(kTag2, 2, 22); 239 GetTracker()->GetTab(tag2, 2, 22);
238 GetTracker()->LookupTabNodeIds(kTag2, &result); 240 GetTracker()->LookupTabNodeIds(tag2, &result);
239 EXPECT_EQ(2U, result.size()); 241 EXPECT_EQ(2U, result.size());
240 EXPECT_FALSE(result.end() == result.find(21)); 242 EXPECT_FALSE(result.end() == result.find(21));
241 EXPECT_FALSE(result.end() == result.find(22)); 243 EXPECT_FALSE(result.end() == result.find(22));
242 GetTracker()->LookupTabNodeIds(kTag, &result); 244 GetTracker()->LookupTabNodeIds(tag1, &result);
243 EXPECT_EQ(3U, result.size()); 245 EXPECT_EQ(3U, result.size());
244 EXPECT_FALSE(result.end() == result.find(1)); 246 EXPECT_FALSE(result.end() == result.find(1));
245 EXPECT_FALSE(result.end() == result.find(2)); 247 EXPECT_FALSE(result.end() == result.find(2));
246 248
247 GetTracker()->LookupTabNodeIds(kTag3, &result); 249 GetTracker()->LookupTabNodeIds(tag3, &result);
248 EXPECT_TRUE(result.empty()); 250 EXPECT_TRUE(result.empty());
249 GetTracker()->PutWindowInSession(kTag3, 1); 251 GetTracker()->PutWindowInSession(tag3, 1);
250 GetTracker()->PutTabInWindow(kTag3, 1, 5, 0); 252 GetTracker()->PutTabInWindow(tag3, 1, 5, 0);
251 GetTracker()->LookupTabNodeIds(kTag3, &result); 253 GetTracker()->LookupTabNodeIds(tag3, &result);
252 EXPECT_TRUE(result.empty()); 254 EXPECT_TRUE(result.empty());
253 EXPECT_FALSE(GetTracker()->DeleteSession(kTag3)); 255 EXPECT_FALSE(GetTracker()->DeleteSession(tag3));
254 GetTracker()->LookupTabNodeIds(kTag3, &result); 256 GetTracker()->LookupTabNodeIds(tag3, &result);
255 EXPECT_TRUE(result.empty()); 257 EXPECT_TRUE(result.empty());
256 258
257 EXPECT_FALSE(GetTracker()->DeleteSession(kTag)); 259 EXPECT_FALSE(GetTracker()->DeleteSession(tag1));
258 GetTracker()->LookupTabNodeIds(kTag, &result); 260 GetTracker()->LookupTabNodeIds(tag1, &result);
259 EXPECT_TRUE(result.empty()); 261 EXPECT_TRUE(result.empty());
260 GetTracker()->LookupTabNodeIds(kTag2, &result); 262 GetTracker()->LookupTabNodeIds(tag2, &result);
261 EXPECT_EQ(2U, result.size()); 263 EXPECT_EQ(2U, result.size());
262 EXPECT_FALSE(result.end() == result.find(21)); 264 EXPECT_FALSE(result.end() == result.find(21));
263 EXPECT_FALSE(result.end() == result.find(22)); 265 EXPECT_FALSE(result.end() == result.find(22));
264 266
265 GetTracker()->GetTab(kTag2, 1, 21); 267 GetTracker()->GetTab(tag2, 1, 21);
266 GetTracker()->GetTab(kTag2, 2, 23); 268 GetTracker()->GetTab(tag2, 2, 23);
267 GetTracker()->LookupTabNodeIds(kTag2, &result); 269 GetTracker()->LookupTabNodeIds(tag2, &result);
268 EXPECT_EQ(3U, result.size()); 270 EXPECT_EQ(3U, result.size());
269 EXPECT_FALSE(result.end() == result.find(21)); 271 EXPECT_FALSE(result.end() == result.find(21));
270 EXPECT_FALSE(result.end() == result.find(22)); 272 EXPECT_FALSE(result.end() == result.find(22));
271 EXPECT_FALSE(result.end() == result.find(23)); 273 EXPECT_FALSE(result.end() == result.find(23));
272 274
273 EXPECT_FALSE(GetTracker()->DeleteSession(kTag2)); 275 EXPECT_FALSE(GetTracker()->DeleteSession(tag2));
274 GetTracker()->LookupTabNodeIds(kTag2, &result); 276 GetTracker()->LookupTabNodeIds(tag2, &result);
275 EXPECT_TRUE(result.empty()); 277 EXPECT_TRUE(result.empty());
276 } 278 }
277 279
278 TEST_F(SyncedSessionTrackerTest, SessionTracking) { 280 TEST_F(SyncedSessionTrackerTest, SessionTracking) {
279 ASSERT_TRUE(GetTracker()->Empty()); 281 ASSERT_TRUE(GetTracker()->Empty());
282 std::string tag1 = "tag1";
283 std::string tag2 = "tag2";
280 284
281 // Create some session information that is stale. 285 // Create some session information that is stale.
282 SyncedSession* session1 = GetTracker()->GetSession(kTag); 286 SyncedSession* session1 = GetTracker()->GetSession(tag1);
283 GetTracker()->PutWindowInSession(kTag, 0); 287 GetTracker()->PutWindowInSession(tag1, 0);
284 GetTracker()->PutTabInWindow(kTag, 0, 0, 0); 288 GetTracker()->PutTabInWindow(tag1, 0, 0, 0);
285 GetTracker()->PutTabInWindow(kTag, 0, 1, 1); 289 GetTracker()->PutTabInWindow(tag1, 0, 1, 1);
286 GetTracker()->GetTab(kTag, 2, 3U)->window_id.set_id(0); // Will be unmapped. 290 GetTracker()->GetTab(tag1, 2, 3U)->window_id.set_id(0); // Will be unmapped.
287 GetTracker()->GetTab(kTag, 3, 4U)->window_id.set_id(0); // Will be unmapped. 291 GetTracker()->GetTab(tag1, 3, 4U)->window_id.set_id(0); // Will be unmapped.
288 GetTracker()->PutWindowInSession(kTag, 1); 292 GetTracker()->PutWindowInSession(tag1, 1);
289 GetTracker()->PutTabInWindow(kTag, 1, 4, 0); 293 GetTracker()->PutTabInWindow(tag1, 1, 4, 0);
290 GetTracker()->PutTabInWindow(kTag, 1, 5, 1); 294 GetTracker()->PutTabInWindow(tag1, 1, 5, 1);
291 ASSERT_EQ(2U, session1->windows.size()); 295 ASSERT_EQ(2U, session1->windows.size());
292 ASSERT_EQ(2U, session1->windows[0]->tabs.size()); 296 ASSERT_EQ(2U, session1->windows[0]->tabs.size());
293 ASSERT_EQ(2U, session1->windows[1]->tabs.size()); 297 ASSERT_EQ(2U, session1->windows[1]->tabs.size());
294 ASSERT_EQ(6U, GetTracker()->num_synced_tabs(kTag)); 298 ASSERT_EQ(6U, GetTracker()->num_synced_tabs(tag1));
295 299
296 // Create a session that should not be affected. 300 // Create a session that should not be affected.
297 SyncedSession* session2 = GetTracker()->GetSession(kTag2); 301 SyncedSession* session2 = GetTracker()->GetSession(tag2);
298 GetTracker()->PutWindowInSession(kTag2, 2); 302 GetTracker()->PutWindowInSession(tag2, 2);
299 GetTracker()->PutTabInWindow(kTag2, 2, 1, 0); 303 GetTracker()->PutTabInWindow(tag2, 2, 1, 0);
300 ASSERT_EQ(1U, session2->windows.size()); 304 ASSERT_EQ(1U, session2->windows.size());
301 ASSERT_EQ(1U, session2->windows[2]->tabs.size()); 305 ASSERT_EQ(1U, session2->windows[2]->tabs.size());
302 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(kTag2)); 306 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2));
303 307
304 // Reset tracking and get the current windows/tabs. 308 // Reset tracking and get the current windows/tabs.
305 // We simulate moving a tab from one window to another, then closing the 309 // We simulate moving a tab from one window to another, then closing the
306 // first window (including its one remaining tab), and opening a new tab 310 // first window (including its one remaining tab), and opening a new tab
307 // on the remaining window. 311 // on the remaining window.
308 312
309 // New tab, arrived before meta node so unmapped. 313 // New tab, arrived before meta node so unmapped.
310 GetTracker()->GetTab(kTag, 6, 7U); 314 GetTracker()->GetTab(tag1, 6, 7U);
311 GetTracker()->ResetSessionTracking(kTag); 315 GetTracker()->ResetSessionTracking(tag1);
312 GetTracker()->PutWindowInSession(kTag, 0); 316 GetTracker()->PutWindowInSession(tag1, 0);
313 GetTracker()->PutTabInWindow(kTag, 0, 0, 0); 317 GetTracker()->PutTabInWindow(tag1, 0, 0, 0);
314 // Tab 1 is closed. 318 // Tab 1 is closed.
315 GetTracker()->PutTabInWindow(kTag, 0, 2, 1); // No longer unmapped. 319 GetTracker()->PutTabInWindow(tag1, 0, 2, 1); // No longer unmapped.
316 // Tab 3 was unmapped and does not get used. 320 // Tab 3 was unmapped and does not get used.
317 GetTracker()->PutTabInWindow(kTag, 0, 4, 2); // Moved from window 1. 321 GetTracker()->PutTabInWindow(tag1, 0, 4, 2); // Moved from window 1.
318 // Window 1 was closed, along with tab 5. 322 // Window 1 was closed, along with tab 5.
319 GetTracker()->PutTabInWindow(kTag, 0, 6, 3); // No longer unmapped. 323 GetTracker()->PutTabInWindow(tag1, 0, 6, 3); // No longer unmapped.
320 // Session 2 should not be affected. 324 // Session 2 should not be affected.
321 GetTracker()->CleanupSession(kTag); 325 GetTracker()->CleanupSession(tag1);
322 326
323 // Verify that only those parts of the session not owned have been removed. 327 // Verify that only those parts of the session not owned have been removed.
324 ASSERT_EQ(1U, session1->windows.size()); 328 ASSERT_EQ(1U, session1->windows.size());
325 ASSERT_EQ(4U, session1->windows[0]->tabs.size()); 329 ASSERT_EQ(4U, session1->windows[0]->tabs.size());
326 ASSERT_EQ(1U, session2->windows.size()); 330 ASSERT_EQ(1U, session2->windows.size());
327 ASSERT_EQ(1U, session2->windows[2]->tabs.size()); 331 ASSERT_EQ(1U, session2->windows[2]->tabs.size());
328 ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); 332 ASSERT_EQ(2U, GetTracker()->num_synced_sessions());
329 ASSERT_EQ(4U, GetTracker()->num_synced_tabs(kTag)); 333 ASSERT_EQ(4U, GetTracker()->num_synced_tabs(tag1));
330 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(kTag2)); 334 ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2));
331 335
332 // All memory should be properly deallocated by destructor for the 336 // All memory should be properly deallocated by destructor for the
333 // SyncedSessionTracker. 337 // SyncedSessionTracker.
334 } 338 }
335 339
336 TEST_F(SyncedSessionTrackerTest, DeleteForeignTab) { 340 TEST_F(SyncedSessionTrackerTest, DeleteForeignTab) {
341 std::string session_tag = "session_tag";
337 int tab_id_1 = 1; 342 int tab_id_1 = 1;
338 int tab_id_2 = 2; 343 int tab_id_2 = 2;
339 int tab_node_id_3 = 3; 344 int tab_node_id_3 = 3;
340 int tab_node_id_4 = 4; 345 int tab_node_id_4 = 4;
341 std::set<int> result; 346 std::set<int> result;
342 347
343 GetTracker()->GetTab(kTag, tab_id_1, tab_node_id_3); 348 GetTracker()->GetTab(session_tag, tab_id_1, tab_node_id_3);
344 GetTracker()->GetTab(kTag, tab_id_1, tab_node_id_4); 349 GetTracker()->GetTab(session_tag, tab_id_1, tab_node_id_4);
345 GetTracker()->GetTab(kTag, tab_id_2, tab_node_id_3); 350 GetTracker()->GetTab(session_tag, tab_id_2, tab_node_id_3);
346 GetTracker()->GetTab(kTag, tab_id_2, tab_node_id_4); 351 GetTracker()->GetTab(session_tag, tab_id_2, tab_node_id_4);
347 352
348 GetTracker()->LookupTabNodeIds(kTag, &result); 353 GetTracker()->LookupTabNodeIds(session_tag, &result);
349 EXPECT_EQ(2U, result.size()); 354 EXPECT_EQ(2U, result.size());
350 EXPECT_TRUE(result.find(tab_node_id_3) != result.end()); 355 EXPECT_TRUE(result.find(tab_node_id_3) != result.end());
351 EXPECT_TRUE(result.find(tab_node_id_4) != result.end()); 356 EXPECT_TRUE(result.find(tab_node_id_4) != result.end());
352 357
353 GetTracker()->DeleteForeignTab(kTag, tab_node_id_3); 358 GetTracker()->DeleteForeignTab(session_tag, tab_node_id_3);
354 GetTracker()->LookupTabNodeIds(kTag, &result); 359 GetTracker()->LookupTabNodeIds(session_tag, &result);
355 EXPECT_EQ(1U, result.size()); 360 EXPECT_EQ(1U, result.size());
356 EXPECT_TRUE(result.find(tab_node_id_4) != result.end()); 361 EXPECT_TRUE(result.find(tab_node_id_4) != result.end());
357 362
358 GetTracker()->DeleteForeignTab(kTag, tab_node_id_4); 363 GetTracker()->DeleteForeignTab(session_tag, tab_node_id_4);
359 GetTracker()->LookupTabNodeIds(kTag, &result); 364 GetTracker()->LookupTabNodeIds(session_tag, &result);
360 EXPECT_TRUE(result.empty()); 365 EXPECT_TRUE(result.empty());
361 } 366 }
362 367
363 TEST_F(SyncedSessionTrackerTest, ReassociateTabMapped) {
364 const int kWindow1 = 1;
365 const int kTab1 = 15;
366 const int kTab2 = 25;
367 const int kTabNodeId = 1;
368
369 // First create the tab normally.
370 GetTracker()->PutWindowInSession(kTag, kWindow1);
371 GetTracker()->PutTabInWindow(kTag, kWindow1, kTab1, 0);
372 SyncedSession* session = GetTracker()->GetSession(kTag);
373 sessions::SessionTab* tab = session->windows[kWindow1]->tabs[0].get();
374 ASSERT_EQ(1U, session->windows.size());
375 ASSERT_EQ(1U, session->windows[kWindow1]->tabs.size());
376 ASSERT_EQ(GetTracker()->GetTab(kTag, kTab1, 1),
377 session->windows[kWindow1]->tabs[0].get());
378
379 // Then reassociate with a new tab id.
380 ASSERT_TRUE(GetTracker()->ReassociateTab(kTag, kTab1, kTab2));
381 ASSERT_EQ(tab, GetTracker()->GetTab(kTag, kTab2, kTabNodeId));
382
383 // Reset tracking, and put the new tab id into the window.
384 GetTracker()->ResetSessionTracking(kTag);
385 GetTracker()->PutWindowInSession(kTag, kWindow1);
386 GetTracker()->PutTabInWindow(kTag, kWindow1, kTab2, 0);
387 GetTracker()->CleanupSession(kTag);
388 ASSERT_EQ(GetTracker()->GetTab(kTag, kTab2, kTabNodeId),
389 session->windows[kWindow1]->tabs[0].get());
390 }
391
392 TEST_F(SyncedSessionTrackerTest, ReassociateTabUnmapped) {
393 const int kWindow1 = 1;
394 const int kTab1 = 15;
395 const int kTab2 = 25;
396 const int kTabNodeId = 1;
397
398 // First create the old tab in an unmapped state.
399 ASSERT_TRUE(GetTracker()->GetTab(kTag, kTab1, kTabNodeId));
400
401 // Then handle loading the window and reassociating the tab.
402 GetTracker()->ResetSessionTracking(kTag);
403 ASSERT_TRUE(GetTracker()->ReassociateTab(kTag, kTab1, kTab2));
404 GetTracker()->PutWindowInSession(kTag, kWindow1);
405 GetTracker()->PutTabInWindow(kTag, kWindow1, kTab2, 0);
406 GetTracker()->CleanupSession(kTag);
407
408 // Then reassociate with a new tab id. It should be accessible both via the
409 // GetSession as well as GetTab.
410 SyncedSession* session = GetTracker()->GetSession(kTag);
411 ASSERT_EQ(GetTracker()->GetTab(kTag, kTab2, 1),
412 session->windows[kWindow1]->tabs[0].get());
413 }
414
415 } // namespace sync_sessions 368 } // namespace sync_sessions
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