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

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

Issue 10125002: [Sync] Add per-navigation timestamps/unique ids to tab sync. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 8 years, 8 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"
(...skipping 10 matching lines...) Expand all
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
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
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
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
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
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