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

Unified Diff: chrome/browser/ui/webui/signin/signin_create_profile_handler.cc

Issue 1630903002: material design user manager with create profile flow (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed tommy's comments #2 Created 4 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/ui/webui/signin/signin_create_profile_handler.cc
diff --git a/chrome/browser/ui/webui/options/create_profile_handler.cc b/chrome/browser/ui/webui/signin/signin_create_profile_handler.cc
similarity index 47%
copy from chrome/browser/ui/webui/options/create_profile_handler.cc
copy to chrome/browser/ui/webui/signin/signin_create_profile_handler.cc
index a85a4f4830dfad2561fb3bbd2ec48a0773a5a419..11af51b991bf796e468f52d2902caee7a2efa1af 100644
--- a/chrome/browser/ui/webui/options/create_profile_handler.cc
+++ b/chrome/browser/ui/webui/signin/signin_create_profile_handler.cc
@@ -1,16 +1,21 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2016 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/ui/webui/options/create_profile_handler.h"
+#include "chrome/browser/ui/webui/signin/signin_create_profile_handler.h"
#include <stddef.h>
+#include <string>
+#include <vector>
#include "base/bind.h"
#include "base/files/file_path.h"
#include "base/metrics/histogram.h"
#include "base/prefs/pref_service.h"
#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/task_runner_util.h"
+#include "base/threading/thread_restrictions.h"
#include "base/value_conversions.h"
#include "base/values.h"
#include "chrome/browser/browser_process.h"
@@ -18,11 +23,15 @@
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/profiles/profile_metrics.h"
#include "chrome/browser/profiles/profiles_state.h"
+#include "chrome/browser/signin/signin_manager_factory.h"
#include "chrome/browser/sync/profile_sync_service_factory.h"
#include "chrome/browser/ui/webui/options/options_handlers_helper.h"
#include "chrome/common/pref_names.h"
+#include "chrome/common/url_constants.h"
#include "chrome/grit/generated_resources.h"
#include "components/browser_sync/browser/profile_sync_service.h"
+#include "components/strings/grit/components_strings.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_ui.h"
#include "ui/base/l10n/l10n_util.h"
@@ -34,46 +43,113 @@
#include "chrome/browser/supervised_user/supervised_user_service_factory.h"
#endif
-namespace options {
-
-CreateProfileHandler::CreateProfileHandler()
+SigninCreateProfileHandler::SigninCreateProfileHandler()
: profile_creation_type_(NO_CREATION_IN_PROGRESS),
- weak_ptr_factory_(this) {
-}
+ weak_ptr_factory_(this) {}
-CreateProfileHandler::~CreateProfileHandler() {
+SigninCreateProfileHandler::~SigninCreateProfileHandler() {
#if defined(ENABLE_SUPERVISED_USERS)
// Cancellation is only supported for supervised users.
CancelProfileRegistration(false);
#endif
}
-void CreateProfileHandler::GetLocalizedValues(
+void SigninCreateProfileHandler::GetLocalizedValues(
base::DictionaryValue* localized_strings) {
+ localized_strings->SetString(
+ "manageProfilesSupervisedSignedInLabel",
+ l10n_util::GetStringUTF16(
+ IDS_PROFILES_CREATE_SUPERVISED_MULTI_SIGNED_IN_LABEL));
+ localized_strings->SetString(
+ "manageProfilesSupervisedNotSignedIn",
+ l10n_util::GetStringUTF16(
+ IDS_PROFILES_CREATE_SUPERVISED_NOT_SIGNED_IN_HTML));
+ localized_strings->SetString("createProfileConfirm",
+ l10n_util::GetStringUTF16(IDS_SAVE));
+ localized_strings->SetString("learnMore",
+ l10n_util::GetStringUTF16(IDS_LEARN_MORE));
+ localized_strings->SetString(
+ "createProfileTitle",
+ l10n_util::GetStringUTF16(IDS_PROFILES_CREATE_TITLE));
+
+ localized_strings->SetString(
+ "supervisedUserLearnMoreTitle",
+ l10n_util::GetStringUTF16(IDS_LEGACY_SUPERVISED_USER_LEARN_MORE_TITLE));
+ localized_strings->SetString(
+ "supervisedUserLearnMoreDone",
+ l10n_util::GetStringUTF16(
+ IDS_LEGACY_SUPERVISED_USER_LEARN_MORE_DONE_BUTTON));
+ localized_strings->SetString(
+ "supervisedUserLearnMoreText",
+ l10n_util::GetStringFUTF16(
+ IDS_LEGACY_SUPERVISED_USER_LEARN_MORE_TEXT,
+ base::ASCIIToUTF16(
+ chrome::kLegacySupervisedUserManagementDisplayURL)));
}
-void CreateProfileHandler::RegisterMessages() {
+void SigninCreateProfileHandler::RegisterMessages() {
#if defined(ENABLE_SUPERVISED_USERS)
// Cancellation is only supported for supervised users.
web_ui()->RegisterMessageCallback(
"cancelCreateProfile",
- base::Bind(&CreateProfileHandler::HandleCancelProfileCreation,
+ base::Bind(&SigninCreateProfileHandler::HandleCancelProfileCreation,
base::Unretained(this)));
#endif
web_ui()->RegisterMessageCallback(
- "createProfile",
- base::Bind(&CreateProfileHandler::CreateProfile,
+ "createProfile", base::Bind(&SigninCreateProfileHandler::CreateProfile,
+ base::Unretained(this)));
+
+ web_ui()->RegisterMessageCallback(
+ "requestDefaultProfileIcons",
+ base::Bind(&SigninCreateProfileHandler::RequestDefaultProfileIcons,
+ base::Unretained(this)));
+
+ web_ui()->RegisterMessageCallback(
+ "requestSignedInProfiles",
+ base::Bind(&SigninCreateProfileHandler::RequestSignedInProfiles,
base::Unretained(this)));
}
-void CreateProfileHandler::CreateProfile(const base::ListValue* args) {
-#if defined(ENABLE_SUPERVISED_USERS)
- // This handler could have been called for a supervised user, for example
- // because the user fiddled with the web inspector. Silently return.
- if (Profile::FromWebUI(web_ui())->IsSupervised())
- return;
-#endif
+void SigninCreateProfileHandler::RequestDefaultProfileIcons(
+ const base::ListValue* args) {
+ base::ListValue image_url_list;
+
+ // Add the default avatar icons.
+ size_t placeholder_avatar_index = profiles::GetPlaceholderAvatarIndex();
+ for (size_t i = 0; i < profiles::GetDefaultAvatarIconCount() &&
+ i != placeholder_avatar_index;
+ i++) {
+ std::string url = profiles::GetDefaultAvatarIconUrl(i);
+ image_url_list.AppendString(url);
+ }
+
+ web_ui()->CallJavascriptFunction("signin.ProfileApi.updateAvailableIcons",
+ image_url_list);
+}
+
+void SigninCreateProfileHandler::RequestSignedInProfiles(
+ const base::ListValue* args) {
+ base::ListValue user_info_list;
+ ProfileInfoCache& cache =
+ g_browser_process->profile_manager()->GetProfileInfoCache();
+ std::vector<ProfileAttributesEntry*> entries =
+ cache.GetAllProfilesAttributes();
+ for (auto& entry : entries) {
+ base::string16 username = entry->GetUserName();
+ if (username.empty())
+ continue;
+ base::string16 profile_path = entry->GetPath().AsUTF16Unsafe();
+ base::DictionaryValue* user_info = new base::DictionaryValue();
+ user_info->SetString("username", username);
+ user_info->SetString("profilePath", profile_path);
+
+ user_info_list.Append(user_info);
+ }
+ web_ui()->CallJavascriptFunction("signin.ProfileApi.updateSignedInUsers",
+ user_info_list);
+}
+void SigninCreateProfileHandler::CreateProfile(const base::ListValue* args) {
if (!profiles::IsMultipleProfilesEnabled())
return;
@@ -101,28 +177,48 @@ void CreateProfileHandler::CreateProfile(const base::ListValue* args) {
#endif
args->GetBoolean(2, &create_shortcut);
}
- std::string supervised_user_id;
#if defined(ENABLE_SUPERVISED_USERS)
- if (!ProcessSupervisedCreateProfileArgs(args, &supervised_user_id))
- return;
+ std::string supervised_user_id;
+ base::FilePath supervisor_profile_path;
+ if (GetSupervisedCreateProfileArgs(args, &supervised_user_id,
+ &supervisor_profile_path)) {
+ // Load supervisor profile.
+ g_browser_process->profile_manager()->CreateProfileAsync(
+ supervisor_profile_path,
+ base::Bind(&SigninCreateProfileHandler::LoadSupervisorProfileCallback,
+ weak_ptr_factory_.GetWeakPtr(), name, icon_url,
+ create_shortcut, supervised_user_id),
+ base::string16(), std::string(), std::string());
+ } else {
+ DoCreateProfile(name, icon_url, create_shortcut, std::string(), nullptr);
+ }
+#else
+ DoCreateProfile(name, icon_url, create_shortcut, std::string(), nullptr);
#endif
+}
+void SigninCreateProfileHandler::DoCreateProfile(
+ const base::string16& name,
+ const std::string& icon_url,
+ bool create_shortcut,
+ const std::string& supervised_user_id,
+ Profile* supervisor_profile) {
ProfileMetrics::LogProfileAddNewUser(ProfileMetrics::ADD_NEW_USER_DIALOG);
profile_path_being_created_ = ProfileManager::CreateMultiProfileAsync(
name, icon_url,
- base::Bind(&CreateProfileHandler::OnProfileCreated,
- weak_ptr_factory_.GetWeakPtr(),
- create_shortcut,
- helper::GetDesktopType(web_ui()),
- supervised_user_id),
+ base::Bind(&SigninCreateProfileHandler::OnProfileCreated,
+ weak_ptr_factory_.GetWeakPtr(), create_shortcut,
+ options::helper::GetDesktopType(web_ui()), supervised_user_id,
+ supervisor_profile),
supervised_user_id);
}
-void CreateProfileHandler::OnProfileCreated(
+void SigninCreateProfileHandler::OnProfileCreated(
bool create_shortcut,
chrome::HostDesktopType desktop_type,
const std::string& supervised_user_id,
+ Profile* supervisor_profile,
Profile* profile,
Profile::CreateStatus status) {
if (status != Profile::CREATE_STATUS_CREATED)
@@ -139,7 +235,8 @@ void CreateProfileHandler::OnProfileCreated(
}
case Profile::CREATE_STATUS_INITIALIZED: {
HandleProfileCreationSuccess(create_shortcut, desktop_type,
- supervised_user_id, profile);
+ supervised_user_id, supervisor_profile,
+ profile);
break;
}
// User-initiated cancellation is handled in CancelProfileRegistration and
@@ -155,10 +252,11 @@ void CreateProfileHandler::OnProfileCreated(
}
}
-void CreateProfileHandler::HandleProfileCreationSuccess(
+void SigninCreateProfileHandler::HandleProfileCreationSuccess(
bool create_shortcut,
chrome::HostDesktopType desktop_type,
const std::string& supervised_user_id,
+ Profile* supervisor_profile,
Profile* profile) {
switch (profile_creation_type_) {
case NON_SUPERVISED_PROFILE_CREATION: {
@@ -169,8 +267,8 @@ void CreateProfileHandler::HandleProfileCreationSuccess(
#if defined(ENABLE_SUPERVISED_USERS)
case SUPERVISED_PROFILE_CREATION:
case SUPERVISED_PROFILE_IMPORT:
- RegisterSupervisedUser(create_shortcut, desktop_type,
- supervised_user_id, profile);
+ RegisterSupervisedUser(create_shortcut, desktop_type, supervised_user_id,
+ supervisor_profile, profile);
break;
#endif
case NO_CREATION_IN_PROGRESS:
@@ -179,7 +277,7 @@ void CreateProfileHandler::HandleProfileCreationSuccess(
}
}
-void CreateProfileHandler::CreateShortcutAndShowSuccess(
+void SigninCreateProfileHandler::CreateShortcutAndShowSuccess(
bool create_shortcut,
chrome::HostDesktopType desktop_type,
Profile* profile) {
@@ -195,13 +293,11 @@ void CreateProfileHandler::CreateShortcutAndShowSuccess(
profile_path_being_created_.clear();
DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_);
base::DictionaryValue dict;
- dict.SetString("name",
- profile->GetPrefs()->GetString(prefs::kProfileName));
+ dict.SetString("name", profile->GetPrefs()->GetString(prefs::kProfileName));
dict.Set("filePath", base::CreateFilePathValue(profile->GetPath()));
#if defined(ENABLE_SUPERVISED_USERS)
- bool is_supervised =
- profile_creation_type_ == SUPERVISED_PROFILE_CREATION ||
- profile_creation_type_ == SUPERVISED_PROFILE_IMPORT;
+ bool is_supervised = profile_creation_type_ == SUPERVISED_PROFILE_CREATION ||
+ profile_creation_type_ == SUPERVISED_PROFILE_IMPORT;
dict.SetBoolean("isSupervised", is_supervised);
#endif
web_ui()->CallJavascriptFunction(
@@ -221,14 +317,13 @@ void CreateProfileHandler::CreateShortcutAndShowSuccess(
if (should_open_new_window) {
// Opening the new window must be the last action, after all callbacks
// have been run, to give them a chance to initialize the profile.
- helper::OpenNewWindowForProfile(desktop_type,
- profile,
- Profile::CREATE_STATUS_INITIALIZED);
+ options::helper::OpenNewWindowForProfile(
+ desktop_type, profile, Profile::CREATE_STATUS_INITIALIZED);
}
profile_creation_type_ = NO_CREATION_IN_PROGRESS;
}
-void CreateProfileHandler::ShowProfileCreationError(
+void SigninCreateProfileHandler::ShowProfileCreationError(
Profile* profile,
const base::string16& error) {
DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_);
@@ -239,20 +334,19 @@ void CreateProfileHandler::ShowProfileCreationError(
base::StringValue(error));
// The ProfileManager calls us back with a NULL profile in some cases.
if (profile)
- helper::DeleteProfileAtPath(profile->GetPath(), web_ui());
+ options::helper::DeleteProfileAtPath(profile->GetPath(), web_ui());
}
-void CreateProfileHandler::RecordProfileCreationMetrics(
+void SigninCreateProfileHandler::RecordProfileCreationMetrics(
Profile::CreateStatus status) {
- UMA_HISTOGRAM_ENUMERATION("Profile.CreateResult",
- status,
+ UMA_HISTOGRAM_ENUMERATION("Profile.CreateResult", status,
Profile::MAX_CREATE_STATUS);
UMA_HISTOGRAM_MEDIUM_TIMES(
"Profile.CreateTimeNoTimeout",
base::TimeTicks::Now() - profile_creation_start_time_);
}
-base::string16 CreateProfileHandler::GetProfileCreationErrorMessageLocal()
+base::string16 SigninCreateProfileHandler::GetProfileCreationErrorMessageLocal()
const {
int message_id = IDS_PROFILES_CREATE_LOCAL_ERROR;
#if defined(ENABLE_SUPERVISED_USERS)
@@ -264,24 +358,24 @@ base::string16 CreateProfileHandler::GetProfileCreationErrorMessageLocal()
}
#if defined(ENABLE_SUPERVISED_USERS)
-base::string16 CreateProfileHandler::GetProfileCreationErrorMessageRemote()
+base::string16 SigninCreateProfileHandler::GetProfileCreateErrorMessageRemote()
const {
return l10n_util::GetStringUTF16(
- profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ?
- IDS_LEGACY_SUPERVISED_USER_IMPORT_REMOTE_ERROR :
- IDS_PROFILES_CREATE_REMOTE_ERROR);
+ profile_creation_type_ == SUPERVISED_PROFILE_IMPORT
+ ? IDS_LEGACY_SUPERVISED_USER_IMPORT_REMOTE_ERROR
+ : IDS_PROFILES_CREATE_REMOTE_ERROR);
}
-base::string16 CreateProfileHandler::GetProfileCreationErrorMessageSignin()
+base::string16 SigninCreateProfileHandler::GetProfileCreateErrorMessageSignin()
const {
return l10n_util::GetStringUTF16(
- profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ?
- IDS_LEGACY_SUPERVISED_USER_IMPORT_SIGN_IN_ERROR :
- IDS_PROFILES_CREATE_SIGN_IN_ERROR);
+ profile_creation_type_ == SUPERVISED_PROFILE_IMPORT
+ ? IDS_LEGACY_SUPERVISED_USER_IMPORT_SIGN_IN_ERROR
+ : IDS_PROFILES_CREATE_SIGN_IN_ERROR);
}
#endif
-std::string CreateProfileHandler::GetJavascriptMethodName(
+std::string SigninCreateProfileHandler::GetJavascriptMethodName(
ProfileCreationStatus status) const {
switch (profile_creation_type_) {
#if defined(ENABLE_SUPERVISED_USERS)
@@ -297,9 +391,9 @@ std::string CreateProfileHandler::GetJavascriptMethodName(
default:
switch (status) {
case PROFILE_CREATION_SUCCESS:
- return "BrowserOptions.showCreateProfileSuccess";
+ return "signin.ProfileApi.onCreateProfileSuccess";
case PROFILE_CREATION_ERROR:
- return "BrowserOptions.showCreateProfileError";
+ return "signin.ProfileApi.onCreateProfileError";
}
break;
}
@@ -309,45 +403,119 @@ std::string CreateProfileHandler::GetJavascriptMethodName(
}
#if defined(ENABLE_SUPERVISED_USERS)
-bool CreateProfileHandler::ProcessSupervisedCreateProfileArgs(
- const base::ListValue* args, std::string* supervised_user_id) {
+bool SigninCreateProfileHandler::GetSupervisedCreateProfileArgs(
+ const base::ListValue* args,
+ std::string* supervised_user_id,
+ base::FilePath* supervisor_profile_path) {
bool supervised_user = false;
- if (args->GetSize() >= 5) {
- bool success = args->GetBoolean(3, &supervised_user);
- DCHECK(success);
-
- success = args->GetString(4, supervised_user_id);
- DCHECK(success);
+ DCHECK(args->GetBoolean(3, &supervised_user));
+ DCHECK(args->GetString(4, supervised_user_id));
+ if (supervised_user) {
+ const base::Value* path_value;
+ DCHECK(args->Get(5, &path_value));
+ DCHECK(base::GetValueAsFilePath(*path_value, supervisor_profile_path));
Dan Beam 2016/02/10 01:00:37 all of this gets compiled out in release mode don
Moe 2016/02/10 22:28:09 Thanks for catching this Dan.
}
+ return supervised_user && !supervisor_profile_path->empty();
+}
- if (supervised_user) {
- if (!IsValidExistingSupervisedUserId(*supervised_user_id))
- return false;
-
- profile_creation_type_ = SUPERVISED_PROFILE_IMPORT;
- if (supervised_user_id->empty()) {
- profile_creation_type_ = SUPERVISED_PROFILE_CREATION;
- *supervised_user_id =
- SupervisedUserRegistrationUtility::GenerateNewSupervisedUserId();
-
- // If sync is not yet fully initialized, the creation may take extra time,
- // so show a message. Import doesn't wait for an acknowledgment, so it
- // won't have the same potential delay.
- ProfileSyncService* sync_service =
- ProfileSyncServiceFactory::GetInstance()->GetForProfile(
- Profile::FromWebUI(web_ui()));
- ProfileSyncService::SyncStatusSummary status =
- sync_service->QuerySyncStatusSummary();
- if (status == ProfileSyncService::DATATYPES_NOT_INITIALIZED) {
- ShowProfileCreationWarning(l10n_util::GetStringUTF16(
- IDS_PROFILES_CREATE_SUPERVISED_JUST_SIGNED_IN));
+void SigninCreateProfileHandler::LoadSupervisorProfileCallback(
+ const base::string16& name,
+ const std::string& icon_url,
+ bool create_shortcut,
+ const std::string& supervised_user_id,
+ Profile* supervisor_profile,
+ Profile::CreateStatus status) {
+ // This method gets called once before with Profile::CREATE_STATUS_CREATED.
+ switch (status) {
+ case Profile::CREATE_STATUS_LOCAL_FAIL: {
+ // TODO(mahmadi): see if a better error message is required here.
+ ShowProfileCreationError(nullptr, GetProfileCreationErrorMessageLocal());
+ break;
+ }
+ case Profile::CREATE_STATUS_CREATED: {
+ // Ignore the intermediate status.
+ break;
+ }
+ case Profile::CREATE_STATUS_INITIALIZED: {
+ // We are only interested in Profile::CREATE_STATUS_INITIALIZED when
+ // everything is ready.
+ // TODO(mahmadi): display proper error message to the user.
+ PrefService* prefs = supervisor_profile->GetPrefs();
+ if (!prefs->GetBoolean(prefs::kSupervisedUserCreationAllowed))
+ return;
+
+ if (!supervised_user_id.empty()) {
+ profile_creation_type_ = SUPERVISED_PROFILE_IMPORT;
+
+ SupervisedUserSyncService* supervised_user_sync_service =
+ SupervisedUserSyncServiceFactory::GetForProfile(supervisor_profile);
+ if (supervised_user_sync_service) {
+ supervised_user_sync_service->GetSupervisedUsersAsync(base::Bind(
+ &SigninCreateProfileHandler::DoCreateProfileIfPossible,
+ weak_ptr_factory_.GetWeakPtr(), name, icon_url, create_shortcut,
+ supervised_user_id, supervisor_profile));
+ }
+ } else {
+ profile_creation_type_ = SUPERVISED_PROFILE_CREATION;
+ std::string new_supervised_user_id =
+ SupervisedUserRegistrationUtility::GenerateNewSupervisedUserId();
+
+ // If sync is not yet fully initialized, the creation may take extra
+ // time, so show a message. Import doesn't wait for an acknowledgment,
+ // so it won't have the same potential delay.
+ ProfileSyncService* sync_service =
+ ProfileSyncServiceFactory::GetInstance()->GetForProfile(
+ supervisor_profile);
+ ProfileSyncService::SyncStatusSummary status =
+ sync_service->QuerySyncStatusSummary();
+ if (status == ProfileSyncService::DATATYPES_NOT_INITIALIZED) {
+ ShowProfileCreationWarning(l10n_util::GetStringUTF16(
+ IDS_PROFILES_CREATE_SUPERVISED_JUST_SIGNED_IN));
+ }
+
+ DoCreateProfile(name, icon_url, create_shortcut, new_supervised_user_id,
+ supervisor_profile);
}
+ break;
+ }
+ case Profile::CREATE_STATUS_CANCELED:
+ case Profile::CREATE_STATUS_REMOTE_FAIL:
+ case Profile::MAX_CREATE_STATUS: {
+ NOTREACHED();
+ break;
}
}
- return true;
}
-void CreateProfileHandler::HandleCancelProfileCreation(
+void SigninCreateProfileHandler::DoCreateProfileIfPossible(
+ const base::string16& name,
+ const std::string& icon_url,
+ bool create_shortcut,
+ const std::string& supervised_user_id,
+ Profile* supervisor_profile,
+ const base::DictionaryValue* dict) {
+ DCHECK(dict);
+ if (!dict->HasKey(supervised_user_id))
+ return;
+
+ // Check if this supervised user already exists on this machine.
+ ProfileInfoCache& cache =
+ g_browser_process->profile_manager()->GetProfileInfoCache();
+ std::vector<ProfileAttributesEntry*> entries =
+ cache.GetAllProfilesAttributes();
+ for (auto& entry : entries) {
+ if (supervised_user_id == entry->GetSupervisedUserId()) {
+ // TODO(mahmadi): see whether we need a more specific error message here.
+ ShowProfileCreationError(nullptr, GetProfileCreationErrorMessageLocal());
+ return;
+ }
+ }
+
+ DoCreateProfile(name, icon_url, create_shortcut, supervised_user_id,
+ supervisor_profile);
+}
+
+void SigninCreateProfileHandler::HandleCancelProfileCreation(
const base::ListValue* args) {
CancelProfileRegistration(true);
}
@@ -355,7 +523,8 @@ void CreateProfileHandler::HandleCancelProfileCreation(
// Non-supervised user creation cannot be canceled. (Creating a non-supervised
// profile shouldn't take significant time, and it can easily be deleted
// afterward.)
-void CreateProfileHandler::CancelProfileRegistration(bool user_initiated) {
+void SigninCreateProfileHandler::CancelProfileRegistration(
+ bool user_initiated) {
if (profile_path_being_created_.empty())
return;
@@ -377,16 +546,17 @@ void CreateProfileHandler::CancelProfileRegistration(bool user_initiated) {
DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_);
profile_creation_type_ = NO_CREATION_IN_PROGRESS;
- // Cancelling registration means the callback passed into
+ // Canceling registration means the callback passed into
// RegisterAndInitSync() won't be called, so the cleanup must be done here.
profile_path_being_created_.clear();
- helper::DeleteProfileAtPath(new_profile->GetPath(), web_ui());
+ options::helper::DeleteProfileAtPath(new_profile->GetPath(), web_ui());
}
-void CreateProfileHandler::RegisterSupervisedUser(
+void SigninCreateProfileHandler::RegisterSupervisedUser(
bool create_shortcut,
chrome::HostDesktopType desktop_type,
const std::string& supervised_user_id,
+ Profile* supervisor_profile,
Profile* new_profile) {
DCHECK_EQ(profile_path_being_created_.value(),
new_profile->GetPath().value());
@@ -396,19 +566,16 @@ void CreateProfileHandler::RegisterSupervisedUser(
// Register the supervised user using the profile of the custodian.
supervised_user_registration_utility_ =
- SupervisedUserRegistrationUtility::Create(Profile::FromWebUI(web_ui()));
+ SupervisedUserRegistrationUtility::Create(supervisor_profile);
supervised_user_service->RegisterAndInitSync(
- supervised_user_registration_utility_.get(),
- Profile::FromWebUI(web_ui()),
+ supervised_user_registration_utility_.get(), supervisor_profile,
supervised_user_id,
- base::Bind(&CreateProfileHandler::OnSupervisedUserRegistered,
- weak_ptr_factory_.GetWeakPtr(),
- create_shortcut,
- desktop_type,
+ base::Bind(&SigninCreateProfileHandler::OnSupervisedUserRegistered,
+ weak_ptr_factory_.GetWeakPtr(), create_shortcut, desktop_type,
new_profile));
}
-void CreateProfileHandler::OnSupervisedUserRegistered(
+void SigninCreateProfileHandler::OnSupervisedUserRegistered(
bool create_shortcut,
chrome::HostDesktopType desktop_type,
Profile* profile,
@@ -425,62 +592,36 @@ void CreateProfileHandler::OnSupervisedUserRegistered(
state == GoogleServiceAuthError::USER_NOT_SIGNED_UP ||
state == GoogleServiceAuthError::ACCOUNT_DELETED ||
state == GoogleServiceAuthError::ACCOUNT_DISABLED) {
- error_msg = GetProfileCreationErrorMessageSignin();
+ error_msg = GetProfileCreateErrorMessageSignin();
} else {
- error_msg = GetProfileCreationErrorMessageRemote();
+ error_msg = GetProfileCreateErrorMessageRemote();
}
ShowProfileCreationError(profile, error_msg);
}
-void CreateProfileHandler::ShowProfileCreationWarning(
+void SigninCreateProfileHandler::ShowProfileCreationWarning(
const base::string16& warning) {
DCHECK_EQ(SUPERVISED_PROFILE_CREATION, profile_creation_type_);
- web_ui()->CallJavascriptFunction("BrowserOptions.showCreateProfileWarning",
+ web_ui()->CallJavascriptFunction("signin.ProfileApi.onCreateProfileWarning",
base::StringValue(warning));
}
-void CreateProfileHandler::RecordSupervisedProfileCreationMetrics(
+void SigninCreateProfileHandler::RecordSupervisedProfileCreationMetrics(
GoogleServiceAuthError::State error_state) {
if (profile_creation_type_ == SUPERVISED_PROFILE_CREATION) {
UMA_HISTOGRAM_ENUMERATION("Profile.SupervisedProfileCreateError",
- error_state,
- GoogleServiceAuthError::NUM_STATES);
+ error_state, GoogleServiceAuthError::NUM_STATES);
UMA_HISTOGRAM_MEDIUM_TIMES(
"Profile.SupervisedProfileTotalCreateTime",
base::TimeTicks::Now() - profile_creation_start_time_);
} else {
DCHECK_EQ(SUPERVISED_PROFILE_IMPORT, profile_creation_type_);
UMA_HISTOGRAM_ENUMERATION("Profile.SupervisedProfileImportError",
- error_state,
- GoogleServiceAuthError::NUM_STATES);
+ error_state, GoogleServiceAuthError::NUM_STATES);
UMA_HISTOGRAM_MEDIUM_TIMES(
"Profile.SupervisedProfileTotalImportTime",
base::TimeTicks::Now() - profile_creation_start_time_);
}
}
-bool CreateProfileHandler::IsValidExistingSupervisedUserId(
- const std::string& existing_supervised_user_id) const {
- if (existing_supervised_user_id.empty())
- return true;
-
- Profile* profile = Profile::FromWebUI(web_ui());
- const base::DictionaryValue* dict =
- SupervisedUserSyncServiceFactory::GetForProfile(profile)->
- GetSupervisedUsers();
- if (!dict->HasKey(existing_supervised_user_id))
- return false;
-
- // Check if this supervised user already exists on this machine.
- const ProfileInfoCache& cache =
- g_browser_process->profile_manager()->GetProfileInfoCache();
- for (size_t i = 0; i < cache.GetNumberOfProfiles(); ++i) {
- if (existing_supervised_user_id ==
- cache.GetSupervisedUserIdOfProfileAtIndex(i))
- return false;
- }
- return true;
-}
#endif
-
-} // namespace options

Powered by Google App Engine
This is Rietveld 408576698