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

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

Issue 2753753005: [sync] WebContentsObserver based sessions notifications (Closed)
Patch Set: use base:MakeUnique, alphabetize Created 3 years, 9 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 84a843a6cb158548faada77eba53021283a0ce51..8ac15077bbd9972ea157de3ab6f07d37b2aff120 100644
--- a/chrome/browser/sync/test/integration/sessions_helper.cc
+++ b/chrome/browser/sync/test/integration/sessions_helper.cc
@@ -20,7 +20,6 @@
#include "base/time/time.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sync/profile_sync_service_factory.h"
-#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"
@@ -35,7 +34,10 @@
#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/render_frame_host.h"
+#include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/test/browser_test_utils.cc"
#include "content/public/test/test_utils.h"
#include "url/gurl.h"
@@ -50,7 +52,7 @@ bool GetLocalSession(int index, const sync_sessions::SyncedSession** session) {
->GetLocalSession(session);
}
-bool ModelAssociatorHasTabWithUrl(int index, const GURL& url) {
+bool SessionsSyncManagerHasTabWithURL(int index, const GURL& url) {
content::RunAllPendingInMessageLoop();
const sync_sessions::SyncedSession* local_session;
if (!GetLocalSession(index, &local_session)) {
@@ -101,7 +103,10 @@ bool OpenTab(int index, const GURL& url) {
bool OpenTabAtIndex(int index, int tab_index, const GURL& url) {
chrome::AddTabAt(test()->GetBrowser(index), url, tab_index, true);
- return WaitForTabsToLoad(index, {url});
+ return WaitForTabToLoad(
+ index, url,
+ test()->GetBrowser(index)->tab_strip_model()->GetWebContentsAt(
+ tab_index));
}
bool OpenMultipleTabs(int index, const std::vector<GURL>& urls) {
@@ -115,6 +120,31 @@ bool OpenMultipleTabs(int index, const std::vector<GURL>& urls) {
return WaitForTabsToLoad(index, urls);
}
+bool OpenTabFromSourceIndex(int index,
+ int index_of_source_tab,
+ const GURL& url,
+ WindowOpenDisposition disposition) {
+ content::WebContents* source_contents =
+ test()->GetBrowser(index)->tab_strip_model()->GetWebContentsAt(
+ index_of_source_tab);
+
+ content::OpenURLParams open_url_params(url, content::Referrer(), disposition,
+ ui::PAGE_TRANSITION_LINK, false,
+ false);
+ open_url_params.source_render_frame_id =
+ source_contents->GetMainFrame()->GetRoutingID();
+ open_url_params.source_render_process_id =
+ source_contents->GetRenderProcessHost()->GetID();
+
+ content::WebContents* new_contents =
+ source_contents->OpenURL(open_url_params);
+ if (!new_contents) {
+ return false;
+ }
+
+ return WaitForTabToLoad(index, url, new_contents);
+}
+
void MoveTab(int from_index, int to_index, int tab_index) {
content::WebContents* detached_contents =
test()
@@ -133,7 +163,7 @@ bool NavigateTab(int index, const GURL& url) {
params.disposition = WindowOpenDisposition::CURRENT_TAB;
ui_test_utils::NavigateToURL(&params);
- return WaitForTabsToLoad(index, {url});
+ return WaitForTabToLoad(index, url, params.target_contents);
}
void NavigateTabBack(int index) {
@@ -154,69 +184,38 @@ void NavigateTabForward(int index) {
.GoForward();
}
-namespace {
-
-class TabEventHandler : public sync_sessions::LocalSessionEventHandler {
- public:
- TabEventHandler() : weak_factory_(this) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&TabEventHandler::QuitLoop, weak_factory_.GetWeakPtr()),
- TestTimeouts::action_max_timeout());
- }
-
- void OnLocalTabModified(
- sync_sessions::SyncedTabDelegate* modified_tab) override {
- // Unwind to ensure SessionsSyncManager has processed the event.
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::Bind(&TabEventHandler::QuitLoop, weak_factory_.GetWeakPtr()));
- }
-
- void OnFaviconsChanged(const std::set<GURL>& /* page_urls */,
- const GURL& /* icon_url */) override {
- // Unwind to ensure SessionsSyncManager has processed the event.
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::Bind(&TabEventHandler::QuitLoop, weak_factory_.GetWeakPtr()));
+bool WaitForTabsToLoad(int index, const std::vector<GURL>& urls) {
+ int tab_index = 0;
+ for (const auto& url : urls) {
+ bool success = WaitForTabToLoad(
+ index, url,
+ test()->GetBrowser(index)->tab_strip_model()->GetWebContentsAt(
+ tab_index));
+ if (!success) {
+ return false;
+ }
+ tab_index++;
}
+ return true;
+}
- private:
- void QuitLoop() { base::MessageLoop::current()->QuitWhenIdle(); }
-
- base::WeakPtrFactory<TabEventHandler> weak_factory_;
-};
-
-} // namespace
-
-bool WaitForTabsToLoad(int index, const std::vector<GURL>& urls) {
+bool WaitForTabToLoad(int index,
+ const GURL& url,
+ content::WebContents* web_contents) {
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();
- 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 "
- << TestTimeouts::action_max_timeout().InSecondsF()
- << " seconds.";
- return false;
- }
- if (!found) {
- TabEventHandler handler;
- sync_sessions::NotificationServiceSessionsRouter router(
- test()->GetProfile(index),
- ProfileSyncServiceFactory::GetInstance()
- ->GetForProfile(test()->GetProfile(index))
- ->GetSyncClient()
- ->GetSyncSessionsClient(),
- syncer::SyncableService::StartSyncFlare());
- router.StartRoutingTo(&handler);
- content::RunMessageLoop();
- }
+ bool found = false;
+ while (!found) {
+ found = SessionsSyncManagerHasTabWithURL(index, url);
+ if (base::TimeTicks::Now() >= end_time) {
+ LOG(ERROR) << "Failed to find url " << url.spec() << " in tab after "
+ << TestTimeouts::action_max_timeout().InSecondsF()
+ << " seconds.";
+ return false;
+ }
+ if (!found) {
+ content::WaitForLoadStop(web_contents);
}
}
return true;
@@ -224,7 +223,7 @@ bool WaitForTabsToLoad(int index, const std::vector<GURL>& urls) {
bool GetLocalWindows(int 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.
+ // controlled, by the sessions sync manager, so we must make our own copy.
const sync_sessions::SyncedSession* local_session;
if (!GetLocalSession(index, &local_session)) {
return false;

Powered by Google App Engine
This is Rietveld 408576698