• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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