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

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

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

Powered by Google App Engine
This is Rietveld 408576698