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 #ifndef CHROME_BROWSER_UI_WEBUI_SIGNIN_LOGIN_UI_SERVICE_H_ 6 #define CHROME_BROWSER_UI_WEBUI_SIGNIN_LOGIN_UI_SERVICE_H_ 7 8 #include "base/basictypes.h" 9 #include "base/observer_list.h" 10 #include "base/strings/string16.h" 11 #include "components/keyed_service/core/keyed_service.h" 12 13 class Browser; 14 class Profile; 15 16 // The LoginUIService helps track per-profile information for the login related 17 // UIs - for example, whether there is login UI currently on-screen. 18 class LoginUIService : public KeyedService { 19 public: 20 // Various UI components implement this API to allow LoginUIService to 21 // manipulate their associated login UI. 22 class LoginUI { 23 public: 24 // Invoked when the login UI should be brought to the foreground. 25 virtual void FocusUI() = 0; 26 27 // Invoked when the login UI should be closed. This can be invoked if the 28 // user takes an action that should display new login UI. 29 virtual void CloseUI() = 0; 30 protected: 31 virtual ~LoginUI() {} 32 }; 33 34 // Interface for obervers of LoginUIService. 35 class Observer { 36 public: 37 // Called when a new login UI is shown. 38 // |ui| The login UI that was just shown. Will never be null. 39 virtual void OnLoginUIShown(LoginUI* ui) {} 40 41 // Called when a login UI is closed. 42 // |ui| The login UI that was just closed; will never be null. 43 virtual void OnLoginUIClosed(LoginUI* ui) {} 44 45 // Called when the sync confirmation UI is closed. |configure_sync_first| 46 // is true if the user has requested to configure the sync settings before 47 // sync starts. 48 virtual void OnSyncConfirmationUIClosed(bool configure_sync_first) {} 49 50 // Called when a confirmation UI for untrusted signin is shown. 51 virtual void OnUntrustedLoginUIShown() {} 52 53 protected: 54 virtual ~Observer() {} 55 }; 56 57 explicit LoginUIService(Profile* profile); 58 virtual ~LoginUIService(); 59 60 // Gets the currently active login UI, or null if no login UI is active. 61 LoginUI* current_login_ui() const { 62 return ui_; 63 } 64 65 // |observer| The observer to add or remove; cannot be NULL. 66 void AddObserver(Observer* observer); 67 void RemoveObserver(Observer* observer); 68 69 // Sets the currently active login UI. It is illegal to call this if there is 70 // already login UI visible. 71 void SetLoginUI(LoginUI* ui); 72 73 // Called when login UI is closed. If the passed UI is the current login UI, 74 // sets current_login_ui() to null. 75 void LoginUIClosed(LoginUI* ui); 76 77 // Called when the sync settings confirmation UI is closed. 78 void SyncConfirmationUIClosed(bool configure_sync_first); 79 80 // Called when a confirmation UI for untrusted signin is shown. 81 void UntrustedLoginUIShown(); 82 83 // Delegate to an existing login dialog if one exists. 84 // If not, we make a new popup dialog window, and set it to 85 // chrome://signin to ask the user to sign in to chrome. 86 void ShowLoginPopup(); 87 88 // Displays login results. 89 void DisplayLoginResult(Browser* browser, const base::string16& message); 90 91 // Gets the last login result set through |DisplayLoginResult|. 92 const base::string16& GetLastLoginResult(); 93 94 private: 95 // Weak pointer to the currently active login UI, or null if none. 96 LoginUI* ui_; 97 Profile* profile_; 98 99 // List of observers. 100 ObserverList<Observer> observer_list_; 101 102 base::string16 last_login_result_; 103 104 DISALLOW_COPY_AND_ASSIGN(LoginUIService); 105 }; 106 107 #endif // CHROME_BROWSER_UI_WEBUI_SIGNIN_LOGIN_UI_SERVICE_H_ 108