| Index: chrome/browser/profile_manager.cc | 
| diff --git a/chrome/browser/profile_manager.cc b/chrome/browser/profile_manager.cc | 
| index 4e590660ec035e892e795cf2d2449ae1cee1e241..a82a847569c4304dd13fe0bc9c7adc7b5887bf1a 100644 | 
| --- a/chrome/browser/profile_manager.cc | 
| +++ b/chrome/browser/profile_manager.cc | 
| @@ -31,6 +31,11 @@ | 
| #include "net/url_request/url_request_job.h" | 
| #include "net/url_request/url_request_job_tracker.h" | 
|  | 
| +#if defined(OS_CHROMEOS) | 
| +#include "chrome/browser/chromeos/cros/cros_library.h" | 
| +#include "chrome/browser/chromeos/cros/cryptohome_library.h" | 
| +#endif | 
| + | 
| // static | 
| void ProfileManager::ShutdownSessionServices() { | 
| ProfileManager* pm = g_browser_process->profile_manager(); | 
| @@ -39,12 +44,11 @@ void ProfileManager::ShutdownSessionServices() { | 
| } | 
|  | 
| // static | 
| -Profile* ProfileManager::GetLoginWizardProfile() { | 
| +Profile* ProfileManager::GetDefaultProfile() { | 
| FilePath user_data_dir; | 
| PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); | 
| ProfileManager* profile_manager = g_browser_process->profile_manager(); | 
| -  return profile_manager->GetDefaultProfile( | 
| -      user_data_dir)->GetOffTheRecordProfile(); | 
| +  return profile_manager->GetDefaultProfile(user_data_dir); | 
| } | 
|  | 
| ProfileManager::ProfileManager() : logged_in_(false) { | 
| @@ -91,22 +95,45 @@ FilePath ProfileManager::GetProfilePrefsPath( | 
|  | 
| Profile* ProfileManager::GetDefaultProfile(const FilePath& user_data_dir) { | 
| FilePath default_profile_dir(user_data_dir); | 
| -  std::wstring profile = chrome::kNotSignedInProfile; | 
| #if defined(OS_CHROMEOS) | 
| -  // If the user has logged in, pick up the new profile. | 
| const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 
| -  // TODO(davemoore) Delete this once chromium os has started using | 
| -  // "--login-profile" instead of "--profile". | 
| -  if (logged_in_ && command_line.HasSwitch(switches::kProfile)) { | 
| -    profile = command_line.GetSwitchValue(switches::kProfile); | 
| -  } | 
| -  if (logged_in_ && command_line.HasSwitch(switches::kLoginProfile)) { | 
| -    profile = command_line.GetSwitchValue(switches::kLoginProfile); | 
| +  if (logged_in_) { | 
| +    std::wstring profile_dir; | 
| +    // If the user has logged in, pick up the new profile. | 
| +    // TODO(davemoore) Delete this once chromium os has started using | 
| +    // "--login-profile" instead of "--profile". | 
| +    if (command_line.HasSwitch(switches::kLoginProfile)) { | 
| +      profile_dir = command_line.GetSwitchValue(switches::kLoginProfile); | 
| +    } else if (command_line.HasSwitch(switches::kProfile)) { | 
| +      profile_dir = command_line.GetSwitchValue(switches::kProfile); | 
| +    } else { | 
| +      // We should never be logged in with no profile dir. | 
| +      NOTREACHED(); | 
| +      return NULL; | 
| +    } | 
| +    default_profile_dir = default_profile_dir.Append( | 
| +        FilePath::FromWStringHack(profile_dir)); | 
| +    return GetProfile(default_profile_dir); | 
| +  } else { | 
| +    // If not logged in on cros, always return the incognito profile | 
| +    default_profile_dir = default_profile_dir.Append( | 
| +        FilePath::FromWStringHack(chrome::kNotSignedInProfile)); | 
| +    Profile*profile = GetProfile(default_profile_dir); | 
| + | 
| +    // For cros, return the OTR profile so we never accidentally keep | 
| +    // user data in an unencrypted profile. But doing this makes | 
| +    // many of the browser and ui tests fail. | 
| +    // TODO(davemoore) Fix the tests. | 
| +    if (!command_line.HasSwitch(switches::kTestType)) | 
| +      profile = profile->GetOffTheRecordProfile(); | 
| + | 
| +    return profile; | 
| } | 
| -#endif | 
| +#else | 
| default_profile_dir = default_profile_dir.Append( | 
| -      FilePath::FromWStringHack(profile)); | 
| +      FilePath::FromWStringHack(chrome::kNotSignedInProfile)); | 
| return GetProfile(default_profile_dir); | 
| +#endif | 
| } | 
|  | 
| Profile* ProfileManager::GetProfile(const FilePath& profile_dir) { | 
| @@ -200,6 +227,12 @@ void ProfileManager::Observe( | 
| const NotificationDetails& details) { | 
| #if defined(OS_CHROMEOS) | 
| if (type == NotificationType::LOGIN_USER_CHANGED) { | 
| +    CHECK(chromeos::CrosLibrary::EnsureLoaded()); | 
| +    // If we don't have a mounted profile directory we're in trouble. | 
| +    // TODO(davemoore) Once we have better api this check should ensure that | 
| +    // our profile directory is the one that's mounted, and that it's mounted | 
| +    // as the current user. | 
| +    CHECK(chromeos::CryptohomeLibrary::Get()->IsMounted()); | 
| logged_in_ = true; | 
| } | 
| #endif | 
|  |