123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/auto_login_infobar_delegate.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h"
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/sync/sync_promo_ui.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/google/core/browser/google_util.h"
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/infobars/core/infobar.h"
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/page_navigator.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/referrer.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_constants.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_urls.h"
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "google_apis/gaia/ubertoken_fetcher.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/escape.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_ANDROID)
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.h"
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AutoLoginRedirector --------------------------------------------------------
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class is created by the AutoLoginInfoBarDelegate when the user wishes to
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// auto-login.  It holds context information needed while re-issuing service
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// tokens using the OAuth2TokenService, gets the browser cookies with the
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// TokenAuth API, and finally redirects the user to the correct page.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutoLoginRedirector : public UbertokenConsumer,
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                            public content::WebContentsObserver {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  AutoLoginRedirector(content::WebContents* web_contents,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const std::string& args);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~AutoLoginRedirector();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overriden from UbertokenConsumer:
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnUbertokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Implementation of content::WebContentsObserver
65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void WebContentsDestroyed() OVERRIDE;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Redirect tab to MergeSession URL, logging the user in and navigating
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to the desired page.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RedirectToMergeSession(const std::string& token);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string args_;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<UbertokenFetcher> ubertoken_fetcher_;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AutoLoginRedirector);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutoLoginRedirector::AutoLoginRedirector(
784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    content::WebContents* web_contents,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& args)
804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    : content::WebContentsObserver(web_contents),
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      args_(args) {
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Profile* profile =
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      Profile::FromBrowserContext(web_contents->GetBrowserContext());
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ProfileOAuth2TokenService* token_service =
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetForProfile(profile);
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SigninManagerBase* signin_manager =
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      SigninManagerFactory::GetInstance()->GetForProfile(profile);
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ubertoken_fetcher_.reset(new UbertokenFetcher(token_service,
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                this,
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                profile->GetRequestContext()));
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ubertoken_fetcher_->StartFetchingToken(
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      signin_manager->GetAuthenticatedAccountId());
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutoLoginRedirector::~AutoLoginRedirector() {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void AutoLoginRedirector::WebContentsDestroyed() {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The WebContents that started this has been destroyed. The request must be
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // cancelled and this object must be deleted.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ubertoken_fetcher_.reset();
102b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginRedirector::OnUbertokenSuccess(const std::string& token) {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RedirectToMergeSession(token);
107b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginRedirector::OnUbertokenFailure(
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const GoogleServiceAuthError& error) {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG(WARNING) << "AutoLoginRedirector: token request failed";
113b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginRedirector::RedirectToMergeSession(const std::string& token) {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(rogerta): what is the correct page transition?
1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  web_contents()->GetController().LoadURL(
119d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      GaiaUrls::GetInstance()->merge_session_url().Resolve(
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "?source=chrome&uberauth=" + token + "&" + args_),
1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      content::Referrer(), ui::PAGE_TRANSITION_AUTO_BOOKMARK,
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string());
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// AutoLoginInfoBarDelegate ---------------------------------------------------
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool AutoLoginInfoBarDelegate::Create(content::WebContents* web_contents,
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      const Params& params) {
133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // If |web_contents| is hosted in a WebDialog, there may be no infobar
134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // service.
135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  InfoBarService* infobar_service =
136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    InfoBarService::FromWebContents(web_contents);
137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!infobar_service)
138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return false;
139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  Profile* profile =
141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      Profile::FromBrowserContext(web_contents->GetBrowserContext());
142effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_ANDROID)
143effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  typedef AutoLoginInfoBarDelegateAndroid Delegate;
144effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#else
145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  typedef AutoLoginInfoBarDelegate Delegate;
146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return !!infobar_service->AddInfoBar(ConfirmInfoBarDelegate::CreateInfoBar(
148effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      scoped_ptr<ConfirmInfoBarDelegate>(new Delegate(params, profile))));
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
151a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)AutoLoginInfoBarDelegate::AutoLoginInfoBarDelegate(const Params& params,
152a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                                   Profile* profile)
153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    : ConfirmInfoBarDelegate(),
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      params_(params),
155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      profile_(profile),
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      button_pressed_(false) {
1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  RecordHistogramAction(SHOWN);
158effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The AutoLogin infobar is shown in incognito mode on Android, so a
160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // SigninManager isn't guaranteed to exist for |profile_|.
161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SigninManagerBase* signin_manager =
162effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      SigninManagerFactory::GetInstance()->GetForProfile(profile_);
163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (signin_manager)
164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    signin_manager->AddObserver(this);
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AutoLoginInfoBarDelegate::~AutoLoginInfoBarDelegate() {
168effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The AutoLogin infobar is shown in incognito mode on Android, so a
169effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // SigninManager isn't guaranteed to exist for |profile_|.
170effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SigninManagerBase* signin_manager =
171effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      SigninManagerFactory::GetInstance()->GetForProfile(profile_);
172effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (signin_manager)
173effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    signin_manager->RemoveObserver(this);
174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!button_pressed_)
1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    RecordHistogramAction(IGNORED);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid AutoLoginInfoBarDelegate::RecordHistogramAction(Actions action) {
1805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  UMA_HISTOGRAM_ENUMERATION("AutoLogin.Regular", action,
1815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                            HISTOGRAM_BOUNDING_VALUE);
1825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
1835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginInfoBarDelegate::InfoBarDismissed() {
1857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  RecordHistogramAction(DISMISSED);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  button_pressed_ = true;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int AutoLoginInfoBarDelegate::GetIconID() const {
19090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return IDR_INFOBAR_AUTOLOGIN;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochinfobars::InfoBarDelegate::Type AutoLoginInfoBarDelegate::GetInfoBarType()
1940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    const {
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PAGE_ACTION_TYPE;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AutoLoginInfoBarDelegate*
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    AutoLoginInfoBarDelegate::AsAutoLoginInfoBarDelegate() {
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return this;
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 AutoLoginInfoBarDelegate::GetMessageText() const {
204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return l10n_util::GetStringFUTF16(IDS_AUTOLOGIN_INFOBAR_MESSAGE,
205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                    base::UTF8ToUTF16(params_.username));
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 AutoLoginInfoBarDelegate::GetButtonLabel(
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InfoBarButton button) const {
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16((button == BUTTON_OK) ?
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_AUTOLOGIN_INFOBAR_OK_BUTTON : IDS_AUTOLOGIN_INFOBAR_CANCEL_BUTTON);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AutoLoginInfoBarDelegate::Accept() {
215effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // AutoLoginRedirector deletes itself.
216a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  content::WebContents* web_contents =
217a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      InfoBarService::WebContentsFromInfoBar(infobar());
218a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  new AutoLoginRedirector(web_contents, params_.header.args);
219effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  RecordHistogramAction(ACCEPTED);
220effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  button_pressed_ = true;
221effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return true;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AutoLoginInfoBarDelegate::Cancel() {
225a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  content::WebContents* web_contents =
226a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      InfoBarService::WebContentsFromInfoBar(infobar());
227effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  PrefService* pref_service = Profile::FromBrowserContext(
228a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      web_contents->GetBrowserContext())->GetPrefs();
229effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  pref_service->SetBoolean(prefs::kAutologinEnabled, false);
230effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  RecordHistogramAction(REJECTED);
231effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  button_pressed_ = true;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid AutoLoginInfoBarDelegate::GoogleSignedOut(
2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const std::string& account_id,
2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const std::string& username) {
238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  infobar()->RemoveSelf();
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
240