| OLD | NEW | 
| (Empty) |  | 
 |    1 // Copyright 2013 The Chromium Authors. All rights reserved. | 
 |    2 // Use of this source code is governed by a BSD-style license that can be | 
 |    3 // found in the LICENSE file. | 
 |    4  | 
 |    5 #ifndef CHROME_BROWSER_SIGNIN_SIGNIN_BROWSERTEST_H_ | 
 |    6 #define CHROME_BROWSER_SIGNIN_SIGNIN_BROWSERTEST_H_ | 
 |    7  | 
 |    8 #include "chrome/browser/signin/signin_manager.h" | 
 |    9 #include "chrome/browser/signin/signin_manager_factory.h" | 
 |   10 #include "chrome/browser/ui/browser.h" | 
 |   11 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 
 |   12 #include "chrome/browser/ui/webui/signin/login_ui_service.h" | 
 |   13 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" | 
 |   14 #include "chrome/browser/ui/webui/sync_promo/sync_promo_ui.h" | 
 |   15 #include "chrome/common/url_constants.h" | 
 |   16 #include "chrome/test/base/in_process_browser_test.h" | 
 |   17 #include "chrome/test/base/ui_test_utils.h" | 
 |   18 #include "content/public/browser/render_process_host.h" | 
 |   19 #include "content/public/browser/render_view_host.h" | 
 |   20 #include "content/public/browser/web_contents.h" | 
 |   21 #include "google_apis/gaia/gaia_urls.h" | 
 |   22 #include "net/url_request/test_url_fetcher_factory.h" | 
 |   23  | 
 |   24 namespace { | 
 |   25   const char kNonSigninURL[] = "www.google.com"; | 
 |   26 } | 
 |   27  | 
 |   28 class SigninBrowserTest : public InProcessBrowserTest { | 
 |   29  public: | 
 |   30   virtual void SetUp() OVERRIDE { | 
 |   31     factory_.reset(new net::URLFetcherImplFactory()); | 
 |   32     fake_factory_.reset(new net::FakeURLFetcherFactory(factory_.get())); | 
 |   33     fake_factory_->SetFakeResponse( | 
 |   34         GaiaUrls::GetInstance()->service_login_url(), | 
 |   35         std::string(), | 
 |   36         true); | 
 |   37     fake_factory_->SetFakeResponse(kNonSigninURL, std::string(), true); | 
 |   38     // Yield control back to the InProcessBrowserTest framework. | 
 |   39     InProcessBrowserTest::SetUp(); | 
 |   40   } | 
 |   41  | 
 |   42   virtual void TearDown() OVERRIDE { | 
 |   43     if (fake_factory_.get()) { | 
 |   44       fake_factory_->ClearFakeResponses(); | 
 |   45       fake_factory_.reset(); | 
 |   46     } | 
 |   47  | 
 |   48     // Cancel any outstanding URL fetches and destroy the URLFetcherImplFactory | 
 |   49     // we created. | 
 |   50     net::URLFetcher::CancelAll(); | 
 |   51     factory_.reset(); | 
 |   52     InProcessBrowserTest::TearDown(); | 
 |   53   } | 
 |   54  | 
 |   55  private: | 
 |   56   // Fake URLFetcher factory used to mock out GAIA signin. | 
 |   57   scoped_ptr<net::FakeURLFetcherFactory> fake_factory_; | 
 |   58  | 
 |   59   // The URLFetcherImplFactory instance used to instantiate |fake_factory_|. | 
 |   60   scoped_ptr<net::URLFetcherImplFactory> factory_; | 
 |   61 }; | 
 |   62  | 
 |   63 IN_PROC_BROWSER_TEST_F(SigninBrowserTest, ProcessIsolation) { | 
 |   64   // If the one-click-signin feature is not enabled (e.g Chrome OS), we | 
 |   65   // never grant signin privileges to any renderer processes. | 
 |   66   const bool kOneClickSigninEnabled = SyncPromoUI::UseWebBasedSigninFlow(); | 
 |   67  | 
 |   68   SigninManager* signin = SigninManagerFactory::GetForProfile( | 
 |   69       browser()->profile()); | 
 |   70   EXPECT_FALSE(signin->HasSigninProcess()); | 
 |   71  | 
 |   72   ui_test_utils::NavigateToURL(browser(), SyncPromoUI::GetSyncPromoURL( | 
 |   73       GURL(), SyncPromoUI::SOURCE_NTP_LINK, true)); | 
 |   74   EXPECT_EQ(kOneClickSigninEnabled, signin->HasSigninProcess()); | 
 |   75  | 
 |   76   // Navigating away should change the process. | 
 |   77   ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); | 
 |   78   EXPECT_FALSE(signin->HasSigninProcess()); | 
 |   79  | 
 |   80   ui_test_utils::NavigateToURL(browser(), SyncPromoUI::GetSyncPromoURL( | 
 |   81       GURL(), SyncPromoUI::SOURCE_NTP_LINK, true)); | 
 |   82   EXPECT_EQ(kOneClickSigninEnabled, signin->HasSigninProcess()); | 
 |   83  | 
 |   84   content::WebContents* active_tab = | 
 |   85       browser()->tab_strip_model()->GetActiveWebContents(); | 
 |   86   int active_tab_process_id = | 
 |   87       active_tab->GetRenderProcessHost()->GetID(); | 
 |   88   EXPECT_EQ(kOneClickSigninEnabled, | 
 |   89             signin->IsSigninProcess(active_tab_process_id)); | 
 |   90   EXPECT_EQ(0, active_tab->GetRenderViewHost()->GetEnabledBindings()); | 
 |   91  | 
 |   92   // Entry points to signin request "SINGLETON_TAB" mode, so a new request | 
 |   93   // shouldn't change anything. | 
 |   94   LoginUIService* login = LoginUIServiceFactory::GetForProfile( | 
 |   95       browser()->profile()); | 
 |   96   login->ShowLoginPopup(); | 
 |   97   EXPECT_EQ(active_tab, browser()->tab_strip_model()->GetActiveWebContents()); | 
 |   98   EXPECT_EQ(kOneClickSigninEnabled, | 
 |   99             signin->IsSigninProcess(active_tab_process_id)); | 
 |  100  | 
 |  101   // Navigating away should change the process. | 
 |  102   ui_test_utils::NavigateToURL(browser(), GURL(kNonSigninURL)); | 
 |  103   EXPECT_FALSE(signin->IsSigninProcess( | 
 |  104       active_tab->GetRenderProcessHost()->GetID())); | 
 |  105 } | 
 |  106  | 
 |  107 #endif  // CHROME_BROWSER_SIGNIN_SIGNIN_BROWSERTEST_H_ | 
| OLD | NEW |