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

Unified Diff: chrome/test/live_sync/sessions_helper.cc

Issue 7828055: Move sync test code out of chrome/test (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 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/test/live_sync/sessions_helper.h ('k') | chrome/test/live_sync/single_client_apps_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/sessions_helper.cc
===================================================================
--- chrome/test/live_sync/sessions_helper.cc (revision 99413)
+++ chrome/test/live_sync/sessions_helper.cc (working copy)
@@ -1,293 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/test/live_sync/sessions_helper.h"
-
-#include "base/stl_util.h"
-#include "base/test/test_timeouts.h"
-#include "base/time.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sync/profile_sync_service.h"
-#include "chrome/browser/sync/profile_sync_service_harness.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
-#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
-#include "chrome/test/base/ui_test_utils.h"
-#include "chrome/test/live_sync/sync_datatype_helper.h"
-#include "chrome/test/live_sync/live_sync_test.h"
-#include "content/browser/browser_thread.h"
-#include "content/browser/tab_contents/tab_contents.h"
-#include "googleurl/src/gurl.h"
-
-using sync_datatype_helper::test;
-
-namespace sessions_helper {
-
-bool GetLocalSession(int index, const SyncedSession** session) {
- return test()->GetProfile(index)->GetProfileSyncService()->
- GetSessionModelAssociator()->GetLocalSession(session);
-}
-
-bool ModelAssociatorHasTabWithUrl(int index, const GURL& url) {
- ui_test_utils::RunAllPendingInMessageLoop();
- const SyncedSession* local_session;
- if (!GetLocalSession(index, &local_session)) {
- return false;
- }
-
- if (local_session->windows.size() == 0) {
- VLOG(1) << "Empty windows vector";
- return false;
- }
-
- int nav_index;
- TabNavigation nav;
- for (SessionWindowVector::const_iterator it =
- local_session->windows.begin(); it != local_session->windows.end();
- ++it) {
- if ((*it)->tabs.size() == 0) {
- VLOG(1) << "Empty tabs vector";
- continue;
- }
- for (std::vector<SessionTab*>::const_iterator tab_it =
- (*it)->tabs.begin(); tab_it != (*it)->tabs.end(); ++tab_it) {
- if ((*tab_it)->navigations.size() == 0) {
- VLOG(1) << "Empty navigations vector";
- continue;
- }
- nav_index = (*tab_it)->current_navigation_index;
- nav = (*tab_it)->navigations[nav_index];
- if (nav.virtual_url() == url) {
- VLOG(1) << "Found tab with url " << url.spec();
- if (nav.title().empty()) {
- VLOG(1) << "No title!";
- continue;
- }
- return true;
- }
- }
- }
- VLOG(1) << "Could not find tab with url " << url.spec();
- return false;
-}
-
-bool OpenTab(int index, const GURL& url) {
- VLOG(1) << "Opening tab: " << url.spec() << " using profile " << index << ".";
- test()->GetBrowser(index)->ShowSingletonTab(url);
- return WaitForTabsToLoad(index, std::vector<GURL>(1, url));
-}
-
-bool OpenMultipleTabs(int index, const std::vector<GURL>& urls) {
- Browser* browser = test()->GetBrowser(index);
- for (std::vector<GURL>::const_iterator it = urls.begin();
- it != urls.end(); ++it) {
- VLOG(1) << "Opening tab: " << it->spec() << " using profile " << index
- << ".";
- browser->ShowSingletonTab(*it);
- }
- return WaitForTabsToLoad(index, urls);
-}
-
-bool WaitForTabsToLoad(int index, const std::vector<GURL>& urls) {
- VLOG(1) << "Waiting for session to propagate to associator.";
- static const int timeout_milli = TestTimeouts::action_max_timeout_ms();
- base::TimeTicks start_time = base::TimeTicks::Now();
- base::TimeTicks end_time = start_time +
- base::TimeDelta::FromMilliseconds(timeout_milli);
- bool found;
- for (std::vector<GURL>::const_iterator it = urls.begin();
- it != urls.end(); ++it) {
- found = false;
- while (!found) {
- found = ModelAssociatorHasTabWithUrl(index, *it);
- if (base::TimeTicks::Now() >= end_time) {
- LOG(ERROR) << "Failed to find all tabs after " << timeout_milli/1000.0
- << " seconds.";
- return false;
- }
- if (!found) {
- test()->GetProfile(index)->GetProfileSyncService()->
- GetSessionModelAssociator()->
- BlockUntilLocalChangeForTest(timeout_milli);
- ui_test_utils::RunMessageLoop();
- }
- }
- }
- return true;
-}
-
-bool GetLocalWindows(int index, SessionWindowVector& local_windows) {
- // The local session provided by GetLocalSession is owned, and has lifetime
- // controlled, by the model associator, so we must make our own copy.
- const SyncedSession* local_session;
- if (!GetLocalSession(index, &local_session)) {
- return false;
- }
- for (size_t w = 0; w < local_session->windows.size(); ++w) {
- const SessionWindow& window = *local_session->windows.at(w);
- SessionWindow* new_window = new SessionWindow();
- for (size_t t = 0; t < window.tabs.size(); ++t) {
- const SessionTab& tab = *window.tabs.at(t);
- 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);
- }
- local_windows.push_back(new_window);
- }
-
- // Sort the windows so their order is deterministic.
- SortSessionWindows(local_windows);
-
- return true;
-}
-
-bool OpenTabAndGetLocalWindows(int index,
- const GURL& url,
- SessionWindowVector& local_windows) {
- if (!OpenTab(index, url)) {
- return false;
- }
- return GetLocalWindows(index, local_windows);
-}
-
-bool CheckInitialState(int index) {
- if (0 != GetNumWindows(index))
- return false;
- if (0 != GetNumForeignSessions(index))
- return false;
- return true;
-}
-
-int GetNumWindows(int index) {
- const SyncedSession* local_session;
- if (!GetLocalSession(index, &local_session)) {
- return 0;
- }
- return local_session->windows.size();
-}
-
-int GetNumForeignSessions(int index) {
- SyncedSessionVector sessions;
- if (!test()->GetProfile(index)->GetProfileSyncService()->
- GetSessionModelAssociator()->GetAllForeignSessions(&sessions))
- return 0;
- return sessions.size();
-}
-
-bool GetSessionData(int index, SyncedSessionVector* sessions) {
- if (!test()->GetProfile(index)->GetProfileSyncService()->
- GetSessionModelAssociator()->GetAllForeignSessions(sessions))
- return false;
- SortSyncedSessions(sessions);
- return true;
-}
-
-bool CompareSessionWindows(SessionWindow* lhs, SessionWindow* rhs) {
- if (!lhs ||
- !rhs ||
- lhs->tabs.size() < 1 ||
- rhs->tabs.size() < 1 ||
- lhs->tabs[0]->navigations.size() < 1 ||
- rhs->tabs[0]->navigations.size() < 1) {
- // Catchall for uncomparable data.
- return false;
- }
-
- return lhs->tabs[0]->navigations[0].virtual_url() <
- rhs->tabs[0]->navigations[0].virtual_url();
-}
-
-void SortSessionWindows(SessionWindowVector& windows) {
- std::sort(windows.begin(), windows.end(),
- CompareSessionWindows);
-}
-
-bool CompareSyncedSessions(const SyncedSession* lhs, const SyncedSession* rhs) {
- if (!lhs ||
- !rhs ||
- lhs->windows.size() < 1 ||
- rhs->windows.size() < 1) {
- // Catchall for uncomparable data.
- return false;
- }
-
- return CompareSessionWindows(lhs->windows[0], rhs->windows[0]);
-}
-
-void SortSyncedSessions(SyncedSessionVector* sessions) {
- std::sort(sessions->begin(), sessions->end(),
- CompareSyncedSessions);
-}
-
-bool NavigationEquals(const TabNavigation& expected,
- const TabNavigation& actual) {
- if (expected.virtual_url() != actual.virtual_url()) {
- LOG(ERROR) << "Expected url " << expected.virtual_url()
- << ", actual " << actual.virtual_url();
- return false;
- }
- if (expected.referrer() != actual.referrer()) {
- LOG(ERROR) << "Expected referrer " << expected.referrer()
- << ", actual " << actual.referrer();
- return false;
- }
- if (expected.title() != actual.title()) {
- LOG(ERROR) << "Expected title " << expected.title()
- << ", actual " << actual.title();
- return false;
- }
- if (expected.transition() != actual.transition()) {
- LOG(ERROR) << "Expected transition " << expected.transition()
- << ", actual " << actual.transition();
- return false;
- }
- return true;
-}
-
-bool WindowsMatch(const SessionWindowVector& win1,
- const SessionWindowVector& win2) {
- SessionTab* client0_tab;
- SessionTab* client1_tab;
- if (win1.size() != win2.size())
- return false;
- for (size_t i = 0; i < win1.size(); ++i) {
- if (win1[i]->tabs.size() != win2[i]->tabs.size())
- return false;
- for (size_t j = 0; j < win1[i]->tabs.size(); ++j) {
- client0_tab = win1[i]->tabs[j];
- client1_tab = win2[i]->tabs[j];
- for (size_t k = 0; k < client0_tab->navigations.size(); ++k) {
- if (!NavigationEquals(client0_tab->navigations[k],
- client1_tab->navigations[k])) {
- return false;
- }
- }
- }
- }
-
- return true;
-}
-
-bool CheckForeignSessionsAgainst(
- int index,
- const std::vector<SessionWindowVector*>& windows) {
- SyncedSessionVector sessions;
- if (!GetSessionData(index, &sessions))
- return false;
- if ((size_t)(test()->num_clients()-1) != sessions.size())
- return false;
-
- int window_index = 0;
- 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]))
- return false;
- }
-
- return true;
-}
-
-} // namespace sessions_helper
« no previous file with comments | « chrome/test/live_sync/sessions_helper.h ('k') | chrome/test/live_sync/single_client_apps_sync_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698