Index: chrome/browser/ui/webui/options/create_profile_handler.cc |
diff --git a/chrome/browser/ui/webui/options/create_profile_handler.cc b/chrome/browser/ui/webui/options/create_profile_handler.cc |
index facc7f0054b23dbd8c8708035b146d20d17f8294..6864c41466bcd44f9699421329094675180d47cb 100644 |
--- a/chrome/browser/ui/webui/options/create_profile_handler.cc |
+++ b/chrome/browser/ui/webui/options/create_profile_handler.cc |
@@ -14,18 +14,22 @@ |
#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/profiles/profile_metrics.h" |
#include "chrome/browser/profiles/profiles_state.h" |
-#include "chrome/browser/supervised_user/supervised_user_registration_utility.h" |
-#include "chrome/browser/supervised_user/supervised_user_service.h" |
-#include "chrome/browser/supervised_user/supervised_user_service_factory.h" |
-#include "chrome/browser/supervised_user/supervised_user_sync_service.h" |
-#include "chrome/browser/supervised_user/supervised_user_sync_service_factory.h" |
#include "chrome/browser/sync/profile_sync_service.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 "content/public/browser/web_ui.h" |
#include "grit/generated_resources.h" |
#include "ui/base/l10n/l10n_util.h" |
+#if defined(ENABLE_MANAGED_USERS) |
+#include "chrome/browser/supervised_user/supervised_user_registration_utility.h" |
+#include "chrome/browser/supervised_user/supervised_user_service.h" |
+#include "chrome/browser/supervised_user/supervised_user_service_factory.h" |
+#include "chrome/browser/supervised_user/supervised_user_sync_service.h" |
+#include "chrome/browser/supervised_user/supervised_user_sync_service_factory.h" |
+#endif |
+ |
namespace options { |
CreateProfileHandler::CreateProfileHandler() |
@@ -53,12 +57,12 @@ void CreateProfileHandler::RegisterMessages() { |
} |
void CreateProfileHandler::CreateProfile(const base::ListValue* args) { |
+#if defined(ENABLE_MANAGED_USERS) |
// This handler could have been called for a supervised user, for example |
- // because the user fiddled with the web inspector. Silently return in this |
- // case. |
- Profile* current_profile = Profile::FromWebUI(web_ui()); |
- if (current_profile->IsSupervised()) |
+ // because the user fiddled with the web inspector. Silently return. |
+ if (Profile::FromWebUI(web_ui())->IsSupervised()) |
return; |
+#endif |
if (!profiles::IsMultipleProfilesEnabled()) |
return; |
@@ -76,42 +80,13 @@ void CreateProfileHandler::CreateProfile(const base::ListValue* args) { |
base::string16 name; |
base::string16 icon; |
- std::string supervised_user_id; |
bool create_shortcut = false; |
- bool supervised_user = false; |
if (args->GetString(0, &name) && args->GetString(1, &icon)) { |
- if (args->GetBoolean(2, &create_shortcut)) { |
- bool success = args->GetBoolean(3, &supervised_user); |
- DCHECK(success); |
- success = args->GetString(4, &supervised_user_id); |
- DCHECK(success); |
- } |
- } |
- |
- if (supervised_user) { |
- if (!IsValidExistingSupervisedUserId(supervised_user_id)) |
- return; |
- |
- 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 acknowledgement, so it |
- // won't have the same potential delay. |
- ProfileSyncService* sync_service = |
- ProfileSyncServiceFactory::GetInstance()->GetForProfile( |
- current_profile); |
- ProfileSyncService::SyncStatusSummary status = |
- sync_service->QuerySyncStatusSummary(); |
- if (status == ProfileSyncService::DATATYPES_NOT_INITIALIZED) { |
- ShowProfileCreationWarning(l10n_util::GetStringUTF16( |
- IDS_PROFILES_CREATE_SUPERVISED_JUST_SIGNED_IN)); |
- } |
- } |
+ args->GetBoolean(2, &create_shortcut); |
} |
+ std::string supervised_user_id; |
+ if (!GetSupervisedUserIdFromArgs(args, supervised_user_id)) |
+ return; |
ProfileMetrics::LogProfileAddNewUser(ProfileMetrics::ADD_NEW_USER_DIALOG); |
@@ -136,8 +111,7 @@ void CreateProfileHandler::OnProfileCreated( |
switch (status) { |
case Profile::CREATE_STATUS_LOCAL_FAIL: { |
- ShowProfileCreationError(profile, |
- GetProfileCreationErrorMessage(LOCAL_ERROR)); |
+ ShowProfileCreationError(profile, GetProfileCreationErrorMessageLocal()); |
break; |
} |
case Profile::CREATE_STATUS_CREATED: { |
@@ -173,66 +147,19 @@ void CreateProfileHandler::HandleProfileCreationSuccess( |
CreateShortcutAndShowSuccess(create_shortcut, desktop_type, profile); |
break; |
} |
+#if defined(ENABLE_MANAGED_USERS) |
case SUPERVISED_PROFILE_CREATION: |
case SUPERVISED_PROFILE_IMPORT: |
RegisterSupervisedUser(create_shortcut, desktop_type, |
supervised_user_id, profile); |
break; |
+#endif |
case NO_CREATION_IN_PROGRESS: |
NOTREACHED(); |
break; |
} |
} |
-void CreateProfileHandler::RegisterSupervisedUser( |
- bool create_shortcut, |
- chrome::HostDesktopType desktop_type, |
- const std::string& supervised_user_id, |
- Profile* new_profile) { |
- DCHECK_EQ(profile_path_being_created_.value(), |
- new_profile->GetPath().value()); |
- |
- SupervisedUserService* supervised_user_service = |
- SupervisedUserServiceFactory::GetForProfile(new_profile); |
- |
- // Register the supervised user using the profile of the custodian. |
- supervised_user_registration_utility_ = |
- SupervisedUserRegistrationUtility::Create(Profile::FromWebUI(web_ui())); |
- supervised_user_service->RegisterAndInitSync( |
- supervised_user_registration_utility_.get(), |
- Profile::FromWebUI(web_ui()), |
- supervised_user_id, |
- base::Bind(&CreateProfileHandler::OnSupervisedUserRegistered, |
- weak_ptr_factory_.GetWeakPtr(), |
- create_shortcut, |
- desktop_type, |
- new_profile)); |
-} |
- |
-void CreateProfileHandler::OnSupervisedUserRegistered( |
- bool create_shortcut, |
- chrome::HostDesktopType desktop_type, |
- Profile* profile, |
- const GoogleServiceAuthError& error) { |
- GoogleServiceAuthError::State state = error.state(); |
- RecordSupervisedProfileCreationMetrics(state); |
- if (state == GoogleServiceAuthError::NONE) { |
- CreateShortcutAndShowSuccess(create_shortcut, desktop_type, profile); |
- return; |
- } |
- |
- base::string16 error_msg; |
- if (state == GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS || |
- state == GoogleServiceAuthError::USER_NOT_SIGNED_UP || |
- state == GoogleServiceAuthError::ACCOUNT_DELETED || |
- state == GoogleServiceAuthError::ACCOUNT_DISABLED) { |
- error_msg = GetProfileCreationErrorMessage(SIGNIN_ERROR); |
- } else { |
- error_msg = GetProfileCreationErrorMessage(REMOTE_ERROR); |
- } |
- ShowProfileCreationError(profile, error_msg); |
-} |
- |
void CreateProfileHandler::CreateShortcutAndShowSuccess( |
bool create_shortcut, |
chrome::HostDesktopType desktop_type, |
@@ -252,10 +179,12 @@ void CreateProfileHandler::CreateShortcutAndShowSuccess( |
dict.SetString("name", |
profile->GetPrefs()->GetString(prefs::kProfileName)); |
dict.Set("filePath", base::CreateFilePathValue(profile->GetPath())); |
+#if defined(ENABLE_MANAGED_USERS) |
bool is_supervised = |
profile_creation_type_ == SUPERVISED_PROFILE_CREATION || |
profile_creation_type_ == SUPERVISED_PROFILE_IMPORT; |
dict.SetBoolean("isManaged", is_supervised); |
+#endif |
web_ui()->CallJavascriptFunction( |
GetJavascriptMethodName(PROFILE_CREATION_SUCCESS), dict); |
@@ -264,7 +193,13 @@ void CreateProfileHandler::CreateShortcutAndShowSuccess( |
// dialog. If we are importing an existing supervised profile or creating a |
// new non-supervised user profile we don't show any confirmation, so open |
// the new window now. |
- if (profile_creation_type_ != SUPERVISED_PROFILE_CREATION) { |
+ bool should_open_new_window = true; |
+#if defined(ENABLE_MANAGED_USERS) |
+ if (profile_creation_type_ == SUPERVISED_PROFILE_CREATION) |
+ should_open_new_window = false; |
+#endif |
+ |
+ 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, |
@@ -286,32 +221,112 @@ void CreateProfileHandler::ShowProfileCreationError( |
helper::DeleteProfileAtPath(profile->GetPath(), web_ui()); |
} |
-void CreateProfileHandler::ShowProfileCreationWarning( |
- const base::string16& warning) { |
- DCHECK_EQ(SUPERVISED_PROFILE_CREATION, profile_creation_type_); |
- web_ui()->CallJavascriptFunction("BrowserOptions.showCreateProfileWarning", |
- base::StringValue(warning)); |
-} |
- |
void CreateProfileHandler::HandleCancelProfileCreation( |
const base::ListValue* args) { |
CancelProfileRegistration(true); |
} |
+void CreateProfileHandler::RecordProfileCreationMetrics( |
+ Profile::CreateStatus 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() |
+ const { |
+ int message_id = IDS_PROFILES_CREATE_LOCAL_ERROR; |
+#if defined(ENABLE_MANAGED_USERS) |
+ // Local errors can occur during supervised profile import. |
+ if (profile_creation_type_ == SUPERVISED_PROFILE_IMPORT) |
+ message_id = IDS_SUPERVISED_USER_IMPORT_LOCAL_ERROR; |
+#endif |
+ return l10n_util::GetStringUTF16(message_id); |
+} |
+ |
+std::string CreateProfileHandler::GetJavascriptMethodName( |
+ ProfileCreationStatus status) const { |
+ switch (profile_creation_type_) { |
+#if defined(ENABLE_MANAGED_USERS) |
+ case SUPERVISED_PROFILE_IMPORT: |
+ switch (status) { |
+ case PROFILE_CREATION_SUCCESS: |
+ return "BrowserOptions.showManagedUserImportSuccess"; |
+ case PROFILE_CREATION_ERROR: |
+ return "BrowserOptions.showManagedUserImportError"; |
+ } |
+ break; |
+#endif |
+ default: |
+ switch (status) { |
+ case PROFILE_CREATION_SUCCESS: |
+ return "BrowserOptions.showCreateProfileSuccess"; |
+ case PROFILE_CREATION_ERROR: |
+ return "BrowserOptions.showCreateProfileError"; |
+ } |
+ break; |
+ } |
+ |
+ NOTREACHED(); |
+ return std::string(); |
+} |
+ |
+#if defined(ENABLE_MANAGED_USERS) |
+bool CreateProfileHandler::GetSupervisedUserIdFromArgs( |
+ const base::ListValue* args, std::string& supervised_user_id) { |
+ bool supervised_user = false; |
+ if (args->GetSize() == 4) { |
+ bool success = args->GetBoolean(3, &supervised_user); |
+ DCHECK(success); |
+ |
+ success = args->GetString(4, &supervised_user_id); |
+ DCHECK(success); |
+ } |
+ |
+ 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)); |
+ } |
+ } |
+ } |
+ return true; |
+} |
+ |
+// 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) { |
if (profile_path_being_created_.empty()) |
return; |
ProfileManager* manager = g_browser_process->profile_manager(); |
Profile* new_profile = manager->GetProfileByPath(profile_path_being_created_); |
- if (!new_profile) |
+ if (!new_profile || !new_profile->IsSupervised()) |
return; |
- // Non-supervised user creation cannot be canceled. (Creating a non-supervised |
- // profile shouldn't take significant time, and it can easily be deleted |
- // afterward.) |
- if (!new_profile->IsSupervised()) |
- return; |
+ DCHECK(supervised_user_registration_utility_.get()); |
+ supervised_user_registration_utility_.reset(); |
if (user_initiated) { |
UMA_HISTOGRAM_MEDIUM_TIMES( |
@@ -320,9 +335,6 @@ void CreateProfileHandler::CancelProfileRegistration(bool user_initiated) { |
RecordProfileCreationMetrics(Profile::CREATE_STATUS_CANCELED); |
} |
- DCHECK(supervised_user_registration_utility_.get()); |
- supervised_user_registration_utility_.reset(); |
- |
DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_); |
profile_creation_type_ = NO_CREATION_IN_PROGRESS; |
@@ -332,14 +344,60 @@ void CreateProfileHandler::CancelProfileRegistration(bool user_initiated) { |
helper::DeleteProfileAtPath(new_profile->GetPath(), web_ui()); |
} |
-void CreateProfileHandler::RecordProfileCreationMetrics( |
- Profile::CreateStatus status) { |
- UMA_HISTOGRAM_ENUMERATION("Profile.CreateResult", |
- status, |
- Profile::MAX_CREATE_STATUS); |
- UMA_HISTOGRAM_MEDIUM_TIMES( |
- "Profile.CreateTimeNoTimeout", |
- base::TimeTicks::Now() - profile_creation_start_time_); |
+void CreateProfileHandler::RegisterSupervisedUser( |
+ bool create_shortcut, |
+ chrome::HostDesktopType desktop_type, |
+ const std::string& supervised_user_id, |
+ Profile* new_profile) { |
+ DCHECK_EQ(profile_path_being_created_.value(), |
+ new_profile->GetPath().value()); |
+ |
+ SupervisedUserService* supervised_user_service = |
+ SupervisedUserServiceFactory::GetForProfile(new_profile); |
+ |
+ // Register the supervised user using the profile of the custodian. |
+ supervised_user_registration_utility_ = |
+ SupervisedUserRegistrationUtility::Create(Profile::FromWebUI(web_ui())); |
+ supervised_user_service->RegisterAndInitSync( |
+ supervised_user_registration_utility_.get(), |
+ Profile::FromWebUI(web_ui()), |
+ supervised_user_id, |
+ base::Bind(&CreateProfileHandler::OnSupervisedUserRegistered, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ create_shortcut, |
+ desktop_type, |
+ new_profile)); |
+} |
+ |
+void CreateProfileHandler::OnSupervisedUserRegistered( |
+ bool create_shortcut, |
+ chrome::HostDesktopType desktop_type, |
+ Profile* profile, |
+ const GoogleServiceAuthError& error) { |
+ GoogleServiceAuthError::State state = error.state(); |
+ RecordSupervisedProfileCreationMetrics(state); |
+ if (state == GoogleServiceAuthError::NONE) { |
+ CreateShortcutAndShowSuccess(create_shortcut, desktop_type, profile); |
+ return; |
+ } |
+ |
+ base::string16 error_msg; |
+ if (state == GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS || |
+ state == GoogleServiceAuthError::USER_NOT_SIGNED_UP || |
+ state == GoogleServiceAuthError::ACCOUNT_DELETED || |
+ state == GoogleServiceAuthError::ACCOUNT_DISABLED) { |
+ error_msg = GetProfileCreationErrorMessageSignin(); |
+ } else { |
+ error_msg = GetProfileCreationErrorMessageRemote(); |
+ } |
+ ShowProfileCreationError(profile, error_msg); |
+} |
+ |
+void CreateProfileHandler::ShowProfileCreationWarning( |
+ const base::string16& warning) { |
+ DCHECK_EQ(SUPERVISED_PROFILE_CREATION, profile_creation_type_); |
+ web_ui()->CallJavascriptFunction("BrowserOptions.showCreateProfileWarning", |
+ base::StringValue(warning)); |
} |
void CreateProfileHandler::RecordSupervisedProfileCreationMetrics( |
@@ -362,50 +420,6 @@ void CreateProfileHandler::RecordSupervisedProfileCreationMetrics( |
} |
} |
-base::string16 CreateProfileHandler::GetProfileCreationErrorMessage( |
- ProfileCreationErrorType error) const { |
- int message_id = -1; |
- switch (error) { |
- case SIGNIN_ERROR: |
- message_id = |
- profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ? |
- IDS_SUPERVISED_USER_IMPORT_SIGN_IN_ERROR : |
- IDS_PROFILES_CREATE_SIGN_IN_ERROR; |
- break; |
- case REMOTE_ERROR: |
- message_id = |
- profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ? |
- IDS_SUPERVISED_USER_IMPORT_REMOTE_ERROR : |
- IDS_PROFILES_CREATE_REMOTE_ERROR; |
- break; |
- case LOCAL_ERROR: |
- message_id = |
- profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ? |
- IDS_SUPERVISED_USER_IMPORT_LOCAL_ERROR : |
- IDS_PROFILES_CREATE_LOCAL_ERROR; |
- break; |
- } |
- |
- return l10n_util::GetStringUTF16(message_id); |
-} |
- |
-std::string CreateProfileHandler::GetJavascriptMethodName( |
- ProfileCreationStatus status) const { |
- switch (status) { |
- case PROFILE_CREATION_SUCCESS: |
- return profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ? |
- "BrowserOptions.showManagedUserImportSuccess" : |
- "BrowserOptions.showCreateProfileSuccess"; |
- case PROFILE_CREATION_ERROR: |
- return profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ? |
- "BrowserOptions.showManagedUserImportError" : |
- "BrowserOptions.showCreateProfileError"; |
- } |
- |
- NOTREACHED(); |
- return std::string(); |
-} |
- |
bool CreateProfileHandler::IsValidExistingSupervisedUserId( |
const std::string& existing_supervised_user_id) const { |
if (existing_supervised_user_id.empty()) |
@@ -429,4 +443,31 @@ bool CreateProfileHandler::IsValidExistingSupervisedUserId( |
return true; |
} |
+base::string16 CreateProfileHandler::GetProfileCreationErrorMessageRemote() |
+ const { |
+ return l10n_util::GetStringUTF16( |
+ profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ? |
+ IDS_SUPERVISED_USER_IMPORT_REMOTE_ERROR : |
+ IDS_PROFILES_CREATE_REMOTE_ERROR); |
+} |
+ |
+base::string16 CreateProfileHandler::GetProfileCreationErrorMessageSignin() |
+ const { |
+ return l10n_util::GetStringUTF16( |
+ profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ? |
+ IDS_SUPERVISED_USER_IMPORT_SIGN_IN_ERROR : |
+ IDS_PROFILES_CREATE_SIGN_IN_ERROR); |
+} |
+#else |
+bool CreateProfileHandler::GetSupervisedUserIdFromArgs( |
Bernhard Bauer
2014/07/21 08:55:15
This is meant as a starting point for future refac
mckev
2014/08/05 01:09:14
Fair point. As an alternative I've ifdef'd their
|
+ const base::ListValue* args, std::string& supervised_user_id) { |
+ // An empty string is the expected value when supervised users aren't enabled. |
+ return true; |
+} |
+void CreateProfileHandler::CancelProfileRegistration(bool user_initiated) { |
+ // Since cancellation is only supported for supervised users, cancellation |
+ // here is a no-op. |
+} |
+#endif |
+ |
} // namespace options |