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_POLICY_CLOUD_USER_POLICY_SIGNIN_SERVICE_H_ 6#define CHROME_BROWSER_POLICY_CLOUD_USER_POLICY_SIGNIN_SERVICE_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/compiler_specific.h" 12#include "base/memory/ref_counted.h" 13#include "base/memory/scoped_ptr.h" 14#include "chrome/browser/policy/cloud/user_policy_signin_service_base.h" 15#include "google_apis/gaia/oauth2_token_service.h" 16 17class Profile; 18class ProfileOAuth2TokenService; 19 20namespace net { 21class URLRequestContextGetter; 22} 23 24namespace policy { 25 26class CloudPolicyClientRegistrationHelper; 27 28// A specialization of the UserPolicySigninServiceBase for the desktop 29// platforms (Windows, Mac and Linux). 30class UserPolicySigninService : public UserPolicySigninServiceBase, 31 public OAuth2TokenService::Observer { 32 public: 33 // Creates a UserPolicySigninService associated with the passed 34 // |policy_manager| and |signin_manager|. 35 UserPolicySigninService( 36 Profile* profile, 37 PrefService* local_state, 38 DeviceManagementService* device_management_service, 39 UserCloudPolicyManager* policy_manager, 40 SigninManager* signin_manager, 41 scoped_refptr<net::URLRequestContextGetter> system_request_context, 42 ProfileOAuth2TokenService* oauth2_token_service); 43 virtual ~UserPolicySigninService(); 44 45 // Registers a CloudPolicyClient for fetching policy for a user. The 46 // |oauth2_login_token| and |username| are explicitly passed because 47 // the user is not signed in yet (ProfileOAuth2TokenService does not have 48 // any tokens yet to prevent services from using it until after we've fetched 49 // policy). 50 void RegisterForPolicy(const std::string& username, 51 const std::string& oauth2_login_token, 52 const PolicyRegistrationCallback& callback); 53 54 // OAuth2TokenService::Observer implementation: 55 virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE; 56 57 // CloudPolicyService::Observer implementation: 58 virtual void OnInitializationCompleted(CloudPolicyService* service) OVERRIDE; 59 60 // KeyedService implementation: 61 virtual void Shutdown() OVERRIDE; 62 63 protected: 64 // UserPolicySigninServiceBase implementation: 65 virtual void InitializeUserCloudPolicyManager( 66 const std::string& username, 67 scoped_ptr<CloudPolicyClient> client) OVERRIDE; 68 69 virtual void PrepareForUserCloudPolicyManagerShutdown() OVERRIDE; 70 virtual void ShutdownUserCloudPolicyManager() OVERRIDE; 71 72 private: 73 // Fetches an OAuth token to allow the cloud policy service to register with 74 // the cloud policy server. |oauth_login_token| should contain an OAuth login 75 // refresh token that can be downscoped to get an access token for the 76 // device_management service. 77 void RegisterCloudPolicyService(); 78 79 // Callback invoked when policy registration has finished. 80 void OnRegistrationComplete(); 81 82 // Helper routine which prohibits user signout if the user is registered for 83 // cloud policy. 84 void ProhibitSignoutIfNeeded(); 85 86 // Invoked when a policy registration request is complete. 87 void CallPolicyRegistrationCallback(scoped_ptr<CloudPolicyClient> client, 88 PolicyRegistrationCallback callback); 89 90 // Parent profile for this service. 91 Profile* profile_; 92 93 scoped_ptr<CloudPolicyClientRegistrationHelper> registration_helper_; 94 95 // Weak pointer to the token service we use to authenticate during 96 // CloudPolicyClient registration. 97 ProfileOAuth2TokenService* oauth2_token_service_; 98 99 DISALLOW_COPY_AND_ASSIGN(UserPolicySigninService); 100}; 101 102} // namespace policy 103 104#endif // CHROME_BROWSER_POLICY_CLOUD_USER_POLICY_SIGNIN_SERVICE_H_ 105