Home | History | Annotate | Download | only in cloud
      1 // Copyright (c) 2013 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_COMPONENT_CLOUD_POLICY_UPDATER_H_
      6 #define COMPONENTS_POLICY_CORE_COMMON_CLOUD_COMPONENT_CLOUD_POLICY_UPDATER_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 "components/policy/core/common/cloud/external_policy_data_updater.h"
     14 #include "components/policy/core/common/policy_namespace.h"
     15 #include "components/policy/policy_export.h"
     16 
     17 namespace base {
     18 class SequencedTaskRunner;
     19 }
     20 
     21 namespace enterprise_management {
     22 class PolicyFetchResponse;
     23 }
     24 
     25 namespace policy {
     26 
     27 class ComponentCloudPolicyStore;
     28 class ExternalPolicyDataFetcher;
     29 
     30 // This class downloads external policy data, given PolicyFetchResponses.
     31 // It validates the PolicyFetchResponse and its corresponding data, and caches
     32 // them in a ComponentCloudPolicyStore. It also enforces size limits on what's
     33 // cached.
     34 // It retries to download the policy data periodically when a download fails.
     35 class POLICY_EXPORT ComponentCloudPolicyUpdater {
     36  public:
     37   // This class runs on the background thread represented by |task_runner|,
     38   // which must support file I/O. All network I/O is delegated to the
     39   // |external_policy_data_fetcher|.
     40   ComponentCloudPolicyUpdater(
     41       scoped_refptr<base::SequencedTaskRunner> task_runner,
     42       scoped_ptr<ExternalPolicyDataFetcher> external_policy_data_fetcher,
     43       ComponentCloudPolicyStore* store);
     44   ~ComponentCloudPolicyUpdater();
     45 
     46   // |response| is the latest policy information fetched for some component.
     47   // This method schedules the download of the policy data, if |response| is
     48   // validated. If the downloaded data also passes validation then that data
     49   // will be passed to the |store_|.
     50   void UpdateExternalPolicy(
     51       scoped_ptr<enterprise_management::PolicyFetchResponse> response);
     52 
     53   // Cancels any pending operations for the given namespace.
     54   void CancelUpdate(const PolicyNamespace& ns);
     55 
     56  private:
     57   std::string NamespaceToKey(const PolicyNamespace& ns);
     58 
     59   ComponentCloudPolicyStore* store_;
     60   ExternalPolicyDataUpdater external_policy_data_updater_;
     61 
     62   DISALLOW_COPY_AND_ASSIGN(ComponentCloudPolicyUpdater);
     63 };
     64 
     65 }  // namespace policy
     66 
     67 #endif  // COMPONENTS_POLICY_CORE_COMMON_CLOUD_COMPONENT_CLOUD_POLICY_UPDATER_H_
     68