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 COMPONENTS_POLICY_CORE_COMMON_CLOUD_CLOUD_POLICY_CORE_H_ 6 #define COMPONENTS_POLICY_CORE_COMMON_CLOUD_CLOUD_POLICY_CORE_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/memory/ref_counted.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "base/observer_list.h" 14 #include "base/prefs/pref_member.h" 15 #include "components/policy/core/common/cloud/cloud_policy_constants.h" 16 #include "components/policy/policy_export.h" 17 18 class PrefService; 19 20 namespace base { 21 class SequencedTaskRunner; 22 } 23 24 namespace policy { 25 26 class CloudPolicyClient; 27 class CloudPolicyRefreshScheduler; 28 class CloudPolicyService; 29 class CloudPolicyStore; 30 31 // CloudPolicyCore glues together the ingredients that are essential for 32 // obtaining a fully-functional cloud policy system: CloudPolicyClient and 33 // CloudPolicyStore, which are responsible for fetching policy from the cloud 34 // and storing it locally, respectively, as well as a CloudPolicyService 35 // instance that moves data between the two former components, and 36 // CloudPolicyRefreshScheduler which triggers periodic refreshes. 37 class POLICY_EXPORT CloudPolicyCore { 38 public: 39 // Callbacks for policy core events. 40 class POLICY_EXPORT Observer { 41 public: 42 virtual ~Observer(); 43 44 // Called after the core is connected. 45 virtual void OnCoreConnected(CloudPolicyCore* core) = 0; 46 47 // Called after the refresh scheduler is started. 48 virtual void OnRefreshSchedulerStarted(CloudPolicyCore* core) = 0; 49 50 // Called before the core is disconnected. 51 virtual void OnCoreDisconnecting(CloudPolicyCore* core) = 0; 52 }; 53 54 // |task_runner| is the runner for policy refresh tasks. 55 CloudPolicyCore(const PolicyNamespaceKey& policy_ns_key, 56 CloudPolicyStore* store, 57 const scoped_refptr<base::SequencedTaskRunner>& task_runner); 58 ~CloudPolicyCore(); 59 60 CloudPolicyClient* client() { return client_.get(); } 61 const CloudPolicyClient* client() const { return client_.get(); } 62 63 CloudPolicyStore* store() { return store_; } 64 const CloudPolicyStore* store() const { return store_; } 65 66 CloudPolicyService* service() { return service_.get(); } 67 const CloudPolicyService* service() const { return service_.get(); } 68 69 CloudPolicyRefreshScheduler* refresh_scheduler() { 70 return refresh_scheduler_.get(); 71 } 72 const CloudPolicyRefreshScheduler* refresh_scheduler() const { 73 return refresh_scheduler_.get(); 74 } 75 76 // Initializes the cloud connection. 77 void Connect(scoped_ptr<CloudPolicyClient> client); 78 79 // Shuts down the cloud connection. 80 void Disconnect(); 81 82 // Requests a policy refresh to be performed soon. This may apply throttling, 83 // and the request may not be immediately sent. 84 void RefreshSoon(); 85 86 // Starts a refresh scheduler in case none is running yet. 87 void StartRefreshScheduler(); 88 89 // Watches the pref named |refresh_pref_name| in |pref_service| and adjusts 90 // |refresh_scheduler_|'s refresh delay accordingly. 91 void TrackRefreshDelayPref(PrefService* pref_service, 92 const std::string& refresh_pref_name); 93 94 // Registers an observer to be notified of policy core events. 95 void AddObserver(Observer* observer); 96 97 // Removes the specified observer. 98 void RemoveObserver(Observer* observer); 99 100 private: 101 // Updates the refresh scheduler on refresh delay changes. 102 void UpdateRefreshDelayFromPref(); 103 104 PolicyNamespaceKey policy_ns_key_; 105 CloudPolicyStore* store_; 106 scoped_refptr<base::SequencedTaskRunner> task_runner_; 107 scoped_ptr<CloudPolicyClient> client_; 108 scoped_ptr<CloudPolicyService> service_; 109 scoped_ptr<CloudPolicyRefreshScheduler> refresh_scheduler_; 110 scoped_ptr<IntegerPrefMember> refresh_delay_; 111 ObserverList<Observer, true> observers_; 112 113 DISALLOW_COPY_AND_ASSIGN(CloudPolicyCore); 114 }; 115 116 } // namespace policy 117 118 #endif // COMPONENTS_POLICY_CORE_COMMON_CLOUD_CLOUD_POLICY_CORE_H_ 119