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