auto_login_infobar_delegate.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#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"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/google/google_util.h"
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/infobars/infobar.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service.h"
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h"
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/sync/sync_promo_ui.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/page_navigator.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/referrer.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_constants.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_urls.h"
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "google_apis/gaia/ubertoken_fetcher.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/chromium_strings.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/escape.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_ANDROID)
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.h"
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AutoLoginRedirector --------------------------------------------------------
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class is created by the AutoLoginInfoBarDelegate when the user wishes to
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// auto-login.  It holds context information needed while re-issuing service
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// tokens using the OAuth2TokenService, gets the browser cookies with the
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// TokenAuth API, and finally redirects the user to the correct page.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutoLoginRedirector : public UbertokenConsumer,
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                            public content::WebContentsObserver {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  AutoLoginRedirector(content::WebContents* web_contents,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const std::string& args);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~AutoLoginRedirector();
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overriden from UbertokenConsumer:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnUbertokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Implementation of content::WebContentsObserver
664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void WebContentsDestroyed(
674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      content::WebContents* web_contents) OVERRIDE;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Redirect tab to MergeSession URL, logging the user in and navigating
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to the desired page.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RedirectToMergeSession(const std::string& token);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string args_;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<UbertokenFetcher> ubertoken_fetcher_;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AutoLoginRedirector);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutoLoginRedirector::AutoLoginRedirector(
804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    content::WebContents* web_contents,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& args)
824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    : content::WebContentsObserver(web_contents),
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      args_(args) {
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Profile* profile =
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      Profile::FromBrowserContext(web_contents->GetBrowserContext());
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ProfileOAuth2TokenService* token_service =
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetForProfile(profile);
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SigninManagerBase* signin_manager =
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      SigninManagerFactory::GetInstance()->GetForProfile(profile);
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ubertoken_fetcher_.reset(new UbertokenFetcher(token_service,
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                this,
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                profile->GetRequestContext()));
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ubertoken_fetcher_->StartFetchingToken(
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      signin_manager->GetAuthenticatedAccountId());
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutoLoginRedirector::~AutoLoginRedirector() {
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void AutoLoginRedirector::WebContentsDestroyed(
1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    content::WebContents* web_contents) {
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The WebContents that started this has been destroyed. The request must be
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // cancelled and this object must be deleted.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ubertoken_fetcher_.reset();
105b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginRedirector::OnUbertokenSuccess(const std::string& token) {
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RedirectToMergeSession(token);
110b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginRedirector::OnUbertokenFailure(
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const GoogleServiceAuthError& error) {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG(WARNING) << "AutoLoginRedirector: token request failed";
116b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginRedirector::RedirectToMergeSession(const std::string& token) {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(rogerta): what is the correct page transition?
1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  web_contents()->GetController().LoadURL(
122d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      GaiaUrls::GetInstance()->merge_session_url().Resolve(
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "?source=chrome&uberauth=" + token + "&" + args_),
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::Referrer(), content::PAGE_TRANSITION_AUTO_BOOKMARK,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string());
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// AutoLoginInfoBarDelegate ---------------------------------------------------
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool AutoLoginInfoBarDelegate::Create(content::WebContents* web_contents,
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      const Params& params) {
136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // If |web_contents| is hosted in a WebDialog, there may be no infobar
137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // service.
138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  InfoBarService* infobar_service =
139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    InfoBarService::FromWebContents(web_contents);
140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!infobar_service)
141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return false;
142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  Profile* profile =
144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      Profile::FromBrowserContext(web_contents->GetBrowserContext());
145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_ANDROID)
146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  typedef AutoLoginInfoBarDelegateAndroid Delegate;
147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#else
148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  typedef AutoLoginInfoBarDelegate Delegate;
149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return !!infobar_service->AddInfoBar(ConfirmInfoBarDelegate::CreateInfoBar(
151a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      scoped_ptr<ConfirmInfoBarDelegate>(new Delegate(params, profile))));
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)AutoLoginInfoBarDelegate::AutoLoginInfoBarDelegate(const Params& params,
155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                                   Profile* profile)
156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    : ConfirmInfoBarDelegate(),
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      params_(params),
158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      profile_(profile),
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      button_pressed_(false) {
1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  RecordHistogramAction(SHOWN);
161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  SigninManagerFactory::GetInstance()->GetForProfile(profile_)->AddObserver(
162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      this);
163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AutoLoginInfoBarDelegate::~AutoLoginInfoBarDelegate() {
166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // The SigninManagerFactory is scoped to the lifetime of the app and the
167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // SigninManager is scoped to the lifetime of the Profile, both of which are
168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // longer than the lifetime of the WebContents that this object cannot
169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // outlive. Therefore, it's safe to call RemoveObserver() unconditionally.
170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  SigninManagerFactory::GetInstance()->GetForProfile(profile_)->RemoveObserver(
171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      this);
172a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!button_pressed_)
1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    RecordHistogramAction(IGNORED);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginInfoBarDelegate::InfoBarDismissed() {
1787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  RecordHistogramAction(DISMISSED);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  button_pressed_ = true;
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int AutoLoginInfoBarDelegate::GetIconID() const {
18390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return IDR_INFOBAR_AUTOLOGIN;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InfoBarDelegate::Type AutoLoginInfoBarDelegate::GetInfoBarType() const {
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PAGE_ACTION_TYPE;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AutoLoginInfoBarDelegate*
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    AutoLoginInfoBarDelegate::AsAutoLoginInfoBarDelegate() {
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return this;
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 AutoLoginInfoBarDelegate::GetMessageText() const {
196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return l10n_util::GetStringFUTF16(IDS_AUTOLOGIN_INFOBAR_MESSAGE,
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    base::UTF8ToUTF16(params_.username));
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 AutoLoginInfoBarDelegate::GetButtonLabel(
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InfoBarButton button) const {
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16((button == BUTTON_OK) ?
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_AUTOLOGIN_INFOBAR_OK_BUTTON : IDS_AUTOLOGIN_INFOBAR_CANCEL_BUTTON);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AutoLoginInfoBarDelegate::Accept() {
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // AutoLoginRedirector deletes itself.
2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  new AutoLoginRedirector(web_contents(), params_.header.args);
2097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  RecordHistogramAction(ACCEPTED);
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  button_pressed_ = true;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AutoLoginInfoBarDelegate::Cancel() {
2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  PrefService* pref_service = Profile::FromBrowserContext(
2167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      web_contents()->GetBrowserContext())->GetPrefs();
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_service->SetBoolean(prefs::kAutologinEnabled, false);
2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  RecordHistogramAction(REJECTED);
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  button_pressed_ = true;
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
223a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void AutoLoginInfoBarDelegate::GoogleSignedOut(const std::string& username) {
224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  infobar()->RemoveSelf();
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutoLoginInfoBarDelegate::RecordHistogramAction(Actions action) {
2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  UMA_HISTOGRAM_ENUMERATION("AutoLogin.Regular", action,
2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                            HISTOGRAM_BOUNDING_VALUE);
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
231