Home | History | Annotate | Download | only in cloud
      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