| Index: chrome/browser/profiles/profile_manager.cc
|
| diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
|
| index cf1aaa1fb69106ad653fd4a6f311634ec91dd6f2..71149376c7f780719480fcb855161151924b0e80 100644
|
| --- a/chrome/browser/profiles/profile_manager.cc
|
| +++ b/chrome/browser/profiles/profile_manager.cc
|
| @@ -642,54 +642,56 @@ void ProfileManager::ScheduleProfileForDeletion(
|
| PrefService* local_state = g_browser_process->local_state();
|
| ProfileInfoCache& cache = GetProfileInfoCache();
|
|
|
| + // If we're deleting the last (non-legacy-supervised) profile, then create a
|
| + // new profile in its place.
|
| + base::FilePath last_non_supervised_profile_path;
|
| + for (size_t i = 0; i < cache.GetNumberOfProfiles(); ++i) {
|
| + base::FilePath cur_path = cache.GetPathOfProfileAtIndex(i);
|
| + // Make sure that this profile is not pending deletion, and is not
|
| + // legacy-supervised.
|
| + if (cur_path != profile_dir &&
|
| + !cache.ProfileIsLegacySupervisedAtIndex(i) &&
|
| + !IsProfileMarkedForDeletion(cur_path)) {
|
| + last_non_supervised_profile_path = cur_path;
|
| + break;
|
| + }
|
| + }
|
| +
|
| + base::FilePath new_path;
|
| + if (last_non_supervised_profile_path.empty()) {
|
| + // If we are using --new-avatar-menu, then assign the default
|
| + // placeholder avatar and name. Otherwise, use random ones.
|
| + bool is_new_avatar_menu = switches::IsNewAvatarMenu();
|
| + int avatar_index = profiles::GetPlaceholderAvatarIndex();
|
| + base::string16 new_avatar_url = is_new_avatar_menu ?
|
| + base::UTF8ToUTF16(profiles::GetDefaultAvatarIconUrl(avatar_index)) :
|
| + base::string16();
|
| + base::string16 new_profile_name = is_new_avatar_menu ?
|
| + cache.ChooseNameForNewProfile(avatar_index) : base::string16();
|
| +
|
| + new_path = GenerateNextProfileDirectoryPath();
|
| + CreateProfileAsync(new_path,
|
| + callback,
|
| + new_profile_name,
|
| + new_avatar_url,
|
| + std::string());
|
| +
|
| + ProfileMetrics::LogProfileAddNewUser(
|
| + ProfileMetrics::ADD_NEW_USER_LAST_DELETED);
|
| + }
|
| +
|
| + // Update the last used profile pref before closing browser windows. This
|
| + // way the correct last used profile is set for any notification observers.
|
| const std::string last_used_profile =
|
| local_state->GetString(prefs::kProfileLastUsed);
|
| -
|
| if (last_used_profile == profile_dir.BaseName().MaybeAsASCII() ||
|
| last_used_profile == GetGuestProfilePath().BaseName().MaybeAsASCII()) {
|
| - // Update the last used profile pref before closing browser windows. This
|
| - // way the correct last used profile is set for any notification observers.
|
| - base::FilePath last_non_supervised_profile_path;
|
| - for (size_t i = 0; i < cache.GetNumberOfProfiles(); ++i) {
|
| - base::FilePath cur_path = cache.GetPathOfProfileAtIndex(i);
|
| - // Make sure that this profile is not pending deletion.
|
| - if (cur_path != profile_dir &&
|
| - !cache.ProfileIsLegacySupervisedAtIndex(i) &&
|
| - !IsProfileMarkedForDeletion(cur_path)) {
|
| - last_non_supervised_profile_path = cur_path;
|
| - break;
|
| - }
|
| - }
|
| -
|
| - // If we're deleting the last (non-supervised) profile, then create a new
|
| - // profile in its place.
|
| const std::string last_non_supervised_profile =
|
| last_non_supervised_profile_path.BaseName().MaybeAsASCII();
|
| if (last_non_supervised_profile.empty()) {
|
| - base::FilePath new_path = GenerateNextProfileDirectoryPath();
|
| - // Make sure the last used profile path is pointing at it. This way the
|
| - // correct last used profile is set for any notification observers.
|
| + DCHECK(!new_path.empty());
|
| local_state->SetString(prefs::kProfileLastUsed,
|
| new_path.BaseName().MaybeAsASCII());
|
| -
|
| - // If we are using --new-avatar-menu, then assign the default
|
| - // placeholder avatar and name. Otherwise, use random ones.
|
| - bool is_new_avatar_menu = switches::IsNewAvatarMenu();
|
| - int avatar_index = profiles::GetPlaceholderAvatarIndex();
|
| - base::string16 new_avatar_url = is_new_avatar_menu ?
|
| - base::UTF8ToUTF16(profiles::GetDefaultAvatarIconUrl(avatar_index)) :
|
| - base::string16();
|
| - base::string16 new_profile_name = is_new_avatar_menu ?
|
| - cache.ChooseNameForNewProfile(avatar_index) : base::string16();
|
| -
|
| - CreateProfileAsync(new_path,
|
| - callback,
|
| - new_profile_name,
|
| - new_avatar_url,
|
| - std::string());
|
| -
|
| - ProfileMetrics::LogProfileAddNewUser(
|
| - ProfileMetrics::ADD_NEW_USER_LAST_DELETED);
|
| } else {
|
| // On the Mac, the browser process is not killed when all browser windows
|
| // are closed, so just in case we are deleting the active profile, and no
|
|
|