1 // Copyright 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.
5 #ifndef CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_EXTERNAL_DATA_MANAGER_H_
6 #define CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_EXTERNAL_DATA_MANAGER_H_
8 #include "base/basictypes.h"
9 #include "base/files/file_path.h"
10 #include "base/memory/ref_counted.h"
11 #include "chrome/browser/chromeos/policy/cloud_external_data_manager_base.h"
12 #include "components/policy/core/common/policy_details.h"
15 class SequencedTaskRunner
;
20 class CloudPolicyStore
;
23 // Downloads, verifies, caches and retrieves external data referenced by
25 // This is the implementation for regular users on Chrome OS. The code would
26 // work on desktop platforms as well but for now, is used on Chrome OS only
27 // because no other platform has policies referencing external data.
28 class UserCloudExternalDataManager
: public CloudExternalDataManagerBase
{
30 // |get_policy_details| is used to determine the maximum size that the
31 // data referenced by each policy can have. Download scheduling, verification,
32 // caching and retrieval tasks are done via the |backend_task_runner|, which
33 // must support file I/O. Network I/O is done via the |io_task_runner|. The
34 // manager is responsible for external data references by policies in
36 UserCloudExternalDataManager(
37 const GetChromePolicyDetailsCallback
& get_policy_details
,
38 scoped_refptr
<base::SequencedTaskRunner
> backend_task_runner
,
39 scoped_refptr
<base::SequencedTaskRunner
> io_task_runner
,
40 const base::FilePath
& cache_path
,
41 CloudPolicyStore
* policy_store
);
42 ~UserCloudExternalDataManager() override
;
45 // Cache used to store downloaded external data. The |resource_cache_| is
46 // owned by the manager but its destruction must be handled with care:
47 // * The manager owns a |backend_| which owns an |external_data_store_| which
48 // uses the |resource_cache_|. The |external_data_store_| must be destroyed
49 // before the |resource_cache_|.
50 // * After construction, |backend_|, |external_data_store_| and
51 // |resource_cache_| can only be accessed through the
52 // |backend_task_runner_|.
54 // It follows that in order to destroy |resource_cache_|, the manager must
55 // take the following steps:
56 // * Post a task to the |backend_task_runner_| that will tell the |backend_|
57 // to destroy the |external_data_store_|.
58 // * Post a task to the |backend_task_runner_| that will destroy the
60 // Because of this destruction sequence, a scoped_ptr cannot be used.
61 ResourceCache
* resource_cache_
;
63 DISALLOW_COPY_AND_ASSIGN(UserCloudExternalDataManager
);
68 #endif // CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_EXTERNAL_DATA_MANAGER_H_