OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/stringprintf.h" | 10 #include "base/stringprintf.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 SyncedSessionTracker tracker; | 21 SyncedSessionTracker tracker; |
22 SyncedSession* session1 = tracker.GetSession("tag"); | 22 SyncedSession* session1 = tracker.GetSession("tag"); |
23 SyncedSession* session2 = tracker.GetSession("tag2"); | 23 SyncedSession* session2 = tracker.GetSession("tag2"); |
24 ASSERT_EQ(session1, tracker.GetSession("tag")); | 24 ASSERT_EQ(session1, tracker.GetSession("tag")); |
25 ASSERT_NE(session1, session2); | 25 ASSERT_NE(session1, session2); |
26 // Should clean up memory on its own. | 26 // Should clean up memory on its own. |
27 } | 27 } |
28 | 28 |
29 TEST_F(SyncedSessionTrackerTest, GetTabUnmapped) { | 29 TEST_F(SyncedSessionTrackerTest, GetTabUnmapped) { |
30 SyncedSessionTracker tracker; | 30 SyncedSessionTracker tracker; |
31 SessionTab* tab = tracker.GetTab("tag", 0); | 31 SyncedSessionTab* tab = tracker.GetTab("tag", 0); |
32 ASSERT_EQ(tab, tracker.GetTab("tag", 0)); | 32 ASSERT_EQ(tab, tracker.GetTab("tag", 0)); |
33 // Should clean up memory on its own. | 33 // Should clean up memory on its own. |
34 } | 34 } |
35 | 35 |
36 TEST_F(SyncedSessionTrackerTest, PutWindowInSession) { | 36 TEST_F(SyncedSessionTrackerTest, PutWindowInSession) { |
37 SyncedSessionTracker tracker; | 37 SyncedSessionTracker tracker; |
38 tracker.PutWindowInSession("tag", 0); | 38 tracker.PutWindowInSession("tag", 0); |
39 SyncedSession* session = tracker.GetSession("tag"); | 39 SyncedSession* session = tracker.GetSession("tag"); |
40 ASSERT_EQ(1U, session->windows.size()); | 40 ASSERT_EQ(1U, session->windows.size()); |
41 // Should clean up memory on its own. | 41 // Should clean up memory on its own. |
(...skipping 11 matching lines...) Expand all Loading... |
53 } | 53 } |
54 | 54 |
55 TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) { | 55 TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) { |
56 SyncedSessionTracker tracker; | 56 SyncedSessionTracker tracker; |
57 std::vector<const SyncedSession*> sessions; | 57 std::vector<const SyncedSession*> sessions; |
58 ASSERT_FALSE(tracker.LookupAllForeignSessions(&sessions)); | 58 ASSERT_FALSE(tracker.LookupAllForeignSessions(&sessions)); |
59 tracker.GetSession("tag1"); | 59 tracker.GetSession("tag1"); |
60 tracker.GetSession("tag2"); | 60 tracker.GetSession("tag2"); |
61 tracker.PutWindowInSession("tag1", 0); | 61 tracker.PutWindowInSession("tag1", 0); |
62 tracker.PutTabInWindow("tag1", 0, 15, 0); | 62 tracker.PutTabInWindow("tag1", 0, 15, 0); |
63 SessionTab* tab = tracker.GetTab("tag1", 15); | 63 SyncedSessionTab* tab = tracker.GetTab("tag1", 15); |
64 ASSERT_TRUE(tab); | 64 ASSERT_TRUE(tab); |
65 tab->navigations.push_back(TabNavigation( | 65 tab->navigations.push_back(TabNavigation( |
66 0, GURL("bla://valid_url"), content::Referrer(GURL("bla://referrer"), | 66 0, GURL("bla://valid_url"), content::Referrer(GURL("bla://referrer"), |
67 WebKit::WebReferrerPolicyDefault), string16(ASCIIToUTF16("title")), | 67 WebKit::WebReferrerPolicyDefault), string16(ASCIIToUTF16("title")), |
68 std::string("state"), content::PageTransitionFromInt(0))); | 68 std::string("state"), content::PageTransitionFromInt(0))); |
69 ASSERT_TRUE(tracker.LookupAllForeignSessions(&sessions)); | 69 ASSERT_TRUE(tracker.LookupAllForeignSessions(&sessions)); |
70 // Only the session with a valid window and tab gets returned. | 70 // Only the session with a valid window and tab gets returned. |
71 ASSERT_EQ(1U, sessions.size()); | 71 ASSERT_EQ(1U, sessions.size()); |
72 ASSERT_EQ("tag1", sessions[0]->session_tag); | 72 ASSERT_EQ("tag1", sessions[0]->session_tag); |
73 } | 73 } |
(...skipping 10 matching lines...) Expand all Loading... |
84 tracker.PutWindowInSession("tag2", 2); | 84 tracker.PutWindowInSession("tag2", 2); |
85 ASSERT_TRUE(tracker.LookupSessionWindows("tag1", &windows)); | 85 ASSERT_TRUE(tracker.LookupSessionWindows("tag1", &windows)); |
86 ASSERT_EQ(2U, windows.size()); // Only windows from tag1 session. | 86 ASSERT_EQ(2U, windows.size()); // Only windows from tag1 session. |
87 ASSERT_NE((SessionWindow*)NULL, windows[0]); | 87 ASSERT_NE((SessionWindow*)NULL, windows[0]); |
88 ASSERT_NE((SessionWindow*)NULL, windows[1]); | 88 ASSERT_NE((SessionWindow*)NULL, windows[1]); |
89 ASSERT_NE(windows[1], windows[0]); | 89 ASSERT_NE(windows[1], windows[0]); |
90 } | 90 } |
91 | 91 |
92 TEST_F(SyncedSessionTrackerTest, LookupSessionTab) { | 92 TEST_F(SyncedSessionTrackerTest, LookupSessionTab) { |
93 SyncedSessionTracker tracker; | 93 SyncedSessionTracker tracker; |
94 const SessionTab* tab; | 94 const SyncedSessionTab* tab; |
95 ASSERT_FALSE(tracker.LookupSessionTab("tag1", 5, &tab)); | 95 ASSERT_FALSE(tracker.LookupSessionTab("tag1", 5, &tab)); |
96 tracker.GetSession("tag1"); | 96 tracker.GetSession("tag1"); |
97 tracker.PutWindowInSession("tag1", 0); | 97 tracker.PutWindowInSession("tag1", 0); |
98 tracker.PutTabInWindow("tag1", 0, 5, 0); | 98 tracker.PutTabInWindow("tag1", 0, 5, 0); |
99 ASSERT_TRUE(tracker.LookupSessionTab("tag1", 5, &tab)); | 99 ASSERT_TRUE(tracker.LookupSessionTab("tag1", 5, &tab)); |
100 ASSERT_NE((SessionTab*)NULL, tab); | 100 ASSERT_NE((SyncedSessionTab*)NULL, tab); |
101 } | 101 } |
102 | 102 |
103 TEST_F(SyncedSessionTrackerTest, Complex) { | 103 TEST_F(SyncedSessionTrackerTest, Complex) { |
104 const std::string tag1 = "tag"; | 104 const std::string tag1 = "tag"; |
105 const std::string tag2 = "tag2"; | 105 const std::string tag2 = "tag2"; |
106 const std::string tag3 = "tag3"; | 106 const std::string tag3 = "tag3"; |
107 SyncedSessionTracker tracker; | 107 SyncedSessionTracker tracker; |
108 std::vector<SessionTab*> tabs1, tabs2; | 108 std::vector<SyncedSessionTab*> tabs1, tabs2; |
109 SessionTab* temp_tab; | 109 SyncedSessionTab* temp_tab; |
110 ASSERT_TRUE(tracker.Empty()); | 110 ASSERT_TRUE(tracker.Empty()); |
111 ASSERT_EQ(0U, tracker.num_synced_sessions()); | 111 ASSERT_EQ(0U, tracker.num_synced_sessions()); |
112 ASSERT_EQ(0U, tracker.num_synced_tabs(tag1)); | 112 ASSERT_EQ(0U, tracker.num_synced_tabs(tag1)); |
113 tabs1.push_back(tracker.GetTab(tag1, 0)); | 113 tabs1.push_back(tracker.GetTab(tag1, 0)); |
114 tabs1.push_back(tracker.GetTab(tag1, 1)); | 114 tabs1.push_back(tracker.GetTab(tag1, 1)); |
115 tabs1.push_back(tracker.GetTab(tag1, 2)); | 115 tabs1.push_back(tracker.GetTab(tag1, 2)); |
116 ASSERT_EQ(3U, tracker.num_synced_tabs(tag1)); | 116 ASSERT_EQ(3U, tracker.num_synced_tabs(tag1)); |
117 ASSERT_EQ(0U, tracker.num_synced_sessions()); | 117 ASSERT_EQ(0U, tracker.num_synced_sessions()); |
118 temp_tab = tracker.GetTab(tag1, 0); // Already created. | 118 temp_tab = tracker.GetTab(tag1, 0); // Already created. |
119 ASSERT_EQ(3U, tracker.num_synced_tabs(tag1)); | 119 ASSERT_EQ(3U, tracker.num_synced_tabs(tag1)); |
(...skipping 14 matching lines...) Expand all Loading... |
134 ASSERT_TRUE(session3); | 134 ASSERT_TRUE(session3); |
135 ASSERT_NE(session, session2); | 135 ASSERT_NE(session, session2); |
136 ASSERT_NE(session2, session3); | 136 ASSERT_NE(session2, session3); |
137 ASSERT_TRUE(tracker.DeleteSession(tag3)); | 137 ASSERT_TRUE(tracker.DeleteSession(tag3)); |
138 ASSERT_EQ(2U, tracker.num_synced_sessions()); | 138 ASSERT_EQ(2U, tracker.num_synced_sessions()); |
139 | 139 |
140 tracker.PutWindowInSession(tag1, 0); // Create a window. | 140 tracker.PutWindowInSession(tag1, 0); // Create a window. |
141 tracker.PutTabInWindow(tag1, 0, 2, 0); // No longer unmapped. | 141 tracker.PutTabInWindow(tag1, 0, 2, 0); // No longer unmapped. |
142 ASSERT_EQ(3U, tracker.num_synced_tabs(tag1)); // Has not changed. | 142 ASSERT_EQ(3U, tracker.num_synced_tabs(tag1)); // Has not changed. |
143 | 143 |
144 const SessionTab *tab_ptr; | 144 const SyncedSessionTab *tab_ptr; |
145 ASSERT_TRUE(tracker.LookupSessionTab(tag1, 0, &tab_ptr)); | 145 ASSERT_TRUE(tracker.LookupSessionTab(tag1, 0, &tab_ptr)); |
146 ASSERT_EQ(tab_ptr, tabs1[0]); | 146 ASSERT_EQ(tab_ptr, tabs1[0]); |
147 ASSERT_TRUE(tracker.LookupSessionTab(tag1, 2, &tab_ptr)); | 147 ASSERT_TRUE(tracker.LookupSessionTab(tag1, 2, &tab_ptr)); |
148 ASSERT_EQ(tab_ptr, tabs1[2]); | 148 ASSERT_EQ(tab_ptr, tabs1[2]); |
149 ASSERT_FALSE(tracker.LookupSessionTab(tag1, 3, &tab_ptr)); | 149 ASSERT_FALSE(tracker.LookupSessionTab(tag1, 3, &tab_ptr)); |
150 ASSERT_EQ(static_cast<const SessionTab*>(NULL), tab_ptr); | 150 ASSERT_EQ(static_cast<const SyncedSessionTab*>(NULL), tab_ptr); |
151 | 151 |
152 std::vector<const SessionWindow*> windows; | 152 std::vector<const SessionWindow*> windows; |
153 ASSERT_TRUE(tracker.LookupSessionWindows(tag1, &windows)); | 153 ASSERT_TRUE(tracker.LookupSessionWindows(tag1, &windows)); |
154 ASSERT_EQ(1U, windows.size()); | 154 ASSERT_EQ(1U, windows.size()); |
155 ASSERT_TRUE(tracker.LookupSessionWindows(tag2, &windows)); | 155 ASSERT_TRUE(tracker.LookupSessionWindows(tag2, &windows)); |
156 ASSERT_EQ(0U, windows.size()); | 156 ASSERT_EQ(0U, windows.size()); |
157 | 157 |
158 // The sessions don't have valid tabs, lookup should not succeed. | 158 // The sessions don't have valid tabs, lookup should not succeed. |
159 std::vector<const SyncedSession*> sessions; | 159 std::vector<const SyncedSession*> sessions; |
160 ASSERT_FALSE(tracker.LookupAllForeignSessions(&sessions)); | 160 ASSERT_FALSE(tracker.LookupAllForeignSessions(&sessions)); |
161 | 161 |
162 tracker.Clear(); | 162 tracker.Clear(); |
163 ASSERT_EQ(0U, tracker.num_synced_tabs(tag1)); | 163 ASSERT_EQ(0U, tracker.num_synced_tabs(tag1)); |
164 ASSERT_EQ(0U, tracker.num_synced_tabs(tag2)); | 164 ASSERT_EQ(0U, tracker.num_synced_tabs(tag2)); |
165 ASSERT_EQ(0U, tracker.num_synced_sessions()); | 165 ASSERT_EQ(0U, tracker.num_synced_sessions()); |
166 } | 166 } |
167 | 167 |
168 TEST_F(SyncedSessionTrackerTest, ManyGetTabs) { | 168 TEST_F(SyncedSessionTrackerTest, ManyGetTabs) { |
169 SyncedSessionTracker tracker; | 169 SyncedSessionTracker tracker; |
170 ASSERT_TRUE(tracker.Empty()); | 170 ASSERT_TRUE(tracker.Empty()); |
171 const int kMaxSessions = 10; | 171 const int kMaxSessions = 10; |
172 const int kMaxTabs = 1000; | 172 const int kMaxTabs = 1000; |
173 const int kMaxAttempts = 10000; | 173 const int kMaxAttempts = 10000; |
174 for (int j=0; j<kMaxSessions; ++j) { | 174 for (int j=0; j<kMaxSessions; ++j) { |
175 std::string tag = base::StringPrintf("tag%d", j); | 175 std::string tag = base::StringPrintf("tag%d", j); |
176 for (int i=0; i<kMaxAttempts; ++i) { | 176 for (int i=0; i<kMaxAttempts; ++i) { |
177 // More attempts than tabs means we'll sometimes get the same tabs, | 177 // More attempts than tabs means we'll sometimes get the same tabs, |
178 // sometimes have to allocate new tabs. | 178 // sometimes have to allocate new tabs. |
179 int rand_tab_num = base::RandInt(0, kMaxTabs); | 179 int rand_tab_num = base::RandInt(0, kMaxTabs); |
180 SessionTab* tab = tracker.GetTab(tag, rand_tab_num); | 180 SyncedSessionTab* tab = tracker.GetTab(tag, rand_tab_num); |
181 ASSERT_TRUE(tab); | 181 ASSERT_TRUE(tab); |
182 } | 182 } |
183 } | 183 } |
184 } | 184 } |
185 | 185 |
186 TEST_F(SyncedSessionTrackerTest, SessionTracking) { | 186 TEST_F(SyncedSessionTrackerTest, SessionTracking) { |
187 SyncedSessionTracker tracker; | 187 SyncedSessionTracker tracker; |
188 ASSERT_TRUE(tracker.Empty()); | 188 ASSERT_TRUE(tracker.Empty()); |
189 std::string tag1 = "tag1"; | 189 std::string tag1 = "tag1"; |
190 std::string tag2 = "tag2"; | 190 std::string tag2 = "tag2"; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 ASSERT_EQ(1U, session2->windows[2]->tabs.size()); | 236 ASSERT_EQ(1U, session2->windows[2]->tabs.size()); |
237 ASSERT_EQ(2U, tracker.num_synced_sessions()); | 237 ASSERT_EQ(2U, tracker.num_synced_sessions()); |
238 ASSERT_EQ(4U, tracker.num_synced_tabs(tag1)); | 238 ASSERT_EQ(4U, tracker.num_synced_tabs(tag1)); |
239 ASSERT_EQ(1U, tracker.num_synced_tabs(tag2)); | 239 ASSERT_EQ(1U, tracker.num_synced_tabs(tag2)); |
240 | 240 |
241 // All memory should be properly deallocated by destructor for the | 241 // All memory should be properly deallocated by destructor for the |
242 // SyncedSessionTracker. | 242 // SyncedSessionTracker. |
243 } | 243 } |
244 | 244 |
245 } // namespace browser_sync | 245 } // namespace browser_sync |
OLD | NEW |