Chromium Code Reviews| Index: chrome/browser/chromeos/upgrade_detector_chromeos.cc |
| diff --git a/chrome/browser/chromeos/upgrade_detector_chromeos.cc b/chrome/browser/chromeos/upgrade_detector_chromeos.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8b3c76f983a100cfe4a7106e80426a47bd197517 |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/upgrade_detector_chromeos.cc |
| @@ -0,0 +1,79 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/chromeos/upgrade_detector_chromeos.h" |
| + |
| +#include "base/memory/singleton.h" |
| +#include "chrome/browser/chromeos/cros/cros_library.h" |
| + |
| +namespace { |
| + |
| +// How long to wait (each cycle) before checking which severity level we should |
| +// be at. Once we reach the highest severity, the timer will stop. |
| +const int kNotifyCycleTimeMs = 20 * 60 * 1000; // 20 minutes. |
| + |
| +} // namespace |
| + |
| +UpgradeDetectorChromeos::UpgradeDetectorChromeos() { |
| + chromeos::CrosLibrary::Get()->GetUpdateLibrary()->AddObserver(this); |
| +} |
| + |
| +UpgradeDetectorChromeos::~UpgradeDetectorChromeos() { |
| + chromeos::CrosLibrary::Get()->GetUpdateLibrary()->RemoveObserver(this); |
| +} |
| + |
| +void UpgradeDetectorChromeos::UpdateStatusChanged( |
| + chromeos::UpdateLibrary* library) { |
| + if (library->status().status != chromeos::UPDATE_STATUS_UPDATED_NEED_REBOOT) |
| + return; |
| + |
| + NotifyUpgradeDetected(); |
| + |
| + // ChromeOS shows upgrade arrow once the upgrade becomes available. |
| + NotifyOnUpgrade(); |
| + |
| + // Setup timer to to move along the upgrade advisory system. |
| + upgrade_notification_timer_.Start( |
| + base::TimeDelta::FromMilliseconds(kNotifyCycleTimeMs), |
| + this, &UpgradeDetectorChromeos::NotifyOnUpgrade); |
| +} |
| + |
| +void UpgradeDetectorChromeos::NotifyOnUpgrade() { |
| + base::TimeDelta delta = base::Time::Now() - upgrade_detected_time(); |
| + int64 time_passed = delta.InHours(); |
| + |
| + const int kMultiplier = 24; |
| + const int kSevereThreshold = 7 * kMultiplier; |
|
Finnur
2011/06/12 12:07:43
kMultiplier was created because on other platforms
xiyuan
2011/06/12 21:02:07
Done. It is left here because I was not sure wheth
|
| + const int kHighThreshold = 4 * kMultiplier; |
| + const int kElevatedThreshold = 2 * kMultiplier; |
| + const int kLowThreshold = 0; |
| + |
| + // These if statements must be sorted (highest interval first). |
| + if (time_passed >= kSevereThreshold) { |
| + set_upgrade_notification_stage(UPGRADE_ANNOYANCE_SEVERE); |
| + |
| + // We can't get any higher, baby. |
| + upgrade_notification_timer_.Stop(); |
| + } else if (time_passed >= kHighThreshold) { |
| + set_upgrade_notification_stage(UPGRADE_ANNOYANCE_HIGH); |
| + } else if (time_passed >= kElevatedThreshold) { |
| + set_upgrade_notification_stage(UPGRADE_ANNOYANCE_ELEVATED); |
| + } else if (time_passed >= kLowThreshold) { |
| + set_upgrade_notification_stage(UPGRADE_ANNOYANCE_LOW); |
| + } else { |
| + return; // Not ready to recommend upgrade. |
| + } |
| + |
| + NotifyUpgradeRecommended(); |
| +} |
| + |
| +// static |
| +UpgradeDetectorChromeos* UpgradeDetectorChromeos::GetInstance() { |
| + return Singleton<UpgradeDetectorChromeos>::get(); |
| +} |
| + |
| +// static |
| +UpgradeDetector* UpgradeDetector::GetInstance() { |
| + return UpgradeDetectorChromeos::GetInstance(); |
| +} |