| 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" |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |