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

Side by Side 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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>
11 11
12 #include <algorithm> 12 #include <algorithm>
13 #include <iterator>
13 #include <limits> 14 #include <limits>
14 #include <memory> 15 #include <memory>
15 #include <sstream> 16 #include <sstream>
16 17
17 #include "chrome/install_static/install_details.h" 18 #include "chrome/install_static/install_details.h"
18 #include "chrome/install_static/install_modes.h" 19 #include "chrome/install_static/install_modes.h"
19 #include "chrome/install_static/policy_path_parser.h" 20 #include "chrome/install_static/policy_path_parser.h"
20 #include "chrome/install_static/user_data_dir.h" 21 #include "chrome/install_static/user_data_dir.h"
21 #include "chrome_elf/nt_registry/nt_registry.h" 22 #include "chrome_elf/nt_registry/nt_registry.h"
22 23
(...skipping 28 matching lines...) Expand all
51 // Chrome channel display names. 52 // Chrome channel display names.
52 constexpr wchar_t kChromeChannelDev[] = L"dev"; 53 constexpr wchar_t kChromeChannelDev[] = L"dev";
53 constexpr wchar_t kChromeChannelBeta[] = L"beta"; 54 constexpr wchar_t kChromeChannelBeta[] = L"beta";
54 constexpr wchar_t kChromeChannelStableExplicit[] = L"stable"; 55 constexpr wchar_t kChromeChannelStableExplicit[] = L"stable";
55 56
56 // TODO(ananta) 57 // TODO(ananta)
57 // http://crbug.com/604923 58 // http://crbug.com/604923
58 // These constants are defined in the chrome/installer directory as well. We 59 // These constants are defined in the chrome/installer directory as well. We
59 // need to unify them. 60 // need to unify them.
60 constexpr wchar_t kRegValueAp[] = L"ap"; 61 constexpr wchar_t kRegValueAp[] = L"ap";
62 constexpr wchar_t kRegValueName[] = L"name";
61 constexpr wchar_t kRegValueUsageStats[] = L"usagestats"; 63 constexpr wchar_t kRegValueUsageStats[] = L"usagestats";
62 constexpr wchar_t kMetricsReportingEnabled[] = L"MetricsReportingEnabled"; 64 constexpr wchar_t kMetricsReportingEnabled[] = L"MetricsReportingEnabled";
63 65
64 void Trace(const wchar_t* format_string, ...) { 66 void Trace(const wchar_t* format_string, ...) {
65 static const int kMaxLogBufferSize = 1024; 67 static const int kMaxLogBufferSize = 1024;
66 static wchar_t buffer[kMaxLogBufferSize] = {}; 68 static wchar_t buffer[kMaxLogBufferSize] = {};
67 69
68 va_list args = {}; 70 va_list args = {};
69 71
70 va_start(args, format_string); 72 va_start(args, format_string);
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 std::vector<StringType> tokens; 245 std::vector<StringType> tokens;
244 std::basic_istringstream<typename StringType::value_type> buffer(str); 246 std::basic_istringstream<typename StringType::value_type> buffer(str);
245 for (StringType token; std::getline(buffer, token, delimiter);) { 247 for (StringType token; std::getline(buffer, token, delimiter);) {
246 if (trim_spaces) 248 if (trim_spaces)
247 TrimT<StringType>(&token); 249 TrimT<StringType>(&token);
248 tokens.push_back(token); 250 tokens.push_back(token);
249 } 251 }
250 return tokens; 252 return tokens;
251 } 253 }
252 254
255 // Returns Chrome's update channel name based on the contents of the given "ap"
256 // value from Chrome's ClientState key.
253 std::wstring ChannelFromAdditionalParameters(const InstallConstants& mode, 257 std::wstring ChannelFromAdditionalParameters(const InstallConstants& mode,
254 bool system_level, 258 const std::wstring& ap_value) {
255 bool from_binaries) {
256 assert(kUseGoogleUpdateIntegration); 259 assert(kUseGoogleUpdateIntegration);
257 // 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
259 // 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
261 // any error whatsoever here.
262 std::wstring value;
263 nt::QueryRegValueSZ(system_level ? nt::HKLM : nt::HKCU, nt::WOW6432,
264 from_binaries
265 ? GetBinariesClientStateKeyPath().c_str()
266 : GetClientStateKeyPath(mode.app_guid).c_str(),
267 kRegValueAp, &value);
268 260
269 static constexpr wchar_t kChromeChannelBetaPattern[] = L"1?1-*"; 261 static constexpr wchar_t kChromeChannelBetaPattern[] = L"1?1-*";
270 static constexpr wchar_t kChromeChannelBetaX64Pattern[] = L"*x64-beta*"; 262 static constexpr wchar_t kChromeChannelBetaX64Pattern[] = L"*x64-beta*";
271 static constexpr wchar_t kChromeChannelDevPattern[] = L"2?0-d*"; 263 static constexpr wchar_t kChromeChannelDevPattern[] = L"2?0-d*";
272 static constexpr wchar_t kChromeChannelDevX64Pattern[] = L"*x64-dev*"; 264 static constexpr wchar_t kChromeChannelDevX64Pattern[] = L"*x64-dev*";
273 265
274 std::transform(value.begin(), value.end(), value.begin(), ::tolower); 266 std::wstring value;
267 value.reserve(ap_value.size());
268 std::transform(ap_value.begin(), ap_value.end(), std::back_inserter(value),
269 ::tolower);
275 270
276 // Empty channel names or those containing "stable" should be reported as 271 // Empty channel names or those containing "stable" should be reported as
277 // an empty string. 272 // an empty string.
278 std::wstring channel_name;
279 if (value.empty() || 273 if (value.empty() ||
280 (value.find(kChromeChannelStableExplicit) != std::wstring::npos)) { 274 (value.find(kChromeChannelStableExplicit) != std::wstring::npos)) {
281 } else if (MatchPattern(value, kChromeChannelDevPattern) || 275 return std::wstring();
282 MatchPattern(value, kChromeChannelDevX64Pattern)) { 276 }
283 channel_name.assign(kChromeChannelDev); 277 if (MatchPattern(value, kChromeChannelDevPattern) ||
284 } else if (MatchPattern(value, kChromeChannelBetaPattern) || 278 MatchPattern(value, kChromeChannelDevX64Pattern)) {
285 MatchPattern(value, kChromeChannelBetaX64Pattern)) { 279 return kChromeChannelDev;
286 channel_name.assign(kChromeChannelBeta); 280 }
281 if (MatchPattern(value, kChromeChannelBetaPattern) ||
282 MatchPattern(value, kChromeChannelBetaX64Pattern)) {
283 return kChromeChannelBeta;
287 } 284 }
288 // Else report values with garbage as stable since they will match the stable 285 // Else report values with garbage as stable since they will match the stable
289 // rules in the update configs. ChannelInfo::GetChannelName painstakingly 286 // rules in the update configs.
290 // strips off known modifiers (e.g., "-full") to see if the empty string 287 return std::wstring();
291 // remains, returning channel "unknown" if not. This differs here in that some
292 // clients will tag crashes as "stable" rather than "unknown" via this
293 // codepath, but it is an accurate reflection of which update channel the
294 // client is on according to the server-side rules.
295
296 return channel_name;
297 } 288 }
298 289
299 } // namespace 290 } // namespace
300 291
301 bool IsSystemInstall() { 292 bool IsSystemInstall() {
302 return InstallDetails::Get().system_level(); 293 return InstallDetails::Get().system_level();
303 } 294 }
304 295
305 std::wstring GetChromeInstallSubDirectory() { 296 std::wstring GetChromeInstallSubDirectory() {
306 std::wstring result; 297 std::wstring result;
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 return false; 779 return false;
789 } 780 }
790 } 781 }
791 return true; 782 return true;
792 } 783 }
793 784
794 // This function takes these inputs rather than accessing the module's 785 // This function takes these inputs rather than accessing the module's
795 // InstallDetails instance since it is used to bootstrap InstallDetails. 786 // InstallDetails instance since it is used to bootstrap InstallDetails.
796 std::wstring DetermineChannel(const InstallConstants& mode, 787 std::wstring DetermineChannel(const InstallConstants& mode,
797 bool system_level, 788 bool system_level,
798 bool from_binaries) { 789 bool from_binaries,
790 std::wstring* update_ap,
791 std::wstring* update_cohort_name) {
799 if (!kUseGoogleUpdateIntegration) 792 if (!kUseGoogleUpdateIntegration)
800 return std::wstring(); 793 return std::wstring();
801 794
795 // Read the "ap" value and cache it if requested.
796 std::wstring client_state(from_binaries
797 ? GetBinariesClientStateKeyPath()
798 : GetClientStateKeyPath(mode.app_guid));
799 std::wstring ap_value;
800 // An empty |ap_value| is used in case of error.
801 nt::QueryRegValueSZ(system_level ? nt::HKLM : nt::HKCU, nt::WOW6432,
802 client_state.c_str(), kRegValueAp, &ap_value);
803 if (update_ap)
804 *update_ap = ap_value;
805
806 // Cache the cohort name if requested.
807 if (update_cohort_name) {
808 nt::QueryRegValueSZ(system_level ? nt::HKLM : nt::HKCU, nt::WOW6432,
809 client_state.append(L"\\cohort").c_str(), kRegValueName,
810 update_cohort_name);
811 }
812
802 switch (mode.channel_strategy) { 813 switch (mode.channel_strategy) {
803 case ChannelStrategy::UNSUPPORTED: 814 case ChannelStrategy::UNSUPPORTED:
804 assert(false); 815 assert(false);
805 break; 816 break;
806 case ChannelStrategy::ADDITIONAL_PARAMETERS: 817 case ChannelStrategy::ADDITIONAL_PARAMETERS:
807 return ChannelFromAdditionalParameters(mode, system_level, from_binaries); 818 return ChannelFromAdditionalParameters(mode, ap_value);
808 case ChannelStrategy::FIXED: 819 case ChannelStrategy::FIXED:
809 return mode.default_channel_name; 820 return mode.default_channel_name;
810 } 821 }
811 822
812 return std::wstring(); 823 return std::wstring();
813 } 824 }
814 825
815 } // namespace install_static 826 } // namespace install_static
OLDNEW
« 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