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

Side by Side Diff: chrome/browser/upgrade_detector_impl.cc

Issue 333313003: Simulate variation seeds using installed version string. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/upgrade_detector_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/upgrade_detector_impl.h" 5 #include "chrome/browser/upgrade_detector_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/build_time.h" 10 #include "base/build_time.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/cpu.h" 12 #include "base/cpu.h"
13 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/memory/singleton.h" 15 #include "base/memory/singleton.h"
16 #include "base/path_service.h" 16 #include "base/path_service.h"
17 #include "base/prefs/pref_service.h" 17 #include "base/prefs/pref_service.h"
18 #include "base/process/launch.h" 18 #include "base/process/launch.h"
19 #include "base/strings/string_number_conversions.h" 19 #include "base/strings/string_number_conversions.h"
20 #include "base/strings/string_util.h" 20 #include "base/strings/string_util.h"
21 #include "base/strings/utf_string_conversions.h" 21 #include "base/strings/utf_string_conversions.h"
22 #include "base/time/time.h" 22 #include "base/time/time.h"
23 #include "base/version.h"
24 #include "chrome/browser/browser_process.h" 23 #include "chrome/browser/browser_process.h"
25 #include "chrome/browser/google/google_brand.h" 24 #include "chrome/browser/google/google_brand.h"
26 #include "chrome/common/chrome_switches.h" 25 #include "chrome/common/chrome_switches.h"
27 #include "chrome/common/chrome_version_info.h" 26 #include "chrome/common/chrome_version_info.h"
28 #include "chrome/common/pref_names.h" 27 #include "chrome/common/pref_names.h"
29 #include "components/network_time/network_time_tracker.h" 28 #include "components/network_time/network_time_tracker.h"
30 #include "content/public/browser/browser_thread.h" 29 #include "content/public/browser/browser_thread.h"
31 #include "ui/base/resource/resource_bundle.h" 30 #include "ui/base/resource/resource_bundle.h"
32 31
33 #if defined(OS_WIN) 32 #if defined(OS_WIN)
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 // Don't try to turn on autoupdate when we failed previously. 141 // Don't try to turn on autoupdate when we failed previously.
143 if (is_auto_update_enabled) { 142 if (is_auto_update_enabled) {
144 *is_auto_update_enabled = 143 *is_auto_update_enabled =
145 GoogleUpdateSettings::AreAutoupdatesEnabled(app_guid); 144 GoogleUpdateSettings::AreAutoupdatesEnabled(app_guid);
146 } 145 }
147 *is_unstable_channel = IsUnstableChannel(); 146 *is_unstable_channel = IsUnstableChannel();
148 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback_task); 147 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback_task);
149 } 148 }
150 #endif // defined(OS_WIN) 149 #endif // defined(OS_WIN)
151 150
151 // Gets the currently installed version. On Windows, if |critical_update| is not
152 // NULL, also retrieves the critical update version info if available.
153 base::Version GetCurrentlyInstalledVersionImpl(Version* critical_update) {
154 base::ThreadRestrictions::AssertIOAllowed();
155
156 Version installed_version;
157 #if defined(OS_WIN)
158 // Get the version of the currently *installed* instance of Chrome,
159 // which might be newer than the *running* instance if we have been
160 // upgraded in the background.
161 bool system_install = IsSystemInstall();
162
163 // TODO(tommi): Check if using the default distribution is always the right
164 // thing to do.
165 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
166 InstallUtil::GetChromeVersion(dist, system_install, &installed_version);
167 if (critical_update && installed_version.IsValid()) {
168 InstallUtil::GetCriticalUpdateVersion(dist, system_install,
169 critical_update);
170 }
171 #elif defined(OS_MACOSX)
172 installed_version =
173 Version(base::UTF16ToASCII(keystone_glue::CurrentlyInstalledVersion()));
174 #elif defined(OS_POSIX)
175 // POSIX but not Mac OS X: Linux, etc.
176 CommandLine command_line(*CommandLine::ForCurrentProcess());
177 command_line.AppendSwitch(switches::kProductVersion);
178 std::string reply;
179 if (!base::GetAppOutput(command_line, &reply)) {
180 DLOG(ERROR) << "Failed to get current file version";
181 return installed_version;
182 }
183
184 installed_version = Version(reply);
185 #endif
186 return installed_version;
187 }
188
152 } // namespace 189 } // namespace
153 190
154 UpgradeDetectorImpl::UpgradeDetectorImpl() 191 UpgradeDetectorImpl::UpgradeDetectorImpl()
155 : weak_factory_(this), 192 : weak_factory_(this),
156 is_unstable_channel_(false), 193 is_unstable_channel_(false),
157 is_auto_update_enabled_(true), 194 is_auto_update_enabled_(true),
158 build_date_(base::GetBuildTime()) { 195 build_date_(base::GetBuildTime()) {
159 CommandLine command_line(*CommandLine::ForCurrentProcess()); 196 CommandLine command_line(*CommandLine::ForCurrentProcess());
160 // The different command line switches that affect testing can't be used 197 // The different command line switches that affect testing can't be used
161 // simultaneously, if they do, here's the precedence order, based on the order 198 // simultaneously, if they do, here's the precedence order, based on the order
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 282 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
246 base::Bind(&CheckForUnstableChannel, 283 base::Bind(&CheckForUnstableChannel,
247 start_upgrade_check_timer_task, 284 start_upgrade_check_timer_task,
248 &is_unstable_channel_)); 285 &is_unstable_channel_));
249 #endif 286 #endif
250 } 287 }
251 288
252 UpgradeDetectorImpl::~UpgradeDetectorImpl() { 289 UpgradeDetectorImpl::~UpgradeDetectorImpl() {
253 } 290 }
254 291
255 // Static 292 // static
293 base::Version UpgradeDetectorImpl::GetCurrentlyInstalledVersion() {
294 return GetCurrentlyInstalledVersionImpl(NULL);
295 }
296
297 // static
256 // This task checks the currently running version of Chrome against the 298 // This task checks the currently running version of Chrome against the
257 // installed version. If the installed version is newer, it calls back 299 // installed version. If the installed version is newer, it calls back
258 // UpgradeDetectorImpl::UpgradeDetected using a weak pointer so that it can 300 // UpgradeDetectorImpl::UpgradeDetected using a weak pointer so that it can
259 // be interrupted from the UI thread. 301 // be interrupted from the UI thread.
260 void UpgradeDetectorImpl::DetectUpgradeTask( 302 void UpgradeDetectorImpl::DetectUpgradeTask(
261 base::WeakPtr<UpgradeDetectorImpl> upgrade_detector) { 303 base::WeakPtr<UpgradeDetectorImpl> upgrade_detector) {
262 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 304 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
263 305
264 Version installed_version;
265 Version critical_update; 306 Version critical_update;
266 307 Version installed_version =
267 #if defined(OS_WIN) 308 GetCurrentlyInstalledVersionImpl(&critical_update);
268 // Get the version of the currently *installed* instance of Chrome,
269 // which might be newer than the *running* instance if we have been
270 // upgraded in the background.
271 bool system_install = IsSystemInstall();
272
273 // TODO(tommi): Check if using the default distribution is always the right
274 // thing to do.
275 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
276 InstallUtil::GetChromeVersion(dist, system_install, &installed_version);
277
278 if (installed_version.IsValid()) {
279 InstallUtil::GetCriticalUpdateVersion(dist, system_install,
280 &critical_update);
281 }
282 #elif defined(OS_MACOSX)
283 installed_version =
284 Version(base::UTF16ToASCII(keystone_glue::CurrentlyInstalledVersion()));
285 #elif defined(OS_POSIX)
286 // POSIX but not Mac OS X: Linux, etc.
287 CommandLine command_line(*CommandLine::ForCurrentProcess());
288 command_line.AppendSwitch(switches::kProductVersion);
289 std::string reply;
290 if (!base::GetAppOutput(command_line, &reply)) {
291 DLOG(ERROR) << "Failed to get current file version";
292 return;
293 }
294
295 installed_version = Version(reply);
296 #endif
297 309
298 // Get the version of the currently *running* instance of Chrome. 310 // Get the version of the currently *running* instance of Chrome.
299 chrome::VersionInfo version_info; 311 chrome::VersionInfo version_info;
300 if (!version_info.is_valid()) { 312 if (!version_info.is_valid()) {
301 NOTREACHED() << "Failed to get current file version"; 313 NOTREACHED() << "Failed to get current file version";
302 return; 314 return;
303 } 315 }
304 Version running_version(version_info.Version()); 316 Version running_version(version_info.Version());
305 if (!running_version.IsValid()) { 317 if (!running_version.IsValid()) {
306 NOTREACHED(); 318 NOTREACHED();
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 bool is_testing = IsTesting(); 441 bool is_testing = IsTesting();
430 int64 time_passed = is_testing ? delta.InSeconds() : delta.InHours(); 442 int64 time_passed = is_testing ? delta.InSeconds() : delta.InHours();
431 443
432 bool is_critical_or_outdated = upgrade_available_ > UPGRADE_AVAILABLE_REGULAR; 444 bool is_critical_or_outdated = upgrade_available_ > UPGRADE_AVAILABLE_REGULAR;
433 if (is_unstable_channel_) { 445 if (is_unstable_channel_) {
434 // There's only one threat level for unstable channels like dev and 446 // There's only one threat level for unstable channels like dev and
435 // canary, and it hits after one hour. During testing, it hits after one 447 // canary, and it hits after one hour. During testing, it hits after one
436 // second. 448 // second.
437 const int kUnstableThreshold = 1; 449 const int kUnstableThreshold = 1;
438 450
439 if (is_critical_or_outdated) 451 if (is_critical_or_outdated) {
440 set_upgrade_notification_stage(UPGRADE_ANNOYANCE_CRITICAL); 452 set_upgrade_notification_stage(UPGRADE_ANNOYANCE_CRITICAL);
441 else if (time_passed >= kUnstableThreshold) { 453 } else if (time_passed >= kUnstableThreshold) {
442 set_upgrade_notification_stage(UPGRADE_ANNOYANCE_LOW); 454 set_upgrade_notification_stage(UPGRADE_ANNOYANCE_LOW);
443 455
444 // That's as high as it goes. 456 // That's as high as it goes.
445 upgrade_notification_timer_.Stop(); 457 upgrade_notification_timer_.Stop();
446 } else { 458 } else {
447 return; // Not ready to recommend upgrade. 459 return; // Not ready to recommend upgrade.
448 } 460 }
449 } else { 461 } else {
450 const int kMultiplier = is_testing ? 10 : 24; 462 const int kMultiplier = is_testing ? 10 : 24;
451 // 14 days when not testing, otherwise 14 seconds. 463 // 14 days when not testing, otherwise 14 seconds.
(...skipping 26 matching lines...) Expand all
478 490
479 // static 491 // static
480 UpgradeDetectorImpl* UpgradeDetectorImpl::GetInstance() { 492 UpgradeDetectorImpl* UpgradeDetectorImpl::GetInstance() {
481 return Singleton<UpgradeDetectorImpl>::get(); 493 return Singleton<UpgradeDetectorImpl>::get();
482 } 494 }
483 495
484 // static 496 // static
485 UpgradeDetector* UpgradeDetector::GetInstance() { 497 UpgradeDetector* UpgradeDetector::GetInstance() {
486 return UpgradeDetectorImpl::GetInstance(); 498 return UpgradeDetectorImpl::GetInstance();
487 } 499 }
OLDNEW
« no previous file with comments | « chrome/browser/upgrade_detector_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698