Chromium Code Reviews| Index: chrome/browser/upgrade_detector_impl.cc |
| =================================================================== |
| --- chrome/browser/upgrade_detector_impl.cc (revision 286992) |
| +++ chrome/browser/upgrade_detector_impl.cc (working copy) |
| @@ -284,6 +284,11 @@ |
| start_upgrade_check_timer_task, |
| &is_unstable_channel_)); |
| #endif |
| + |
| + // Register for experiment notifications. Note that since this class is a |
| + // singleton, it does not need to unregister for notifications when destroyed, |
| + // since it outlines the VariationsService. |
|
MAD
2014/08/01 17:41:30
outlines -> outlives
Alexei Svitkine (slow)
2014/08/04 19:43:10
Done.
|
| + g_browser_process->variations_service()->AddObserver(this); |
| } |
| UpgradeDetectorImpl::~UpgradeDetectorImpl() { |
| @@ -346,6 +351,24 @@ |
| this, &UpgradeDetectorImpl::CheckForUpgrade); |
| } |
| +void UpgradeDetectorImpl::StartUpgradeNotificationTimer() { |
| + // The timer may already be running (e.g. due to both a software upgrade and |
| + // experiment updates being available). |
| + if (upgrade_notification_timer_.IsRunning()) |
| + return; |
| + |
| + upgrade_detected_time_ = base::Time::Now(); |
| + |
| + // Start the repeating timer for notifying the user after a certain period. |
| + // The called function will eventually figure out that enough time has passed |
| + // and stop the timer. |
| + const int cycle_time_ms = IsTesting() ? |
| + kNotifyCycleTimeForTestingMs : kNotifyCycleTimeMs; |
| + upgrade_notification_timer_.Start(FROM_HERE, |
| + base::TimeDelta::FromMilliseconds(cycle_time_ms), |
| + this, &UpgradeDetectorImpl::NotifyOnUpgrade); |
| +} |
| + |
| void UpgradeDetectorImpl::CheckForUpgrade() { |
| // Interrupt any (unlikely) unfinished execution of DetectUpgradeTask, or at |
| // least prevent the callback from being executed, because we will potentially |
| @@ -414,30 +437,28 @@ |
| return simulate_outdated; |
| } |
| +void UpgradeDetectorImpl::OnExperimentChangesDetected(Severity severity) { |
| + best_effort_experiment_updates_available_ = (severity == BEST_EFFORT); |
| + critical_experiment_updates_available_ = (severity == CRITICAL); |
| + StartUpgradeNotificationTimer(); |
| +} |
| + |
| void UpgradeDetectorImpl::UpgradeDetected(UpgradeAvailable upgrade_available) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| upgrade_available_ = upgrade_available; |
| // Stop the recurring timer (that is checking for changes). |
| detect_upgrade_timer_.Stop(); |
| + critical_update_acknowledged_ = false; |
| - NotifyUpgradeDetected(); |
| - |
| - // Start the repeating timer for notifying the user after a certain period. |
| - // The called function will eventually figure out that enough time has passed |
| - // and stop the timer. |
| - int cycle_time = IsTesting() ? |
| - kNotifyCycleTimeForTestingMs : kNotifyCycleTimeMs; |
| - upgrade_notification_timer_.Start(FROM_HERE, |
| - base::TimeDelta::FromMilliseconds(cycle_time), |
| - this, &UpgradeDetectorImpl::NotifyOnUpgrade); |
| + StartUpgradeNotificationTimer(); |
| } |
| -void UpgradeDetectorImpl::NotifyOnUpgrade() { |
| - const base::TimeDelta time_passed = |
| - base::Time::Now() - upgrade_detected_time(); |
| - |
| - bool is_critical_or_outdated = upgrade_available_ > UPGRADE_AVAILABLE_REGULAR; |
| +void UpgradeDetectorImpl::NotifyOnUpgradeWithTimePassed( |
| + base::TimeDelta time_passed) { |
| + const bool is_critical_or_outdated = |
| + upgrade_available_ > UPGRADE_AVAILABLE_REGULAR || |
| + critical_experiment_updates_available_; |
| if (is_unstable_channel_) { |
| // There's only one threat level for unstable channels like dev and |
| // canary, and it hits after one hour. During testing, it hits after one |
| @@ -487,6 +508,12 @@ |
| NotifyUpgradeRecommended(); |
| } |
| +void UpgradeDetectorImpl::NotifyOnUpgrade() { |
| + const base::TimeDelta time_passed = |
| + base::Time::Now() - upgrade_detected_time_; |
|
sky
2014/08/04 18:24:07
Don't you want timeticks?
Alexei Svitkine (slow)
2014/08/04 19:43:11
This CL doesn't actually change the logic around t
|
| + NotifyOnUpgradeWithTimePassed(time_passed); |
| +} |
| + |
| // static |
| UpgradeDetectorImpl* UpgradeDetectorImpl::GetInstance() { |
| return Singleton<UpgradeDetectorImpl>::get(); |