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"
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/google/google_util.h"
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/infobars/infobar.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/ubertoken_fetcher.h"
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/sync/sync_promo_ui.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/page_navigator.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/referrer.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_constants.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_urls.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/chromium_strings.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/escape.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_ANDROID)
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.h"
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AutoLoginRedirector --------------------------------------------------------
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class is created by the AutoLoginInfoBarDelegate when the user wishes to
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// auto-login.  It holds context information needed while re-issuing service
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// tokens using the OAuth2TokenService, gets the browser cookies with the
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// TokenAuth API, and finally redirects the user to the correct page.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutoLoginRedirector : public UbertokenConsumer,
574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                            public content::WebContentsObserver {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  AutoLoginRedirector(content::WebContents* web_contents,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const std::string& args);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~AutoLoginRedirector();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overriden from UbertokenConsumer:
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnUbertokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Implementation of content::WebContentsObserver
694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void WebContentsDestroyed(
704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      content::WebContents* web_contents) OVERRIDE;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Redirect tab to MergeSession URL, logging the user in and navigating
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to the desired page.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RedirectToMergeSession(const std::string& token);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string args_;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<UbertokenFetcher> ubertoken_fetcher_;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AutoLoginRedirector);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutoLoginRedirector::AutoLoginRedirector(
834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    content::WebContents* web_contents,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& args)
854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    : content::WebContentsObserver(web_contents),
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      args_(args) {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ubertoken_fetcher_.reset(new UbertokenFetcher(
884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      Profile::FromBrowserContext(web_contents->GetBrowserContext()), this));
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ubertoken_fetcher_->StartFetchingToken();
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutoLoginRedirector::~AutoLoginRedirector() {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void AutoLoginRedirector::WebContentsDestroyed(
964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    content::WebContents* web_contents) {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The WebContents that started this has been destroyed. The request must be
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // cancelled and this object must be deleted.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ubertoken_fetcher_.reset();
100b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginRedirector::OnUbertokenSuccess(const std::string& token) {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RedirectToMergeSession(token);
105b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginRedirector::OnUbertokenFailure(
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const GoogleServiceAuthError& error) {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG(WARNING) << "AutoLoginRedirector: token request failed";
111b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginRedirector::RedirectToMergeSession(const std::string& token) {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(rogerta): what is the correct page transition?
1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  web_contents()->GetController().LoadURL(
117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      GaiaUrls::GetInstance()->merge_session_url().Resolve(
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "?source=chrome&uberauth=" + token + "&" + args_),
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::Referrer(), content::PAGE_TRANSITION_AUTO_BOOKMARK,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string());
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// AutoLoginInfoBarDelegate ---------------------------------------------------
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool AutoLoginInfoBarDelegate::Create(content::WebContents* web_contents,
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      const Params& params) {
131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // If |web_contents| is hosted in a WebDialog, there may be no infobar
132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // service.
133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  InfoBarService* infobar_service =
134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    InfoBarService::FromWebContents(web_contents);
135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!infobar_service)
136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return false;
137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  Profile* profile =
139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      Profile::FromBrowserContext(web_contents->GetBrowserContext());
140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_ANDROID)
141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  typedef AutoLoginInfoBarDelegateAndroid Delegate;
142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#else
143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  typedef AutoLoginInfoBarDelegate Delegate;
144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return !!infobar_service->AddInfoBar(ConfirmInfoBarDelegate::CreateInfoBar(
146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      scoped_ptr<ConfirmInfoBarDelegate>(new Delegate(params, profile))));
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)AutoLoginInfoBarDelegate::AutoLoginInfoBarDelegate(const Params& params,
150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                                   Profile* profile)
151a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    : ConfirmInfoBarDelegate(),
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      params_(params),
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      button_pressed_(false) {
1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  RecordHistogramAction(SHOWN);
1557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  registrar_.Add(this, chrome::NOTIFICATION_GOOGLE_SIGNED_OUT,
156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                 content::Source<Profile>(profile));
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AutoLoginInfoBarDelegate::~AutoLoginInfoBarDelegate() {
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!button_pressed_)
1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    RecordHistogramAction(IGNORED);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoLoginInfoBarDelegate::InfoBarDismissed() {
1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  RecordHistogramAction(DISMISSED);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  button_pressed_ = true;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int AutoLoginInfoBarDelegate::GetIconID() const {
17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return IDR_INFOBAR_AUTOLOGIN;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InfoBarDelegate::Type AutoLoginInfoBarDelegate::GetInfoBarType() const {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PAGE_ACTION_TYPE;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AutoLoginInfoBarDelegate*
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    AutoLoginInfoBarDelegate::AsAutoLoginInfoBarDelegate() {
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return this;
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
182d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 AutoLoginInfoBarDelegate::GetMessageText() const {
183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return l10n_util::GetStringFUTF16(IDS_AUTOLOGIN_INFOBAR_MESSAGE,
184eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                    UTF8ToUTF16(params_.username));
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
187d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 AutoLoginInfoBarDelegate::GetButtonLabel(
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InfoBarButton button) const {
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16((button == BUTTON_OK) ?
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_AUTOLOGIN_INFOBAR_OK_BUTTON : IDS_AUTOLOGIN_INFOBAR_CANCEL_BUTTON);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AutoLoginInfoBarDelegate::Accept() {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // AutoLoginRedirector deletes itself.
1954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  new AutoLoginRedirector(web_contents(), params_.header.args);
1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  RecordHistogramAction(ACCEPTED);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  button_pressed_ = true;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AutoLoginInfoBarDelegate::Cancel() {
2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  PrefService* pref_service = Profile::FromBrowserContext(
2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      web_contents()->GetBrowserContext())->GetPrefs();
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_service->SetBoolean(prefs::kAutologinEnabled, false);
2057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  RecordHistogramAction(REJECTED);
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  button_pressed_ = true;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void AutoLoginInfoBarDelegate::Observe(
2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    int type,
2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const content::NotificationSource& source,
2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const content::NotificationDetails& details) {
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(chrome::NOTIFICATION_GOOGLE_SIGNED_OUT, type);
215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  infobar()->RemoveSelf();
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutoLoginInfoBarDelegate::RecordHistogramAction(Actions action) {
2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  UMA_HISTOGRAM_ENUMERATION("AutoLogin.Regular", action,
2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                            HISTOGRAM_BOUNDING_VALUE);
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
222