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