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

Side by Side Diff: chrome/browser/sync/glue/synced_session_tracker_unittest.cc

Issue 1408643002: [Sync] Componentize synced_tab_delegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test broken by rebase Created 5 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
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"
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698