Chromium Code Reviews| OLD | NEW |
|---|---|
| 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.h" | 5 #include "chrome/browser/upgrade_detector.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/prefs/pref_registry_simple.h" | 9 #include "base/prefs/pref_registry_simple.h" |
| 10 #include "chrome/browser/chrome_notification_types.h" | 10 #include "chrome/browser/chrome_notification_types.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 52 return IDR_UPDATE_MENU_SEVERITY_HIGH; | 52 return IDR_UPDATE_MENU_SEVERITY_HIGH; |
| 53 case UPGRADE_ANNOYANCE_CRITICAL: | 53 case UPGRADE_ANNOYANCE_CRITICAL: |
| 54 return IDR_UPDATE_MENU_SEVERITY_HIGH; | 54 return IDR_UPDATE_MENU_SEVERITY_HIGH; |
| 55 } | 55 } |
| 56 NOTREACHED(); | 56 NOTREACHED(); |
| 57 return 0; | 57 return 0; |
| 58 } | 58 } |
| 59 | 59 |
| 60 UpgradeDetector::UpgradeDetector() | 60 UpgradeDetector::UpgradeDetector() |
| 61 : upgrade_available_(UPGRADE_AVAILABLE_NONE), | 61 : upgrade_available_(UPGRADE_AVAILABLE_NONE), |
| 62 best_effort_experiment_updates_available_(false), | |
| 63 critical_experiment_updates_available_(false), | |
| 62 critical_update_acknowledged_(false), | 64 critical_update_acknowledged_(false), |
| 63 upgrade_notification_stage_(UPGRADE_ANNOYANCE_NONE), | 65 upgrade_notification_stage_(UPGRADE_ANNOYANCE_NONE), |
| 64 notify_upgrade_(false) { | 66 notify_upgrade_(false) { |
| 65 } | 67 } |
| 66 | 68 |
| 67 UpgradeDetector::~UpgradeDetector() { | 69 UpgradeDetector::~UpgradeDetector() { |
| 68 } | 70 } |
| 69 | 71 |
| 70 void UpgradeDetector::NotifyUpgradeDetected() { | |
| 71 upgrade_detected_time_ = base::Time::Now(); | |
| 72 critical_update_acknowledged_ = false; | |
| 73 } | |
| 74 | |
| 75 void UpgradeDetector::NotifyUpgradeRecommended() { | 72 void UpgradeDetector::NotifyUpgradeRecommended() { |
| 76 notify_upgrade_ = true; | 73 notify_upgrade_ = true; |
| 77 | 74 |
| 78 content::NotificationService::current()->Notify( | 75 TriggerNotification(chrome::NOTIFICATION_UPGRADE_RECOMMENDED); |
| 79 chrome::NOTIFICATION_UPGRADE_RECOMMENDED, | 76 if (upgrade_available_ == UPGRADE_NEEDED_OUTDATED_INSTALL) { |
| 80 content::Source<UpgradeDetector>(this), | 77 TriggerNotification(chrome::NOTIFICATION_OUTDATED_INSTALL); |
| 81 content::NotificationService::NoDetails()); | 78 } else if (upgrade_available_ == UPGRADE_NEEDED_OUTDATED_INSTALL_NO_AU) { |
| 79 TriggerNotification(chrome::NOTIFICATION_OUTDATED_INSTALL_NO_AU); | |
| 80 } else if (upgrade_available_ == UPGRADE_AVAILABLE_CRITICAL || | |
| 81 critical_experiment_updates_available_) { | |
|
sky
2014/08/04 18:24:07
nit: align with ( on previous line.
Alexei Svitkine (slow)
2014/08/04 19:43:10
Done.
| |
| 82 TriggerCriticalUpdate(); | |
| 83 } | |
| 84 } | |
| 82 | 85 |
| 83 switch (upgrade_available_) { | 86 void UpgradeDetector::TriggerCriticalUpdate() { |
| 84 case UPGRADE_NEEDED_OUTDATED_INSTALL: { | 87 const base::TimeDelta idle_timer = UseTestingIntervals() ? |
| 85 content::NotificationService::current()->Notify( | 88 base::TimeDelta::FromSeconds(kIdleRepeatingTimerWait) : |
| 86 chrome::NOTIFICATION_OUTDATED_INSTALL, | 89 base::TimeDelta::FromMinutes(kIdleRepeatingTimerWait); |
| 87 content::Source<UpgradeDetector>(this), | 90 idle_check_timer_.Start(FROM_HERE, idle_timer, this, |
| 88 content::NotificationService::NoDetails()); | 91 &UpgradeDetector::CheckIdle); |
| 89 break; | |
| 90 } | |
| 91 case UPGRADE_NEEDED_OUTDATED_INSTALL_NO_AU: { | |
| 92 content::NotificationService::current()->Notify( | |
| 93 chrome::NOTIFICATION_OUTDATED_INSTALL_NO_AU, | |
| 94 content::Source<UpgradeDetector>(this), | |
| 95 content::NotificationService::NoDetails()); | |
| 96 break; | |
| 97 } | |
| 98 case UPGRADE_AVAILABLE_CRITICAL: { | |
| 99 int idle_timer = UseTestingIntervals() ? | |
| 100 kIdleRepeatingTimerWait : | |
| 101 kIdleRepeatingTimerWait * 60; // To minutes. | |
| 102 idle_check_timer_.Start(FROM_HERE, | |
| 103 base::TimeDelta::FromSeconds(idle_timer), | |
| 104 this, &UpgradeDetector::CheckIdle); | |
| 105 break; | |
| 106 } | |
| 107 default: | |
| 108 break; | |
| 109 } | |
| 110 } | 92 } |
| 111 | 93 |
| 112 void UpgradeDetector::CheckIdle() { | 94 void UpgradeDetector::CheckIdle() { |
| 113 // CalculateIdleState expects an interval in seconds. | 95 // CalculateIdleState expects an interval in seconds. |
| 114 int idle_time_allowed = UseTestingIntervals() ? kIdleAmount : | 96 int idle_time_allowed = UseTestingIntervals() ? kIdleAmount : |
| 115 kIdleAmount * 60 * 60; | 97 kIdleAmount * 60 * 60; |
| 116 | 98 |
| 117 CalculateIdleState( | 99 CalculateIdleState( |
| 118 idle_time_allowed, base::Bind(&UpgradeDetector::IdleCallback, | 100 idle_time_allowed, base::Bind(&UpgradeDetector::IdleCallback, |
| 119 base::Unretained(this))); | 101 base::Unretained(this))); |
| 120 } | 102 } |
| 121 | 103 |
| 104 void UpgradeDetector::TriggerNotification(chrome::NotificationType type) { | |
| 105 content::NotificationService::current()->Notify( | |
| 106 type, | |
| 107 content::Source<UpgradeDetector>(this), | |
| 108 content::NotificationService::NoDetails()); | |
| 109 } | |
| 110 | |
| 122 void UpgradeDetector::IdleCallback(IdleState state) { | 111 void UpgradeDetector::IdleCallback(IdleState state) { |
| 123 // Don't proceed while an incognito window is open. The timer will still | 112 // Don't proceed while an incognito window is open. The timer will still |
| 124 // keep firing, so this function will get a chance to re-evaluate this. | 113 // keep firing, so this function will get a chance to re-evaluate this. |
| 125 if (chrome::IsOffTheRecordSessionActive()) | 114 if (chrome::IsOffTheRecordSessionActive()) |
| 126 return; | 115 return; |
| 127 | 116 |
| 128 switch (state) { | 117 switch (state) { |
| 129 case IDLE_STATE_LOCKED: | 118 case IDLE_STATE_LOCKED: |
| 130 // Computer is locked, auto-restart. | 119 // Computer is locked, auto-restart. |
| 131 idle_check_timer_.Stop(); | 120 idle_check_timer_.Stop(); |
| 132 chrome::AttemptRestart(); | 121 chrome::AttemptRestart(); |
| 133 break; | 122 break; |
| 134 case IDLE_STATE_IDLE: | 123 case IDLE_STATE_IDLE: |
| 135 // Computer has been idle for long enough, show warning. | 124 // Computer has been idle for long enough, show warning. |
| 136 idle_check_timer_.Stop(); | 125 idle_check_timer_.Stop(); |
| 137 content::NotificationService::current()->Notify( | 126 TriggerNotification(chrome::NOTIFICATION_CRITICAL_UPGRADE_INSTALLED); |
| 138 chrome::NOTIFICATION_CRITICAL_UPGRADE_INSTALLED, | |
| 139 content::Source<UpgradeDetector>(this), | |
| 140 content::NotificationService::NoDetails()); | |
| 141 break; | 127 break; |
| 142 case IDLE_STATE_ACTIVE: | 128 case IDLE_STATE_ACTIVE: |
| 143 case IDLE_STATE_UNKNOWN: | 129 case IDLE_STATE_UNKNOWN: |
| 144 break; | 130 break; |
| 145 default: | 131 default: |
| 146 NOTREACHED(); // Need to add any new value above (either providing | 132 NOTREACHED(); // Need to add any new value above (either providing |
| 147 // automatic restart or show notification to user). | 133 // automatic restart or show notification to user). |
| 148 break; | 134 break; |
| 149 } | 135 } |
| 150 } | 136 } |
| OLD | NEW |