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