| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/install_static/install_util.h" | 5 #include "chrome/install_static/install_util.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 #include <assert.h> | 8 #include <assert.h> |
| 9 #include <stdlib.h> | 9 #include <stdlib.h> |
| 10 #include <string.h> | 10 #include <string.h> |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 // Chrome channel display names. | 51 // Chrome channel display names. |
| 52 constexpr wchar_t kChromeChannelDev[] = L"dev"; | 52 constexpr wchar_t kChromeChannelDev[] = L"dev"; |
| 53 constexpr wchar_t kChromeChannelBeta[] = L"beta"; | 53 constexpr wchar_t kChromeChannelBeta[] = L"beta"; |
| 54 constexpr wchar_t kChromeChannelStableExplicit[] = L"stable"; | 54 constexpr wchar_t kChromeChannelStableExplicit[] = L"stable"; |
| 55 | 55 |
| 56 // TODO(ananta) | 56 // TODO(ananta) |
| 57 // http://crbug.com/604923 | 57 // http://crbug.com/604923 |
| 58 // These constants are defined in the chrome/installer directory as well. We | 58 // These constants are defined in the chrome/installer directory as well. We |
| 59 // need to unify them. | 59 // need to unify them. |
| 60 constexpr wchar_t kRegValueAp[] = L"ap"; | 60 constexpr wchar_t kRegValueAp[] = L"ap"; |
| 61 constexpr wchar_t kRegValueName[] = L"name"; |
| 61 constexpr wchar_t kRegValueUsageStats[] = L"usagestats"; | 62 constexpr wchar_t kRegValueUsageStats[] = L"usagestats"; |
| 62 constexpr wchar_t kMetricsReportingEnabled[] = L"MetricsReportingEnabled"; | 63 constexpr wchar_t kMetricsReportingEnabled[] = L"MetricsReportingEnabled"; |
| 63 | 64 |
| 64 void Trace(const wchar_t* format_string, ...) { | 65 void Trace(const wchar_t* format_string, ...) { |
| 65 static const int kMaxLogBufferSize = 1024; | 66 static const int kMaxLogBufferSize = 1024; |
| 66 static wchar_t buffer[kMaxLogBufferSize] = {}; | 67 static wchar_t buffer[kMaxLogBufferSize] = {}; |
| 67 | 68 |
| 68 va_list args = {}; | 69 va_list args = {}; |
| 69 | 70 |
| 70 va_start(args, format_string); | 71 va_start(args, format_string); |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 std::vector<StringType> tokens; | 244 std::vector<StringType> tokens; |
| 244 std::basic_istringstream<typename StringType::value_type> buffer(str); | 245 std::basic_istringstream<typename StringType::value_type> buffer(str); |
| 245 for (StringType token; std::getline(buffer, token, delimiter);) { | 246 for (StringType token; std::getline(buffer, token, delimiter);) { |
| 246 if (trim_spaces) | 247 if (trim_spaces) |
| 247 TrimT<StringType>(&token); | 248 TrimT<StringType>(&token); |
| 248 tokens.push_back(token); | 249 tokens.push_back(token); |
| 249 } | 250 } |
| 250 return tokens; | 251 return tokens; |
| 251 } | 252 } |
| 252 | 253 |
| 254 // Returns Chrome's update channel name based on the contents of the "ap" value |
| 255 // found in Chrome's ClientState key. |update_ap|, if not null, is set to the |
| 256 // raw value read from the registry. |
| 253 std::wstring ChannelFromAdditionalParameters(const InstallConstants& mode, | 257 std::wstring ChannelFromAdditionalParameters(const InstallConstants& mode, |
| 254 bool system_level, | 258 bool system_level, |
| 255 bool from_binaries) { | 259 bool from_binaries, |
| 260 std::wstring* update_ap) { |
| 256 assert(kUseGoogleUpdateIntegration); | 261 assert(kUseGoogleUpdateIntegration); |
| 257 // InitChannelInfo in google_update_settings.cc only reports a failure when | 262 // InitChannelInfo in google_update_settings.cc only reports a failure when |
| 258 // Chrome's ClientState key exists but that the "ap" value therein cannot be | 263 // Chrome's ClientState key exists but that the "ap" value therein cannot be |
| 259 // read due to some reason *other* than it not being present. This should be | 264 // read due to some reason *other* than it not being present. This should be |
| 260 // exceedingly rare. For simplicity's sake, use an empty |value| in case of | 265 // exceedingly rare. For simplicity's sake, use an empty |value| in case of |
| 261 // any error whatsoever here. | 266 // any error whatsoever here. |
| 262 std::wstring value; | 267 std::wstring value; |
| 263 nt::QueryRegValueSZ(system_level ? nt::HKLM : nt::HKCU, nt::WOW6432, | 268 nt::QueryRegValueSZ(system_level ? nt::HKLM : nt::HKCU, nt::WOW6432, |
| 264 from_binaries | 269 from_binaries |
| 265 ? GetBinariesClientStateKeyPath().c_str() | 270 ? GetBinariesClientStateKeyPath().c_str() |
| 266 : GetClientStateKeyPath(mode.app_guid).c_str(), | 271 : GetClientStateKeyPath(mode.app_guid).c_str(), |
| 267 kRegValueAp, &value); | 272 kRegValueAp, &value); |
| 273 if (update_ap) |
| 274 *update_ap = value; |
| 268 | 275 |
| 269 static constexpr wchar_t kChromeChannelBetaPattern[] = L"1?1-*"; | 276 static constexpr wchar_t kChromeChannelBetaPattern[] = L"1?1-*"; |
| 270 static constexpr wchar_t kChromeChannelBetaX64Pattern[] = L"*x64-beta*"; | 277 static constexpr wchar_t kChromeChannelBetaX64Pattern[] = L"*x64-beta*"; |
| 271 static constexpr wchar_t kChromeChannelDevPattern[] = L"2?0-d*"; | 278 static constexpr wchar_t kChromeChannelDevPattern[] = L"2?0-d*"; |
| 272 static constexpr wchar_t kChromeChannelDevX64Pattern[] = L"*x64-dev*"; | 279 static constexpr wchar_t kChromeChannelDevX64Pattern[] = L"*x64-dev*"; |
| 273 | 280 |
| 274 std::transform(value.begin(), value.end(), value.begin(), ::tolower); | 281 std::transform(value.begin(), value.end(), value.begin(), ::tolower); |
| 275 | 282 |
| 276 // Empty channel names or those containing "stable" should be reported as | 283 // Empty channel names or those containing "stable" should be reported as |
| 277 // an empty string. | 284 // an empty string. |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 return false; | 795 return false; |
| 789 } | 796 } |
| 790 } | 797 } |
| 791 return true; | 798 return true; |
| 792 } | 799 } |
| 793 | 800 |
| 794 // This function takes these inputs rather than accessing the module's | 801 // This function takes these inputs rather than accessing the module's |
| 795 // InstallDetails instance since it is used to bootstrap InstallDetails. | 802 // InstallDetails instance since it is used to bootstrap InstallDetails. |
| 796 std::wstring DetermineChannel(const InstallConstants& mode, | 803 std::wstring DetermineChannel(const InstallConstants& mode, |
| 797 bool system_level, | 804 bool system_level, |
| 798 bool from_binaries) { | 805 bool from_binaries, |
| 806 std::wstring* update_ap, |
| 807 std::wstring* update_cohort_name) { |
| 799 if (!kUseGoogleUpdateIntegration) | 808 if (!kUseGoogleUpdateIntegration) |
| 800 return std::wstring(); | 809 return std::wstring(); |
| 801 | 810 |
| 811 if (update_cohort_name) { |
| 812 // Cache the cohort name. |
| 813 std::wstring path(from_binaries ? GetBinariesClientStateKeyPath() |
| 814 : GetClientStateKeyPath(mode.app_guid)); |
| 815 path.append(L"\\cohort"); |
| 816 nt::QueryRegValueSZ(system_level ? nt::HKLM : nt::HKCU, nt::WOW6432, |
| 817 path.c_str(), kRegValueName, update_cohort_name); |
| 818 } |
| 819 |
| 802 switch (mode.channel_strategy) { | 820 switch (mode.channel_strategy) { |
| 803 case ChannelStrategy::UNSUPPORTED: | 821 case ChannelStrategy::UNSUPPORTED: |
| 804 assert(false); | 822 assert(false); |
| 805 break; | 823 break; |
| 806 case ChannelStrategy::ADDITIONAL_PARAMETERS: | 824 case ChannelStrategy::ADDITIONAL_PARAMETERS: |
| 807 return ChannelFromAdditionalParameters(mode, system_level, from_binaries); | 825 return ChannelFromAdditionalParameters(mode, system_level, from_binaries, |
| 826 update_ap); |
| 808 case ChannelStrategy::FIXED: | 827 case ChannelStrategy::FIXED: |
| 809 return mode.default_channel_name; | 828 return mode.default_channel_name; |
| 810 } | 829 } |
| 811 | 830 |
| 812 return std::wstring(); | 831 return std::wstring(); |
| 813 } | 832 } |
| 814 | 833 |
| 815 } // namespace install_static | 834 } // namespace install_static |
| OLD | NEW |