12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef COMPONENTS_POLICY_CORE_COMMON_CLOUD_COMPONENT_CLOUD_POLICY_UPDATER_H_
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define COMPONENTS_POLICY_CORE_COMMON_CLOUD_COMPONENT_CLOUD_POLICY_UPDATER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <string>
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/external_policy_data_updater.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_namespace.h"
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/policy_export.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SequencedTaskRunner;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace enterprise_management {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PolicyFetchResponse;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace policy {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ComponentCloudPolicyStore;
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class ExternalPolicyDataFetcher;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class downloads external policy data, given PolicyFetchResponses.
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// It validates the PolicyFetchResponse and its corresponding data, and caches
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// them in a ComponentCloudPolicyStore. It also enforces size limits on what's
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// cached.
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// It retries to download the policy data periodically when a download fails.
35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class POLICY_EXPORT ComponentCloudPolicyUpdater {
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // This class runs on the background thread represented by |task_runner|,
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // which must support file I/O. All network I/O is delegated to the
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // |external_policy_data_fetcher|.
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ComponentCloudPolicyUpdater(
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<base::SequencedTaskRunner> task_runner,
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      scoped_ptr<ExternalPolicyDataFetcher> external_policy_data_fetcher,
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ComponentCloudPolicyStore* store);
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~ComponentCloudPolicyUpdater();
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |response| is the latest policy information fetched for some component.
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This method schedules the download of the policy data, if |response| is
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // validated. If the downloaded data also passes validation then that data
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // will be passed to the |store_|.
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateExternalPolicy(
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<enterprise_management::PolicyFetchResponse> response);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Cancels any pending operations for the given namespace.
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void CancelUpdate(const PolicyNamespace& ns);
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::string NamespaceToKey(const PolicyNamespace& ns);
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ComponentCloudPolicyStore* store_;
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ExternalPolicyDataUpdater external_policy_data_updater_;
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ComponentCloudPolicyUpdater);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace policy
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // COMPONENTS_POLICY_CORE_COMMON_CLOUD_COMPONENT_CLOUD_POLICY_UPDATER_H_
68