summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/chromeos/update_observer.cc57
-rw-r--r--chrome/browser/chromeos/update_observer.h1
2 files changed, 49 insertions, 9 deletions
diff --git a/chrome/browser/chromeos/update_observer.cc b/chrome/browser/chromeos/update_observer.cc
index 60bd1e8..d92b8f4 100644
--- a/chrome/browser/chromeos/update_observer.cc
+++ b/chrome/browser/chromeos/update_observer.cc
@@ -15,22 +15,61 @@ namespace chromeos {
UpdateObserver::UpdateObserver(Profile* profile)
: notification_(profile, "update.chromeos", IDR_NOTIFICATION_UPDATE,
- l10n_util::GetStringUTF16(IDS_UPDATE_TITLE)) {}
+ l10n_util::GetStringUTF16(IDS_UPDATE_TITLE)),
+ progress_(-1) {}
UpdateObserver::~UpdateObserver() {
notification_.Hide();
}
void UpdateObserver::UpdateStatusChanged(UpdateLibrary* library) {
-#if 0
- // TODO seanparent@chromium.org : This update should only be shown when an
- // update is critical and should include a restart button using the
- // update_engine restart API. Currently removed entirely per Kan's request.
-
- if (library->status().status == UPDATE_STATUS_UPDATED_NEED_REBOOT) {
- notification_.Show(l10n_util::GetStringUTF16(IDS_UPDATE_COMPLETED), true);
+ switch (library->status().status) {
+ case UPDATE_STATUS_IDLE:
+ case UPDATE_STATUS_CHECKING_FOR_UPDATE:
+ // Do nothing in these cases, we don't want to notify the user of the
+ // check unless there is an update. We don't hide here because
+ // we want the final state to be sticky.
+ break;
+ case UPDATE_STATUS_UPDATE_AVAILABLE:
+ notification_.Show(l10n_util::GetStringUTF16(IDS_UPDATE_AVAILABLE),
+ false);
+ break;
+ case UPDATE_STATUS_DOWNLOADING:
+ {
+ int progress = static_cast<int>(library->status().download_progress *
+ 100.0);
+ if (progress != progress_) {
+ progress_ = progress;
+ notification_.Show(l10n_util::GetStringFUTF16(IDS_UPDATE_DOWNLOADING,
+ base::IntToString16(progress_)), false);
+ }
+ }
+ break;
+ case UPDATE_STATUS_VERIFYING:
+ notification_.Show(l10n_util::GetStringUTF16(IDS_UPDATE_VERIFYING),
+ false);
+ break;
+ case UPDATE_STATUS_FINALIZING:
+ notification_.Show(l10n_util::GetStringUTF16(IDS_UPDATE_FINALIZING),
+ false);
+ break;
+ case UPDATE_STATUS_UPDATED_NEED_REBOOT:
+ notification_.Show(l10n_util::GetStringUTF16(IDS_UPDATE_COMPLETED), true);
+ break;
+ case UPDATE_STATUS_REPORTING_ERROR_EVENT:
+ // If the update engine encounters an error and we have already
+ // notified the user of the update progress, show an error
+ // notification. Don't show anything otherwise -- for example,
+ // in cases where the update engine encounters an error while
+ // checking for an update.
+ if (notification_.visible()) {
+ notification_.Show(l10n_util::GetStringUTF16(IDS_UPDATE_ERROR), true);
+ }
+ break;
+ default:
+ notification_.Show(l10n_util::GetStringUTF16(IDS_UPDATE_ERROR), true);
+ break;
}
-#endif
}
} // namespace chromeos
diff --git a/chrome/browser/chromeos/update_observer.h b/chrome/browser/chromeos/update_observer.h
index 3ec372b..298e116 100644
--- a/chrome/browser/chromeos/update_observer.h
+++ b/chrome/browser/chromeos/update_observer.h
@@ -27,6 +27,7 @@ class UpdateObserver : public UpdateLibrary::Observer {
virtual void UpdateStatusChanged(UpdateLibrary* library);
SystemNotification notification_;
+ int progress_; // Last displayed remaining time in minutes
DISALLOW_COPY_AND_ASSIGN(UpdateObserver);
};