Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3485)

Unified Diff: chrome/install_static/install_util.cc

Issue 2797433002: Include Google Update integration details in crash keys and about:version. (Closed)
Patch Set: components/version_ui/OWNERS now own version_ui_strings.grdp Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/install_static/install_util.h ('k') | chrome/install_static/product_install_details.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/install_static/install_util.cc
diff --git a/chrome/install_static/install_util.cc b/chrome/install_static/install_util.cc
index 8125a511efeb4223fe2e020d978bc09cac3d6209..368692352ac108ab29ad493d8b324e85d8c9c793 100644
--- a/chrome/install_static/install_util.cc
+++ b/chrome/install_static/install_util.cc
@@ -10,6 +10,7 @@
#include <string.h>
#include <algorithm>
+#include <iterator>
#include <limits>
#include <memory>
#include <sstream>
@@ -58,6 +59,7 @@ constexpr wchar_t kChromeChannelStableExplicit[] = L"stable";
// These constants are defined in the chrome/installer directory as well. We
// need to unify them.
constexpr wchar_t kRegValueAp[] = L"ap";
+constexpr wchar_t kRegValueName[] = L"name";
constexpr wchar_t kRegValueUsageStats[] = L"usagestats";
constexpr wchar_t kMetricsReportingEnabled[] = L"MetricsReportingEnabled";
@@ -250,50 +252,39 @@ std::vector<StringType> TokenizeStringT(
return tokens;
}
+// Returns Chrome's update channel name based on the contents of the given "ap"
+// value from Chrome's ClientState key.
std::wstring ChannelFromAdditionalParameters(const InstallConstants& mode,
- bool system_level,
- bool from_binaries) {
+ const std::wstring& ap_value) {
assert(kUseGoogleUpdateIntegration);
- // InitChannelInfo in google_update_settings.cc only reports a failure when
- // Chrome's ClientState key exists but that the "ap" value therein cannot be
- // read due to some reason *other* than it not being present. This should be
- // exceedingly rare. For simplicity's sake, use an empty |value| in case of
- // any error whatsoever here.
- std::wstring value;
- nt::QueryRegValueSZ(system_level ? nt::HKLM : nt::HKCU, nt::WOW6432,
- from_binaries
- ? GetBinariesClientStateKeyPath().c_str()
- : GetClientStateKeyPath(mode.app_guid).c_str(),
- kRegValueAp, &value);
static constexpr wchar_t kChromeChannelBetaPattern[] = L"1?1-*";
static constexpr wchar_t kChromeChannelBetaX64Pattern[] = L"*x64-beta*";
static constexpr wchar_t kChromeChannelDevPattern[] = L"2?0-d*";
static constexpr wchar_t kChromeChannelDevX64Pattern[] = L"*x64-dev*";
- std::transform(value.begin(), value.end(), value.begin(), ::tolower);
+ std::wstring value;
+ value.reserve(ap_value.size());
+ std::transform(ap_value.begin(), ap_value.end(), std::back_inserter(value),
+ ::tolower);
// Empty channel names or those containing "stable" should be reported as
// an empty string.
- std::wstring channel_name;
if (value.empty() ||
(value.find(kChromeChannelStableExplicit) != std::wstring::npos)) {
- } else if (MatchPattern(value, kChromeChannelDevPattern) ||
- MatchPattern(value, kChromeChannelDevX64Pattern)) {
- channel_name.assign(kChromeChannelDev);
- } else if (MatchPattern(value, kChromeChannelBetaPattern) ||
- MatchPattern(value, kChromeChannelBetaX64Pattern)) {
- channel_name.assign(kChromeChannelBeta);
+ return std::wstring();
+ }
+ if (MatchPattern(value, kChromeChannelDevPattern) ||
+ MatchPattern(value, kChromeChannelDevX64Pattern)) {
+ return kChromeChannelDev;
+ }
+ if (MatchPattern(value, kChromeChannelBetaPattern) ||
+ MatchPattern(value, kChromeChannelBetaX64Pattern)) {
+ return kChromeChannelBeta;
}
// Else report values with garbage as stable since they will match the stable
- // rules in the update configs. ChannelInfo::GetChannelName painstakingly
- // strips off known modifiers (e.g., "-full") to see if the empty string
- // remains, returning channel "unknown" if not. This differs here in that some
- // clients will tag crashes as "stable" rather than "unknown" via this
- // codepath, but it is an accurate reflection of which update channel the
- // client is on according to the server-side rules.
-
- return channel_name;
+ // rules in the update configs.
+ return std::wstring();
}
} // namespace
@@ -795,16 +786,36 @@ bool RecursiveDirectoryCreate(const std::wstring& full_path) {
// InstallDetails instance since it is used to bootstrap InstallDetails.
std::wstring DetermineChannel(const InstallConstants& mode,
bool system_level,
- bool from_binaries) {
+ bool from_binaries,
+ std::wstring* update_ap,
+ std::wstring* update_cohort_name) {
if (!kUseGoogleUpdateIntegration)
return std::wstring();
+ // Read the "ap" value and cache it if requested.
+ std::wstring client_state(from_binaries
+ ? GetBinariesClientStateKeyPath()
+ : GetClientStateKeyPath(mode.app_guid));
+ std::wstring ap_value;
+ // An empty |ap_value| is used in case of error.
+ nt::QueryRegValueSZ(system_level ? nt::HKLM : nt::HKCU, nt::WOW6432,
+ client_state.c_str(), kRegValueAp, &ap_value);
+ if (update_ap)
+ *update_ap = ap_value;
+
+ // Cache the cohort name if requested.
+ if (update_cohort_name) {
+ nt::QueryRegValueSZ(system_level ? nt::HKLM : nt::HKCU, nt::WOW6432,
+ client_state.append(L"\\cohort").c_str(), kRegValueName,
+ update_cohort_name);
+ }
+
switch (mode.channel_strategy) {
case ChannelStrategy::UNSUPPORTED:
assert(false);
break;
case ChannelStrategy::ADDITIONAL_PARAMETERS:
- return ChannelFromAdditionalParameters(mode, system_level, from_binaries);
+ return ChannelFromAdditionalParameters(mode, ap_value);
case ChannelStrategy::FIXED:
return mode.default_channel_name;
}
« no previous file with comments | « chrome/install_static/install_util.h ('k') | chrome/install_static/product_install_details.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698