Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: chrome/browser/policy/component_cloud_policy_store.h

Issue 12189011: Split up chrome/browser/policy subdirectory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase, add chrome/browser/chromeos/policy/OWNERS Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 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.
4
5 #ifndef CHROME_BROWSER_POLICY_COMPONENT_CLOUD_POLICY_STORE_H_
6 #define CHROME_BROWSER_POLICY_COMPONENT_CLOUD_POLICY_STORE_H_
7
8 #include <map>
9 #include <set>
10 #include <string>
11
12 #include "base/basictypes.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/threading/non_thread_safe.h"
15 #include "chrome/browser/policy/policy_bundle.h"
16 #include "chrome/browser/policy/policy_service.h"
17
18 namespace enterprise_management {
19 class ExternalPolicyData;
20 class PolicyData;
21 class PolicyFetchResponse;
22 }
23
24 namespace policy {
25
26 class ResourceCache;
27
28 // Validates protobufs for external policy data, validates the data itself, and
29 // caches both locally.
30 class ComponentCloudPolicyStore : public base::NonThreadSafe {
31 public:
32 class Delegate {
33 public:
34 virtual ~Delegate();
35
36 // Invoked whenever the policies served by policy() have changed, except
37 // for the initial Load().
38 virtual void OnComponentCloudPolicyStoreUpdated() = 0;
39 };
40
41 // Both the |delegate| and the |cache| must outlive this object.
42 ComponentCloudPolicyStore(Delegate* delegate,
43 ResourceCache* cache);
44 ~ComponentCloudPolicyStore();
45
46 // Helper that returns true for PolicyDomains that can be managed by this
47 // store.
48 static bool SupportsDomain(PolicyDomain domain);
49
50 // Returns true if |domain| can be managed by this store; in that case, the
51 // dm_protocol policy type that corresponds to |domain| is stored in
52 // |policy_type|. Otherwise returns false.
53 static bool GetPolicyType(PolicyDomain domain, std::string* policy_type);
54
55 // Returns true if |policy_type| corresponds to a policy domain that can be
56 // managed by this store; in that case, the domain constants is assigned to
57 // |domain|. Otherwise returns false.
58 static bool GetPolicyDomain(const std::string& policy_type,
59 PolicyDomain* domain);
60
61 // The current list of policies.
62 const PolicyBundle& policy() const { return policy_bundle_; }
63
64 // The cached hash for namespace |ns|, or the empty string if |ns| is not
65 // cached.
66 const std::string& GetCachedHash(const PolicyNamespace& ns) const;
67
68 // |username| and |dm_token| are used to validate the cached data, and data
69 // stored later.
70 // All ValidatePolicy() requests without credentials fail.
71 void SetCredentials(const std::string& username,
72 const std::string& dm_token);
73
74 // Loads and validates all the currently cached protobufs and policy data.
75 // This is performed synchronously, and policy() will return the cached
76 // policies after this call.
77 void Load();
78
79 // Stores the protobuf and |data| for namespace |ns|. The protobuf is passed
80 // serialized in |serialized_policy_proto|, and must have been validated
81 // before.
82 // The |data| is validated during this call, and its secure hash must match
83 // |secure_hash|.
84 // Returns false if |data| failed validation, otherwise returns true and the
85 // data was stored in the cache.
86 bool Store(const PolicyNamespace& ns,
87 const std::string& serialized_policy_proto,
88 const std::string& secure_hash,
89 const std::string& data);
90
91 // Deletes the storage of namespace |ns| and stops serving its policies.
92 void Delete(const PolicyNamespace& ns);
93
94 // Deletes the storage of all components of |domain| that are not in
95 // |components_to_keep|, and stops serving their policies.
96 void Purge(PolicyDomain domain,
97 const std::set<std::string>& components_to_keep);
98
99 // Validates |proto| and returns the corresponding policy namespace in |ns|,
100 // and the parsed ExternalPolicyData in |payload|.
101 // If |proto| validates successfully then its |payload| can be trusted, and
102 // the data referenced there can be downloaded. A |proto| must be validated
103 // before attempting to download the data, and before storing both.
104 bool ValidatePolicy(
105 scoped_ptr<enterprise_management::PolicyFetchResponse> proto,
106 PolicyNamespace* ns,
107 enterprise_management::ExternalPolicyData* payload);
108
109 private:
110 // Helper for ValidatePolicy(), that's also used to validate protobufs
111 // loaded from the disk cache.
112 bool ValidateProto(
113 scoped_ptr<enterprise_management::PolicyFetchResponse> proto,
114 const std::string& policy_type,
115 const std::string& settings_entity_id,
116 enterprise_management::ExternalPolicyData* payload,
117 enterprise_management::PolicyData* policy_data);
118
119 // Validates the JSON policy serialized in |data|, and verifies its hash
120 // with |secure_hash|. Returns true on success, and in that case stores the
121 // parsed policies in |policy|.
122 bool ValidateData(const std::string& data,
123 const std::string& secure_hash,
124 PolicyMap* policy);
125
126 // Parses the JSON policy in |data| into |policy|, and returns true if the
127 // parse was successful.
128 bool ParsePolicy(const std::string& data, PolicyMap* policy);
129
130 Delegate* delegate_;
131 ResourceCache* cache_;
132 std::string username_;
133 std::string dm_token_;
134
135 PolicyBundle policy_bundle_;
136 std::map<PolicyNamespace, std::string> cached_hashes_;
137
138 DISALLOW_COPY_AND_ASSIGN(ComponentCloudPolicyStore);
139 };
140
141 } // namespace policy
142
143 #endif // CHROME_BROWSER_POLICY_COMPONENT_CLOUD_POLICY_STORE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698