Index: chrome/app/chrome_crash_reporter_client_win.cc |
diff --git a/chrome/app/chrome_crash_reporter_client_win.cc b/chrome/app/chrome_crash_reporter_client_win.cc |
index d782db4e692904ac4c227ad0371f374b25f8f05a..641c262d27f2dc436fda8bc12567d3ea018637b4 100644 |
--- a/chrome/app/chrome_crash_reporter_client_win.cc |
+++ b/chrome/app/chrome_crash_reporter_client_win.cc |
@@ -1,36 +1,28 @@ |
// Copyright 2013 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. |
- |
+// TODO(ananta/scottmg) |
+// Add test coverage for Crashpad. |
#include "chrome/app/chrome_crash_reporter_client_win.h" |
#include <windows.h> |
#include <memory> |
+#include <string> |
#include "base/command_line.h" |
-#include "base/environment.h" |
-#include "base/file_version_info.h" |
#include "base/files/file_path.h" |
#include "base/logging.h" |
#include "base/path_service.h" |
#include "base/strings/string_split.h" |
#include "base/strings/utf_string_conversions.h" |
-#include "base/win/registry.h" |
+#include "base/version.h" |
#include "build/build_config.h" |
-#include "chrome/common/chrome_paths.h" |
-#include "chrome/common/chrome_paths_internal.h" |
#include "chrome/common/chrome_result_codes.h" |
#include "chrome/common/crash_keys.h" |
#include "chrome/common/env_vars.h" |
-#include "chrome/common/metrics_constants_util_win.h" |
-#include "chrome/installer/util/google_chrome_sxs_distribution.h" |
-#include "chrome/installer/util/google_update_settings.h" |
-#include "chrome/installer/util/install_util.h" |
-#include "chrome/installer/util/util_constants.h" |
+#include "chrome/install_static/install_util.h" |
#include "content/public/common/content_switches.h" |
-#include "policy/policy_constants.h" |
- |
namespace { |
@@ -48,13 +40,12 @@ bool ChromeCrashReporterClient::GetAlternativeCrashDumpLocation( |
base::FilePath* crash_dir) { |
// By setting the BREAKPAD_DUMP_LOCATION environment variable, an alternate |
// location to write breakpad crash dumps can be set. |
- std::unique_ptr<base::Environment> env(base::Environment::Create()); |
- std::string alternate_crash_dump_location; |
- if (env->GetVar("BREAKPAD_DUMP_LOCATION", &alternate_crash_dump_location)) { |
+ std::string alternate_crash_dump_location = |
+ install_static::GetEnvironmentString("BREAKPAD_DUMP_LOCATION"); |
+ if (!alternate_crash_dump_location.empty()) { |
*crash_dir = base::FilePath::FromUTF8Unsafe(alternate_crash_dump_location); |
return true; |
} |
- |
return false; |
} |
@@ -69,39 +60,21 @@ void ChromeCrashReporterClient::GetProductNameAndVersion( |
DCHECK(special_build); |
DCHECK(channel_name); |
- std::unique_ptr<FileVersionInfo> version_info( |
- FileVersionInfo::CreateFileVersionInfo(exe_path)); |
- |
- if (version_info.get()) { |
- // Get the information from the file. |
- *version = version_info->product_version(); |
- if (!version_info->is_official_build()) |
- version->append(base::ASCIIToUTF16("-devel")); |
- |
- *product_name = version_info->product_short_name(); |
- *special_build = version_info->special_build(); |
- } else { |
- // No version info found. Make up the values. |
- *product_name = base::ASCIIToUTF16("Chrome"); |
- *version = base::ASCIIToUTF16("0.0.0.0-devel"); |
- } |
- |
- GoogleUpdateSettings::GetChromeChannelAndModifiers( |
- !GetIsPerUserInstall(exe_path), channel_name); |
+ install_static::GetExecutableVersionDetails( |
+ exe_path.value(), product_name, version, special_build, channel_name); |
} |
bool ChromeCrashReporterClient::ShouldShowRestartDialog(base::string16* title, |
base::string16* message, |
bool* is_rtl_locale) { |
- std::unique_ptr<base::Environment> env(base::Environment::Create()); |
- if (!env->HasVar(env_vars::kShowRestart) || |
- !env->HasVar(env_vars::kRestartInfo) || |
- env->HasVar(env_vars::kMetroConnected)) { |
+ if (!install_static::HasEnvironmentVariable(env_vars::kShowRestart) || |
+ !install_static::HasEnvironmentVariable(env_vars::kRestartInfo) || |
+ install_static::HasEnvironmentVariable(env_vars::kMetroConnected)) { |
return false; |
} |
- std::string restart_info; |
- env->GetVar(env_vars::kRestartInfo, &restart_info); |
+ std::string restart_info = |
+ install_static::GetEnvironmentString(env_vars::kRestartInfo); |
// The CHROME_RESTART var contains the dialog strings separated by '|'. |
// See ChromeBrowserMainPartsWin::PrepareRestartOnCrashEnviroment() |
@@ -119,41 +92,41 @@ bool ChromeCrashReporterClient::ShouldShowRestartDialog(base::string16* title, |
} |
bool ChromeCrashReporterClient::AboutToRestart() { |
- std::unique_ptr<base::Environment> env(base::Environment::Create()); |
- if (!env->HasVar(env_vars::kRestartInfo)) |
+ if (!install_static::HasEnvironmentVariable(env_vars::kRestartInfo)) |
return false; |
- env->SetVar(env_vars::kShowRestart, "1"); |
+ install_static::SetEnvironmentString(env_vars::kShowRestart, "1"); |
return true; |
} |
bool ChromeCrashReporterClient::GetDeferredUploadsSupported( |
bool is_per_user_install) { |
- Version update_version = GoogleUpdateSettings::GetGoogleUpdateVersion( |
- !is_per_user_install); |
+ std::string version_string = install_static::GetGoogleUpdateVersion(); |
+ Version update_version(version_string); |
if (!update_version.IsValid() || |
- update_version < base::Version(kMinUpdateVersion)) |
+ update_version < base::Version(kMinUpdateVersion)) { |
return false; |
- |
+ } |
return true; |
} |
bool ChromeCrashReporterClient::GetIsPerUserInstall( |
const base::FilePath& exe_path) { |
- return InstallUtil::IsPerUserInstall(exe_path); |
+ return !install_static::IsSystemInstall(exe_path.value().c_str()); |
} |
bool ChromeCrashReporterClient::GetShouldDumpLargerDumps( |
bool is_per_user_install) { |
- base::string16 channel_name = |
- GoogleUpdateSettings::GetChromeChannel(!is_per_user_install); |
- |
+ base::string16 channel_name; |
+ install_static::GetChromeChannelName(is_per_user_install, |
+ false, // !add_modifier |
+ &channel_name); |
// Capture more detail in crash dumps for Beta, Dev, Canary channels and |
// if channel is unknown (e.g. Chromium or developer builds). |
- return (channel_name == installer::kChromeChannelBeta || |
- channel_name == installer::kChromeChannelDev || |
- channel_name == GoogleChromeSxSDistribution::ChannelName() || |
- channel_name == installer::kChromeChannelUnknown); |
+ return (channel_name == install_static::kChromeChannelBeta || |
+ channel_name == install_static::kChromeChannelDev || |
+ channel_name == install_static::kChromeChannelCanary || |
+ channel_name == install_static::kChromeChannelUnknown); |
} |
int ChromeCrashReporterClient::GetResultCodeRespawnFailed() { |
@@ -162,29 +135,13 @@ int ChromeCrashReporterClient::GetResultCodeRespawnFailed() { |
bool ChromeCrashReporterClient::ReportingIsEnforcedByPolicy( |
bool* breakpad_enabled) { |
-// Determine whether configuration management allows loading the crash reporter. |
-// Since the configuration management infrastructure is not initialized at this |
-// point, we read the corresponding registry key directly. The return status |
-// indicates whether policy data was successfully read. If it is true, |
-// |breakpad_enabled| contains the value set by policy. |
- base::string16 key_name = |
- base::UTF8ToUTF16(policy::key::kMetricsReportingEnabled); |
- DWORD value = 0; |
- base::win::RegKey hklm_policy_key(HKEY_LOCAL_MACHINE, |
- policy::kRegistryChromePolicyKey, KEY_READ); |
- if (hklm_policy_key.ReadValueDW(key_name.c_str(), &value) == ERROR_SUCCESS) { |
- *breakpad_enabled = value != 0; |
- return true; |
- } |
- |
- base::win::RegKey hkcu_policy_key(HKEY_CURRENT_USER, |
- policy::kRegistryChromePolicyKey, KEY_READ); |
- if (hkcu_policy_key.ReadValueDW(key_name.c_str(), &value) == ERROR_SUCCESS) { |
- *breakpad_enabled = value != 0; |
- return true; |
- } |
- |
- return false; |
+ // Determine whether configuration management allows loading the crash |
+ // reporter. |
+ // Since the configuration management infrastructure is not initialized at |
+ // this point, we read the corresponding registry key directly. The return |
+ // status indicates whether policy data was successfully read. If it is true, |
+ // |breakpad_enabled| contains the value set by policy. |
+ return install_static::ReportingIsEnforcedByPolicy(breakpad_enabled); |
} |
@@ -192,23 +149,20 @@ bool ChromeCrashReporterClient::GetCrashDumpLocation( |
base::FilePath* crash_dir) { |
// By setting the BREAKPAD_DUMP_LOCATION environment variable, an alternate |
// location to write breakpad crash dumps can be set. |
- std::unique_ptr<base::Environment> env(base::Environment::Create()); |
- std::string alternate_crash_dump_location; |
- if (env->GetVar("BREAKPAD_DUMP_LOCATION", &alternate_crash_dump_location)) { |
- base::FilePath crash_dumps_dir_path = |
- base::FilePath::FromUTF8Unsafe(alternate_crash_dump_location); |
- |
- // If this environment variable exists, then for the time being, |
- // short-circuit how it's handled on Windows. Honoring this |
- // variable is required in order to symbolize stack traces in |
- // Telemetry based tests: http://crbug.com/561763. |
- *crash_dir = crash_dumps_dir_path; |
+ // If this environment variable exists, then for the time being, |
+ // short-circuit how it's handled on Windows. Honoring this |
+ // variable is required in order to symbolize stack traces in |
+ // Telemetry based tests: http://crbug.com/561763. |
+ if (GetAlternativeCrashDumpLocation(crash_dir)) |
return true; |
- } |
// TODO(scottmg): Consider supporting --user-data-dir. See |
// https://crbug.com/565446. |
- return chrome::GetDefaultCrashDumpLocation(crash_dir); |
+ base::string16 crash_dump_location; |
+ if (!install_static::GetDefaultCrashDumpLocation(&crash_dump_location)) |
+ return false; |
+ *crash_dir = base::FilePath(crash_dump_location); |
+ return true; |
} |
size_t ChromeCrashReporterClient::RegisterCrashKeys() { |
@@ -216,19 +170,11 @@ size_t ChromeCrashReporterClient::RegisterCrashKeys() { |
} |
bool ChromeCrashReporterClient::IsRunningUnattended() { |
- std::unique_ptr<base::Environment> env(base::Environment::Create()); |
- return env->HasVar(env_vars::kHeadless); |
+ return install_static::HasEnvironmentVariable(env_vars::kHeadless); |
} |
bool ChromeCrashReporterClient::GetCollectStatsConsent() { |
-#if defined(GOOGLE_CHROME_BUILD) |
- bool is_official_chrome_build = true; |
-#else |
- bool is_official_chrome_build = false; |
-#endif |
- |
- return is_official_chrome_build && |
- GoogleUpdateSettings::GetCollectStatsConsent(); |
+ return install_static::GetCollectStatsConsent(); |
} |
bool ChromeCrashReporterClient::EnableBreakpadForProcess( |