Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / components / policy / core / common / config_dir_policy_loader.h
1 // Copyright (c) 2012 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.
4
5 #ifndef COMPONENTS_POLICY_CORE_COMMON_CONFIG_DIR_POLICY_LOADER_H_
6 #define COMPONENTS_POLICY_CORE_COMMON_CONFIG_DIR_POLICY_LOADER_H_
7
8 #include "base/files/file_path.h"
9 #include "base/files/file_path_watcher.h"
10 #include "components/policy/core/common/async_policy_loader.h"
11 #include "components/policy/core/common/policy_types.h"
12 #include "components/policy/policy_export.h"
13
14 namespace base {
15 class Value;
16 }
17
18 namespace policy {
19
20 // A policy loader implementation backed by a set of files in a given
21 // directory. The files should contain JSON-formatted policy settings. They are
22 // merged together and the result is returned in a PolicyBundle.
23 // The files are consulted in lexicographic file name order, so the
24 // last value read takes precedence in case of policy key collisions.
25 class POLICY_EXPORT ConfigDirPolicyLoader : public AsyncPolicyLoader {
26  public:
27   ConfigDirPolicyLoader(scoped_refptr<base::SequencedTaskRunner> task_runner,
28                         const base::FilePath& config_dir,
29                         PolicyScope scope);
30   ~ConfigDirPolicyLoader() override;
31
32   // AsyncPolicyLoader implementation.
33   void InitOnBackgroundThread() override;
34   scoped_ptr<PolicyBundle> Load() override;
35   base::Time LastModificationTime() override;
36
37  private:
38   // Loads the policy files at |path| into the |bundle|, with the given |level|.
39   void LoadFromPath(const base::FilePath& path,
40                     PolicyLevel level,
41                     PolicyBundle* bundle);
42
43   // Merges the 3rd party |policies| into the |bundle|, with the given |level|.
44   void Merge3rdPartyPolicy(const base::Value* policies,
45                            PolicyLevel level,
46                            PolicyBundle* bundle);
47
48   // Callback for the FilePathWatchers.
49   void OnFileUpdated(const base::FilePath& path, bool error);
50
51   // The directory containing the policy files.
52   base::FilePath config_dir_;
53
54   // Policies loaded by this provider will have this scope.
55   PolicyScope scope_;
56
57   // Watchers for events on the mandatory and recommended subdirectories of
58   // |config_dir_|.
59   base::FilePathWatcher mandatory_watcher_;
60   base::FilePathWatcher recommended_watcher_;
61
62   DISALLOW_COPY_AND_ASSIGN(ConfigDirPolicyLoader);
63 };
64
65 }  // namespace policy
66
67 #endif  // COMPONENTS_POLICY_CORE_COMMON_CONFIG_DIR_POLICY_LOADER_H_