Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / login / managed / locally_managed_user_creation_screen.cc
index 2ca2ef5..7d2e317 100644 (file)
@@ -6,7 +6,6 @@
 
 #include "ash/desktop_background/desktop_background_controller.h"
 #include "ash/shell.h"
-#include "base/command_line.h"
 #include "base/rand_util.h"
 #include "base/values.h"
 #include "chrome/browser/chromeos/camera_detector.h"
 #include "chrome/browser/chromeos/login/user_image.h"
 #include "chrome/browser/chromeos/login/user_image_manager.h"
 #include "chrome/browser/chromeos/login/wizard_controller.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/common/chrome_switches.h"
 #include "chromeos/network/network_state.h"
 #include "content/public/browser/browser_thread.h"
 #include "grit/generated_resources.h"
@@ -88,6 +89,7 @@ LocallyManagedUserCreationScreen::LocallyManagedUserCreationScreen(
       actor_(actor),
       on_error_screen_(false),
       last_page_(kNameOfIntroScreen),
+      sync_service_(NULL),
       image_decoder_(NULL),
       apply_photo_after_decoding_(false),
       selected_image_(0) {
@@ -98,6 +100,8 @@ LocallyManagedUserCreationScreen::LocallyManagedUserCreationScreen(
 
 LocallyManagedUserCreationScreen::~LocallyManagedUserCreationScreen() {
   CameraPresenceNotifier::GetInstance()->RemoveObserver(this);
+  if (sync_service_)
+    sync_service_->RemoveObserver(this);
   if (actor_)
     actor_->SetDelegate(NULL);
   if (image_decoder_.get())
@@ -229,11 +233,17 @@ void LocallyManagedUserCreationScreen::ImportManagedUser(
   }
   base::string16 display_name;
   std::string master_key;
+  std::string signature_key;
+  std::string encryption_key;
   std::string avatar;
   bool exists;
   int avatar_index = ManagedUserCreationController::kDummyAvatarIndex;
   user_info->GetString(ManagedUserSyncService::kName, &display_name);
   user_info->GetString(ManagedUserSyncService::kMasterKey, &master_key);
+  user_info->GetString(ManagedUserSyncService::kPasswordSignatureKey,
+                       &signature_key);
+  user_info->GetString(ManagedUserSyncService::kPasswordEncryptionKey,
+                       &encryption_key);
   user_info->GetString(ManagedUserSyncService::kChromeOsAvatar, &avatar);
   user_info->GetBoolean(kUserExists, &exists);
 
@@ -251,11 +261,27 @@ void LocallyManagedUserCreationScreen::ImportManagedUser(
 
   ManagedUserSyncService::GetAvatarIndex(avatar, &avatar_index);
 
-  controller_->StartImport(display_name,
-                           std::string(),
-                           avatar_index,
-                           user_id,
-                           master_key);
+  const base::DictionaryValue* password_data = NULL;
+  ManagedUserSharedSettingsService* shared_settings_service =
+      ManagedUserSharedSettingsServiceFactory::GetForBrowserContext(
+          controller_->GetManagerProfile());
+  const base::Value* value = shared_settings_service->GetValue(
+      user_id, managed_users::kChromeOSPasswordData);
+
+  bool password_right_here = value && value->GetAsDictionary(&password_data) &&
+                             !password_data->empty();
+
+  if (password_right_here) {
+    controller_->StartImport(display_name,
+                             avatar_index,
+                             user_id,
+                             master_key,
+                             password_data,
+                             encryption_key,
+                             signature_key);
+  } else {
+    NOTREACHED() << " Oops, no password";
+  }
 }
 
 // TODO(antrim): Code duplication with previous method will be removed once
@@ -309,6 +335,7 @@ void LocallyManagedUserCreationScreen::OnManagerLoginFailure() {
 
 void LocallyManagedUserCreationScreen::OnManagerFullyAuthenticated(
     Profile* manager_profile) {
+  LOG(ERROR) << "-----------------------------OnManagerFullyAuthenticated";
   DCHECK(controller_.get());
   // For manager user, move desktop to locked container so that windows created
   // during the user image picker step are below it.
@@ -320,15 +347,17 @@ void LocallyManagedUserCreationScreen::OnManagerFullyAuthenticated(
     actor_->ShowUsernamePage();
 
   last_page_ = kNameOfNewUserParametersScreen;
+  CHECK(!sync_service_);
+  sync_service_ = ManagedUserSyncServiceFactory::GetForProfile(manager_profile);
+  sync_service_->AddObserver(this);
+  OnManagedUsersChanged();
+}
 
-  CommandLine* command_line = CommandLine::ForCurrentProcess();
-  if (!command_line->HasSwitch(::switches::kAllowCreateExistingManagedUsers))
-    return;
-
-  ManagedUserSyncServiceFactory::GetForProfile(manager_profile)->
-      GetManagedUsersAsync(base::Bind(
-          &LocallyManagedUserCreationScreen::OnGetManagedUsers,
-          weak_factory_.GetWeakPtr()));
+void LocallyManagedUserCreationScreen::OnManagedUsersChanged() {
+  CHECK(sync_service_);
+  sync_service_->GetManagedUsersAsync(
+      base::Bind(&LocallyManagedUserCreationScreen::OnGetManagedUsers,
+                 weak_factory_.GetWeakPtr()));
 }
 
 void LocallyManagedUserCreationScreen::OnManagerCryptohomeAuthenticated() {
@@ -506,8 +535,14 @@ void LocallyManagedUserCreationScreen::OnGetManagedUsers(
       ui_copy->SetString(kUserConflict, kUserConflictName);
     }
     ui_copy->SetString(ManagedUserSyncService::kName, display_name);
-    // TODO(antrim): For now mark all users as having no password.
-    ui_copy->SetBoolean(kUserNeedPassword, true);
+
+    std::string signature_key;
+    bool has_password =
+        local_copy->GetString(ManagedUserSyncService::kPasswordSignatureKey,
+                              &signature_key) &&
+        !signature_key.empty();
+
+    ui_copy->SetBoolean(kUserNeedPassword, !has_password);
     ui_copy->SetString("id", it.key());
 
     existing_users_->Set(it.key(), local_copy);