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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/signin/login_ui_service.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/signin/signin_promo.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_navigator.h" 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/chrome_pages.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/host_desktop.h" 140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/sync/inline_login_dialog.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/signin/core/common/profile_management_switches.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/app_mode/app_mode_utils.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LoginUIService::LoginUIService(Profile* profile) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_(NULL), profile_(profile) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LoginUIService::~LoginUIService() {} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginUIService::AddObserver(LoginUIService::Observer* observer) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer_list_.AddObserver(observer); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginUIService::RemoveObserver(LoginUIService::Observer* observer) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer_list_.RemoveObserver(observer); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginUIService::SetLoginUI(LoginUI* ui) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!current_login_ui() || current_login_ui() == ui); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_ = ui; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observer_list_, OnLoginUIShown(ui_)); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginUIService::LoginUIClosed(LoginUI* ui) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (current_login_ui() != ui) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_ = NULL; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observer_list_, OnLoginUIClosed(ui)); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void LoginUIService::SyncConfirmationUIClosed(bool configure_sync_first) { 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FOR_EACH_OBSERVER( 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Observer, 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) observer_list_, 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) OnSyncConfirmationUIClosed(configure_sync_first)); 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid LoginUIService::UntrustedLoginUIShown() { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FOR_EACH_OBSERVER(Observer, observer_list_, OnUntrustedLoginUIShown()); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginUIService::ShowLoginPopup() { 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (chrome::IsRunningInForcedAppMode()) 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) InlineLoginDialog::Show(profile_); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) chrome::ScopedTabbedBrowserDisplayer displayer( 690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) profile_, chrome::GetActiveDesktop()); 700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) chrome::ShowBrowserSignin(displayer.browser(), signin::SOURCE_APP_LAUNCHER); 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void LoginUIService::DisplayLoginResult(Browser* browser, 7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const base::string16& message) { 7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) last_login_result_ = message; 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (switches::IsNewAvatarMenu()) { 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) browser->window()->ShowAvatarBubbleFromAvatarButton( 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) message.empty() ? BrowserWindow::AVATAR_BUBBLE_MODE_CONFIRM_SIGNIN : 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) BrowserWindow::AVATAR_BUBBLE_MODE_SHOW_ERROR, 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) signin::ManageAccountsParams()); 8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } else { 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_ONE_CLICK_SIGNIN) 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) browser->window()->ShowOneClickSigninBubble( 8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE, 8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::string16(), /* no SAML email */ 8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) message, 8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // This callback is never invoked. 8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // TODO(rogerta): Separate out the bubble API so we don't have to pass 9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // ignored |email| and |callback| params. 9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) BrowserWindow::StartSyncCallback()); 9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif 9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const base::string16& LoginUIService::GetLastLoginResult() { 9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return last_login_result_; 9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 99