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

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

Issue 2061593002: Fix crash when switching to a profile that cannot be opened (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bug-614753-fix
Patch Set: Created 4 years, 6 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
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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/base_switches.h"
7 #include "base/bind.h" 8 #include "base/bind.h"
8 #include "base/command_line.h" 9 #include "base/command_line.h"
9 #include "base/macros.h" 10 #include "base/macros.h"
10 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
11 #include "build/build_config.h" 12 #include "build/build_config.h"
12 #include "chrome/browser/password_manager/password_store_factory.h" 13 #include "chrome/browser/password_manager/password_store_factory.h"
13 #include "chrome/browser/profiles/profile_attributes_entry.h" 14 #include "chrome/browser/profiles/profile_attributes_entry.h"
14 #include "chrome/browser/profiles/profile_attributes_storage.h" 15 #include "chrome/browser/profiles/profile_attributes_storage.h"
15 #include "chrome/browser/profiles/profile_manager.h" 16 #include "chrome/browser/profiles/profile_manager.h"
16 #include "chrome/browser/profiles/profile_window.h" 17 #include "chrome/browser/profiles/profile_window.h"
(...skipping 12 matching lines...) Expand all
29 30
30 #if defined(OS_CHROMEOS) 31 #if defined(OS_CHROMEOS)
31 #include "base/path_service.h" 32 #include "base/path_service.h"
32 #include "chrome/browser/chromeos/profiles/profile_helper.h" 33 #include "chrome/browser/chromeos/profiles/profile_helper.h"
33 #include "chrome/common/chrome_constants.h" 34 #include "chrome/common/chrome_constants.h"
34 #include "chrome/common/chrome_paths.h" 35 #include "chrome/common/chrome_paths.h"
35 #include "chromeos/chromeos_switches.h" 36 #include "chromeos/chromeos_switches.h"
36 #include "testing/gtest/include/gtest/gtest.h" 37 #include "testing/gtest/include/gtest/gtest.h"
37 #endif 38 #endif
38 39
40 #if defined(OS_WIN)
41 #include <windows.h>
42 #include "base/test/test_file_util.h"
43 #endif
44
39 namespace { 45 namespace {
40 46
41 const ProfileManager::CreateCallback kOnProfileSwitchDoNothing; 47 const ProfileManager::CreateCallback kOnProfileSwitchDoNothing;
42 48
43 // An observer that returns back to test code after a new profile is 49 // An observer that returns back to test code after a new profile is
44 // initialized. 50 // initialized.
45 void OnUnblockOnProfileCreation(base::RunLoop* run_loop, 51 void OnUnblockOnProfileCreation(base::RunLoop* run_loop,
46 Profile* profile, 52 Profile* profile,
47 Profile::CreateStatus status) { 53 Profile::CreateStatus status) {
48 if (status == Profile::CREATE_STATUS_INITIALIZED) 54 if (status == Profile::CREATE_STATUS_INITIALIZED)
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 147
142 // TODO(jeremy): crbug.com/103355 - These tests should be enabled on all 148 // TODO(jeremy): crbug.com/103355 - These tests should be enabled on all
143 // platforms. 149 // platforms.
144 class ProfileManagerBrowserTest : public InProcessBrowserTest { 150 class ProfileManagerBrowserTest : public InProcessBrowserTest {
145 protected: 151 protected:
146 void SetUpCommandLine(base::CommandLine* command_line) override { 152 void SetUpCommandLine(base::CommandLine* command_line) override {
147 #if defined(OS_CHROMEOS) 153 #if defined(OS_CHROMEOS)
148 command_line->AppendSwitch( 154 command_line->AppendSwitch(
149 chromeos::switches::kIgnoreUserProfileMappingForTests); 155 chromeos::switches::kIgnoreUserProfileMappingForTests);
150 #endif 156 #endif
157 command_line->AppendSwitch(switches::kNoErrorDialogs);
151 } 158 }
152 }; 159 };
153 160
154 #if defined(OS_MACOSX) 161 #if defined(OS_MACOSX)
155 162
156 // Delete single profile and make sure a new one is created. 163 // Delete single profile and make sure a new one is created.
157 IN_PROC_BROWSER_TEST_F(ProfileManagerBrowserTest, DeleteSingletonProfile) { 164 IN_PROC_BROWSER_TEST_F(ProfileManagerBrowserTest, DeleteSingletonProfile) {
158 ProfileManager* profile_manager = g_browser_process->profile_manager(); 165 ProfileManager* profile_manager = g_browser_process->profile_manager();
159 ProfileAttributesStorage& storage = 166 ProfileAttributesStorage& storage =
160 profile_manager->GetProfileAttributesStorage(); 167 profile_manager->GetProfileAttributesStorage();
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 EXPECT_EQ(chrome::GetTotalBrowserCount(), 2U); 297 EXPECT_EQ(chrome::GetTotalBrowserCount(), 2U);
291 298
292 // Now close all browser windows. 299 // Now close all browser windows.
293 std::vector<Profile*> profiles = profile_manager->GetLoadedProfiles(); 300 std::vector<Profile*> profiles = profile_manager->GetLoadedProfiles();
294 for (std::vector<Profile*>::const_iterator it = profiles.begin(); 301 for (std::vector<Profile*>::const_iterator it = profiles.begin();
295 it != profiles.end(); ++it) { 302 it != profiles.end(); ++it) {
296 BrowserList::CloseAllBrowsersWithProfile(*it); 303 BrowserList::CloseAllBrowsersWithProfile(*it);
297 } 304 }
298 } 305 }
299 306
300 IN_PROC_BROWSER_TEST_F(ProfileManagerBrowserTest, 307 IN_PROC_BROWSER_TEST_F(ProfileManagerBrowserTest, SwitchToProfile) {
301 SwitchToProfile) {
302 // If multiprofile mode is not enabled, you can't switch between profiles. 308 // If multiprofile mode is not enabled, you can't switch between profiles.
303 if (!profiles::IsMultipleProfilesEnabled()) 309 if (!profiles::IsMultipleProfilesEnabled())
304 return; 310 return;
305 311
306 ProfileManager* profile_manager = g_browser_process->profile_manager(); 312 ProfileManager* profile_manager = g_browser_process->profile_manager();
307 ProfileAttributesStorage& storage = 313 ProfileAttributesStorage& storage =
308 profile_manager->GetProfileAttributesStorage(); 314 profile_manager->GetProfileAttributesStorage();
309 size_t initial_profile_count = profile_manager->GetNumberOfProfiles(); 315 size_t initial_profile_count = profile_manager->GetNumberOfProfiles();
310 base::FilePath path_profile1 = GetFirstNonSigninProfile(storage); 316 base::FilePath path_profile1 = GetFirstNonSigninProfile(storage);
311 317
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 // Switch to the first profile without opening a new window. 351 // Switch to the first profile without opening a new window.
346 profiles::SwitchToProfile(path_profile1, false, kOnProfileSwitchDoNothing, 352 profiles::SwitchToProfile(path_profile1, false, kOnProfileSwitchDoNothing,
347 ProfileMetrics::SWITCH_PROFILE_ICON); 353 ProfileMetrics::SWITCH_PROFILE_ICON);
348 EXPECT_EQ(2U, chrome::GetTotalBrowserCount()); 354 EXPECT_EQ(2U, chrome::GetTotalBrowserCount());
349 EXPECT_EQ(2U, browser_list->size()); 355 EXPECT_EQ(2U, browser_list->size());
350 356
351 EXPECT_EQ(path_profile1, browser_list->get(0)->profile()->GetPath()); 357 EXPECT_EQ(path_profile1, browser_list->get(0)->profile()->GetPath());
352 EXPECT_EQ(path_profile2, browser_list->get(1)->profile()->GetPath()); 358 EXPECT_EQ(path_profile2, browser_list->get(1)->profile()->GetPath());
353 } 359 }
354 360
361 #if defined(OS_WIN)
Peter Kasting 2016/06/13 04:43:20 It would be nice to be able to run this test on al
WC Leung 2016/06/13 08:06:45 Sadly I don't think that is possible. I've done a
WC Leung 2016/06/15 13:08:39 I mean confirm with the crash logs (I don't have a
362 IN_PROC_BROWSER_TEST_F(ProfileManagerBrowserTest, SwitchToProfileFails) {
363 base::FilePath user_data_dir =
364 g_browser_process->profile_manager()->user_data_dir();
365 base::DenyFilePermission(user_data_dir, FILE_ADD_SUBDIRECTORY);
366 // Switch to a profile that cannot be loaded or created. This must fail
367 // gracefully with no crash.
368 profiles::SwitchToProfile(user_data_dir.AppendASCII("Profile 1"),
369 false,
370 kOnProfileSwitchDoNothing,
371 ProfileMetrics::SWITCH_PROFILE_ICON);
372 }
373 #endif // defined(OS_WIN)
374
355 // Flakes on Windows: http://crbug.com/314905 375 // Flakes on Windows: http://crbug.com/314905
356 #if defined(OS_WIN) 376 #if defined(OS_WIN)
357 #define MAYBE_EphemeralProfile DISABLED_EphemeralProfile 377 #define MAYBE_EphemeralProfile DISABLED_EphemeralProfile
358 #else 378 #else
359 #define MAYBE_EphemeralProfile EphemeralProfile 379 #define MAYBE_EphemeralProfile EphemeralProfile
360 #endif 380 #endif
361 IN_PROC_BROWSER_TEST_F(ProfileManagerBrowserTest, MAYBE_EphemeralProfile) { 381 IN_PROC_BROWSER_TEST_F(ProfileManagerBrowserTest, MAYBE_EphemeralProfile) {
362 // If multiprofile mode is not enabled, you can't switch between profiles. 382 // If multiprofile mode is not enabled, you can't switch between profiles.
363 if (!profiles::IsMultipleProfilesEnabled()) 383 if (!profiles::IsMultipleProfilesEnabled())
364 return; 384 return;
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 512
493 EXPECT_FALSE(profile->HasOffTheRecordProfile()); 513 EXPECT_FALSE(profile->HasOffTheRecordProfile());
494 EXPECT_FALSE(profile_manager->IsValidProfile(incognito_profile)); 514 EXPECT_FALSE(profile_manager->IsValidProfile(incognito_profile));
495 EXPECT_EQ(initial_profile_count, profile_manager->GetNumberOfProfiles()); 515 EXPECT_EQ(initial_profile_count, profile_manager->GetNumberOfProfiles());
496 // After destroying the incognito profile incognito preferences should be 516 // After destroying the incognito profile incognito preferences should be
497 // cleared so the default save path should be taken from the main profile. 517 // cleared so the default save path should be taken from the main profile.
498 EXPECT_FALSE(profile->GetOffTheRecordPrefs() 518 EXPECT_FALSE(profile->GetOffTheRecordPrefs()
499 ->GetFilePath(prefs::kSaveFileDefaultDirectory) 519 ->GetFilePath(prefs::kSaveFileDefaultDirectory)
500 .empty()); 520 .empty());
501 } 521 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698