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

Unified Diff: chrome/browser/managed_mode/supervised_user_pref_mapping_service.cc

Issue 147083016: Add avatar syncing for supervised users. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add unit tests. Created 6 years, 10 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/supervised_user_pref_mapping_service.cc
diff --git a/chrome/browser/managed_mode/supervised_user_pref_mapping_service.cc b/chrome/browser/managed_mode/supervised_user_pref_mapping_service.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5e8d2dbb7453340233feeabdfb3973b086afa6e6
--- /dev/null
+++ b/chrome/browser/managed_mode/supervised_user_pref_mapping_service.cc
@@ -0,0 +1,91 @@
+// Copyright 2014 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.
+
+#include "chrome/browser/managed_mode/supervised_user_pref_mapping_service.h"
+
+#include "base/bind.h"
+#include "base/prefs/pref_service.h"
+#include "base/values.h"
+#include "chrome/browser/managed_mode/managed_user_constants.h"
+#include "chrome/browser/managed_mode/managed_user_shared_settings_service.h"
+#include "chrome/common/pref_names.h"
+
+namespace {
+
+const int kNoAvatar = -1;
Bernhard Bauer 2014/02/07 09:54:24 Nit: const variables automatically get internal li
Adrian Kuegel 2014/02/07 10:24:47 Done.
+
+}
+
+SupervisedUserPrefMappingService::SupervisedUserPrefMappingService(
+ PrefService* prefs,
+ ManagedUserSharedSettingsService* shared_settings)
+ : prefs_(prefs),
+ shared_settings_(shared_settings),
+ managed_user_id_(prefs->GetString(prefs::kManagedUserId)),
+ weak_ptr_factory_(this) {}
+
+SupervisedUserPrefMappingService::~SupervisedUserPrefMappingService() {}
+
+void SupervisedUserPrefMappingService::Init() {
+ subscription_ = shared_settings_->Subscribe(
+ base::Bind(&SupervisedUserPrefMappingService::OnSharedSettingChanged,
+ weak_ptr_factory_.GetWeakPtr()));
+
+ pref_change_registrar_.Init(prefs_);
+ pref_change_registrar_.Add(
+ prefs::kProfileAvatarIndex,
+ base::Bind(&SupervisedUserPrefMappingService::OnAvatarChanged,
+ weak_ptr_factory_.GetWeakPtr()));
+
+ // Check if we need to update the shared setting with the avatar index.
+ // Otherwise we update the user pref in case we missed a notification.
+ if (GetChromeAvatarIndex() == kNoAvatar)
+ OnAvatarChanged();
+ else
+ OnSharedSettingChanged(managed_user_id_, managed_users::kChromeAvatarIndex);
+}
+
+void SupervisedUserPrefMappingService::OnAvatarChanged() {
+ int new_avatar_index = prefs_->GetInteger(prefs::kProfileAvatarIndex);
+ if (new_avatar_index < 0)
+ return;
+
+ // First check if the avatar index is a new value.
+ if (GetChromeAvatarIndex() == new_avatar_index)
+ return;
+
+ // If yes, update the shared settings value.
+ shared_settings_->SetValue(managed_user_id_,
+ managed_users::kChromeAvatarIndex,
+ base::FundamentalValue(new_avatar_index));
+}
+
+void SupervisedUserPrefMappingService::OnSharedSettingChanged(
+ const std::string& mu_id,
+ const std::string& key) {
+ if (mu_id != managed_user_id_ || key != managed_users::kChromeAvatarIndex)
Bernhard Bauer 2014/02/07 09:54:24 Can you DCHECK that we are being called with our o
Adrian Kuegel 2014/02/07 10:24:47 A, right, since the SupervisedUserPrefMappingServi
+ return;
+
+ const base::Value* value = shared_settings_->GetValue(mu_id, key);
+ int avatar_index;
+ bool success = value->GetAsInteger(&avatar_index);
+ DCHECK(success);
+ prefs_->SetInteger(prefs::kProfileAvatarIndex, avatar_index);
+}
+
+void SupervisedUserPrefMappingService::Shutdown() {
+ subscription_.reset();
+}
+
+int SupervisedUserPrefMappingService::GetChromeAvatarIndex() {
+ const base::Value* value = shared_settings_->GetValue(
+ managed_user_id_, managed_users::kChromeAvatarIndex);
+ if (!value)
+ return kNoAvatar;
+
+ int current_avatar_index;
+ bool success = value->GetAsInteger(&current_avatar_index);
+ DCHECK(success);
+ return current_avatar_index;
+}

Powered by Google App Engine
This is Rietveld 408576698