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

Unified Diff: chrome/browser/profiles/profile_manager.cc

Issue 929073002: Only return fully initialized profiles in ProfileManager::GetProfileByPath. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: DCHECK Created 5 years, 10 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
« no previous file with comments | « chrome/browser/profiles/profile_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/profiles/profile_manager.cc
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
index 781158517596b62bc8ad0247e744f9e1f8c67142..1b4d88399fbe4516098d5feaa8cc62cfc6cc45e8 100644
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -379,9 +379,13 @@ Profile* ProfileManager::GetProfile(const base::FilePath& profile_dir) {
// If the profile is already loaded (e.g., chrome.exe launched twice), just
// return it.
Profile* profile = GetProfileByPath(profile_dir);
- if (NULL != profile)
+ if (profile)
return profile;
+ // If the profile has not been found, check that we have not started loading
+ // it (which would mean that the profile is not fully initialized yet).
+ DCHECK(!GetProfileByPathInternal(profile_dir));
noms (inactive) 2015/02/18 21:26:21 Hmm, so in non-debug world, if the profile has not
Bernhard Bauer 2015/02/19 10:22:37 Made it a CHECK.
+
profile = CreateProfileHelper(profile_dir);
DCHECK(profile);
if (profile) {
@@ -560,10 +564,18 @@ std::vector<Profile*> ProfileManager::GetLoadedProfiles() const {
return profiles;
}
+Profile* ProfileManager::GetProfileByPathInternal(
+ const base::FilePath& path) const {
+ TRACE_EVENT0("browser", "ProfileManager::GetProfileByPathInternal");
+ ProfileInfo* profile_info = GetProfileInfoByPath(path);
+ return profile_info ? profile_info->profile.get() : nullptr;
+}
+
Profile* ProfileManager::GetProfileByPath(const base::FilePath& path) const {
TRACE_EVENT0("browser", "ProfileManager::GetProfileByPath");
ProfileInfo* profile_info = GetProfileInfoByPath(path);
- return profile_info ? profile_info->profile.get() : NULL;
+ return profile_info && profile_info->created ? profile_info->profile.get()
+ : nullptr;
}
// static
@@ -865,7 +877,7 @@ void ProfileManager::Observe(
// Confirm that we hadn't loaded the new profile previously.
base::FilePath default_profile_dir = user_data_dir_.Append(
GetInitialProfileDir());
- CHECK(!GetProfileByPath(default_profile_dir))
+ CHECK(!GetProfileByPathInternal(default_profile_dir))
<< "The default profile was loaded before we mounted the cryptohome.";
}
return;
@@ -1129,7 +1141,7 @@ bool ProfileManager::AddProfile(Profile* profile) {
// Make sure that we're not loading a profile with the same ID as a profile
// that's already loaded.
- if (GetProfileByPath(profile->GetPath())) {
+ if (GetProfileByPathInternal(profile->GetPath())) {
NOTREACHED() << "Attempted to add profile with the same path (" <<
profile->GetPath().value() <<
") as an already-loaded profile.";
« no previous file with comments | « chrome/browser/profiles/profile_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698