Index: chrome/install_static/user_data_dir.cc |
diff --git a/chrome/install_static/user_data_dir.cc b/chrome/install_static/user_data_dir.cc |
deleted file mode 100644 |
index b5f779d03cfec8ce1db9354d85020acaa10c3a5b..0000000000000000000000000000000000000000 |
--- a/chrome/install_static/user_data_dir.cc |
+++ /dev/null |
@@ -1,156 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/install_static/user_data_dir.h" |
- |
-#include <windows.h> |
-#include <assert.h> |
- |
-#include "chrome/install_static/install_details.h" |
-#include "chrome/install_static/install_util.h" |
-#include "chrome/install_static/policy_path_parser.h" |
-#include "chrome_elf/nt_registry/nt_registry.h" |
- |
-namespace install_static { |
- |
-namespace { |
- |
-std::wstring* g_user_data_dir; |
-std::wstring* g_invalid_user_data_dir; |
- |
-// Retrieves a registry policy for the user data directory from the registry, if |
-// one is set. If there's none set in either HKLM or HKCU, |user_data_dir| will |
-// be unmodified. |
-void GetUserDataDirFromRegistryPolicyIfSet(const InstallConstants& mode, |
- std::wstring* user_data_dir) { |
- assert(user_data_dir); |
- std::wstring policies_path = L"SOFTWARE\\Policies\\"; |
- AppendChromeInstallSubDirectory(mode, false /* !include_suffix */, |
- &policies_path); |
- |
- std::wstring value; |
- |
- constexpr wchar_t kUserDataDirRegistryKeyName[] = L"UserDataDir"; |
- |
- // First, try HKLM. |
- if (nt::QueryRegValueSZ(nt::HKLM, nt::NONE, policies_path.c_str(), |
- kUserDataDirRegistryKeyName, &value)) { |
- *user_data_dir = ExpandPathVariables(value); |
- return; |
- } |
- |
- // Second, try HKCU. |
- if (nt::QueryRegValueSZ(nt::HKCU, nt::NONE, policies_path.c_str(), |
- kUserDataDirRegistryKeyName, &value)) { |
- *user_data_dir = ExpandPathVariables(value); |
- return; |
- } |
-} |
- |
-std::wstring MakeAbsoluteFilePath(const std::wstring& input) { |
- wchar_t file_path[MAX_PATH]; |
- if (!_wfullpath(file_path, input.c_str(), _countof(file_path))) |
- return std::wstring(); |
- return file_path; |
-} |
- |
-// The same as GetUserDataDirectory(), but directly queries the global command |
-// line object for the --user-data-dir flag. This is the more commonly used |
-// function, where GetUserDataDirectory() is used primiarily for testing. |
-bool GetUserDataDirectoryUsingProcessCommandLine( |
- const InstallConstants& mode, |
- std::wstring* result, |
- std::wstring* invalid_supplied_directory) { |
- return GetUserDataDirectoryImpl( |
- GetSwitchValueFromCommandLine(::GetCommandLine(), kUserDataDirSwitch), |
- mode, result, invalid_supplied_directory); |
-} |
- |
-// Populates |result| with the default User Data directory for the current |
-// user. Returns false if all attempts at locating a User Data directory fail. |
-// TODO(ananta) |
-// http://crbug.com/604923 |
-// Unify this with the Browser Distribution code. |
-bool GetDefaultUserDataDirectory(const InstallConstants& mode, |
- std::wstring* result) { |
- // This environment variable should be set on Windows Vista and later |
- // (https://msdn.microsoft.com/library/windows/desktop/dd378457.aspx). |
- std::wstring user_data_dir = GetEnvironmentString16(L"LOCALAPPDATA"); |
- |
- if (user_data_dir.empty()) { |
- // LOCALAPPDATA was not set; fallback to the temporary files path. |
- DWORD size = ::GetTempPath(0, nullptr); |
- if (!size) |
- return false; |
- user_data_dir.resize(size + 1); |
- size = ::GetTempPath(size + 1, &user_data_dir[0]); |
- if (!size || size >= user_data_dir.size()) |
- return false; |
- user_data_dir.resize(size); |
- } |
- |
- result->swap(user_data_dir); |
- if ((*result)[result->length() - 1] != L'\\') |
- result->push_back(L'\\'); |
- AppendChromeInstallSubDirectory(mode, true /* include_suffix */, result); |
- result->push_back(L'\\'); |
- result->append(L"User Data"); |
- return true; |
-} |
- |
-} // namespace |
- |
-bool GetUserDataDirectoryImpl( |
- const std::wstring& user_data_dir_from_command_line, |
- const InstallConstants& mode, |
- std::wstring* result, |
- std::wstring* invalid_supplied_directory) { |
- std::wstring user_data_dir = user_data_dir_from_command_line; |
- |
- GetUserDataDirFromRegistryPolicyIfSet(mode, &user_data_dir); |
- |
- // On Windows, trailing separators leave Chrome in a bad state. See |
- // crbug.com/464616. |
- while (!user_data_dir.empty() && |
- (user_data_dir.back() == '\\' || user_data_dir.back() == '/')) { |
- user_data_dir.pop_back(); |
- } |
- |
- bool got_valid_directory = |
- !user_data_dir.empty() && RecursiveDirectoryCreate(user_data_dir); |
- if (!got_valid_directory) { |
- *invalid_supplied_directory = user_data_dir; |
- got_valid_directory = GetDefaultUserDataDirectory(mode, &user_data_dir); |
- } |
- |
- // The Chrome implementation CHECKs() here in the browser process. We |
- // don't as this function is used to initialize crash reporting, so |
- // we would get no report of this failure. |
- assert(got_valid_directory); |
- if (!got_valid_directory) |
- return false; |
- |
- *result = MakeAbsoluteFilePath(user_data_dir); |
- return true; |
-} |
- |
-bool GetUserDataDirectory(std::wstring* user_data_dir, |
- std::wstring* invalid_user_data_dir) { |
- if (!g_user_data_dir) { |
- g_user_data_dir = new std::wstring(); |
- g_invalid_user_data_dir = new std::wstring(); |
- if (!GetUserDataDirectoryUsingProcessCommandLine( |
- InstallDetails::Get().mode(), g_user_data_dir, |
- g_invalid_user_data_dir)) { |
- return false; |
- } |
- assert(!g_user_data_dir->empty()); |
- } |
- *user_data_dir = *g_user_data_dir; |
- if (invalid_user_data_dir) |
- *invalid_user_data_dir = *g_invalid_user_data_dir; |
- return true; |
-} |
- |
-} // namespace install_static |