// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // The signin manager encapsulates some functionality tracking // which user is signed in. When a user is signed in, a ClientLogin // request is run on their behalf. Auth tokens are fetched from Google // and the results are stored in the TokenService. #ifndef CHROME_BROWSER_SYNC_SIGNIN_MANAGER_H_ #define CHROME_BROWSER_SYNC_SIGNIN_MANAGER_H_ #pragma once #include <string> #include "base/logging.h" #include "base/memory/scoped_ptr.h" #include "chrome/common/net/gaia/gaia_auth_consumer.h" #include "chrome/common/net/gaia/google_service_auth_error.h" class GaiaAuthFetcher; class Profile; class PrefService; // Details for the Notification type GOOGLE_SIGNIN_SUCCESSFUL. // A listener might use this to make note of a username / password // pair for encryption keys. struct GoogleServiceSigninSuccessDetails { GoogleServiceSigninSuccessDetails(const std::string& in_username, const std::string& in_password) : username(in_username), password(in_password) {} std::string username; std::string password; }; class SigninManager : public GaiaAuthConsumer { public: SigninManager(); virtual ~SigninManager(); // Call to register our prefs. static void RegisterUserPrefs(PrefService* user_prefs); // If user was signed in, load tokens from DB if available. void Initialize(Profile* profile); // If a user is signed in, this will return their name. // Otherwise, it will return an empty string. const std::string& GetUsername(); // Sets the user name. Used for migrating credentials from previous system. void SetUsername(const std::string& username); // Attempt to sign in this user. If successful, set a preference indicating // the signed in user and send out a notification, then start fetching tokens // for the user. void StartSignIn(const std::string& username, const std::string& password, const std::string& login_token, const std::string& login_captcha); // Used when a second factor access code was required to complete a signin // attempt. void ProvideSecondFactorAccessCode(const std::string& access_code); // Sign a user out, removing the preference, erasing all keys // associated with the user, and canceling all auth in progress. void SignOut(); // GaiaAuthConsumer virtual void OnClientLoginSuccess(const ClientLoginResult& result); virtual void OnClientLoginFailure(const GoogleServiceAuthError& error); virtual void OnGetUserInfoSuccess(const std::string& key, const std::string& value); virtual void OnGetUserInfoKeyNotFound(const std::string& key); virtual void OnGetUserInfoFailure(const GoogleServiceAuthError& error); private: Profile* profile_; std::string username_; std::string password_; // This is kept empty whenever possible. bool had_two_factor_error_; // Result of the last client login, kept pending the lookup of the // canonical email. ClientLoginResult last_result_; // Actual client login handler. scoped_ptr<GaiaAuthFetcher> client_login_; }; #endif // CHROME_BROWSER_SYNC_SIGNIN_MANAGER_H_