Index: chrome/browser/profiles/profile_manager_unittest.cc |
diff --git a/chrome/browser/profiles/profile_manager_unittest.cc b/chrome/browser/profiles/profile_manager_unittest.cc |
index 76a2126745abd2bea3b17be1b2ea9aab44e08afa..1a8ea975f929de3bfa646eb414201ce65d10adae 100644 |
--- a/chrome/browser/profiles/profile_manager_unittest.cc |
+++ b/chrome/browser/profiles/profile_manager_unittest.cc |
@@ -65,6 +65,12 @@ namespace { |
// observers is the same. |
Profile* g_created_profile; |
+#if !defined(OS_ANDROID) && !defined(OS_CHROMEOS) |
+void FailOnProfileCreation(Profile* profile, Profile::CreateStatus status) { |
+ ADD_FAILURE(); |
+} |
+#endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS) |
+ |
class UnittestProfileManager : public ::ProfileManagerWithoutInit { |
public: |
explicit UnittestProfileManager(const base::FilePath& user_data_dir) |
@@ -902,8 +908,9 @@ TEST_F(ProfileManagerTest, ActiveProfileDeleted) { |
local_state->SetString(prefs::kProfileLastUsed, profile_name1); |
// Delete the active profile. |
- profile_manager->ScheduleProfileForDeletion(dest_path1, |
- ProfileManager::CreateCallback()); |
+ profile_manager->ScheduleProfileForDeletion( |
+ dest_path1, false /* suppress_profile_creation */, |
+ ProfileManager::CreateCallback()); |
// Spin the message loop so that all the callbacks can finish running. |
base::RunLoop().RunUntilIdle(); |
@@ -934,8 +941,9 @@ TEST_F(ProfileManagerTest, LastProfileDeleted) { |
local_state->SetString(prefs::kProfileLastUsed, profile_name1); |
// Delete the active profile. |
- profile_manager->ScheduleProfileForDeletion(dest_path1, |
- ProfileManager::CreateCallback()); |
+ profile_manager->ScheduleProfileForDeletion( |
+ dest_path1, false /* suppress_profile_creation */, |
+ ProfileManager::CreateCallback()); |
// Spin the message loop so that all the callbacks can finish running. |
base::RunLoop().RunUntilIdle(); |
@@ -988,8 +996,9 @@ TEST_F(ProfileManagerTest, LastProfileDeletedWithGuestActiveProfile) { |
local_state->SetString(prefs::kProfileLastUsed, guest_profile_name); |
// Delete the other profile. |
- profile_manager->ScheduleProfileForDeletion(dest_path1, |
- ProfileManager::CreateCallback()); |
+ profile_manager->ScheduleProfileForDeletion( |
+ dest_path1, false /* suppress_profile_creation */, |
+ ProfileManager::CreateCallback()); |
// Spin the message loop so that all the callbacks can finish running. |
base::RunLoop().RunUntilIdle(); |
@@ -998,11 +1007,46 @@ TEST_F(ProfileManagerTest, LastProfileDeletedWithGuestActiveProfile) { |
base::FilePath dest_path2 = temp_dir_.path().AppendASCII(profile_name2); |
EXPECT_EQ(3u, profile_manager->GetLoadedProfiles().size()); |
- EXPECT_EQ(1u, profile_manager->GetProfileInfoCache().GetNumberOfProfiles()); |
+ ASSERT_EQ(1u, profile_manager->GetProfileInfoCache().GetNumberOfProfiles()); |
EXPECT_EQ(dest_path2, |
profile_manager->GetProfileInfoCache().GetPathOfProfileAtIndex(0)); |
} |
+TEST_F(ProfileManagerTest, DeleteStaleEphemeralProfile) { |
+ ProfileManager* profile_manager = g_browser_process->profile_manager(); |
+ ASSERT_TRUE(profile_manager); |
+ |
+ // Create a profile, don't load it yet. |
+ const std::string profile_name1 = "New Profile 1"; |
+ base::FilePath dest_path1 = temp_dir_.path().AppendASCII(profile_name1); |
+ |
+ ProfileInfoCache& cache = profile_manager->GetProfileInfoCache(); |
+ cache.AddProfileToCache(dest_path1, ASCIIToUTF16(profile_name1), |
+ ASCIIToUTF16(profile_name1), 0, std::string()); |
+ EXPECT_EQ(1u, cache.GetNumberOfProfiles()); |
+ EXPECT_EQ(0u, profile_manager->GetLoadedProfiles().size()); |
+ |
+ // Set it as the active profile. |
+ PrefService* local_state = g_browser_process->local_state(); |
+ local_state->SetString(prefs::kProfileLastUsed, profile_name1); |
+ |
+ // Delete the active profile. |
+ profile_manager->ScheduleProfileForDeletion( |
+ dest_path1, true /* suppress_profile_creation */, |
+ base::Bind(&FailOnProfileCreation)); |
+ // Spin the message loop so that all the callbacks can finish running. |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // A new profile should have been set as the last used profile, but not loaded |
+ // yet. |
+ const std::string profile_name2 = "Profile 1"; |
Mike Lerman
2015/05/05 13:44:45
nit: variable is profile_name2, but the name is Pr
Bernhard Bauer
2015/05/05 14:33:22
Yes... except ProfileManager internally increases
|
+ base::FilePath dest_path2 = temp_dir_.path().AppendASCII(profile_name2); |
+ |
+ EXPECT_EQ(0u, profile_manager->GetLoadedProfiles().size()); |
+ EXPECT_EQ(0u, cache.GetNumberOfProfiles()); |
+ EXPECT_EQ(profile_name2, local_state->GetString(prefs::kProfileLastUsed)); |
+} |
+ |
TEST_F(ProfileManagerTest, ProfileDisplayNameResetsDefaultName) { |
if (!profiles::IsMultipleProfilesEnabled()) |
return; |
@@ -1034,8 +1078,9 @@ TEST_F(ProfileManagerTest, ProfileDisplayNameResetsDefaultName) { |
profiles::GetAvatarNameForProfile(profile2->GetPath())); |
// Deleting a profile means returning to the default name. |
- profile_manager->ScheduleProfileForDeletion(profile2->GetPath(), |
- ProfileManager::CreateCallback()); |
+ profile_manager->ScheduleProfileForDeletion( |
+ profile2->GetPath(), false /* suppress_profile_creation */, |
+ ProfileManager::CreateCallback()); |
// Spin the message loop so that all the callbacks can finish running. |
base::RunLoop().RunUntilIdle(); |
EXPECT_EQ(default_profile_name, |
@@ -1081,8 +1126,9 @@ TEST_F(ProfileManagerTest, ProfileDisplayNamePreservesCustomName) { |
profiles::GetAvatarNameForProfile(profile2->GetPath())); |
// Deleting a profile means returning to the original, custom name. |
- profile_manager->ScheduleProfileForDeletion(profile2->GetPath(), |
- ProfileManager::CreateCallback()); |
+ profile_manager->ScheduleProfileForDeletion( |
+ profile2->GetPath(), false /* suppress_profile_creation */, |
+ ProfileManager::CreateCallback()); |
// Spin the message loop so that all the callbacks can finish running. |
base::RunLoop().RunUntilIdle(); |
EXPECT_EQ(custom_profile_name, |
@@ -1136,8 +1182,9 @@ TEST_F(ProfileManagerTest, ProfileDisplayNamePreservesSignedInName) { |
profiles::GetAvatarNameForProfile(profile2->GetPath())); |
// Deleting a profile means returning to the original, actual profile name. |
- profile_manager->ScheduleProfileForDeletion(profile2->GetPath(), |
- ProfileManager::CreateCallback()); |
+ profile_manager->ScheduleProfileForDeletion( |
+ profile2->GetPath(), false /* suppress_profile_creation */, |
+ ProfileManager::CreateCallback()); |
// Spin the message loop so that all the callbacks can finish running. |
base::RunLoop().RunUntilIdle(); |
EXPECT_EQ(gaia_given_name, |
@@ -1241,8 +1288,9 @@ TEST_F(ProfileManagerTest, ActiveProfileDeletedNeedsToLoadNextProfile) { |
// Delete the active profile. This should switch and load the unloaded |
// profile. |
- profile_manager->ScheduleProfileForDeletion(dest_path1, |
- ProfileManager::CreateCallback()); |
+ profile_manager->ScheduleProfileForDeletion( |
+ dest_path1, false /* suppress_profile_creation */, |
+ ProfileManager::CreateCallback()); |
// Spin the message loop so that all the callbacks can finish running. |
base::RunLoop().RunUntilIdle(); |
@@ -1299,12 +1347,14 @@ TEST_F(ProfileManagerTest, ActiveProfileDeletedNextProfileDeletedToo) { |
// Try to break this flow by setting the active profile to Profile2 in the |
// middle (so after the first posted message), and trying to delete Profile2, |
// so that the ProfileManager has to look for a different profile to load. |
- profile_manager->ScheduleProfileForDeletion(dest_path1, |
- ProfileManager::CreateCallback()); |
+ profile_manager->ScheduleProfileForDeletion( |
+ dest_path1, false /* suppress_profile_creation */, |
+ ProfileManager::CreateCallback()); |
local_state->SetString(prefs::kProfileLastUsed, |
dest_path2.BaseName().MaybeAsASCII()); |
- profile_manager->ScheduleProfileForDeletion(dest_path2, |
- ProfileManager::CreateCallback()); |
+ profile_manager->ScheduleProfileForDeletion( |
+ dest_path2, false /* suppress_profile_creation */, |
+ ProfileManager::CreateCallback()); |
// Spin the message loop so that all the callbacks can finish running. |
base::RunLoop().RunUntilIdle(); |