| 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 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 ++it) { | 210 ++it) { |
| 211 NukeProfileFromDisk(*it); | 211 NukeProfileFromDisk(*it); |
| 212 } | 212 } |
| 213 ProfilesToDelete().clear(); | 213 ProfilesToDelete().clear(); |
| 214 } | 214 } |
| 215 | 215 |
| 216 // static | 216 // static |
| 217 // TODO(skuhne): Remove this method once all clients are migrated. | 217 // TODO(skuhne): Remove this method once all clients are migrated. |
| 218 Profile* ProfileManager::GetDefaultProfile() { | 218 Profile* ProfileManager::GetDefaultProfile() { |
| 219 ProfileManager* profile_manager = g_browser_process->profile_manager(); | 219 ProfileManager* profile_manager = g_browser_process->profile_manager(); |
| 220 return profile_manager->GetDefaultProfile(profile_manager->user_data_dir_); | 220 return profile_manager->GetActiveUserOrOffTheRecordProfileFromPath( |
| 221 profile_manager->user_data_dir_); |
| 221 } | 222 } |
| 222 | 223 |
| 223 // static | 224 // static |
| 224 // TODO(skuhne): Remove this method once all clients are migrated. | |
| 225 Profile* ProfileManager::GetDefaultProfileOrOffTheRecord() { | |
| 226 return GetDefaultProfile(); | |
| 227 } | |
| 228 | |
| 229 // static | |
| 230 Profile* ProfileManager::GetLastUsedProfile() { | 225 Profile* ProfileManager::GetLastUsedProfile() { |
| 231 ProfileManager* profile_manager = g_browser_process->profile_manager(); | 226 ProfileManager* profile_manager = g_browser_process->profile_manager(); |
| 232 return profile_manager->GetLastUsedProfile(profile_manager->user_data_dir_); | 227 return profile_manager->GetLastUsedProfile(profile_manager->user_data_dir_); |
| 233 } | 228 } |
| 234 | 229 |
| 235 // static | 230 // static |
| 236 Profile* ProfileManager::GetLastUsedProfileAllowedByPolicy() { | 231 Profile* ProfileManager::GetLastUsedProfileAllowedByPolicy() { |
| 237 Profile* profile = GetLastUsedProfile(); | 232 Profile* profile = GetLastUsedProfile(); |
| 238 if (IncognitoModePrefs::GetAvailability(profile->GetPrefs()) == | 233 if (IncognitoModePrefs::GetAvailability(profile->GetPrefs()) == |
| 239 IncognitoModePrefs::FORCED) { | 234 IncognitoModePrefs::FORCED) { |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 relative_profile_dir = | 325 relative_profile_dir = |
| 331 relative_profile_dir.AppendASCII(chrome::kInitialProfile); | 326 relative_profile_dir.AppendASCII(chrome::kInitialProfile); |
| 332 return relative_profile_dir; | 327 return relative_profile_dir; |
| 333 } | 328 } |
| 334 | 329 |
| 335 Profile* ProfileManager::GetLastUsedProfile( | 330 Profile* ProfileManager::GetLastUsedProfile( |
| 336 const base::FilePath& user_data_dir) { | 331 const base::FilePath& user_data_dir) { |
| 337 #if defined(OS_CHROMEOS) | 332 #if defined(OS_CHROMEOS) |
| 338 // Use default login profile if user has not logged in yet. | 333 // Use default login profile if user has not logged in yet. |
| 339 if (!logged_in_) { | 334 if (!logged_in_) { |
| 340 return GetDefaultProfile(user_data_dir); | 335 return GetActiveUserOrOffTheRecordProfileFromPath(user_data_dir); |
| 341 } else { | 336 } else { |
| 342 // CrOS multi-profiles implementation is different so GetLastUsedProfile | 337 // CrOS multi-profiles implementation is different so GetLastUsedProfile |
| 343 // has custom implementation too. | 338 // has custom implementation too. |
| 344 base::FilePath profile_dir; | 339 base::FilePath profile_dir; |
| 345 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 340 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
| 346 if (command_line.HasSwitch(switches::kMultiProfiles)) { | 341 if (command_line.HasSwitch(switches::kMultiProfiles)) { |
| 347 // In case of multi-profiles we ignore "last used profile" preference | 342 // In case of multi-profiles we ignore "last used profile" preference |
| 348 // since it may refer to profile that has been in use in previous session. | 343 // since it may refer to profile that has been in use in previous session. |
| 349 // That profile dir may not be mounted in this session so instead return | 344 // That profile dir may not be mounted in this session so instead return |
| 350 // active profile from current session. | 345 // active profile from current session. |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 if (!profile_manager->IsLoggedIn() || !chromeos::UserManager::IsInitialized()) | 416 if (!profile_manager->IsLoggedIn() || !chromeos::UserManager::IsInitialized()) |
| 422 return GetDefaultProfile(); | 417 return GetDefaultProfile(); |
| 423 chromeos::UserManager* manager = chromeos::UserManager::Get(); | 418 chromeos::UserManager* manager = chromeos::UserManager::Get(); |
| 424 // Note: The user manager will take care of guest profiles. | 419 // Note: The user manager will take care of guest profiles. |
| 425 return manager->GetProfileByUser(manager->GetActiveUser()); | 420 return manager->GetProfileByUser(manager->GetActiveUser()); |
| 426 #else | 421 #else |
| 427 return GetDefaultProfile(); | 422 return GetDefaultProfile(); |
| 428 #endif | 423 #endif |
| 429 } | 424 } |
| 430 | 425 |
| 431 Profile* ProfileManager::GetDefaultProfile( | |
| 432 const base::FilePath& user_data_dir) { | |
| 433 #if defined(OS_CHROMEOS) | |
| 434 base::FilePath default_profile_dir(user_data_dir); | |
| 435 if (logged_in_) { | |
| 436 default_profile_dir = default_profile_dir.Append(GetInitialProfileDir()); | |
| 437 } else { | |
| 438 default_profile_dir = profiles::GetDefaultProfileDir(user_data_dir); | |
| 439 } | |
| 440 #else | |
| 441 base::FilePath default_profile_dir(user_data_dir); | |
| 442 default_profile_dir = default_profile_dir.Append(GetInitialProfileDir()); | |
| 443 #endif | |
| 444 #if defined(OS_CHROMEOS) | |
| 445 if (!logged_in_) { | |
| 446 Profile* profile = GetProfile(default_profile_dir); | |
| 447 // For cros, return the OTR profile so we never accidentally keep | |
| 448 // user data in an unencrypted profile. But doing this makes | |
| 449 // many of the browser and ui tests fail. We do return the OTR profile | |
| 450 // if the login-profile switch is passed so that we can test this. | |
| 451 if (ShouldGoOffTheRecord(profile)) | |
| 452 return profile->GetOffTheRecordProfile(); | |
| 453 DCHECK(!chromeos::UserManager::Get()->IsLoggedInAsGuest()); | |
| 454 return profile; | |
| 455 } | |
| 456 | |
| 457 ProfileInfo* profile_info = GetProfileInfoByPath(default_profile_dir); | |
| 458 // Fallback to default off-the-record profile, if user profile has not fully | |
| 459 // loaded yet. | |
| 460 if (profile_info && !profile_info->created) | |
| 461 default_profile_dir = profiles::GetDefaultProfileDir(user_data_dir); | |
| 462 | |
| 463 Profile* profile = GetProfile(default_profile_dir); | |
| 464 // Some unit tests didn't initialize the UserManager. | |
| 465 if (chromeos::UserManager::IsInitialized() && | |
| 466 chromeos::UserManager::Get()->IsLoggedInAsGuest()) | |
| 467 return profile->GetOffTheRecordProfile(); | |
| 468 return profile; | |
| 469 #else | |
| 470 return GetProfile(default_profile_dir); | |
| 471 #endif | |
| 472 } | |
| 473 | |
| 474 bool ProfileManager::IsValidProfile(Profile* profile) { | 426 bool ProfileManager::IsValidProfile(Profile* profile) { |
| 475 for (ProfilesInfoMap::iterator iter = profiles_info_.begin(); | 427 for (ProfilesInfoMap::iterator iter = profiles_info_.begin(); |
| 476 iter != profiles_info_.end(); ++iter) { | 428 iter != profiles_info_.end(); ++iter) { |
| 477 if (iter->second->created) { | 429 if (iter->second->created) { |
| 478 Profile* candidate = iter->second->profile.get(); | 430 Profile* candidate = iter->second->profile.get(); |
| 479 if (candidate == profile || | 431 if (candidate == profile || |
| 480 (candidate->HasOffTheRecordProfile() && | 432 (candidate->HasOffTheRecordProfile() && |
| 481 candidate->GetOffTheRecordProfile() == profile)) { | 433 candidate->GetOffTheRecordProfile() == profile)) { |
| 482 return true; | 434 return true; |
| 483 } | 435 } |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 // Profile has already been created. Run callback immediately. | 517 // Profile has already been created. Run callback immediately. |
| 566 callback.Run(profile, Profile::CREATE_STATUS_INITIALIZED); | 518 callback.Run(profile, Profile::CREATE_STATUS_INITIALIZED); |
| 567 } else { | 519 } else { |
| 568 // Profile is either already in the process of being created, or new. | 520 // Profile is either already in the process of being created, or new. |
| 569 // Add callback to the list. | 521 // Add callback to the list. |
| 570 info->callbacks.push_back(callback); | 522 info->callbacks.push_back(callback); |
| 571 } | 523 } |
| 572 } | 524 } |
| 573 } | 525 } |
| 574 | 526 |
| 527 Profile* ProfileManager::GetActiveUserOrOffTheRecordProfileFromPath( |
| 528 const base::FilePath& user_data_dir) { |
| 529 #if defined(OS_CHROMEOS) |
| 530 base::FilePath default_profile_dir(user_data_dir); |
| 531 if (!logged_in_) { |
| 532 default_profile_dir = profiles::GetDefaultProfileDir(user_data_dir); |
| 533 Profile* profile = GetProfile(default_profile_dir); |
| 534 // For cros, return the OTR profile so we never accidentally keep |
| 535 // user data in an unencrypted profile. But doing this makes |
| 536 // many of the browser and ui tests fail. We do return the OTR profile |
| 537 // if the login-profile switch is passed so that we can test this. |
| 538 if (ShouldGoOffTheRecord(profile)) |
| 539 return profile->GetOffTheRecordProfile(); |
| 540 DCHECK(!chromeos::UserManager::Get()->IsLoggedInAsGuest()); |
| 541 return profile; |
| 542 } |
| 543 |
| 544 default_profile_dir = default_profile_dir.Append(GetInitialProfileDir()); |
| 545 ProfileInfo* profile_info = GetProfileInfoByPath(default_profile_dir); |
| 546 // Fallback to default off-the-record profile, if user profile has not fully |
| 547 // loaded yet. |
| 548 if (profile_info && !profile_info->created) |
| 549 default_profile_dir = profiles::GetDefaultProfileDir(user_data_dir); |
| 550 |
| 551 Profile* profile = GetProfile(default_profile_dir); |
| 552 // Some unit tests didn't initialize the UserManager. |
| 553 if (chromeos::UserManager::IsInitialized() && |
| 554 chromeos::UserManager::Get()->IsLoggedInAsGuest()) |
| 555 return profile->GetOffTheRecordProfile(); |
| 556 return profile; |
| 557 #else |
| 558 base::FilePath default_profile_dir(user_data_dir); |
| 559 default_profile_dir = default_profile_dir.Append(GetInitialProfileDir()); |
| 560 return GetProfile(default_profile_dir); |
| 561 #endif |
| 562 } |
| 563 |
| 575 bool ProfileManager::AddProfile(Profile* profile) { | 564 bool ProfileManager::AddProfile(Profile* profile) { |
| 576 DCHECK(profile); | 565 DCHECK(profile); |
| 577 | 566 |
| 578 // Make sure that we're not loading a profile with the same ID as a profile | 567 // Make sure that we're not loading a profile with the same ID as a profile |
| 579 // that's already loaded. | 568 // that's already loaded. |
| 580 if (GetProfileByPath(profile->GetPath())) { | 569 if (GetProfileByPath(profile->GetPath())) { |
| 581 NOTREACHED() << "Attempted to add profile with the same path (" << | 570 NOTREACHED() << "Attempted to add profile with the same path (" << |
| 582 profile->GetPath().value() << | 571 profile->GetPath().value() << |
| 583 ") as an already-loaded profile."; | 572 ") as an already-loaded profile."; |
| 584 return false; | 573 return false; |
| (...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1247 ProfileManager::ProfileInfo::ProfileInfo( | 1236 ProfileManager::ProfileInfo::ProfileInfo( |
| 1248 Profile* profile, | 1237 Profile* profile, |
| 1249 bool created) | 1238 bool created) |
| 1250 : profile(profile), | 1239 : profile(profile), |
| 1251 created(created) { | 1240 created(created) { |
| 1252 } | 1241 } |
| 1253 | 1242 |
| 1254 ProfileManager::ProfileInfo::~ProfileInfo() { | 1243 ProfileManager::ProfileInfo::~ProfileInfo() { |
| 1255 ProfileDestroyer::DestroyProfileWhenAppropriate(profile.release()); | 1244 ProfileDestroyer::DestroyProfileWhenAppropriate(profile.release()); |
| 1256 } | 1245 } |
| OLD | NEW |