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

Unified Diff: chrome/browser/sync/test/integration/sessions_helper.cc

Issue 2713913002: [sync] Add Sessions integration tests (Closed)
Patch Set: Update commit message Created 3 years, 10 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
Index: chrome/browser/sync/test/integration/sessions_helper.cc
diff --git a/chrome/browser/sync/test/integration/sessions_helper.cc b/chrome/browser/sync/test/integration/sessions_helper.cc
index 98e0936e214d9914a5802d3d8427b0ce63d44bab..cc0abe316587e2a22f6e9be866db594bc5d25ddf 100644
--- a/chrome/browser/sync/test/integration/sessions_helper.cc
+++ b/chrome/browser/sync/test/integration/sessions_helper.cc
@@ -23,11 +23,19 @@
#include "chrome/browser/sync/sessions/notification_service_sessions_router.h"
#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
#include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/singleton_tabs.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/test/base/ui_test_utils.h"
#include "components/browser_sync/profile_sync_service.h"
#include "components/sync/driver/sync_client.h"
+#include "components/sync/test/fake_server/fake_server.h"
+#include "components/sync/test/fake_server/sessions_hierarchy.h"
#include "components/sync_sessions/open_tabs_ui_delegate.h"
+#include "content/public/browser/navigation_entry.h"
+#include "content/public/browser/web_contents.h"
#include "content/public/test/test_utils.h"
#include "url/gurl.h"
@@ -35,10 +43,12 @@ using sync_datatype_helper::test;
namespace sessions_helper {
-bool GetLocalSession(int index, const sync_sessions::SyncedSession** session) {
- return ProfileSyncServiceFactory::GetInstance()->GetForProfile(
- test()->GetProfile(index))->GetOpenTabsUIDelegate()->
- GetLocalSession(session);
+bool GetLocalSession(int profile_index,
+ const sync_sessions::SyncedSession** session) {
+ return ProfileSyncServiceFactory::GetInstance()
+ ->GetForProfile(test()->GetProfile(profile_index))
+ ->GetOpenTabsUIDelegate()
+ ->GetLocalSession(session);
}
bool ModelAssociatorHasTabWithUrl(int index, const GURL& url) {
@@ -84,22 +94,60 @@ bool ModelAssociatorHasTabWithUrl(int index, const GURL& url) {
return false;
}
-bool OpenTab(int index, const GURL& url) {
- DVLOG(1) << "Opening tab: " << url.spec() << " using profile "
- << index << ".";
- chrome::ShowSingletonTab(test()->GetBrowser(index), url);
- return WaitForTabsToLoad(index, std::vector<GURL>(1, url));
+bool OpenTab(int browser_index, const GURL& url) {
+ DVLOG(1) << "Opening tab: " << url.spec() << " using browser "
+ << browser_index << ".";
+ return OpenTabAtIndex(browser_index, 0, url);
+}
+
+bool OpenTabAtIndex(int browser_index, int tab_index, const GURL& url) {
+ chrome::AddTabAt(test()->GetBrowser(browser_index), url, tab_index, true);
+ return WaitForTabsToLoad(browser_index, {url});
}
-bool OpenMultipleTabs(int index, const std::vector<GURL>& urls) {
- Browser* browser = test()->GetBrowser(index);
+bool OpenMultipleTabs(int browser_index, const std::vector<GURL>& urls) {
+ Browser* browser = test()->GetBrowser(browser_index);
for (std::vector<GURL>::const_iterator it = urls.begin();
it != urls.end(); ++it) {
- DVLOG(1) << "Opening tab: " << it->spec() << " using profile " << index
- << ".";
+ DVLOG(1) << "Opening tab: " << it->spec() << " using browser "
+ << browser_index << ".";
chrome::ShowSingletonTab(browser, *it);
}
- return WaitForTabsToLoad(index, urls);
+ return WaitForTabsToLoad(browser_index, urls);
+}
+
+void MoveTab(int from_browser_index, int to_browser_index, int tab_index) {
+ content::WebContents* detached_contents =
+ test()
+ ->GetBrowser(from_browser_index)
+ ->tab_strip_model()
+ ->DetachWebContentsAt(tab_index);
+
+ TabStripModel* target_strip =
+ test()->GetBrowser(to_browser_index)->tab_strip_model();
+ target_strip->InsertWebContentsAt(target_strip->count(), detached_contents,
+ TabStripModel::ADD_ACTIVE);
+}
+
+bool NavigateTab(int browser_index, const GURL& url) {
+ chrome::NavigateParams params(test()->GetBrowser(browser_index), url,
+ ui::PAGE_TRANSITION_LINK);
+ params.disposition = WindowOpenDisposition::CURRENT_TAB;
+
+ ui_test_utils::NavigateToURL(&params);
+ return WaitForTabsToLoad(browser_index, {url});
+}
+
+void NavigateTabBack(int browser_index) {
+ content::WebContents* tab_contents =
+ test()->GetBrowser(browser_index)->tab_strip_model()->GetWebContentsAt(0);
+ tab_contents->GetController().GoBack();
skym 2017/02/24 00:14:09 ->GetController().GoBack(); vs content::WebContent
Patrick Noland 2017/02/27 18:53:25 Done.
+}
+
+void NavigateTabForward(int browser_index) {
+ content::WebContents* tab_contents =
+ test()->GetBrowser(browser_index)->tab_strip_model()->GetWebContentsAt(0);
+ tab_contents->GetController().GoForward();
}
namespace {
@@ -137,7 +185,7 @@ class TabEventHandler : public sync_sessions::LocalSessionEventHandler {
} // namespace
-bool WaitForTabsToLoad(int index, const std::vector<GURL>& urls) {
+bool WaitForTabsToLoad(int profile_index, const std::vector<GURL>& urls) {
DVLOG(1) << "Waiting for session to propagate to associator.";
base::TimeTicks start_time = base::TimeTicks::Now();
base::TimeTicks end_time = start_time + TestTimeouts::action_max_timeout();
@@ -146,7 +194,7 @@ bool WaitForTabsToLoad(int index, const std::vector<GURL>& urls) {
it != urls.end(); ++it) {
found = false;
while (!found) {
- found = ModelAssociatorHasTabWithUrl(index, *it);
+ found = ModelAssociatorHasTabWithUrl(profile_index, *it);
if (base::TimeTicks::Now() >= end_time) {
LOG(ERROR) << "Failed to find all tabs after "
<< TestTimeouts::action_max_timeout().InSecondsF()
@@ -156,9 +204,9 @@ bool WaitForTabsToLoad(int index, const std::vector<GURL>& urls) {
if (!found) {
TabEventHandler handler;
sync_sessions::NotificationServiceSessionsRouter router(
- test()->GetProfile(index),
+ test()->GetProfile(profile_index),
ProfileSyncServiceFactory::GetInstance()
- ->GetForProfile(test()->GetProfile(index))
+ ->GetForProfile(test()->GetProfile(profile_index))
->GetSyncClient()
->GetSyncSessionsClient(),
syncer::SyncableService::StartSyncFlare());
@@ -170,11 +218,11 @@ bool WaitForTabsToLoad(int index, const std::vector<GURL>& urls) {
return true;
}
-bool GetLocalWindows(int index, ScopedWindowMap* local_windows) {
+bool GetLocalWindows(int profile_index, ScopedWindowMap* 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 sync_sessions::SyncedSession* local_session;
- if (!GetLocalSession(index, &local_session)) {
+ if (!GetLocalSession(profile_index, &local_session)) {
return false;
}
for (auto w = local_session->windows.begin();
@@ -199,47 +247,47 @@ bool GetLocalWindows(int index, ScopedWindowMap* local_windows) {
return true;
}
-bool OpenTabAndGetLocalWindows(int index,
+bool OpenTabAndGetLocalWindows(int profile_index,
const GURL& url,
ScopedWindowMap* local_windows) {
- if (!OpenTab(index, url)) {
+ if (!OpenTab(profile_index, url)) {
skym 2017/02/24 00:14:09 So you're passing a profile_index in as a browser_
Patrick Noland 2017/02/24 01:00:40 This is kind of ugly. SessionsHelper deeply assume
skym 2017/02/24 16:20:17 When you have some functions take a profile index
Patrick Noland 2017/02/27 18:53:25 Discussed offline, I went back to just naming ever
return false;
}
- return GetLocalWindows(index, local_windows);
+ return GetLocalWindows(profile_index, local_windows);
}
-bool CheckInitialState(int index) {
- if (0 != GetNumWindows(index))
+bool CheckInitialState(int profile_index) {
+ if (0 != GetNumWindows(profile_index))
return false;
- if (0 != GetNumForeignSessions(index))
+ if (0 != GetNumForeignSessions(profile_index))
return false;
return true;
}
-int GetNumWindows(int index) {
+int GetNumWindows(int profile_index) {
const sync_sessions::SyncedSession* local_session;
- if (!GetLocalSession(index, &local_session)) {
+ if (!GetLocalSession(profile_index, &local_session)) {
return 0;
}
return local_session->windows.size();
}
-int GetNumForeignSessions(int index) {
+int GetNumForeignSessions(int profile_index) {
SyncedSessionVector sessions;
- if (!ProfileSyncServiceFactory::GetInstance()->GetForProfile(
- test()->GetProfile(index))->
- GetOpenTabsUIDelegate()->GetAllForeignSessions(
- &sessions)) {
+ if (!ProfileSyncServiceFactory::GetInstance()
+ ->GetForProfile(test()->GetProfile(profile_index))
+ ->GetOpenTabsUIDelegate()
+ ->GetAllForeignSessions(&sessions)) {
return 0;
}
return sessions.size();
}
-bool GetSessionData(int index, SyncedSessionVector* sessions) {
- if (!ProfileSyncServiceFactory::GetInstance()->GetForProfile(
- test()->GetProfile(index))->
- GetOpenTabsUIDelegate()->GetAllForeignSessions(
- sessions)) {
+bool GetSessionData(int profile_index, SyncedSessionVector* sessions) {
+ if (!ProfileSyncServiceFactory::GetInstance()
+ ->GetForProfile(test()->GetProfile(profile_index))
+ ->GetOpenTabsUIDelegate()
+ ->GetAllForeignSessions(sessions)) {
return false;
}
SortSyncedSessions(sessions);
@@ -345,20 +393,20 @@ bool WindowsMatch(const SessionWindowMap& win1, const ScopedWindowMap& win2) {
return WindowsMatchImpl(win1, win2);
}
-bool CheckForeignSessionsAgainst(
- int index,
- const std::vector<ScopedWindowMap>& windows) {
+bool CheckForeignSessionsAgainst(int profile_index,
+ const std::vector<ScopedWindowMap>& windows) {
SyncedSessionVector sessions;
- if (!GetSessionData(index, &sessions)) {
+ if (!GetSessionData(profile_index, &sessions)) {
LOG(ERROR) << "Cannot get session data";
return false;
}
for (size_t w_index = 0; w_index < windows.size(); ++w_index) {
// Skip the client's local window
- if (static_cast<int>(w_index) == index)
+ if (static_cast<int>(w_index) == profile_index) {
continue;
+ }
size_t s_index = 0;
@@ -376,9 +424,9 @@ bool CheckForeignSessionsAgainst(
return true;
}
-void DeleteForeignSession(int index, std::string session_tag) {
+void DeleteForeignSession(int profile_index, std::string session_tag) {
ProfileSyncServiceFactory::GetInstance()
- ->GetForProfile(test()->GetProfile(index))
+ ->GetForProfile(test()->GetProfile(profile_index))
->GetOpenTabsUIDelegate()
->DeleteForeignSession(session_tag);
}
@@ -386,17 +434,34 @@ void DeleteForeignSession(int index, std::string session_tag) {
} // namespace sessions_helper
ForeignSessionsMatchChecker::ForeignSessionsMatchChecker(
- int index,
+ int profile_index,
const std::vector<sessions_helper::ScopedWindowMap>& windows)
: MultiClientStatusChangeChecker(
sync_datatype_helper::test()->GetSyncServices()),
- index_(index),
+ profile_index_(profile_index),
windows_(windows) {}
bool ForeignSessionsMatchChecker::IsExitConditionSatisfied() {
- return sessions_helper::CheckForeignSessionsAgainst(index_, windows_);
+ return sessions_helper::CheckForeignSessionsAgainst(profile_index_, windows_);
}
std::string ForeignSessionsMatchChecker::GetDebugMessage() const {
return "Waiting for matching foreign sessions";
}
+
+SessionHierarchyMatchChecker::SessionHierarchyMatchChecker(
+ browser_sync::ProfileSyncService* service,
+ const fake_server::SessionsHierarchy& sessions_hierarchy,
+ fake_server::FakeServer* fake_server)
+ : SingleClientStatusChangeChecker(service),
+ sessions_hierarchy_(sessions_hierarchy),
+ verifier_(fake_server) {}
+
+bool SessionHierarchyMatchChecker::IsExitConditionSatisfied() {
+ return verifier_.VerifySessions(sessions_hierarchy_);
+}
+
+std::string SessionHierarchyMatchChecker::GetDebugMessage() const {
+ return "Waiting for matching sessions hierarchy to be reflected in fake "
+ "server";
+}

Powered by Google App Engine
This is Rietveld 408576698