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

Unified Diff: chrome/test/live_sync/live_sessions_sync_test.h

Issue 5705004: [SYNC] Sessions datatype refactor. Most things related to sessions under-the-... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Rebase Created 9 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/chrome_tests.gypi ('k') | chrome/test/live_sync/single_client_live_sessions_sync_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/live_sync/live_sessions_sync_test.h
===================================================================
--- chrome/test/live_sync/live_sessions_sync_test.h (revision 70604)
+++ chrome/test/live_sync/live_sessions_sync_test.h (working copy)
@@ -92,24 +92,25 @@
// Internal method used in the callback to obtain the current session.
// Lives on and called from backend thread (file_thread).
// We don't own windows so need to make a deep copy.
+ // In this case, we only copy those values compared against in WindowsMatch
+ // (number of windows, number of tabs, and navigations within tabs).
void OnGotSession(int handle, std::vector<SessionWindow*>* windows) {
- // Hacky. We need to make a deep copy of the session windows. One way to do
- // this is to use the session model associators functionality to create
- // foreign sessions, which themselves wrap a SessionWindow vector. We just
- // need to make sure to destroy all the foreign sessions we created when
- // we're done. That's what the foreign_sessions_ ScopedVector is for.
- sync_pb::SessionSpecifics session;
- profile_->GetProfileSyncService()->
- GetSessionModelAssociator()->
- FillSpecificsFromSessions(windows, &session);
-
- std::vector<ForeignSession*> foreign_sessions;
- profile_->GetProfileSyncService()->
- GetSessionModelAssociator()->
- AppendForeignSessionFromSpecifics(&session, &foreign_sessions);
- ASSERT_EQ(foreign_sessions.size(), 1U);
- foreign_sessions_.push_back(foreign_sessions[0]);
- windows_ = &foreign_sessions[0]->windows;
+ scoped_ptr<ForeignSession> foreign_session(new ForeignSession());
+ for (size_t w = 0; w < windows->size(); ++w) {
+ const SessionWindow& window = *windows->at(w);
+ scoped_ptr<SessionWindow> new_window(new SessionWindow());
+ for (size_t t = 0; t < window.tabs.size(); ++t) {
+ const SessionTab& tab = *window.tabs.at(t);
+ scoped_ptr<SessionTab> new_tab(new SessionTab());
+ new_tab->navigations.resize(tab.navigations.size());
+ std::copy(tab.navigations.begin(), tab.navigations.end(),
+ new_tab->navigations.begin());
+ new_window->tabs.push_back(new_tab.release());
+ }
+ foreign_session->windows.push_back(new_window.release());
+ }
+ windows_ = &(foreign_session->windows);
+ foreign_sessions_.push_back(foreign_session.release());
got_windows_.Signal();
}
@@ -240,19 +241,19 @@
// Returns number of foreign sessions for a profile.
int GetNumForeignSessions(int index) {
- ScopedVector<ForeignSession> sessions;
+ std::vector<const ForeignSession*> sessions;
if (!GetProfile(index)->GetProfileSyncService()->
- GetSessionModelAssociator()->GetSessionData(&sessions.get()))
+ GetSessionModelAssociator()->GetAllForeignSessions(&sessions))
return 0;
return sessions.size();
}
// Fills the sessions vector with the model associator's foreign session data.
- // Caller owns sessions.
- bool GetSessionData(int index, std::vector<ForeignSession*>* sessions)
+ // Caller owns |sessions|, but not ForeignSession objects within.
+ bool GetSessionData(int index, std::vector<const ForeignSession*>* sessions)
WARN_UNUSED_RESULT {
if (!GetProfile(index)->GetProfileSyncService()->
- GetSessionModelAssociator()->GetSessionData(sessions))
+ GetSessionModelAssociator()->GetAllForeignSessions(sessions))
return false;
SortForeignSessions(sessions);
return true;
@@ -284,7 +285,9 @@
// Compares a foreign session based on the first session window.
// Returns true based on the comparison of the session windows.
- static bool CompareForeignSessions(ForeignSession* lhs, ForeignSession* rhs) {
+ static bool CompareForeignSessions(
+ const ForeignSession* lhs,
+ const ForeignSession* rhs) {
if (!lhs ||
!rhs ||
lhs->windows.size() < 1 ||
@@ -297,18 +300,33 @@
}
// Sort a foreign session vector using our custom foreign session comparator.
- void SortForeignSessions(std::vector<ForeignSession*>* sessions) {
+ void SortForeignSessions(std::vector<const ForeignSession*>* sessions) {
std::sort(sessions->begin(), sessions->end(),
LiveSessionsSyncTest::CompareForeignSessions);
}
+ // Compares two tab navigations base on the parameters we sync.
+ // (Namely, we don't sync state or type mask)
+ bool NavigationEquals(const TabNavigation& expected,
+ const TabNavigation& actual) {
+ if (expected.virtual_url() != actual.virtual_url())
+ return false;
+ if (expected.referrer() != actual.referrer())
+ return false;
+ if (expected.title() != actual.title())
+ return false;
+ if (expected.transition() != actual.transition())
+ return false;
+ return true;
+ }
+
// Verifies that two SessionWindows match.
// Returns:
// - true if all the following match:
- // 1. number of SessionWindows per vector,
+ // 1. number of SessionWindows,
// 2. number of tabs per SessionWindow,
- // 3. number of tab navigations per nab,
- // 4. actual tab navigations
+ // 3. number of tab navigations per tab,
+ // 4. actual tab navigations contents
// - false otherwise.
bool WindowsMatch(const std::vector<SessionWindow*> &win1,
const std::vector<SessionWindow*> &win2) WARN_UNUSED_RESULT {
@@ -323,8 +341,10 @@
client0_tab = win1[i]->tabs[j];
client1_tab = win2[i]->tabs[j];
for (size_t k = 0; k < client0_tab->navigations.size(); ++k) {
- GetHelper(0)->AssertNavigationEquals(client0_tab->navigations[k],
- client1_tab->navigations[k]);
+ if (!NavigationEquals(client0_tab->navigations[k],
+ client1_tab->navigations[k])) {
+ return false;
+ }
}
}
}
@@ -339,14 +359,14 @@
bool CheckForeignSessionsAgainst(int index,
const std::vector<std::vector<SessionWindow*>* >& windows)
WARN_UNUSED_RESULT {
- ScopedVector<ForeignSession> sessions;
- if (!GetSessionData(index, &sessions.get()))
+ std::vector<const ForeignSession*> sessions;
+ if (!GetSessionData(index, &sessions))
return false;
if ((size_t)(num_clients()-1) != sessions.size())
return false;
int window_index = 0;
- for (size_t j = 0; j < sessions->size(); ++j, ++window_index) {
+ for (size_t j = 0; j < sessions.size(); ++j, ++window_index) {
if (window_index == index)
window_index++; // Skip self.
if (!WindowsMatch(sessions[j]->windows, *windows[window_index]))
« no previous file with comments | « chrome/chrome_tests.gypi ('k') | chrome/test/live_sync/single_client_live_sessions_sync_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698