#include "base/values.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/managed_mode/managed_user_constants.h"
+#include "chrome/browser/managed_mode/managed_user_shared_settings_service.h"
+#include "chrome/browser/managed_mode/managed_user_shared_settings_service_factory.h"
#include "chrome/browser/managed_mode/managed_user_sync_service.h"
#include "chrome/browser/managed_mode/managed_user_sync_service_factory.h"
#include "chrome/browser/profiles/profile.h"
namespace options {
ManagedUserImportHandler::ManagedUserImportHandler()
- : weak_ptr_factory_(this) {
-}
+ : weak_ptr_factory_(this) {}
-ManagedUserImportHandler::~ManagedUserImportHandler() {}
+ManagedUserImportHandler::~ManagedUserImportHandler() {
+ Profile* profile = Profile::FromWebUI(web_ui());
+ if (!profile->IsManaged()) {
+ ManagedUserSyncService* service =
+ ManagedUserSyncServiceFactory::GetForProfile(profile);
+ if (service)
+ service->RemoveObserver(this);
+ subscription_.reset();
+ }
+}
void ManagedUserImportHandler::GetLocalizedValues(
base::DictionaryValue* localized_strings) {
}
void ManagedUserImportHandler::InitializeHandler() {
+ Profile* profile = Profile::FromWebUI(web_ui());
registrar_.Add(this, chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED,
- content::Source<Profile>(Profile::FromWebUI(web_ui())));
+ content::Source<Profile>(profile));
+ if (!profile->IsManaged()) {
+ ManagedUserSyncService* sync_service =
+ ManagedUserSyncServiceFactory::GetForProfile(profile);
+ if (sync_service) {
+ sync_service->AddObserver(this);
+ ManagedUserSharedSettingsService* settings_service =
+ ManagedUserSharedSettingsServiceFactory::GetForBrowserContext(
+ profile);
+ subscription_ = settings_service->Subscribe(
+ base::Bind(&ManagedUserImportHandler::OnSharedSettingChanged,
+ weak_ptr_factory_.GetWeakPtr()));
+ } else {
+ DCHECK(!ManagedUserSharedSettingsServiceFactory::GetForBrowserContext(
+ profile));
+ }
+ }
}
void ManagedUserImportHandler::RegisterMessages() {
if (type == chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED) {
SigninGlobalError* error =
SigninGlobalError::GetForProfile(Profile::FromWebUI(web_ui()));
- if (content::Details<SigninGlobalError>(details).ptr() != error)
- return;
-
- RequestManagedUserImportUpdate(NULL);
- return;
+ if (content::Details<SigninGlobalError>(details).ptr() == error)
+ FetchManagedUsers();
}
+}
+
+void ManagedUserImportHandler::OnManagedUsersChanged() {
+ FetchManagedUsers();
+}
- OptionsPageUIHandler::Observe(type, source, details);
+void ManagedUserImportHandler::FetchManagedUsers() {
+ web_ui()->CallJavascriptFunction("options.ManagedUserListData.resetPromise");
+ RequestManagedUserImportUpdate(NULL);
}
void ManagedUserImportHandler::RequestManagedUserImportUpdate(
}
base::ListValue managed_users;
+ Profile* profile = Profile::FromWebUI(web_ui());
+ ManagedUserSharedSettingsService* service =
+ ManagedUserSharedSettingsServiceFactory::GetForBrowserContext(profile);
for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) {
const base::DictionaryValue* value = NULL;
bool success = it.value().GetAsDictionary(&value);
DCHECK(success);
std::string name;
value->GetString(ManagedUserSyncService::kName, &name);
- std::string avatar_str;
- value->GetString(ManagedUserSyncService::kChromeAvatar, &avatar_str);
base::DictionaryValue* managed_user = new base::DictionaryValue;
managed_user->SetString("id", it.key());
managed_user->SetString("name", name);
int avatar_index = ManagedUserSyncService::kNoAvatar;
- success = ManagedUserSyncService::GetAvatarIndex(avatar_str, &avatar_index);
+ const base::Value* avatar_index_value =
+ service->GetValue(it.key(), managed_users::kChromeAvatarIndex);
+ if (avatar_index_value) {
+ success = avatar_index_value->GetAsInteger(&avatar_index);
+ } else {
+ // Check if there is a legacy avatar index stored.
+ std::string avatar_str;
+ value->GetString(ManagedUserSyncService::kChromeAvatar, &avatar_str);
+ success =
+ ManagedUserSyncService::GetAvatarIndex(avatar_str, &avatar_index);
+ }
DCHECK(success);
managed_user->SetBoolean("needAvatar",
avatar_index == ManagedUserSyncService::kNoAvatar);
state == GoogleServiceAuthError::ACCOUNT_DISABLED;
}
+void ManagedUserImportHandler::OnSharedSettingChanged(
+ const std::string& managed_user_id,
+ const std::string& key) {
+ if (key == managed_users::kChromeAvatarIndex)
+ FetchManagedUsers();
+}
+
} // namespace options