Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / options / managed_user_import_handler.cc
index f86f6b9..e72152a 100644 (file)
@@ -11,6 +11,9 @@
 #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"
@@ -45,10 +48,18 @@ scoped_ptr<base::ListValue> GetAvatarIcons() {
 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) {
@@ -73,8 +84,25 @@ void ManagedUserImportHandler::GetLocalizedValues(
 }
 
 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() {
@@ -90,14 +118,18 @@ void ManagedUserImportHandler::Observe(
   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(
@@ -131,21 +163,32 @@ void ManagedUserImportHandler::SendExistingManagedUsers(
   }
 
   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);
@@ -194,4 +237,11 @@ bool ManagedUserImportHandler::HasAuthError() const {
       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