From e4b3ad0d05cea43d8f63632ce78397d0692f196a Mon Sep 17 00:00:00 2001 From: "dubroy@chromium.org" Date: Fri, 23 Mar 2012 09:29:34 +0000 Subject: Restore the back/forward stack when opening tabs from other devices. BUG=68758 TEST=Added new browser_test SessionRestoreTest.RestoreForeignTab. Review URL: https://chromiumcodereview.appspot.com/9731001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128444 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/test/base/ui_test_utils.cc | 53 ++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 26 deletions(-) (limited to 'chrome/test/base/ui_test_utils.cc') diff --git a/chrome/test/base/ui_test_utils.cc b/chrome/test/base/ui_test_utils.cc index 6b7b318..80ce0fe 100644 --- a/chrome/test/base/ui_test_utils.cc +++ b/chrome/test/base/ui_test_utils.cc @@ -363,24 +363,6 @@ void WaitForLoadStop(WebContents* tab) { load_stop_observer.Wait(); } -Browser* WaitForNewBrowser() { - TestNotificationObserver observer; - RegisterAndWait(&observer, chrome::NOTIFICATION_BROWSER_WINDOW_READY, - content::NotificationService::AllSources()); - return content::Source(observer.source()).ptr(); -} - -Browser* WaitForBrowserNotInSet(std::set excluded_browsers) { - TestNotificationObserver observer; - Browser* new_browser = GetBrowserNotInSet(excluded_browsers); - if (new_browser == NULL) { - new_browser = WaitForNewBrowser(); - // The new browser should never be in |excluded_browsers|. - DCHECK(!ContainsKey(excluded_browsers, new_browser)); - } - return new_browser; -} - void OpenURLOffTheRecord(Profile* profile, const GURL& url) { Browser::OpenURLOffTheRecord(profile, url); Browser* browser = BrowserList::FindTabbedBrowser( @@ -424,21 +406,15 @@ static void NavigateToURLWithDispositionBlockUntilNavigationsComplete( NULL, number_of_navigations); - std::set initial_browsers; - for (std::vector::const_iterator iter = BrowserList::begin(); - iter != BrowserList::end(); - ++iter) { - initial_browsers.insert(*iter); - } - WindowedNotificationObserver tab_added_observer( content::NOTIFICATION_TAB_ADDED, content::NotificationService::AllSources()); + BrowserAddedObserver browser_added_observer; browser->OpenURL(OpenURLParams( url, Referrer(), disposition, content::PAGE_TRANSITION_TYPED, false)); if (browser_test_flags & BROWSER_TEST_WAIT_FOR_BROWSER) - browser = WaitForBrowserNotInSet(initial_browsers); + browser = browser_added_observer.WaitForSingleNewBrowser(); if (browser_test_flags & BROWSER_TEST_WAIT_FOR_TAB) tab_added_observer.Wait(); if (!(browser_test_flags & BROWSER_TEST_WAIT_FOR_NAVIGATION)) { @@ -920,6 +896,14 @@ WindowedNotificationObserver::WindowedNotificationObserver( registrar_.Add(this, notification_type, waiting_for_); } +WindowedNotificationObserver::WindowedNotificationObserver( + int notification_type) + : seen_(false), + running_(false), + waiting_for_(content::NotificationService::AllSources()) { + registrar_.Add(this, notification_type, waiting_for_); +} + WindowedNotificationObserver::~WindowedNotificationObserver() {} void WindowedNotificationObserver::Wait() { @@ -976,6 +960,23 @@ void TitleWatcher::AlsoWaitForTitle(const string16& expected_title) { TitleWatcher::~TitleWatcher() { } +BrowserAddedObserver::BrowserAddedObserver() + : notification_observer_( + chrome::NOTIFICATION_BROWSER_OPENED, + content::NotificationService::AllSources()) { + original_browsers_.insert(BrowserList::begin(), BrowserList::end()); +} + +BrowserAddedObserver::~BrowserAddedObserver() { +} + +Browser* BrowserAddedObserver::WaitForSingleNewBrowser() { + notification_observer_.Wait(); + // Ensure that only a single new browser has appeared. + EXPECT_EQ(original_browsers_.size() + 1, BrowserList::size()); + return GetBrowserNotInSet(original_browsers_); +} + const string16& TitleWatcher::WaitAndGetTitle() { if (expected_title_observed_) return observed_title_; -- cgit v1.1