Home | History | Annotate | Download | only in signin
      1 // Copyright 2013 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_USER_MANAGER_SCREEN_HANDLER_H_
      6 #define CHROME_BROWSER_UI_WEBUI_SIGNIN_USER_MANAGER_SCREEN_HANDLER_H_
      7 
      8 #include <map>
      9 #include <string>
     10 
     11 #include "base/callback.h"
     12 #include "base/compiler_specific.h"
     13 #include "base/memory/scoped_ptr.h"
     14 #include "base/memory/weak_ptr.h"
     15 #include "chrome/browser/profiles/profile.h"
     16 #include "chrome/browser/profiles/profile_metrics.h"
     17 #include "chrome/browser/signin/screenlock_bridge.h"
     18 #include "chrome/browser/ui/host_desktop.h"
     19 #include "content/public/browser/notification_observer.h"
     20 #include "content/public/browser/notification_registrar.h"
     21 #include "content/public/browser/web_ui_message_handler.h"
     22 #include "google_apis/gaia/gaia_auth_consumer.h"
     23 
     24 class GaiaAuthFetcher;
     25 
     26 namespace base {
     27 class DictionaryValue;
     28 class FilePath;
     29 class ListValue;
     30 }
     31 
     32 class UserManagerScreenHandler : public content::WebUIMessageHandler,
     33                                  public ScreenlockBridge::LockHandler,
     34                                  public GaiaAuthConsumer,
     35                                  public content::NotificationObserver {
     36  public:
     37   UserManagerScreenHandler();
     38   virtual ~UserManagerScreenHandler();
     39 
     40   // WebUIMessageHandler implementation.
     41   virtual void RegisterMessages() OVERRIDE;
     42 
     43   void GetLocalizedValues(base::DictionaryValue* localized_strings);
     44 
     45   // content::NotificationObserver implementation:
     46   virtual void Observe(int type,
     47                        const content::NotificationSource& source,
     48                        const content::NotificationDetails& details) OVERRIDE;
     49 
     50   // ScreenlockBridge::LockHandler implementation.
     51   virtual void ShowBannerMessage(const base::string16& message) OVERRIDE;
     52   virtual void ShowUserPodCustomIcon(
     53       const std::string& user_email,
     54       const ScreenlockBridge::UserPodCustomIconOptions& icon_options) OVERRIDE;
     55   virtual void HideUserPodCustomIcon(const std::string& user_email) OVERRIDE;
     56   virtual void EnableInput() OVERRIDE;
     57   virtual void SetAuthType(const std::string& user_email,
     58                            ScreenlockBridge::LockHandler::AuthType auth_type,
     59                            const base::string16& auth_value) OVERRIDE;
     60   virtual ScreenlockBridge::LockHandler::AuthType GetAuthType(
     61       const std::string& user_email) const OVERRIDE;
     62   virtual void Unlock(const std::string& user_email) OVERRIDE;
     63   virtual void AttemptEasySignin(const std::string& user_email,
     64                                  const std::string& secret,
     65                                  const std::string& key_label) OVERRIDE;
     66 
     67  private:
     68   // An observer for any changes to Profiles in the ProfileInfoCache so that
     69   // all the visible user manager screens can be updated.
     70   class ProfileUpdateObserver;
     71 
     72   void HandleInitialize(const base::ListValue* args);
     73   void HandleAddUser(const base::ListValue* args);
     74   void HandleAuthenticatedLaunchUser(const base::ListValue* args);
     75   void HandleLaunchGuest(const base::ListValue* args);
     76   void HandleLaunchUser(const base::ListValue* args);
     77   void HandleRemoveUser(const base::ListValue* args);
     78   void HandleAttemptUnlock(const base::ListValue* args);
     79   void HandleHardlockUserPod(const base::ListValue* args);
     80 
     81   // Handle GAIA auth results.
     82   virtual void OnClientLoginSuccess(const ClientLoginResult& result) OVERRIDE;
     83   virtual void OnClientLoginFailure(const GoogleServiceAuthError& error)
     84       OVERRIDE;
     85 
     86   // Handle when Notified of a NOTIFICATION_BROWSER_WINDOW_READY event.
     87   void OnBrowserWindowReady(Browser* browser);
     88 
     89   // Sends user list to account chooser.
     90   void SendUserList();
     91 
     92   // Pass success/failure information back to the web page.
     93   void ReportAuthenticationResult(bool success,
     94                                   ProfileMetrics::ProfileAuth metric);
     95 
     96   // Perform cleanup once the profile and browser are open.
     97   void OnSwitchToProfileComplete(Profile* profile,
     98                                  Profile::CreateStatus profile_create_status);
     99 
    100   // Observes the ProfileInfoCache and gets notified when a profile has been
    101   // modified, so that the displayed user pods can be updated.
    102   scoped_ptr<ProfileUpdateObserver> profileInfoCacheObserver_;
    103 
    104   // The host desktop type this user manager belongs to.
    105   chrome::HostDesktopType desktop_type_;
    106 
    107   // Authenticator used when local-auth fails.
    108   scoped_ptr<GaiaAuthFetcher> client_login_;
    109 
    110   // The index of the profile currently being authenticated.
    111   size_t authenticating_profile_index_;
    112 
    113   // Login password, held during on-line auth for saving later if correct.
    114   std::string password_attempt_;
    115 
    116   // URL hash, used to key post-profile actions if present.
    117   std::string url_hash_;
    118 
    119   typedef std::map<std::string, ScreenlockBridge::LockHandler::AuthType>
    120       UserAuthTypeMap;
    121   UserAuthTypeMap user_auth_type_map_;
    122 
    123   base::WeakPtrFactory<UserManagerScreenHandler> weak_ptr_factory_;
    124 
    125   content::NotificationRegistrar registrar_;
    126 
    127   DISALLOW_COPY_AND_ASSIGN(UserManagerScreenHandler);
    128 };
    129 
    130 #endif  // CHROME_BROWSER_UI_WEBUI_SIGNIN_USER_MANAGER_SCREEN_HANDLER_H_
    131