| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/installer/setup/installer_crash_reporting.h" | 5 #include "chrome/installer/setup/installer_crash_reporting.h" |
| 6 | 6 |
| 7 #include <iterator> | 7 #include <iterator> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/debug/crash_logging.h" | 12 #include "base/debug/crash_logging.h" |
| 13 #include "base/debug/leak_annotations.h" | 13 #include "base/debug/leak_annotations.h" |
| 14 #include "base/logging.h" | 14 #include "base/logging.h" |
| 15 #include "base/path_service.h" | 15 #include "base/path_service.h" |
| 16 #include "base/strings/string16.h" | 16 #include "base/strings/string16.h" |
| 17 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
| 18 #include "base/version.h" | 18 #include "base/version.h" |
| 19 #include "base/win/registry.h" | 19 #include "base/win/registry.h" |
| 20 #include "chrome/common/chrome_paths.h" | 20 #include "chrome/common/chrome_paths.h" |
| 21 #include "chrome/install_static/install_details.h" |
| 21 #include "chrome/installer/setup/installer_crash_reporter_client.h" | 22 #include "chrome/installer/setup/installer_crash_reporter_client.h" |
| 22 #include "chrome/installer/setup/installer_state.h" | 23 #include "chrome/installer/setup/installer_state.h" |
| 23 #include "chrome/installer/util/google_update_settings.h" | 24 #include "chrome/installer/util/google_update_settings.h" |
| 24 #include "components/crash/content/app/crash_keys_win.h" | 25 #include "components/crash/content/app/crash_keys_win.h" |
| 25 #include "components/crash/content/app/crashpad.h" | 26 #include "components/crash/content/app/crashpad.h" |
| 26 #include "components/crash/core/common/crash_keys.h" | 27 #include "components/crash/core/common/crash_keys.h" |
| 27 | 28 |
| 28 namespace installer { | 29 namespace installer { |
| 29 | 30 |
| 30 namespace { | 31 namespace { |
| 31 | 32 |
| 32 // Crash Keys | 33 // Crash Keys |
| 33 | 34 |
| 35 const char kApValue[] = "ap"; |
| 36 const char kCohortName[] = "cohort-name"; |
| 34 const char kCurrentVersion[] = "current-version"; | 37 const char kCurrentVersion[] = "current-version"; |
| 35 const char kIsSystemLevel[] = "system-level"; | 38 const char kIsSystemLevel[] = "system-level"; |
| 36 const char kOperation[] = "operation"; | 39 const char kOperation[] = "operation"; |
| 37 const char kStateKey[] = "state-key"; | 40 const char kStateKey[] = "state-key"; |
| 38 | 41 |
| 39 const char *OperationToString(InstallerState::Operation operation) { | 42 const char *OperationToString(InstallerState::Operation operation) { |
| 40 switch (operation) { | 43 switch (operation) { |
| 41 case InstallerState::SINGLE_INSTALL_OR_UPDATE: | 44 case InstallerState::SINGLE_INSTALL_OR_UPDATE: |
| 42 return "single-install-or-update"; | 45 return "single-install-or-update"; |
| 43 case InstallerState::UNINSTALL: | 46 case InstallerState::UNINSTALL: |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 "Chrome Installer"); | 97 "Chrome Installer"); |
| 95 | 98 |
| 96 // Set up the metrics client id (a la child_process_logging::Init()). | 99 // Set up the metrics client id (a la child_process_logging::Init()). |
| 97 std::unique_ptr<metrics::ClientInfo> client_info = | 100 std::unique_ptr<metrics::ClientInfo> client_info = |
| 98 GoogleUpdateSettings::LoadMetricsClientInfo(); | 101 GoogleUpdateSettings::LoadMetricsClientInfo(); |
| 99 if (client_info) | 102 if (client_info) |
| 100 crash_keys::SetMetricsClientIdFromGUID(client_info->client_id); | 103 crash_keys::SetMetricsClientIdFromGUID(client_info->client_id); |
| 101 } | 104 } |
| 102 | 105 |
| 103 size_t RegisterCrashKeys() { | 106 size_t RegisterCrashKeys() { |
| 104 const base::debug::CrashKey kFixedKeys[] = { | 107 static constexpr base::debug::CrashKey kFixedKeys[] = { |
| 105 { crash_keys::kMetricsClientId, crash_keys::kSmallSize }, | 108 {crash_keys::kMetricsClientId, crash_keys::kSmallSize}, |
| 106 { kCurrentVersion, crash_keys::kSmallSize }, | 109 {kApValue, crash_keys::kSmallSize}, |
| 107 { kIsSystemLevel, crash_keys::kSmallSize }, | 110 {kCohortName, crash_keys::kSmallSize}, |
| 108 { kOperation, crash_keys::kSmallSize }, | 111 {kCurrentVersion, crash_keys::kSmallSize}, |
| 112 {kIsSystemLevel, crash_keys::kSmallSize}, |
| 113 {kOperation, crash_keys::kSmallSize}, |
| 109 | 114 |
| 110 // This is a Windows registry key, which maxes out at 255 chars. | 115 // This is a Windows registry key, which maxes out at 255 chars. |
| 111 // (kMediumSize actually maxes out at 252 chars on Windows, but potentially | 116 // (kMediumSize actually maxes out at 252 chars on Windows, but |
| 112 // truncating such a small amount is a fair tradeoff compared to using | 117 // potentially truncating such a small amount is a fair tradeoff compared |
| 113 // kLargeSize, which is wasteful.) | 118 // to using kLargeSize, which is wasteful.) |
| 114 { kStateKey, crash_keys::kMediumSize }, | 119 {kStateKey, crash_keys::kMediumSize}, |
| 115 }; | 120 }; |
| 116 std::vector<base::debug::CrashKey> keys(std::begin(kFixedKeys), | 121 std::vector<base::debug::CrashKey> keys(std::begin(kFixedKeys), |
| 117 std::end(kFixedKeys)); | 122 std::end(kFixedKeys)); |
| 118 crash_keys::GetCrashKeysForCommandLineSwitches(&keys); | 123 crash_keys::GetCrashKeysForCommandLineSwitches(&keys); |
| 119 return base::debug::InitCrashKeys(keys.data(), keys.size(), | 124 return base::debug::InitCrashKeys(keys.data(), keys.size(), |
| 120 crash_keys::kChunkMaxLength); | 125 crash_keys::kChunkMaxLength); |
| 121 } | 126 } |
| 122 | 127 |
| 123 void SetInitialCrashKeys(const InstallerState& state) { | 128 void SetInitialCrashKeys(const InstallerState& state) { |
| 124 using base::debug::SetCrashKeyValue; | 129 using base::debug::SetCrashKeyValue; |
| 125 | 130 |
| 126 SetCrashKeyValue(kOperation, OperationToString(state.operation())); | 131 SetCrashKeyValue(kOperation, OperationToString(state.operation())); |
| 127 SetCrashKeyValue(kIsSystemLevel, state.system_install() ? "true" : "false"); | 132 SetCrashKeyValue(kIsSystemLevel, state.system_install() ? "true" : "false"); |
| 128 | 133 |
| 129 const base::string16 state_key = state.state_key(); | 134 const base::string16 state_key = state.state_key(); |
| 130 if (!state_key.empty()) | 135 if (!state_key.empty()) |
| 131 SetCrashKeyValue(kStateKey, base::UTF16ToUTF8(state_key)); | 136 SetCrashKeyValue(kStateKey, base::UTF16ToUTF8(state_key)); |
| 137 |
| 138 // Set crash keys containing the registry values used to determine Chrome's |
| 139 // update channel at process startup; see https://crbug.com/579504. |
| 140 const auto& details = install_static::InstallDetails::Get(); |
| 141 base::debug::SetCrashKeyValue(kApValue, |
| 142 base::UTF16ToUTF8(details.update_ap())); |
| 143 base::debug::SetCrashKeyValue( |
| 144 kCohortName, base::UTF16ToUTF8(details.update_cohort_name())); |
| 132 } | 145 } |
| 133 | 146 |
| 134 void SetCrashKeysFromCommandLine(const base::CommandLine& command_line) { | 147 void SetCrashKeysFromCommandLine(const base::CommandLine& command_line) { |
| 135 crash_keys::SetSwitchesFromCommandLine(command_line, nullptr); | 148 crash_keys::SetSwitchesFromCommandLine(command_line, nullptr); |
| 136 } | 149 } |
| 137 | 150 |
| 138 void SetCurrentVersionCrashKey(const base::Version* current_version) { | 151 void SetCurrentVersionCrashKey(const base::Version* current_version) { |
| 139 if (current_version) { | 152 if (current_version) { |
| 140 base::debug::SetCrashKeyValue(kCurrentVersion, | 153 base::debug::SetCrashKeyValue(kCurrentVersion, |
| 141 current_version->GetString()); | 154 current_version->GetString()); |
| 142 } else { | 155 } else { |
| 143 base::debug::ClearCrashKey(kCurrentVersion); | 156 base::debug::ClearCrashKey(kCurrentVersion); |
| 144 } | 157 } |
| 145 } | 158 } |
| 146 | 159 |
| 147 } // namespace installer | 160 } // namespace installer |
| OLD | NEW |