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..7ed58dc750143062bc6aba1d684568f5899d56c1 100644 |
--- a/chrome/install_static/install_util.cc |
+++ b/chrome/install_static/install_util.cc |
@@ -58,6 +58,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,9 +251,13 @@ std::vector<StringType> TokenizeStringT( |
return tokens; |
} |
+// Returns Chrome's update channel name based on the contents of the "ap" value |
+// found in Chrome's ClientState key. |update_ap|, if not null, is set to the |
+// raw value read from the registry. |
std::wstring ChannelFromAdditionalParameters(const InstallConstants& mode, |
bool system_level, |
- bool from_binaries) { |
+ bool from_binaries, |
+ std::wstring* update_ap) { |
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 |
@@ -265,6 +270,8 @@ std::wstring ChannelFromAdditionalParameters(const InstallConstants& mode, |
? GetBinariesClientStateKeyPath().c_str() |
: GetClientStateKeyPath(mode.app_guid).c_str(), |
kRegValueAp, &value); |
+ if (update_ap) |
+ *update_ap = value; |
static constexpr wchar_t kChromeChannelBetaPattern[] = L"1?1-*"; |
static constexpr wchar_t kChromeChannelBetaX64Pattern[] = L"*x64-beta*"; |
@@ -795,16 +802,28 @@ 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(); |
+ if (update_cohort_name) { |
+ // Cache the cohort name. |
+ std::wstring path(from_binaries ? GetBinariesClientStateKeyPath() |
+ : GetClientStateKeyPath(mode.app_guid)); |
+ path.append(L"\\cohort"); |
+ nt::QueryRegValueSZ(system_level ? nt::HKLM : nt::HKCU, nt::WOW6432, |
+ path.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, system_level, from_binaries, |
+ update_ap); |
case ChannelStrategy::FIXED: |
return mode.default_channel_name; |
} |