Index: chrome/app/chrome_main_delegate.cc |
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc |
index b33dec417a1fe9ab77c86e7868ff781748e5e2e8..fa18c095d455dafdbf7d322c0ef4ba35c9368343 100644 |
--- a/chrome/app/chrome_main_delegate.cc |
+++ b/chrome/app/chrome_main_delegate.cc |
@@ -41,6 +41,7 @@ |
#include "chrome/common/trace_event_args_whitelist.h" |
#include "chrome/common/url_constants.h" |
#include "chrome/gpu/chrome_content_gpu_client.h" |
+#include "chrome/install_static/install_details.h" |
#include "chrome/renderer/chrome_content_renderer_client.h" |
#include "chrome/utility/chrome_content_utility_client.h" |
#include "components/component_updater/component_updater_paths.h" |
@@ -359,8 +360,20 @@ struct MainFunction { |
}; |
// Initializes the user data dir. Must be called before InitializeLocalState(). |
-void InitializeUserDataDir() { |
- base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
+void InitializeUserDataDir(base::CommandLine* command_line) { |
+#if defined(OS_WIN) |
+ base::FilePath user_data_dir( |
+ install_static::InstallDetails::Get().user_data_dir()); |
+ std::wstring invalid_user_data_dir( |
+ install_static::InstallDetails::Get().invalid_user_data_dir()); |
+ if (!invalid_user_data_dir.empty()) { |
+ chrome::SetInvalidSpecifiedUserDataDir( |
+ base::FilePath(invalid_user_data_dir)); |
+ command_line->AppendSwitchPath(switches::kUserDataDir, user_data_dir); |
+ } |
+ CHECK(PathService::OverrideAndCreateIfNeeded(chrome::DIR_USER_DATA, |
+ user_data_dir, true, false)); |
+#else // OS_WIN |
base::FilePath user_data_dir = |
command_line->GetSwitchValuePath(switches::kUserDataDir); |
std::string process_type = |
@@ -378,15 +391,10 @@ void InitializeUserDataDir() { |
user_data_dir = base::FilePath::FromUTF8Unsafe(user_data_dir_string); |
} |
} |
-#endif |
-#if defined(OS_MACOSX) || defined(OS_WIN) |
+#endif // OS_LINUX |
+#if defined(OS_MACOSX) |
policy::path_parser::CheckUserDataDirPolicy(&user_data_dir); |
-#endif |
- |
- // On Windows, trailing separators leave Chrome in a bad state. |
- // See crbug.com/464616. |
- if (user_data_dir.EndsWithSeparator()) |
- user_data_dir = user_data_dir.StripTrailingSeparators(); |
+#endif // OS_MAC |
const bool specified_directory_was_invalid = !user_data_dir.empty() && |
!PathService::OverrideAndCreateIfNeeded(chrome::DIR_USER_DATA, |
@@ -419,6 +427,7 @@ void InitializeUserDataDir() { |
// child or service processes will attempt to use the invalid directory. |
if (specified_directory_was_invalid) |
command_line->AppendSwitchPath(switches::kUserDataDir, user_data_dir); |
+#endif // OS_WIN |
} |
#if !defined(OS_ANDROID) |
@@ -748,7 +757,7 @@ void ChromeMainDelegate::PreSandboxStartup() { |
// Initialize the user data dir for any process type that needs it. |
if (chrome::ProcessNeedsProfileDir(process_type)) { |
- InitializeUserDataDir(); |
+ InitializeUserDataDir(base::CommandLine::ForCurrentProcess()); |
#if defined(OS_WIN) && !defined(CHROME_MULTIPLE_DLL_CHILD) |
if (downgrade::IsMSIInstall()) { |
downgrade::MoveUserDataForFirstRunAfterDowngrade(); |