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 24 LoginUIService::LoginUIService(Profile* profile) 25 : ui_(NULL), profile_(profile) { 26 } 27 28 LoginUIService::~LoginUIService() {} 29 30 void LoginUIService::AddObserver(LoginUIService::Observer* observer) { 31 observer_list_.AddObserver(observer); 32 } 33 34 void LoginUIService::RemoveObserver(LoginUIService::Observer* observer) { 35 observer_list_.RemoveObserver(observer); 36 } 37 38 void 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 44 void 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 52 void LoginUIService::SyncConfirmationUIClosed(bool configure_sync_first) { 53 FOR_EACH_OBSERVER( 54 Observer, 55 observer_list_, 56 OnSyncConfirmationUIClosed(configure_sync_first)); 57 } 58 59 void LoginUIService::UntrustedLoginUIShown() { 60 FOR_EACH_OBSERVER(Observer, observer_list_, OnUntrustedLoginUIShown()); 61 } 62 63 void 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 74 void 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 96 const base::string16& LoginUIService::GetLastLoginResult() { 97 return last_login_result_; 98 } 99