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

Unified Diff: chrome/browser/managed_mode/managed_user_shared_settings_service.h

Issue 123293003: Add ManagedUserSharedSettingsService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: x Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/managed_mode/managed_user_shared_settings_service.h
diff --git a/chrome/browser/managed_mode/managed_user_shared_settings_service.h b/chrome/browser/managed_mode/managed_user_shared_settings_service.h
new file mode 100644
index 0000000000000000000000000000000000000000..35c9818060b719511a4d01e6449e6e98990c6369
--- /dev/null
+++ b/chrome/browser/managed_mode/managed_user_shared_settings_service.h
@@ -0,0 +1,115 @@
+// 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_MANAGED_MODE_MANAGED_USER_SHARED_SETTINGS_SERVICE_H_
+#define CHROME_BROWSER_MANAGED_MODE_MANAGED_USER_SHARED_SETTINGS_SERVICE_H_
+
+#include "base/callback.h"
+#include "base/callback_list.h"
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/managed_mode/managed_users.h"
+#include "components/browser_context_keyed_service/browser_context_keyed_service.h"
+#include "sync/api/syncable_service.h"
+
+class PrefService;
+
+namespace base {
+class DictionaryValue;
+class Value;
+}
+
+namespace user_prefs {
+class PrefRegistrySyncable;
+}
+
+// ManagedUserSharedSettingsService syncs settings (as key-value pairs) that can
+// be modified both by a supervised user and their manager.
+// A supervised user can only modify their own settings, whereas a manager can
+// modify settings for all their supervised users.
+//
+// The shared settings are stored in the user preferences in a multi-level
+// dictionary. The first level is the MU ID, the second level is the key for the
+// setting, and the third level is a dictionary with a "value" key for the value
+// and an "acknowledged" flag, which is used to wait for the Sync server to
+// acknowledge that it has seen a setting change (see
+// ManagedUserSharedSettingsUpdate for how to use this).
+class ManagedUserSharedSettingsService : public BrowserContextKeyedService,
+ public syncer::SyncableService {
+ public:
+ // Called whenever a setting changes (see Subscribe() below).
+ typedef base::Callback<void(const std::string& /* mu_id */,
+ const std::string& /* key */)> ChangeCallback;
+ typedef base::CallbackList<
+ void(const std::string& /* mu_id */, const std::string& /* key */)>
+ ChangeCallbackList;
+
+ // This constructor is public only for testing. Use
+ // |ManagedUserSyncServiceFactory::GetForProfile(...)| instead to get an
+ // instance of this service in production code.
+ explicit ManagedUserSharedSettingsService(PrefService* prefs);
+ virtual ~ManagedUserSharedSettingsService();
+
+ // Returns the value for the given |key| and the supervised user identified by
+ // |mu_id|. If either the supervised user or the key does not exist, NULL is
+ // returned. Note that if the profile that owns this service belongs to a
+ // supervised user, callers will only see settings for their own |mu_id|, i.e.
+ // a non-matching |mu_id| is treated as non-existent.
+ const base::Value* GetValue(const std::string& mu_id, const std::string& key);
+
+ // Sets the value for the given |key| and the supervised user identified by
+ // |mu_id|. If the profile that owns this service belongs to a supervised
+ // user, |mu_id| must be their own.
+ void SetValue(const std::string& mu_id,
+ const std::string& key,
+ const base::Value& value);
+
+ // Subscribes to changes in the synced settings. The callback will be notified
+ // whenever any setting for any supervised user is changed via Sync (but not
+ // for local changes). Subscribers should filter the settings and users they
+ // are interested in with the |mu_id| and |key| parameters to the callback.
+ scoped_ptr<ChangeCallbackList::Subscription> Subscribe(
+ const ChangeCallback& cb);
+
+ static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
+
+ // Public for testing.
+ void SetValueInternal(const std::string& mu_id,
+ const std::string& key,
+ const base::Value& value,
+ bool acknowledged);
+
+ // Public for testing.
+ static syncer::SyncData CreateSyncDataForSetting(const std::string& mu_id,
+ const std::string& key,
+ const base::Value& value,
+ bool acknowledged);
+
+ // BrowserContextKeyedService implementation:
+ virtual void Shutdown() OVERRIDE;
+
+ // SyncableService implementation:
+ virtual syncer::SyncMergeResult MergeDataAndStartSyncing(
+ syncer::ModelType type,
+ const syncer::SyncDataList& initial_sync_data,
+ scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
+ scoped_ptr<syncer::SyncErrorFactory> error_handler) OVERRIDE;
+ virtual void StopSyncing(syncer::ModelType type) OVERRIDE;
+ virtual syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const
+ OVERRIDE;
+ virtual syncer::SyncError ProcessSyncChanges(
+ const tracked_objects::Location& from_here,
+ const syncer::SyncChangeList& change_list) OVERRIDE;
+
+ private:
+ friend class ManagedUserSharedSettingsUpdate;
+
+ scoped_ptr<syncer::SyncChangeProcessor> sync_processor_;
+ scoped_ptr<syncer::SyncErrorFactory> error_handler_;
+
+ ChangeCallbackList callbacks_;
+
+ PrefService* prefs_;
+};
+
+#endif // CHROME_BROWSER_MANAGED_MODE_MANAGED_USER_SHARED_SETTINGS_SERVICE_H_

Powered by Google App Engine
This is Rietveld 408576698