11510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Copyright 2013 The Chromium Authors. All rights reserved. 21510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Use of this source code is governed by a BSD-style license that can be 31510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// found in the LICENSE file. 41510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 51510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#ifndef CHROME_BROWSER_CHROMEOS_POLICY_CLOUD_EXTERNAL_DATA_MANAGER_BASE_H_ 61510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#define CHROME_BROWSER_CHROMEOS_POLICY_CLOUD_EXTERNAL_DATA_MANAGER_BASE_H_ 71510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 81510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#include "base/basictypes.h" 91510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#include "base/compiler_specific.h" 101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#include "base/memory/ref_counted.h" 111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#include "base/memory/scoped_ptr.h" 121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#include "base/threading/non_thread_safe.h" 131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#include "components/policy/core/common/cloud/cloud_external_data_manager.h" 141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#include "components/policy/core/common/policy_details.h" 151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgnamespace base { 171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgclass SequencedTaskRunner; 181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgnamespace policy { 211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgclass CloudExternalDataStore; 231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgclass ExternalPolicyDataFetcherBackend; 241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Downloads, verifies, caches and retrieves external data referenced by 261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// policies. 271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// This is a common base class used by specializations for regular users and 281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// device-local accounts. 291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgclass CloudExternalDataManagerBase : public CloudExternalDataManager, 301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org public base::NonThreadSafe { 311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org public: 321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // |get_policy_details| is used to determine the maximum size that the 331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // data referenced by each policy can have. Download scheduling, verification, 341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // caching and retrieval tasks are done via the |backend_task_runner|, which 351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // must support file I/O. Network I/O is done via the |io_task_runner|. 361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CloudExternalDataManagerBase( 371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org const GetChromePolicyDetailsCallback& get_policy_details, 381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org scoped_refptr<base::SequencedTaskRunner> backend_task_runner, 391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org scoped_refptr<base::SequencedTaskRunner> io_task_runner); 401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org virtual ~CloudExternalDataManagerBase(); 41 42 // Allows downloaded external data to be cached in |external_data_store|. 43 // Ownership of the store is taken. The store can be destroyed by calling 44 // SetExternalDataStore(scoped_ptr<CloudExternalDataStore>()). Accesses to the 45 // store are made via |backend_task_runner_| only. 46 void SetExternalDataStore( 47 scoped_ptr<CloudExternalDataStore> external_data_store); 48 49 // CloudExternalDataManager: 50 virtual void SetPolicyStore(CloudPolicyStore* policy_store) OVERRIDE; 51 virtual void OnPolicyStoreLoaded() OVERRIDE; 52 virtual void Connect( 53 scoped_refptr<net::URLRequestContextGetter> request_context) OVERRIDE; 54 virtual void Disconnect() OVERRIDE; 55 virtual void Fetch( 56 const std::string& policy, 57 const ExternalDataFetcher::FetchCallback& callback) OVERRIDE; 58 59 // Allows policies to reference |max_size| bytes of external data even if no 60 // |max_size| was specified in policy_templates.json. 61 // TODO(bartfab): This override is only needed because there are no policies 62 // that reference external data and have a |max_size| yet. Once the first such 63 // policy is added, use that policy in tests and remove the override. 64 static void SetMaxExternalDataSizeForTesting(int max_size); 65 66 protected: 67 friend class CloudExternalDataManagerBaseTest; 68 69 // Try to download and cache all external data referenced by policies in 70 // |policy_store_|. 71 void FetchAll(); 72 73 scoped_refptr<base::SequencedTaskRunner> backend_task_runner_; 74 scoped_refptr<base::SequencedTaskRunner> io_task_runner_; 75 76 private: 77 // The |external_policy_data_fetcher_backend_| handles network I/O for the 78 // |backend_| because URLRequestContextGetter and URLFetchers cannot be 79 // referenced from background threads. It is instantiated on the thread |this| 80 // runs on but after that, must only be accessed and eventually destroyed via 81 // the |io_task_runner_|. 82 scoped_ptr<ExternalPolicyDataFetcherBackend> 83 external_policy_data_fetcher_backend_; 84 85 // The |backend_| handles all data download scheduling, verification, caching 86 // and retrieval. It is instantiated on the thread |this| runs on but after 87 // that, must only be accessed and eventually destroyed via the 88 // |backend_task_runner_|. 89 class Backend; 90 scoped_ptr<Backend> backend_; 91 92 DISALLOW_COPY_AND_ASSIGN(CloudExternalDataManagerBase); 93}; 94 95} // namespace policy 96 97#endif // CHROME_BROWSER_CHROMEOS_POLICY_CLOUD_EXTERNAL_DATA_MANAGER_BASE_H_ 98