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