Index: chrome_elf/chrome_elf_util.cc |
diff --git a/chrome_elf/chrome_elf_util.cc b/chrome_elf/chrome_elf_util.cc |
deleted file mode 100644 |
index a3fd727e9d2ebdf54d795bf3bd3b76e0d97bca86..0000000000000000000000000000000000000000 |
--- a/chrome_elf/chrome_elf_util.cc |
+++ /dev/null |
@@ -1,224 +0,0 @@ |
-// Copyright 2014 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_elf/chrome_elf_util.h" |
- |
-#include <assert.h> |
-#include <windows.h> |
-#include <stddef.h> |
- |
-#include "base/macros.h" |
-#include "base/strings/string16.h" |
- |
-ProcessType g_process_type = ProcessType::UNINITIALIZED; |
- |
-namespace { |
- |
-const wchar_t kRegPathClientState[] = L"Software\\Google\\Update\\ClientState"; |
-const wchar_t kRegPathClientStateMedium[] = |
- L"Software\\Google\\Update\\ClientStateMedium"; |
-#if defined(GOOGLE_CHROME_BUILD) |
-const wchar_t kRegPathChromePolicy[] = L"SOFTWARE\\Policies\\Google\\Chrome"; |
-#else |
-const wchar_t kRegPathChromePolicy[] = L"SOFTWARE\\Policies\\Chromium"; |
-#endif // defined(GOOGLE_CHROME_BUILD) |
- |
-const wchar_t kRegValueUsageStats[] = L"usagestats"; |
-const wchar_t kUninstallArgumentsField[] = L"UninstallArguments"; |
-const wchar_t kMetricsReportingEnabled[] =L"MetricsReportingEnabled"; |
- |
-const wchar_t kAppGuidCanary[] = |
- L"{4ea16ac7-fd5a-47c3-875b-dbf4a2008c20}"; |
-const wchar_t kAppGuidGoogleChrome[] = |
- L"{8A69D345-D564-463c-AFF1-A69D9E530F96}"; |
-const wchar_t kAppGuidGoogleBinaries[] = |
- L"{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}"; |
- |
-bool ReadKeyValueString(bool system_install, const wchar_t* key_path, |
- const wchar_t* guid, const wchar_t* value_to_read, |
- base::string16* value_out) { |
- HKEY key = NULL; |
- value_out->clear(); |
- |
- base::string16 full_key_path(key_path); |
- full_key_path.append(1, L'\\'); |
- full_key_path.append(guid); |
- |
- if (::RegOpenKeyEx(system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER, |
- full_key_path.c_str(), 0, |
- KEY_QUERY_VALUE | KEY_WOW64_32KEY, &key) != |
- ERROR_SUCCESS) { |
- return false; |
- } |
- |
- const size_t kMaxStringLength = 1024; |
- wchar_t raw_value[kMaxStringLength] = {}; |
- DWORD size = sizeof(raw_value); |
- DWORD type = REG_SZ; |
- LONG result = ::RegQueryValueEx(key, value_to_read, 0, &type, |
- reinterpret_cast<LPBYTE>(raw_value), &size); |
- |
- if (result == ERROR_SUCCESS) { |
- if (type != REG_SZ || (size & 1) != 0) { |
- result = ERROR_NOT_SUPPORTED; |
- } else if (size == 0) { |
- *raw_value = L'\0'; |
- } else if (raw_value[size / sizeof(wchar_t) - 1] != L'\0') { |
- if ((size / sizeof(wchar_t)) < kMaxStringLength) |
- raw_value[size / sizeof(wchar_t)] = L'\0'; |
- else |
- result = ERROR_MORE_DATA; |
- } |
- } |
- |
- if (result == ERROR_SUCCESS) |
- *value_out = raw_value; |
- |
- ::RegCloseKey(key); |
- |
- return result == ERROR_SUCCESS; |
-} |
- |
-bool ReadKeyValueDW(bool system_install, const wchar_t* key_path, |
- base::string16 guid, const wchar_t* value_to_read, |
- DWORD* value_out) { |
- HKEY key = NULL; |
- *value_out = 0; |
- |
- base::string16 full_key_path(key_path); |
- full_key_path.append(1, L'\\'); |
- full_key_path.append(guid); |
- |
- if (::RegOpenKeyEx(system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER, |
- full_key_path.c_str(), 0, |
- KEY_QUERY_VALUE | KEY_WOW64_32KEY, &key) != |
- ERROR_SUCCESS) { |
- return false; |
- } |
- |
- DWORD size = sizeof(*value_out); |
- DWORD type = REG_DWORD; |
- LONG result = ::RegQueryValueEx(key, value_to_read, 0, &type, |
- reinterpret_cast<BYTE*>(value_out), &size); |
- |
- ::RegCloseKey(key); |
- |
- return result == ERROR_SUCCESS && size == sizeof(*value_out); |
-} |
- |
-} // namespace |
- |
-bool IsCanary(const wchar_t* exe_path) { |
- return wcsstr(exe_path, L"Chrome SxS\\Application") != NULL; |
-} |
- |
-bool IsSystemInstall(const wchar_t* exe_path) { |
- wchar_t program_dir[MAX_PATH] = {}; |
- DWORD ret = ::GetEnvironmentVariable(L"PROGRAMFILES", program_dir, |
- arraysize(program_dir)); |
- if (ret && ret < MAX_PATH && !wcsncmp(exe_path, program_dir, ret)) |
- return true; |
- |
- ret = ::GetEnvironmentVariable(L"PROGRAMFILES(X86)", program_dir, |
- arraysize(program_dir)); |
- if (ret && ret < MAX_PATH && !wcsncmp(exe_path, program_dir, ret)) |
- return true; |
- |
- return false; |
-} |
- |
-bool IsMultiInstall(bool is_system_install) { |
- base::string16 args; |
- if (!ReadKeyValueString(is_system_install, kRegPathClientState, |
- kAppGuidGoogleChrome, kUninstallArgumentsField, |
- &args)) { |
- return false; |
- } |
- return args.find(L"--multi-install") != base::string16::npos; |
-} |
- |
-bool AreUsageStatsEnabled(const wchar_t* exe_path) { |
- bool enabled = true; |
- bool controlled_by_policy = ReportingIsEnforcedByPolicy(&enabled); |
- |
- if (controlled_by_policy && !enabled) |
- return false; |
- |
- bool system_install = IsSystemInstall(exe_path); |
- base::string16 app_guid; |
- |
- if (IsCanary(exe_path)) { |
- app_guid = kAppGuidCanary; |
- } else { |
- app_guid = IsMultiInstall(system_install) ? kAppGuidGoogleBinaries : |
- kAppGuidGoogleChrome; |
- } |
- |
- DWORD out_value = 0; |
- if (system_install && |
- ReadKeyValueDW(system_install, kRegPathClientStateMedium, app_guid, |
- kRegValueUsageStats, &out_value)) { |
- return out_value == 1; |
- } |
- |
- return ReadKeyValueDW(system_install, kRegPathClientState, app_guid, |
- kRegValueUsageStats, &out_value) && out_value == 1; |
-} |
- |
-bool ReportingIsEnforcedByPolicy(bool* breakpad_enabled) { |
- HKEY key = NULL; |
- DWORD value = 0; |
- BYTE* value_bytes = reinterpret_cast<BYTE*>(&value); |
- DWORD size = sizeof(value); |
- DWORD type = REG_DWORD; |
- |
- if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, kRegPathChromePolicy, 0, |
- KEY_QUERY_VALUE, &key) == ERROR_SUCCESS) { |
- if (::RegQueryValueEx(key, kMetricsReportingEnabled, 0, &type, |
- value_bytes, &size) == ERROR_SUCCESS) { |
- *breakpad_enabled = value != 0; |
- } |
- ::RegCloseKey(key); |
- return size == sizeof(value); |
- } |
- |
- if (::RegOpenKeyEx(HKEY_CURRENT_USER, kRegPathChromePolicy, 0, |
- KEY_QUERY_VALUE, &key) == ERROR_SUCCESS) { |
- if (::RegQueryValueEx(key, kMetricsReportingEnabled, 0, &type, |
- value_bytes, &size) == ERROR_SUCCESS) { |
- *breakpad_enabled = value != 0; |
- } |
- ::RegCloseKey(key); |
- return size == sizeof(value); |
- } |
- |
- return false; |
-} |
- |
-void InitializeProcessType() { |
- assert(g_process_type == ProcessType::UNINITIALIZED); |
- typedef bool (*IsSandboxedProcessFunc)(); |
- IsSandboxedProcessFunc is_sandboxed_process_func = |
- reinterpret_cast<IsSandboxedProcessFunc>( |
- GetProcAddress(GetModuleHandle(NULL), "IsSandboxedProcess")); |
- if (is_sandboxed_process_func && is_sandboxed_process_func()) { |
- g_process_type = ProcessType::NON_BROWSER_PROCESS; |
- return; |
- } |
- |
- // TODO(robertshield): Drop the command line check when we drop support for |
- // enabling chrome_elf in unsandboxed processes. |
- const wchar_t* command_line = GetCommandLine(); |
- if (command_line && wcsstr(command_line, L"--type")) { |
- g_process_type = ProcessType::NON_BROWSER_PROCESS; |
- return; |
- } |
- |
- g_process_type = ProcessType::BROWSER_PROCESS; |
-} |
- |
-bool IsNonBrowserProcess() { |
- assert(g_process_type != ProcessType::UNINITIALIZED); |
- return g_process_type == ProcessType::NON_BROWSER_PROCESS; |
-} |