Home | History | Annotate | Download | only in sync
      1 // Copyright (c) 2011 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 // The signin manager encapsulates some functionality tracking
      6 // which user is signed in. When a user is signed in, a ClientLogin
      7 // request is run on their behalf. Auth tokens are fetched from Google
      8 // and the results are stored in the TokenService.
      9 
     10 #ifndef CHROME_BROWSER_SYNC_SIGNIN_MANAGER_H_
     11 #define CHROME_BROWSER_SYNC_SIGNIN_MANAGER_H_
     12 #pragma once
     13 
     14 #include <string>
     15 #include "base/logging.h"
     16 #include "base/memory/scoped_ptr.h"
     17 #include "chrome/common/net/gaia/gaia_auth_consumer.h"
     18 #include "chrome/common/net/gaia/google_service_auth_error.h"
     19 
     20 class GaiaAuthFetcher;
     21 class Profile;
     22 class PrefService;
     23 
     24 // Details for the Notification type GOOGLE_SIGNIN_SUCCESSFUL.
     25 // A listener might use this to make note of a username / password
     26 // pair for encryption keys.
     27 struct GoogleServiceSigninSuccessDetails {
     28   GoogleServiceSigninSuccessDetails(const std::string& in_username,
     29                                     const std::string& in_password)
     30       : username(in_username),
     31         password(in_password) {}
     32   std::string username;
     33   std::string password;
     34 };
     35 
     36 class SigninManager : public GaiaAuthConsumer {
     37  public:
     38   SigninManager();
     39   virtual ~SigninManager();
     40 
     41   // Call to register our prefs.
     42   static void RegisterUserPrefs(PrefService* user_prefs);
     43 
     44   // If user was signed in, load tokens from DB if available.
     45   void Initialize(Profile* profile);
     46 
     47   // If a user is signed in, this will return their name.
     48   // Otherwise, it will return an empty string.
     49   const std::string& GetUsername();
     50 
     51   // Sets the user name.  Used for migrating credentials from previous system.
     52   void SetUsername(const std::string& username);
     53 
     54   // Attempt to sign in this user. If successful, set a preference indicating
     55   // the signed in user and send out a notification, then start fetching tokens
     56   // for the user.
     57   void StartSignIn(const std::string& username,
     58                    const std::string& password,
     59                    const std::string& login_token,
     60                    const std::string& login_captcha);
     61 
     62   // Used when a second factor access code was required to complete a signin
     63   // attempt.
     64   void ProvideSecondFactorAccessCode(const std::string& access_code);
     65 
     66   // Sign a user out, removing the preference, erasing all keys
     67   // associated with the user, and canceling all auth in progress.
     68   void SignOut();
     69 
     70   // GaiaAuthConsumer
     71   virtual void OnClientLoginSuccess(const ClientLoginResult& result);
     72   virtual void OnClientLoginFailure(const GoogleServiceAuthError& error);
     73   virtual void OnGetUserInfoSuccess(const std::string& key,
     74                                     const std::string& value);
     75   virtual void OnGetUserInfoKeyNotFound(const std::string& key);
     76   virtual void OnGetUserInfoFailure(const GoogleServiceAuthError& error);
     77 
     78  private:
     79   Profile* profile_;
     80   std::string username_;
     81   std::string password_;  // This is kept empty whenever possible.
     82   bool had_two_factor_error_;
     83 
     84   // Result of the last client login, kept pending the lookup of the
     85   // canonical email.
     86   ClientLoginResult last_result_;
     87 
     88   // Actual client login handler.
     89   scoped_ptr<GaiaAuthFetcher> client_login_;
     90 };
     91 
     92 #endif  // CHROME_BROWSER_SYNC_SIGNIN_MANAGER_H_
     93