user_cloud_policy_manager_chromeos.h revision a36e5920737c6adbddd3e43b760e5de8431db6e0
193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved. 293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org// Use of this source code is governed by a BSD-style license that can be 393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org// found in the LICENSE file. 493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#ifndef CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_MANAGER_CHROMEOS_H_ 693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#define CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_MANAGER_CHROMEOS_H_ 793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include <string> 993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 1093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "base/basictypes.h" 1193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "base/compiler_specific.h" 1293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "base/memory/ref_counted.h" 1393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "base/memory/scoped_ptr.h" 1493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "chrome/browser/policy/cloud/cloud_policy_client.h" 1593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "chrome/browser/policy/cloud/cloud_policy_constants.h" 1693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "chrome/browser/policy/cloud/cloud_policy_manager.h" 1793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "chrome/browser/policy/cloud/cloud_policy_service.h" 1893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "chrome/browser/policy/cloud/component_cloud_policy_service.h" 1993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "components/browser_context_keyed_service/browser_context_keyed_service.h" 2093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 2193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgclass GoogleServiceAuthError; 2293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgclass PrefService; 2393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 2493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgnamespace net { 2593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgclass URLRequestContextGetter; 2693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} 2793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 2893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgnamespace policy { 2993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 3093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgclass DeviceManagementService; 3193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgclass PolicyOAuth2TokenFetcher; 3293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgclass ResourceCache; 3393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 3493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org// UserCloudPolicyManagerChromeOS implements logic for initializing user policy 3593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org// on Chrome OS. 3693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgclass UserCloudPolicyManagerChromeOS 3793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org : public CloudPolicyManager, 3893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org public CloudPolicyClient::Observer, 3993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org public CloudPolicyService::Observer, 4093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org public ComponentCloudPolicyService::Delegate, 4193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org public BrowserContextKeyedService { 4293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org public: 4393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // If |wait_for_policy_fetch| is true, IsInitializationComplete() will return 4493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // false as long as there hasn't been a successful policy fetch. 4593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org UserCloudPolicyManagerChromeOS( 4693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org scoped_ptr<CloudPolicyStore> store, 4793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org scoped_ptr<ResourceCache> resource_cache, 4893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org bool wait_for_policy_fetch); 4993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual ~UserCloudPolicyManagerChromeOS(); 5093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 5193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Initializes the cloud connection. |local_state| and 5293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // |device_management_service| must stay valid until this object is deleted. 5393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org void Connect(PrefService* local_state, 5493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org DeviceManagementService* device_management_service, 5593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org scoped_refptr<net::URLRequestContextGetter> request_context, 5693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org UserAffiliation user_affiliation); 5793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 5893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This class is one of the policy providers, and must be ready for the 5993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // creation of the Profile's PrefService; all the other 6093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // BrowserContextKeyedServices depend on the PrefService, so this class can't 6193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // depend on other BCKS to avoid a circular dependency. So instead of using 6293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // the ProfileOAuth2TokenService directly to get the access token, a 3rd 6393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // service (UserCloudPolicyTokenForwarder) will fetch it later and pass it 6493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // to this method once available. 6593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // The |access_token| can then be used to authenticate the registration 6693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // request to the DMServer. 6793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org void OnAccessTokenAvailable(const std::string& access_token); 6893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 6993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Returns true if the underlying CloudPolicyClient is already registered. 7093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org bool IsClientRegistered() const; 7193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 7293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // ConfigurationPolicyProvider: 7393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual void Shutdown() OVERRIDE; 7493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual bool IsInitializationComplete(PolicyDomain domain) const OVERRIDE; 7593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual void RegisterPolicyDomain( 7693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org scoped_refptr<const PolicyDomainDescriptor> descriptor) OVERRIDE; 7793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 7893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // CloudPolicyManager: 7993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual scoped_ptr<PolicyBundle> CreatePolicyBundle() OVERRIDE; 8093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 8193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // CloudPolicyService::Observer: 8293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual void OnInitializationCompleted(CloudPolicyService* service) OVERRIDE; 8393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 8493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // CloudPolicyClient::Observer: 8593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual void OnPolicyFetched(CloudPolicyClient* client) OVERRIDE; 8693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual void OnRegistrationStateChanged(CloudPolicyClient* client) OVERRIDE; 8793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual void OnClientError(CloudPolicyClient* client) OVERRIDE; 8893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 8993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // ComponentCloudPolicyService::Delegate: 9093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual void OnComponentCloudPolicyRefreshNeeded() OVERRIDE; 9193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual void OnComponentCloudPolicyUpdated() OVERRIDE; 9293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 9393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org private: 9493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Fetches a policy token using the authentication context of the signin 9593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Profile, and calls back to OnOAuth2PolicyTokenFetched when done. 9693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org void FetchPolicyOAuthTokenUsingSigninProfile(); 9793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 9893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Called once the policy access token is available, and starts the 9993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // registration with the policy server if the token was successfully fetched. 10093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org void OnOAuth2PolicyTokenFetched(const std::string& policy_token, 10193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org const GoogleServiceAuthError& error); 10293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 10393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Completion handler for the explicit policy fetch triggered on startup in 10493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // case |wait_for_policy_fetch_| is true. |success| is true if the fetch was 10593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // successful. 10693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org void OnInitialPolicyFetchComplete(bool success); 10793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 10893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Cancels waiting for the policy fetch and flags the 10993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // ConfigurationPolicyProvider ready (assuming all other initialization tasks 11093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // have completed). 11193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org void CancelWaitForPolicyFetch(); 11293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 11393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org void StartRefreshSchedulerIfReady(); 11493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 11593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Owns the store, note that CloudPolicyManager just keeps a plain pointer. 11693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org scoped_ptr<CloudPolicyStore> store_; 11793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 11893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Handles fetching and storing cloud policy for components. It uses the 11993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // |store_|, so destroy it first. 12093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org scoped_ptr<ComponentCloudPolicyService> component_policy_service_; 12193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 12293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Whether to wait for a policy fetch to complete before reporting 12393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // IsInitializationComplete(). 12493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org bool wait_for_policy_fetch_; 12593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 12693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // The pref service to pass to the refresh scheduler on initialization. 12793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org PrefService* local_state_; 12893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 12993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Used to fetch the policy OAuth token, when necessary. This object holds 13093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // a callback with an unretained reference to the manager, when it exists. 13193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org scoped_ptr<PolicyOAuth2TokenFetcher> token_fetcher_; 13293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 13393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // The access token passed to OnAccessTokenAvailable. It is stored here so 13493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // that it can be used if OnInitializationCompleted is called later. 13593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org std::string access_token_; 13693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 13793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyManagerChromeOS); 13893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org}; 13993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 14093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} // namespace policy 14193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 14293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#endif // CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_MANAGER_CHROMEOS_H_ 14393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org