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

Unified Diff: chrome/browser/chrome_browser_main.cc

Issue 2047483003: Add fallback behavior if the last used profile cannot initialize (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bug-614753-fix
Patch Set: Handle the case where the selected profile is not in ProfileAttributesStorage 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chrome_browser_main.cc
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index 372835ac723201c3e81d8f1a66323a613054e845..9c13fbd56b0de9b6ebb11778ea056adccb032ab1 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -88,6 +88,8 @@
#include "chrome/browser/ui/app_modal/chrome_javascript_native_dialog_factory.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/profile_error_dialog.h"
+#include "chrome/browser/ui/simple_message_box.h"
#include "chrome/browser/ui/startup/bad_flags_prompt.h"
#include "chrome/browser/ui/startup/default_browser_prompt.h"
#include "chrome/browser/ui/startup/startup_browser_creator.h"
@@ -391,7 +393,7 @@ Profile* CreatePrimaryProfile(const content::MainFunctionParams& parameters,
profile_list->Clear();
}
- Profile* profile = NULL;
+ Profile* profile = nullptr;
#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
// On ChromeOS and Android the ProfileManager will use the same path as the
// one we got passed. GetActiveUserProfile will therefore use the correct path
@@ -399,44 +401,35 @@ Profile* CreatePrimaryProfile(const content::MainFunctionParams& parameters,
DCHECK_EQ(user_data_dir.value(),
g_browser_process->profile_manager()->user_data_dir().value());
profile = ProfileManager::GetActiveUserProfile();
+
+ // TODO(port): fix this. See comments near the definition of |user_data_dir|.
+ // It is better to CHECK-fail here than it is to silently exit because of
+ // missing code in the above test.
+ CHECK(profile) << "Cannot get default profile.";
+
#else
- base::FilePath profile_path =
- GetStartupProfilePath(user_data_dir, parsed_command_line);
-
- profile = g_browser_process->profile_manager()->GetProfile(
- profile_path);
-
- // If we're using the --new-profile-management flag and this profile is
- // signed out, then we should show the user manager instead. By switching
- // the active profile to the guest profile we ensure that no
- // browser windows will be opened for the guest profile.
- if (switches::IsNewProfileManagement() &&
- profile &&
- !profile->IsGuestSession()) {
- ProfileAttributesEntry* entry;
- bool has_entry = g_browser_process->profile_manager()->
- GetProfileAttributesStorage().
- GetProfileAttributesWithPath(profile_path, &entry);
- if (has_entry && entry->IsSigninRequired()) {
- profile = g_browser_process->profile_manager()->GetProfile(
- ProfileManager::GetGuestProfilePath());
- }
+ profile = GetStartupProfile(user_data_dir, parsed_command_line);
+
+ bool profile_dir_specified =
+ profiles::IsMultipleProfilesEnabled() &&
brettw 2016/07/01 23:13:22 This same condition is used near the top of this f
WC Leung 2016/07/07 17:01:53 Done.
+ parsed_command_line.HasSwitch(switches::kProfileDirectory);
+
+ if (!profile && !profile_dir_specified)
+ profile = GetFallbackStartupProfile();
+
+ if (!profile) {
+ ProfileErrorType error_type = profile_dir_specified ?
+ PROFILE_ERROR_CREATE_FAILURE_SPECIFIED :
+ PROFILE_ERROR_CREATE_FAILURE_ALL;
+
+ ShowProfileErrorDialog(error_type, IDS_COULDNT_STARTUP_PROFILE_ERROR);
+ return nullptr;
}
#endif // defined(OS_CHROMEOS) || defined(OS_ANDROID)
- if (profile) {
- UMA_HISTOGRAM_LONG_TIMES(
- "Startup.CreateFirstProfile", base::Time::Now() - start);
- return profile;
- }
-
-#if !defined(OS_WIN)
- // TODO(port): fix this. See comments near the definition of
- // user_data_dir. It is better to CHECK-fail here than it is to
- // silently exit because of missing code in the above test.
- CHECK(profile) << "Cannot get default profile.";
-#endif // !defined(OS_WIN)
- return NULL;
+ UMA_HISTOGRAM_LONG_TIMES(
+ "Startup.CreateFirstProfile", base::Time::Now() - start);
+ return profile;
}
#if defined(OS_MACOSX)

Powered by Google App Engine
This is Rietveld 408576698