Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "chrome/browser/profiles/profile_manager.h" | 5 #include "chrome/browser/profiles/profile_manager.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 371 CHECK(profile) << profile_manager->user_data_dir().AsUTF8Unsafe(); | 371 CHECK(profile) << profile_manager->user_data_dir().AsUTF8Unsafe(); |
| 372 return profile; | 372 return profile; |
| 373 } | 373 } |
| 374 | 374 |
| 375 Profile* ProfileManager::GetProfile(const base::FilePath& profile_dir) { | 375 Profile* ProfileManager::GetProfile(const base::FilePath& profile_dir) { |
| 376 TRACE_EVENT0("browser", "ProfileManager::GetProfile"); | 376 TRACE_EVENT0("browser", "ProfileManager::GetProfile"); |
| 377 | 377 |
| 378 // If the profile is already loaded (e.g., chrome.exe launched twice), just | 378 // If the profile is already loaded (e.g., chrome.exe launched twice), just |
| 379 // return it. | 379 // return it. |
| 380 Profile* profile = GetProfileByPath(profile_dir); | 380 Profile* profile = GetProfileByPath(profile_dir); |
| 381 if (NULL != profile) | 381 if (profile) |
| 382 return profile; | 382 return profile; |
| 383 return CreateAndInitializeProfile(profile_dir); | 383 return CreateAndInitializeProfile(profile_dir); |
| 384 } | 384 } |
| 385 | 385 |
| 386 size_t ProfileManager::GetNumberOfProfiles() { | 386 size_t ProfileManager::GetNumberOfProfiles() { |
| 387 return GetProfileInfoCache().GetNumberOfProfiles(); | 387 return GetProfileInfoCache().GetNumberOfProfiles(); |
| 388 } | 388 } |
| 389 | 389 |
| 390 void ProfileManager::CreateProfileAsync( | 390 void ProfileManager::CreateProfileAsync( |
| 391 const base::FilePath& profile_path, | 391 const base::FilePath& profile_path, |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 545 std::vector<Profile*> ProfileManager::GetLoadedProfiles() const { | 545 std::vector<Profile*> ProfileManager::GetLoadedProfiles() const { |
| 546 std::vector<Profile*> profiles; | 546 std::vector<Profile*> profiles; |
| 547 for (ProfilesInfoMap::const_iterator iter = profiles_info_.begin(); | 547 for (ProfilesInfoMap::const_iterator iter = profiles_info_.begin(); |
| 548 iter != profiles_info_.end(); ++iter) { | 548 iter != profiles_info_.end(); ++iter) { |
| 549 if (iter->second->created) | 549 if (iter->second->created) |
| 550 profiles.push_back(iter->second->profile.get()); | 550 profiles.push_back(iter->second->profile.get()); |
| 551 } | 551 } |
| 552 return profiles; | 552 return profiles; |
| 553 } | 553 } |
| 554 | 554 |
| 555 Profile* ProfileManager::GetProfileByPathInternal( | |
| 556 const base::FilePath& path) const { | |
| 557 TRACE_EVENT0("browser", "ProfileManager::GetProfileByPathInternal"); | |
| 558 ProfileInfo* profile_info = GetProfileInfoByPath(path); | |
| 559 return profile_info ? profile_info->profile.get() : nullptr; | |
| 560 } | |
| 561 | |
| 555 Profile* ProfileManager::GetProfileByPath(const base::FilePath& path) const { | 562 Profile* ProfileManager::GetProfileByPath(const base::FilePath& path) const { |
| 556 TRACE_EVENT0("browser", "ProfileManager::GetProfileByPath"); | 563 TRACE_EVENT0("browser", "ProfileManager::GetProfileByPath"); |
| 557 ProfileInfo* profile_info = GetProfileInfoByPath(path); | 564 ProfileInfo* profile_info = GetProfileInfoByPath(path); |
| 558 return profile_info ? profile_info->profile.get() : NULL; | 565 return profile_info && profile_info->created ? profile_info->profile.get() |
|
Pam (message me for reviews)
2015/02/23 12:02:02
nit: This would be slightly clearer with the condi
Bernhard Bauer
2015/02/23 18:42:13
Done (in https://codereview.chromium.org/953453002
| |
| 566 : nullptr; | |
| 559 } | 567 } |
| 560 | 568 |
| 561 // static | 569 // static |
| 562 base::FilePath ProfileManager::CreateMultiProfileAsync( | 570 base::FilePath ProfileManager::CreateMultiProfileAsync( |
| 563 const base::string16& name, | 571 const base::string16& name, |
| 564 const base::string16& icon_url, | 572 const base::string16& icon_url, |
| 565 const CreateCallback& callback, | 573 const CreateCallback& callback, |
| 566 const std::string& supervised_user_id) { | 574 const std::string& supervised_user_id) { |
| 567 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 575 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 568 | 576 |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 850 // If we don't have a mounted profile directory we're in trouble. | 858 // If we don't have a mounted profile directory we're in trouble. |
| 851 // TODO(davemoore) Once we have better api this check should ensure that | 859 // TODO(davemoore) Once we have better api this check should ensure that |
| 852 // our profile directory is the one that's mounted, and that it's mounted | 860 // our profile directory is the one that's mounted, and that it's mounted |
| 853 // as the current user. | 861 // as the current user. |
| 854 chromeos::DBusThreadManager::Get()->GetCryptohomeClient()->IsMounted( | 862 chromeos::DBusThreadManager::Get()->GetCryptohomeClient()->IsMounted( |
| 855 base::Bind(&CheckCryptohomeIsMounted)); | 863 base::Bind(&CheckCryptohomeIsMounted)); |
| 856 | 864 |
| 857 // Confirm that we hadn't loaded the new profile previously. | 865 // Confirm that we hadn't loaded the new profile previously. |
| 858 base::FilePath default_profile_dir = user_data_dir_.Append( | 866 base::FilePath default_profile_dir = user_data_dir_.Append( |
| 859 GetInitialProfileDir()); | 867 GetInitialProfileDir()); |
| 860 CHECK(!GetProfileByPath(default_profile_dir)) | 868 CHECK(!GetProfileByPathInternal(default_profile_dir)) |
| 861 << "The default profile was loaded before we mounted the cryptohome."; | 869 << "The default profile was loaded before we mounted the cryptohome."; |
| 862 } | 870 } |
| 863 return; | 871 return; |
| 864 } | 872 } |
| 865 #endif | 873 #endif |
| 866 bool save_active_profiles = false; | 874 bool save_active_profiles = false; |
| 867 switch (type) { | 875 switch (type) { |
| 868 case chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST: { | 876 case chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST: { |
| 869 // Ignore any browsers closing from now on. | 877 // Ignore any browsers closing from now on. |
| 870 closing_all_browsers_ = true; | 878 closing_all_browsers_ = true; |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1116 return GetProfile(default_profile_dir); | 1124 return GetProfile(default_profile_dir); |
| 1117 #endif | 1125 #endif |
| 1118 } | 1126 } |
| 1119 | 1127 |
| 1120 bool ProfileManager::AddProfile(Profile* profile) { | 1128 bool ProfileManager::AddProfile(Profile* profile) { |
| 1121 TRACE_EVENT0("browser", "ProfileManager::AddProfile"); | 1129 TRACE_EVENT0("browser", "ProfileManager::AddProfile"); |
| 1122 DCHECK(profile); | 1130 DCHECK(profile); |
| 1123 | 1131 |
| 1124 // Make sure that we're not loading a profile with the same ID as a profile | 1132 // Make sure that we're not loading a profile with the same ID as a profile |
| 1125 // that's already loaded. | 1133 // that's already loaded. |
| 1126 if (GetProfileByPath(profile->GetPath())) { | 1134 if (GetProfileByPathInternal(profile->GetPath())) { |
| 1127 NOTREACHED() << "Attempted to add profile with the same path (" << | 1135 NOTREACHED() << "Attempted to add profile with the same path (" << |
| 1128 profile->GetPath().value() << | 1136 profile->GetPath().value() << |
| 1129 ") as an already-loaded profile."; | 1137 ") as an already-loaded profile."; |
| 1130 return false; | 1138 return false; |
| 1131 } | 1139 } |
| 1132 | 1140 |
| 1133 RegisterProfile(profile, true); | 1141 RegisterProfile(profile, true); |
| 1134 InitProfileUserPrefs(profile); | 1142 InitProfileUserPrefs(profile); |
| 1135 DoFinalInit(profile, ShouldGoOffTheRecord(profile)); | 1143 DoFinalInit(profile, ShouldGoOffTheRecord(profile)); |
| 1136 return true; | 1144 return true; |
| 1137 } | 1145 } |
| 1138 | 1146 |
| 1139 Profile* ProfileManager::CreateAndInitializeProfile( | 1147 Profile* ProfileManager::CreateAndInitializeProfile( |
| 1140 const base::FilePath& profile_dir) { | 1148 const base::FilePath& profile_dir) { |
| 1141 TRACE_EVENT0("browser", "ProfileManager::CreateAndInitializeProfile"); | 1149 TRACE_EVENT0("browser", "ProfileManager::CreateAndInitializeProfile"); |
| 1142 SCOPED_UMA_HISTOGRAM_LONG_TIMER("Profile.CreateAndInitializeProfile"); | 1150 SCOPED_UMA_HISTOGRAM_LONG_TIMER("Profile.CreateAndInitializeProfile"); |
| 1151 | |
| 1152 // CHECK that we are not trying to load the same profile twice, to prevent | |
| 1153 // profile corruption. Note that this check also covers the case when we have | |
| 1154 // already started loading the profile but it is not fully initialized yet, | |
| 1155 // which would make Bad Things happen if we returned it. | |
| 1156 CHECK(!GetProfileByPathInternal(profile_dir)); | |
| 1143 Profile* profile = CreateProfileHelper(profile_dir); | 1157 Profile* profile = CreateProfileHelper(profile_dir); |
| 1144 DCHECK(profile); | 1158 DCHECK(profile); |
| 1145 if (profile) { | 1159 if (profile) { |
| 1146 bool result = AddProfile(profile); | 1160 bool result = AddProfile(profile); |
| 1147 DCHECK(result); | 1161 DCHECK(result); |
| 1148 } | 1162 } |
| 1149 return profile; | 1163 return profile; |
| 1150 } | 1164 } |
| 1151 | 1165 |
| 1152 void ProfileManager::FinishDeletingProfile(const base::FilePath& profile_dir) { | 1166 void ProfileManager::FinishDeletingProfile(const base::FilePath& profile_dir) { |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1385 last_non_supervised_profile_path.BaseName().MaybeAsASCII()); | 1399 last_non_supervised_profile_path.BaseName().MaybeAsASCII()); |
| 1386 FinishDeletingProfile(profile_to_delete_path); | 1400 FinishDeletingProfile(profile_to_delete_path); |
| 1387 } | 1401 } |
| 1388 } | 1402 } |
| 1389 } | 1403 } |
| 1390 #endif | 1404 #endif |
| 1391 | 1405 |
| 1392 ProfileManagerWithoutInit::ProfileManagerWithoutInit( | 1406 ProfileManagerWithoutInit::ProfileManagerWithoutInit( |
| 1393 const base::FilePath& user_data_dir) : ProfileManager(user_data_dir) { | 1407 const base::FilePath& user_data_dir) : ProfileManager(user_data_dir) { |
| 1394 } | 1408 } |
| OLD | NEW |