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

Side by Side Diff: chrome/browser/profiles/profile_manager_browsertest.cc

Issue 25495003: Schedule an ephemeral profile for deletion once the last browser is closed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/command_line.h" 6 #include "base/command_line.h"
7 #include "base/prefs/pref_service.h" 7 #include "base/prefs/pref_service.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/profiles/profile_info_cache.h" 9 #include "chrome/browser/profiles/profile_info_cache.h"
10 #include "chrome/browser/profiles/profile_info_cache_observer.h" 10 #include "chrome/browser/profiles/profile_info_cache_observer.h"
11 #include "chrome/browser/profiles/profile_manager.h" 11 #include "chrome/browser/profiles/profile_manager.h"
12 #include "chrome/browser/profiles/profile_window.h" 12 #include "chrome/browser/profiles/profile_window.h"
13 #include "chrome/browser/profiles/profiles_state.h" 13 #include "chrome/browser/profiles/profiles_state.h"
14 #include "chrome/browser/ui/browser_finder.h" 14 #include "chrome/browser/ui/browser_finder.h"
15 #include "chrome/browser/ui/browser_list.h" 15 #include "chrome/browser/ui/browser_list.h"
16 #include "chrome/browser/ui/browser_window.h"
16 #include "chrome/browser/ui/host_desktop.h" 17 #include "chrome/browser/ui/host_desktop.h"
17 #include "chrome/common/pref_names.h" 18 #include "chrome/common/pref_names.h"
18 #include "chrome/test/base/in_process_browser_test.h" 19 #include "chrome/test/base/in_process_browser_test.h"
19 #include "chrome/test/base/test_switches.h" 20 #include "chrome/test/base/test_switches.h"
20 #include "chrome/test/base/testing_browser_process.h" 21 #include "chrome/test/base/testing_browser_process.h"
21 #include "chrome/test/base/ui_test_utils.h" 22 #include "chrome/test/base/ui_test_utils.h"
22 23
23 namespace { 24 namespace {
24 25
25 // An observer that returns back to test code after a new profile is 26 // An observer that returns back to test code after a new profile is
26 // initialized. 27 // initialized.
27 void OnUnblockOnProfileCreation(Profile* profile, 28 void OnUnblockOnProfileCreation(Profile* profile,
28 Profile::CreateStatus status) { 29 Profile::CreateStatus status) {
29 if (status == Profile::CREATE_STATUS_INITIALIZED) 30 if (status == Profile::CREATE_STATUS_INITIALIZED)
30 base::MessageLoop::current()->Quit(); 31 base::MessageLoop::current()->Quit();
31 } 32 }
32 33
33 void ProfileCreationComplete(Profile* profile, Profile::CreateStatus status) { 34 void ProfileCreationComplete(Profile* profile, Profile::CreateStatus status) {
34 ASSERT_NE(status, Profile::CREATE_STATUS_LOCAL_FAIL); 35 ASSERT_NE(status, Profile::CREATE_STATUS_LOCAL_FAIL);
35 ASSERT_NE(status, Profile::CREATE_STATUS_REMOTE_FAIL); 36 ASSERT_NE(status, Profile::CREATE_STATUS_REMOTE_FAIL);
36 // No browser should have been created for this profile yet. 37 // No browser should have been created for this profile yet.
37 EXPECT_EQ(chrome::GetTotalBrowserCountForProfile(profile), 0U); 38 EXPECT_EQ(chrome::GetTotalBrowserCountForProfile(profile), 0U);
38 EXPECT_EQ(chrome::GetTotalBrowserCount(), 1U); 39 EXPECT_EQ(chrome::GetTotalBrowserCount(), 1U);
39 if (status == Profile::CREATE_STATUS_INITIALIZED) 40 if (status == Profile::CREATE_STATUS_INITIALIZED)
40 base::MessageLoop::current()->Quit(); 41 base::MessageLoop::current()->Quit();
41 } 42 }
42 43
44 void EphemeralProfileCreationComplete(Profile* profile,
45 Profile::CreateStatus status) {
46 ProfileCreationComplete(profile, status);
47 profile->GetPrefs()->SetBoolean(prefs::kForceEphemeralProfiles, true);
48 }
49
43 class ProfileRemovalObserver : public ProfileInfoCacheObserver { 50 class ProfileRemovalObserver : public ProfileInfoCacheObserver {
44 public: 51 public:
45 ProfileRemovalObserver() { 52 ProfileRemovalObserver() {
46 g_browser_process->profile_manager()->GetProfileInfoCache().AddObserver( 53 g_browser_process->profile_manager()->GetProfileInfoCache().AddObserver(
47 this); 54 this);
48 } 55 }
49 56
50 virtual ~ProfileRemovalObserver() { 57 virtual ~ProfileRemovalObserver() {
51 g_browser_process->profile_manager()->GetProfileInfoCache().RemoveObserver( 58 g_browser_process->profile_manager()->GetProfileInfoCache().RemoveObserver(
52 this); 59 this);
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 EXPECT_EQ(path_profile2, browser_list->get(1)->profile()->GetPath()); 240 EXPECT_EQ(path_profile2, browser_list->get(1)->profile()->GetPath());
234 241
235 // Switch to the first profile without opening a new window. 242 // Switch to the first profile without opening a new window.
236 profiles::SwitchToProfile(path_profile1, desktop_type, false); 243 profiles::SwitchToProfile(path_profile1, desktop_type, false);
237 EXPECT_EQ(chrome::GetTotalBrowserCount(), 2U); 244 EXPECT_EQ(chrome::GetTotalBrowserCount(), 2U);
238 EXPECT_EQ(2U, browser_list->size()); 245 EXPECT_EQ(2U, browser_list->size());
239 246
240 EXPECT_EQ(path_profile1, browser_list->get(0)->profile()->GetPath()); 247 EXPECT_EQ(path_profile1, browser_list->get(0)->profile()->GetPath());
241 EXPECT_EQ(path_profile2, browser_list->get(1)->profile()->GetPath()); 248 EXPECT_EQ(path_profile2, browser_list->get(1)->profile()->GetPath());
242 } 249 }
250
251 IN_PROC_BROWSER_TEST_F(ProfileManagerBrowserTest, EphemeralProfile) {
252 #if defined(OS_WIN) && defined(USE_ASH)
253 // Disable this test in Metro+Ash for now (http://crbug.com/262796).
254 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
255 return;
256 #endif
257
258 // If multiprofile mode is not enabled, you can't switch between profiles.
259 if (!profiles::IsMultipleProfilesEnabled())
rpetterson 2013/10/04 19:42:20 When would you not have multi profiles enabled? I
pastarmovj 2013/10/10 11:46:32 TBH I just copied this check from the other tests
rpetterson 2013/10/10 17:40:19 Got it. That makes sense.
260 return;
261
262 ProfileManager* profile_manager = g_browser_process->profile_manager();
263 ProfileInfoCache& cache = profile_manager->GetProfileInfoCache();
264 base::FilePath path_profile1 = cache.GetPathOfProfileAtIndex(0);
265
266 ASSERT_EQ(profile_manager->GetNumberOfProfiles(), 1U);
267 EXPECT_EQ(chrome::GetTotalBrowserCount(), 1U);
268
269 // Create an ephemeral profile.
270 base::FilePath path_profile2 =
271 profile_manager->GenerateNextProfileDirectoryPath();
272 profile_manager->CreateProfileAsync(
273 path_profile2,
274 base::Bind(&EphemeralProfileCreationComplete),
275 string16(), string16(), std::string());
276
277 // Spin to allow profile creation to take place.
278 content::RunMessageLoop();
279
280 chrome::HostDesktopType desktop_type = chrome::GetActiveDesktop();
281 BrowserList* browser_list = BrowserList::GetInstance(desktop_type);
282 ASSERT_EQ(cache.GetNumberOfProfiles(), 2U);
283 EXPECT_EQ(1U, browser_list->size());
284
285 // Open a browser window for the second profile.
286 profiles::SwitchToProfile(path_profile2, desktop_type, false);
287 EXPECT_EQ(chrome::GetTotalBrowserCount(), 2U);
288 EXPECT_EQ(2U, browser_list->size());
289 EXPECT_EQ(path_profile2, browser_list->get(1)->profile()->GetPath());
290
291 // Create a second window for the ephemeral profile.
292 profiles::SwitchToProfile(path_profile2, desktop_type, true);
293 EXPECT_EQ(chrome::GetTotalBrowserCount(), 3U);
294 EXPECT_EQ(3U, browser_list->size());
295
296 EXPECT_EQ(path_profile1, browser_list->get(0)->profile()->GetPath());
297 EXPECT_EQ(path_profile2, browser_list->get(1)->profile()->GetPath());
rpetterson 2013/10/04 19:42:20 You did this check earlier. Did you mean to check
pastarmovj 2013/10/10 11:46:32 Done.
298
299 // Closing the first window of the ephemeral profile should not delete it.
300 browser_list->GetLastActive()->window()->Close();
301 content::RunAllPendingInMessageLoop();
302 EXPECT_EQ(2U, browser_list->size());
303 ASSERT_EQ(cache.GetNumberOfProfiles(), 2U);
304
305 // The second should though.
306 browser_list->GetLastActive()->window()->Close();
307 content::RunAllPendingInMessageLoop();
308 EXPECT_EQ(1U, browser_list->size());
309 ASSERT_EQ(cache.GetNumberOfProfiles(), 1U);
310
311 // Closing the last window should not reduce the number of profiles.
312 browser_list->GetLastActive()->window()->Close();
313 content::RunAllPendingInMessageLoop();
314 EXPECT_EQ(0U, browser_list->size());
315 ASSERT_EQ(cache.GetNumberOfProfiles(), 1U);
316 }
OLDNEW
« chrome/browser/profiles/profile_manager.cc ('K') | « chrome/browser/profiles/profile_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698