1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/webui/signin/login_ui_service.h" 6 7#include "chrome/browser/profiles/profile.h" 8#include "chrome/browser/signin/signin_promo.h" 9#include "chrome/browser/ui/browser.h" 10#include "chrome/browser/ui/browser_navigator.h" 11#include "chrome/browser/ui/browser_window.h" 12#include "chrome/browser/ui/chrome_pages.h" 13#include "chrome/browser/ui/host_desktop.h" 14#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" 15#include "chrome/browser/ui/sync/inline_login_dialog.h" 16#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" 17#include "chrome/common/url_constants.h" 18#include "components/signin/core/common/profile_management_switches.h" 19 20#if defined(OS_CHROMEOS) 21#include "chrome/browser/app_mode/app_mode_utils.h" 22#endif 23 24LoginUIService::LoginUIService(Profile* profile) 25 : ui_(NULL), profile_(profile) { 26} 27 28LoginUIService::~LoginUIService() {} 29 30void LoginUIService::AddObserver(LoginUIService::Observer* observer) { 31 observer_list_.AddObserver(observer); 32} 33 34void LoginUIService::RemoveObserver(LoginUIService::Observer* observer) { 35 observer_list_.RemoveObserver(observer); 36} 37 38void LoginUIService::SetLoginUI(LoginUI* ui) { 39 DCHECK(!current_login_ui() || current_login_ui() == ui); 40 ui_ = ui; 41 FOR_EACH_OBSERVER(Observer, observer_list_, OnLoginUIShown(ui_)); 42} 43 44void LoginUIService::LoginUIClosed(LoginUI* ui) { 45 if (current_login_ui() != ui) 46 return; 47 48 ui_ = NULL; 49 FOR_EACH_OBSERVER(Observer, observer_list_, OnLoginUIClosed(ui)); 50} 51 52void LoginUIService::SyncConfirmationUIClosed(bool configure_sync_first) { 53 FOR_EACH_OBSERVER( 54 Observer, 55 observer_list_, 56 OnSyncConfirmationUIClosed(configure_sync_first)); 57} 58 59void LoginUIService::UntrustedLoginUIShown() { 60 FOR_EACH_OBSERVER(Observer, observer_list_, OnUntrustedLoginUIShown()); 61} 62 63void LoginUIService::ShowLoginPopup() { 64#if defined(OS_CHROMEOS) 65 if (chrome::IsRunningInForcedAppMode()) 66 InlineLoginDialog::Show(profile_); 67#else 68 chrome::ScopedTabbedBrowserDisplayer displayer( 69 profile_, chrome::GetActiveDesktop()); 70 chrome::ShowBrowserSignin(displayer.browser(), signin::SOURCE_APP_LAUNCHER); 71#endif 72} 73 74void LoginUIService::DisplayLoginResult(Browser* browser, 75 const base::string16& message) { 76 last_login_result_ = message; 77 if (switches::IsNewAvatarMenu()) { 78 browser->window()->ShowAvatarBubbleFromAvatarButton( 79 message.empty() ? BrowserWindow::AVATAR_BUBBLE_MODE_CONFIRM_SIGNIN : 80 BrowserWindow::AVATAR_BUBBLE_MODE_SHOW_ERROR, 81 signin::ManageAccountsParams()); 82 } else { 83#if defined(ENABLE_ONE_CLICK_SIGNIN) 84 browser->window()->ShowOneClickSigninBubble( 85 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE, 86 base::string16(), /* no SAML email */ 87 message, 88 // This callback is never invoked. 89 // TODO(rogerta): Separate out the bubble API so we don't have to pass 90 // ignored |email| and |callback| params. 91 BrowserWindow::StartSyncCallback()); 92#endif 93 } 94} 95 96const base::string16& LoginUIService::GetLastLoginResult() { 97 return last_login_result_; 98} 99