user_cloud_policy_manager_chromeos.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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_CHROMEOS_POLICY_USER_CLOUD_POLICY_MANAGER_CHROMEOS_H_
6#define CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_MANAGER_CHROMEOS_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/cloud_policy_client.h"
15#include "chrome/browser/policy/cloud/cloud_policy_constants.h"
16#include "chrome/browser/policy/cloud/cloud_policy_manager.h"
17#include "chrome/browser/policy/cloud/component_cloud_policy_service.h"
18
19class PrefService;
20
21namespace net {
22class URLRequestContextGetter;
23}
24
25namespace policy {
26
27class DeviceManagementService;
28class ResourceCache;
29
30// UserCloudPolicyManagerChromeOS implements logic for initializing user policy
31// on Chrome OS.
32class UserCloudPolicyManagerChromeOS
33    : public CloudPolicyManager,
34      public CloudPolicyClient::Observer,
35      public ComponentCloudPolicyService::Delegate {
36 public:
37  // If |wait_for_policy_fetch| is true, IsInitializationComplete() will return
38  // false as long as there hasn't been a successful policy fetch.
39  UserCloudPolicyManagerChromeOS(
40      scoped_ptr<CloudPolicyStore> store,
41      scoped_ptr<ResourceCache> resource_cache,
42      bool wait_for_policy_fetch);
43  virtual ~UserCloudPolicyManagerChromeOS();
44
45  // Initializes the cloud connection. |local_state| and
46  // |device_management_service| must stay valid until this object is deleted.
47  void Connect(PrefService* local_state,
48               DeviceManagementService* device_management_service,
49               scoped_refptr<net::URLRequestContextGetter> request_context,
50               UserAffiliation user_affiliation);
51
52  // Cancels waiting for the policy fetch and flags the
53  // ConfigurationPolicyProvider ready (assuming all other initialization tasks
54  // have completed).
55  void CancelWaitForPolicyFetch();
56
57  // Register the CloudPolicyClient using the passed OAuth token.
58  void RegisterClient(const std::string& access_token);
59
60  // Returns true if the underlying CloudPolicyClient is already registered.
61  bool IsClientRegistered() const;
62
63  // ConfigurationPolicyProvider:
64  virtual void Shutdown() OVERRIDE;
65  virtual bool IsInitializationComplete(PolicyDomain domain) const OVERRIDE;
66  virtual void RegisterPolicyDomain(
67      PolicyDomain domain,
68      const std::set<std::string>& component_ids) OVERRIDE;
69
70  // CloudPolicyManager:
71  virtual scoped_ptr<PolicyBundle> CreatePolicyBundle() OVERRIDE;
72
73  // CloudPolicyClient::Observer:
74  virtual void OnPolicyFetched(CloudPolicyClient* client) OVERRIDE;
75  virtual void OnRegistrationStateChanged(CloudPolicyClient* client) OVERRIDE;
76  virtual void OnClientError(CloudPolicyClient* client) OVERRIDE;
77
78  // ComponentCloudPolicyService::Observer:
79  virtual void OnComponentCloudPolicyRefreshNeeded() OVERRIDE;
80  virtual void OnComponentCloudPolicyUpdated() OVERRIDE;
81
82 private:
83  // Completion handler for the explicit policy fetch triggered on startup in
84  // case |wait_for_policy_fetch_| is true. |success| is true if the fetch was
85  // successful.
86  void OnInitialPolicyFetchComplete(bool success);
87
88  void StartRefreshScheduler();
89
90  // Owns the store, note that CloudPolicyManager just keeps a plain pointer.
91  scoped_ptr<CloudPolicyStore> store_;
92
93  // Handles fetching and storing cloud policy for components. It uses the
94  // |store_|, so destroy it first.
95  scoped_ptr<ComponentCloudPolicyService> component_policy_service_;
96
97  // Whether to wait for a policy fetch to complete before reporting
98  // IsInitializationComplete().
99  bool wait_for_policy_fetch_;
100
101  // The pref service to pass to the refresh scheduler on initialization.
102  PrefService* local_state_;
103
104  DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyManagerChromeOS);
105};
106
107}  // namespace policy
108
109#endif  // CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_MANAGER_CHROMEOS_H_
110