OLD | NEW |
---|---|
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/browser/component_updater/sw_reporter_installer_win.h" | 5 #include "chrome/browser/component_updater/sw_reporter_installer_win.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
93 const char kSRTPromptOnGroup[] = "On"; | 93 const char kSRTPromptOnGroup[] = "On"; |
94 | 94 |
95 // Exit codes that identify that a cleanup is needed. | 95 // Exit codes that identify that a cleanup is needed. |
96 const int kCleanupNeeded = 0; | 96 const int kCleanupNeeded = 0; |
97 const int kPostRebootCleanupNeeded = 4; | 97 const int kPostRebootCleanupNeeded = 4; |
98 | 98 |
99 void ReportUmaStep(SwReporterUmaValue value) { | 99 void ReportUmaStep(SwReporterUmaValue value) { |
100 UMA_HISTOGRAM_ENUMERATION("SoftwareReporter.Step", value, SW_REPORTER_MAX); | 100 UMA_HISTOGRAM_ENUMERATION("SoftwareReporter.Step", value, SW_REPORTER_MAX); |
101 } | 101 } |
102 | 102 |
103 void ReportUmaVersion(const base::Version& version) { | 103 void ReportVersionWithUma(const base::Version& version) { |
104 DCHECK(!version.components().empty()); | 104 DCHECK(!version.components().empty()); |
105 UMA_HISTOGRAM_SPARSE_SLOWLY("SoftwareReporter.MinorVersion", | 105 // The minor version is the 2nd last component of the version, |
106 version.components().back()); | 106 // or just the first component if there is only 1. |
107 // The major version uses the 1st component value (when there is more than | 107 uint32_t minor_version = 0; |
108 // one, since the last one is always the minor version) as a hi word in a | |
109 // double word. The low word is either the second component (when there are | |
110 // only three) or the 3rd one if there are at least 4. E.g., for W.X.Y.Z, we | |
111 // ignore X, and Z is the minor version. We compute the major version with W | |
112 // as the hi word, and Y as the low word. For X.Y.Z, we use X and Y as hi and | |
113 // low words, and if we would have Y.Z we would use Y as the hi word and 0 as | |
114 // the low word. major version is 0 if the version only has one component. | |
115 uint32_t major_version = 0; | |
116 if (version.components().size() > 1) | 108 if (version.components().size() > 1) |
117 major_version = 0x10000 * version.components()[0]; | 109 minor_version = version.components()[version.components().size() - 2]; |
118 if (version.components().size() < 4 && version.components().size() > 2) | 110 else |
119 major_version += version.components()[1]; | 111 minor_version = version.components()[0]; |
120 else if (version.components().size() > 3) | 112 UMA_HISTOGRAM_SPARSE_SLOWLY("SoftwareReporter.MinorVersion", minor_version); |
113 | |
114 // The major version for X.Y.Z is X*256^3+Y*256+Z. If there are additional | |
115 // components, only the first three count, and if there are less than 3, the | |
116 // missing values are just replaced by zero. | |
waffles
2014/11/04 21:21:25
Maybe clarify that "1" the same as 1.0.0, not 0.0.
csharp
2014/11/04 21:56:49
Done.
| |
117 DCHECK(version.components()[0] < 0x100); | |
118 uint32_t major_version = 0x1000000 * version.components()[0]; | |
119 if (version.components().size() >= 2) { | |
120 DCHECK(version.components()[1] < 0x10000); | |
121 major_version += 0x100 * version.components()[1]; | |
122 } | |
123 if (version.components().size() >= 3) { | |
124 DCHECK(version.components()[2] < 0x100); | |
121 major_version += version.components()[2]; | 125 major_version += version.components()[2]; |
126 } | |
122 UMA_HISTOGRAM_SPARSE_SLOWLY("SoftwareReporter.MajorVersion", major_version); | 127 UMA_HISTOGRAM_SPARSE_SLOWLY("SoftwareReporter.MajorVersion", major_version); |
123 } | 128 } |
124 | 129 |
125 // This function is called on the UI thread to report the SwReporter exit code | 130 // This function is called on the UI thread to report the SwReporter exit code |
126 // and then clear it from the registry as well as clear the execution state | 131 // and then clear it from the registry as well as clear the execution state |
127 // from the local state. This could be called from an interruptible worker | 132 // from the local state. This could be called from an interruptible worker |
128 // thread so should be resilient to unexpected shutdown. |version| is provided | 133 // thread so should be resilient to unexpected shutdown. |version| is provided |
129 // so the kSwReporterPromptVersion prefs can be set. | 134 // so the kSwReporterPromptVersion prefs can be set. |
130 void ReportAndClearExitCode(int exit_code, const std::string& version) { | 135 void ReportAndClearExitCode(int exit_code, const std::string& version) { |
131 UMA_HISTOGRAM_SPARSE_SLOWLY("SoftwareReporter.ExitCode", exit_code); | 136 UMA_HISTOGRAM_SPARSE_SLOWLY("SoftwareReporter.ExitCode", exit_code); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
234 | 239 |
235 virtual bool OnCustomInstall(const base::DictionaryValue& manifest, | 240 virtual bool OnCustomInstall(const base::DictionaryValue& manifest, |
236 const base::FilePath& install_dir) { | 241 const base::FilePath& install_dir) { |
237 return true; | 242 return true; |
238 } | 243 } |
239 | 244 |
240 virtual void ComponentReady(const base::Version& version, | 245 virtual void ComponentReady(const base::Version& version, |
241 const base::FilePath& install_dir, | 246 const base::FilePath& install_dir, |
242 scoped_ptr<base::DictionaryValue> manifest) { | 247 scoped_ptr<base::DictionaryValue> manifest) { |
243 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 248 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
244 ReportUmaVersion(version); | 249 ReportVersionWithUma(version); |
245 | 250 |
246 wcsncpy_s(version_dir_, | 251 wcsncpy_s(version_dir_, |
247 _MAX_PATH, | 252 _MAX_PATH, |
248 install_dir.value().c_str(), | 253 install_dir.value().c_str(), |
249 install_dir.value().size()); | 254 install_dir.value().size()); |
250 | 255 |
251 // A previous run may have results in the registry, so check and report | 256 // A previous run may have results in the registry, so check and report |
252 // them if present. | 257 // them if present. |
253 std::string version_string(version.GetString()); | 258 std::string version_string(version.GetString()); |
254 base::win::RegKey srt_key( | 259 base::win::RegKey srt_key( |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
395 -1, | 400 -1, |
396 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); | 401 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
397 | 402 |
398 registry->RegisterStringPref( | 403 registry->RegisterStringPref( |
399 prefs::kSwReporterPromptVersion, | 404 prefs::kSwReporterPromptVersion, |
400 "", | 405 "", |
401 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); | 406 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
402 } | 407 } |
403 | 408 |
404 } // namespace component_updater | 409 } // namespace component_updater |
OLD | NEW |