// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_EXTERNAL_DATA_MANAGER_H_ #define CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_EXTERNAL_DATA_MANAGER_H_ #include "base/basictypes.h" #include "base/files/file_path.h" #include "base/memory/ref_counted.h" #include "chrome/browser/chromeos/policy/cloud_external_data_manager_base.h" #include "components/policy/core/common/policy_details.h" namespace base { class SequencedTaskRunner; } namespace policy { class CloudPolicyStore; class ResourceCache; // Downloads, verifies, caches and retrieves external data referenced by // policies. // This is the implementation for regular users on Chrome OS. The code would // work on desktop platforms as well but for now, is used on Chrome OS only // because no other platform has policies referencing external data. class UserCloudExternalDataManager : public CloudExternalDataManagerBase { public: // |get_policy_details| is used to determine the maximum size that the // data referenced by each policy can have. Download scheduling, verification, // caching and retrieval tasks are done via the |backend_task_runner|, which // must support file I/O. Network I/O is done via the |io_task_runner|. The // manager is responsible for external data references by policies in // |policy_store|. UserCloudExternalDataManager( const GetChromePolicyDetailsCallback& get_policy_details, scoped_refptr<base::SequencedTaskRunner> backend_task_runner, scoped_refptr<base::SequencedTaskRunner> io_task_runner, const base::FilePath& cache_path, CloudPolicyStore* policy_store); virtual ~UserCloudExternalDataManager(); private: // Cache used to store downloaded external data. The |resource_cache_| is // owned by the manager but its destruction must be handled with care: // * The manager owns a |backend_| which owns an |external_data_store_| which // uses the |resource_cache_|. The |external_data_store_| must be destroyed // before the |resource_cache_|. // * After construction, |backend_|, |external_data_store_| and // |resource_cache_| can only be accessed through the // |backend_task_runner_|. // // It follows that in order to destroy |resource_cache_|, the manager must // take the following steps: // * Post a task to the |backend_task_runner_| that will tell the |backend_| // to destroy the |external_data_store_|. // * Post a task to the |backend_task_runner_| that will destroy the // |resource_cache_|. // Because of this destruction sequence, a scoped_ptr cannot be used. ResourceCache* resource_cache_; DISALLOW_COPY_AND_ASSIGN(UserCloudExternalDataManager); }; } // namespace policy #endif // CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_EXTERNAL_DATA_MANAGER_H_