Index: chrome/browser/policy/user_policy_signin_service.h |
diff --git a/chrome/browser/policy/user_policy_signin_service.h b/chrome/browser/policy/user_policy_signin_service.h |
index 4906f126b7197f2b8c9ed974204397e6620ca3c6..1dca276f93e7977e5c10956a175c5c4371e60048 100644 |
--- a/chrome/browser/policy/user_policy_signin_service.h |
+++ b/chrome/browser/policy/user_policy_signin_service.h |
@@ -6,16 +6,14 @@ |
#define CHROME_BROWSER_POLICY_USER_POLICY_SIGNIN_SERVICE_H_ |
#include "base/basictypes.h" |
+#include "base/callback.h" |
#include "base/memory/scoped_ptr.h" |
-#include "base/memory/weak_ptr.h" |
#include "chrome/browser/policy/cloud_policy_service.h" |
#include "chrome/browser/policy/user_info_fetcher.h" |
#include "chrome/browser/profiles/profile_keyed_service.h" |
#include "content/public/browser/notification_observer.h" |
#include "content/public/browser/notification_registrar.h" |
-#include "google_apis/gaia/oauth2_access_token_consumer.h" |
-class OAuth2AccessTokenFetcher; |
class Profile; |
namespace base { |
@@ -24,6 +22,8 @@ class Time; |
namespace policy { |
+class CloudPolicyClientRegistrationHelper; |
+class CloudPolicyClient; |
class UserCloudPolicyManager; |
// The UserPolicySigninService is responsible for interacting with the policy |
@@ -40,12 +40,14 @@ class UserCloudPolicyManager; |
// the policy infrastructure to ensure that any cached policy is cleared. |
class UserPolicySigninService |
: public ProfileKeyedService, |
- public OAuth2AccessTokenConsumer, |
public CloudPolicyService::Observer, |
- public CloudPolicyClient::Observer, |
- public UserInfoFetcher::Delegate, |
public content::NotificationObserver { |
public: |
+ // The callback invoked once policy registration is complete. Passed |
+ // CloudPolicyClient parameter is null if DMToken fetch failed. |
+ typedef base::Callback<void(scoped_ptr<CloudPolicyClient>)> |
+ PolicyRegistrationCallback; |
+ |
// The callback invoked once policy fetch is complete. Passed boolean |
// parameter is set to true if the policy fetch succeeded. |
typedef base::Callback<void(bool)> PolicyFetchCallback; |
@@ -54,12 +56,19 @@ class UserPolicySigninService |
explicit UserPolicySigninService(Profile* profile); |
virtual ~UserPolicySigninService(); |
- // Initiates a policy fetch as part of user signin. The |oauth2_access_token| |
- // is explicitly passed because TokenService does not have the token yet |
- // (to prevent services from using it until after we've fetched policy). |
- // |callback| is invoked once the policy fetch is complete, passing true if |
- // the policy fetch succeeded. |
- void FetchPolicyForSignedInUser(const std::string& oauth2_access_token, |
+ // Registers a CloudPolicyClient for fetching policy for a user. The |
+ // |oauth2_login_token| and |username| are explicitly passed because |
+ // the user is not signed in yet (TokenService does not have any tokens yet |
+ // to prevent services from using it until after we've fetched policy). |
+ void RegisterPolicyClient(const std::string& username, |
+ const std::string& oauth2_login_token, |
+ const PolicyRegistrationCallback& callback); |
+ |
+ // Initiates a policy fetch as part of user signin, using a CloudPolicyClient |
+ // previously initialized via RegisterPolicyClient. |callback| is invoked |
+ // once the policy fetch is complete, passing true if the policy fetch |
+ // succeeded. |
+ void FetchPolicyForSignedInUser(scoped_ptr<CloudPolicyClient> client, |
const PolicyFetchCallback& callback); |
// content::NotificationObserver implementation. |
@@ -70,33 +79,21 @@ class UserPolicySigninService |
// CloudPolicyService::Observer implementation. |
virtual void OnInitializationCompleted(CloudPolicyService* service) OVERRIDE; |
- // CloudPolicyClient::Observer implementation. |
- virtual void OnClientError(CloudPolicyClient* client) OVERRIDE; |
- virtual void OnPolicyFetched(CloudPolicyClient* client) OVERRIDE; |
- virtual void OnRegistrationStateChanged(CloudPolicyClient* client) OVERRIDE; |
- |
- // OAuth2AccessTokenConsumer implementation. |
- virtual void OnGetTokenSuccess(const std::string& access_token, |
- const base::Time& expiration_time) OVERRIDE; |
- virtual void OnGetTokenFailure(const GoogleServiceAuthError& error) OVERRIDE; |
- |
// ProfileKeyedService implementation: |
virtual void Shutdown() OVERRIDE; |
- // UserInfoFetcher::Delegate implementation: |
- virtual void OnGetUserInfoSuccess(const DictionaryValue* response) OVERRIDE; |
- virtual void OnGetUserInfoFailure( |
- const GoogleServiceAuthError& error) OVERRIDE; |
- |
private: |
- // Returns false if cloud policy is disabled or if the currently signed-in |
- // user is definitely not from a hosted domain (according to the blacklist in |
+ // Returns false if cloud policy is disabled or if the passed |email_address| |
+ // is definitely not from a hosted domain (according to the blacklist in |
// BrowserPolicyConnector::IsNonEnterpriseUser()). |
- bool ShouldLoadPolicyForSignedInUser(); |
+ bool ShouldLoadPolicyForUser(const std::string& email_address); |
- // Initializes the UserCloudPolicyManager to reflect the currently-signed-in |
- // user. |
- void InitializeUserCloudPolicyManager(); |
+ // Initializes the UserCloudPolicyManager using the passed CloudPolicyClient. |
+ void InitializeUserCloudPolicyManager(scoped_ptr<CloudPolicyClient> client); |
+ |
+ // Initializes the UserCloudPolicyManager with policy for the currently |
+ // signed-in user. |
+ void InitializeForSignedInUser(); |
// Fetches an OAuth token to allow the cloud policy service to register with |
// the cloud policy server. |oauth_login_token| should contain an OAuth login |
@@ -104,47 +101,31 @@ class UserPolicySigninService |
// device_management service. |
void RegisterCloudPolicyService(std::string oauth_login_token); |
+ // Callback invoked when policy registration has finished. |
+ void OnRegistrationComplete(); |
+ |
// Helper routines to (un)register for CloudPolicyService and |
// CloudPolicyClient notifications. |
void StartObserving(); |
void StopObserving(); |
- // If a policy fetch was requested, invokes the callback passing through the |
- // |success| flag. |
- void NotifyPendingFetchCallback(bool success); |
- |
// Shuts down the UserCloudPolicyManager (for example, after the user signs |
// out) and deletes any cached policy. |
void ShutdownUserCloudPolicyManager(); |
+ // Invoked when a policy registration request is complete. |
+ void CallPolicyRegistrationCallback(scoped_ptr<CloudPolicyClient> client, |
+ PolicyRegistrationCallback callback); |
+ |
// Convenience helper to get the UserCloudPolicyManager for |profile_|. |
UserCloudPolicyManager* GetManager(); |
- // WeakPtrFactory used to create callbacks for loading policy. |
- base::WeakPtrFactory<UserPolicySigninService> weak_factory_; |
- |
// Weak pointer to the profile this service is associated with. |
Profile* profile_; |
- // If true, we have a pending fetch so notify the callback the next time |
- // the appropriate notification is delivered from CloudPolicyService/Client. |
- bool pending_fetch_; |
- |
- // The callback to invoke when the pending policy fetch is completed. |
- PolicyFetchCallback pending_fetch_callback_; |
- |
content::NotificationRegistrar registrar_; |
- // Fetcher used while obtaining an OAuth token for client registration. |
- scoped_ptr<OAuth2AccessTokenFetcher> oauth2_access_token_fetcher_; |
- |
- // Helper class for fetching information from GAIA about the currently |
- // signed-in user. |
- scoped_ptr<UserInfoFetcher> user_info_fetcher_; |
- |
- // Access token used to register the CloudPolicyClient and also access |
- // GAIA to get information about the signed in user. |
- std::string oauth_access_token_; |
+ scoped_ptr<CloudPolicyClientRegistrationHelper> registration_helper_; |
DISALLOW_COPY_AND_ASSIGN(UserPolicySigninService); |
}; |