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

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

Issue 23376002: Move ManagedModePolicyProvider functionality to ManagedUserSettingsService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 7 years, 3 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) 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 CHROME_BROWSER_POLICY_MANAGED_MODE_POLICY_PROVIDER_H_
6 #define CHROME_BROWSER_POLICY_MANAGED_MODE_POLICY_PROVIDER_H_
7
8 #include "base/memory/ref_counted.h"
9 #include "base/prefs/pref_store.h"
10 #include "chrome/browser/policy/configuration_policy_provider.h"
11 #include "sync/api/sync_error_factory.h"
12 #include "sync/api/syncable_service.h"
13
14 class PersistentPrefStore;
15 class Profile;
16
17 namespace base {
18 class SequencedTaskRunner;
19 }
20
21 namespace policy {
22
23 // This class syncs managed user settings from a server, which are mapped to
24 // policies. The downloaded settings are persisted in a PrefStore.
25 // Settings are key-value pairs. The key uniquely identifies the setting, and
26 // in most cases corresponds to a policy key. The value is a string containing
27 // a JSON serialization of an arbitrary value, which is the value of the policy.
28 //
29 // There are two kinds of settings handled by this class: Atomic and split
30 // settings.
31 // Atomic settings consist of a single key (that corresponds to a policy name)
32 // and a single (arbitrary) value.
33 // Split settings encode a dictionary value and are stored as multiple Sync
34 // items, one for each dictionary entry. The key for each of these Sync items
35 // is the key of the split setting, followed by a separator (':') and the key
36 // for the dictionary entry. The value of the Sync item is the value of the
37 // dictionary entry.
38 //
39 // As an example, a split setting with key "Moose" and value
40 // {
41 // "foo": "bar",
42 // "baz": "blurp"
43 // }
44 // would be encoded as two sync items, one with key "Moose:foo" and value "bar",
45 // and one with key "Moose:baz" and value "blurp".
46 //
47 // TODO(bauerb): This should be split up into a SyncableService and a
48 // ConfigurationPolicyProvider.
49 class ManagedModePolicyProvider
50 : public ConfigurationPolicyProvider,
51 public PrefStore::Observer,
52 public syncer::SyncableService {
53 public:
54 // Creates a new ManagedModePolicyProvider that caches its policies in a JSON
55 // file inside the profile folder. |sequenced_task_runner| ensures that all
56 // file I/O operations are executed in the order that does not collide
57 // with Profile's file operations. If |force_immediate_policy_load| is true,
58 // then the underlying policies are loaded immediately before this call
59 // returns, otherwise they will be loaded asynchronously in the background.
60 static scoped_ptr<ManagedModePolicyProvider> Create(
61 Profile* profile,
62 base::SequencedTaskRunner* sequenced_task_runner,
63 bool force_immediate_policy_load);
64
65 // Use this constructor to inject a different PrefStore (e.g. for testing).
66 explicit ManagedModePolicyProvider(PersistentPrefStore* store);
67 virtual ~ManagedModePolicyProvider();
68
69 // Sets all local policies, i.e. policies that will not be configured via
70 // the server.
71 void InitLocalPolicies();
72
73 // Clears all managed user settings and items.
74 void Clear();
75
76 // Constructs a key for a split managed user setting from a prefix and a
77 // variable key.
78 static std::string MakeSplitSettingKey(const std::string& prefix,
79 const std::string& key);
80
81 // Uploads an item to the Sync server. Items are the same data structure as
82 // managed user settings (i.e. key-value pairs, as described at the top of
83 // the file), but they are only uploaded (whereas managed user settings are
84 // only downloaded), and never passed to the policy system.
85 // An example of an uploaded item is an access request to a blocked URL.
86 void UploadItem(const std::string& key, scoped_ptr<Value> value);
87
88 // Sets the policy with the given |key| to a copy of the given |value|.
89 // Note that policies are updated asynchronously, so the policy won't take
90 // effect immediately after this method.
91 void SetLocalPolicyForTesting(const std::string& key,
92 scoped_ptr<base::Value> value);
93
94 // Public for testing.
95 static syncer::SyncData CreateSyncDataForPolicy(const std::string& name,
96 const Value* value);
97
98 // ConfigurationPolicyProvider implementation:
99 virtual void Shutdown() OVERRIDE;
100 virtual void RefreshPolicies() OVERRIDE;
101 virtual bool IsInitializationComplete(PolicyDomain domain) const OVERRIDE;
102
103 // PrefStore::Observer implementation:
104 virtual void OnPrefValueChanged(const std::string& key) OVERRIDE;
105 virtual void OnInitializationCompleted(bool success) OVERRIDE;
106
107 // SyncableService implementation:
108 virtual syncer::SyncMergeResult MergeDataAndStartSyncing(
109 syncer::ModelType type,
110 const syncer::SyncDataList& initial_sync_data,
111 scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
112 scoped_ptr<syncer::SyncErrorFactory> error_handler) OVERRIDE;
113 virtual void StopSyncing(syncer::ModelType type) OVERRIDE;
114 virtual syncer::SyncDataList GetAllSyncData(
115 syncer::ModelType type) const OVERRIDE;
116 virtual syncer::SyncError ProcessSyncChanges(
117 const tracked_objects::Location& from_here,
118 const syncer::SyncChangeList& change_list) OVERRIDE;
119
120 private:
121 base::DictionaryValue* GetOrCreateDictionary(const std::string& key) const;
122 base::DictionaryValue* GetAtomicSettings() const;
123 base::DictionaryValue* GetSplitSettings() const;
124 base::DictionaryValue* GetQueuedItems() const;
125
126 // Returns the dictionary where a given Sync item should be stored, depending
127 // on whether the managed user setting is atomic or split. In case of a split
128 // setting, the split setting prefix of |key| is removed, so that |key| can
129 // be used to update the returned dictionary.
130 DictionaryValue* GetDictionaryAndSplitKey(std::string* key) const;
131 void UpdatePolicyFromCache();
132
133 // Used for persisting policies. Unlike other PrefStores, this one is not
134 // hooked up to the PrefService.
135 scoped_refptr<PersistentPrefStore> store_;
136
137 // A set of local policies that are fixed and not configured remotely.
138 scoped_ptr<base::DictionaryValue> local_policies_;
139
140 scoped_ptr<syncer::SyncChangeProcessor> sync_processor_;
141 scoped_ptr<syncer::SyncErrorFactory> error_handler_;
142 };
143
144 } // namespace policy
145
146 #endif // CHROME_BROWSER_POLICY_MANAGED_MODE_POLICY_PROVIDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698