Chromium Code Reviews| Index: chrome/browser/extensions/system/system_api.cc |
| diff --git a/chrome/browser/extensions/system/system_api.cc b/chrome/browser/extensions/system/system_api.cc |
| index 719adeb860c55e897dff6a5655601375230c3dfb..a68bc1c87f1e08ec3bf49114e191638f13ebe186 100644 |
| --- a/chrome/browser/extensions/system/system_api.cc |
| +++ b/chrome/browser/extensions/system/system_api.cc |
| @@ -9,6 +9,13 @@ |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/common/pref_names.h" |
| +#if defined(OS_CHROMEOS) |
| +#include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" |
| +#include "chrome/browser/chromeos/dbus/update_engine_client.h" |
| +#else |
| +#include "chrome/browser/upgrade_detector.h" |
| +#endif |
| + |
| namespace { |
| // Maps prefs::kIncognitoModeAvailability values (0 = enabled, ...) |
| @@ -19,13 +26,19 @@ const char* kIncognitoModeAvailabilityStrings[] = { |
| "forced" |
| }; |
| +// Property keys. |
| +const char kStateKey[] = "state"; |
| +const char kDownloadProgressKey[] = "download_progress"; |
| + |
| +// System update states. |
| +const char kNotAvailableState[] = "NotAvailable"; |
| +const char kUpdatingState[] = "Updating"; |
| +const char kNeedRestartState[] = "NeedRestart"; |
| + |
| } // namespace |
| namespace extensions { |
| -GetIncognitoModeAvailabilityFunction::~GetIncognitoModeAvailabilityFunction() { |
| -} |
| - |
| bool GetIncognitoModeAvailabilityFunction::RunImpl() { |
| PrefService* prefs = profile_->GetPrefs(); |
| int value = prefs->GetInteger(prefs::kIncognitoModeAvailability); |
| @@ -37,4 +50,63 @@ bool GetIncognitoModeAvailabilityFunction::RunImpl() { |
| return true; |
| } |
| +bool GetUpdateStatusFunction::RunImpl() { |
| + std::string state; |
| + double download_progress = 0; |
| +#if defined(OS_CHROMEOS) |
| + // With UpdateEngineClient, we can provide more detailed information about |
| + // system updates on ChromeOS. |
| + const chromeos::UpdateEngineClient::Status status = |
| + chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()-> |
| + GetLastStatus(); |
| + // |download_progress| is set to 1 after download finishes |
| + // (i.e. verify, finalize and need-reboot phase) to indicate the progress |
| + // even though |status.download_progress| is 0 in these phases. |
| + switch (status.status) { |
| + case chromeos::UpdateEngineClient::UPDATE_STATUS_ERROR: |
| + state = kNotAvailableState; |
| + break; |
| + case chromeos::UpdateEngineClient::UPDATE_STATUS_IDLE: |
| + state = kNotAvailableState; |
| + break; |
| + case chromeos::UpdateEngineClient::UPDATE_STATUS_CHECKING_FOR_UPDATE: |
| + state = kNotAvailableState; |
| + break; |
| + case chromeos::UpdateEngineClient::UPDATE_STATUS_UPDATE_AVAILABLE: |
| + state = kUpdatingState; |
| + break; |
| + case chromeos::UpdateEngineClient::UPDATE_STATUS_DOWNLOADING: |
| + state = kUpdatingState; |
| + download_progress = status.download_progress; |
| + break; |
| + case chromeos::UpdateEngineClient::UPDATE_STATUS_VERIFYING: |
| + state = kUpdatingState; |
| + download_progress = 1; |
| + break; |
| + case chromeos::UpdateEngineClient::UPDATE_STATUS_FINALIZING: |
| + state = kUpdatingState; |
| + download_progress = 1; |
| + break; |
| + case chromeos::UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT: |
| + state = kNeedRestartState; |
| + download_progress = 1; |
| + break; |
| + case chromeos::UpdateEngineClient::UPDATE_STATUS_REPORTING_ERROR_EVENT: |
| + state = kNotAvailableState; |
| + break; |
| + } |
| +#else |
|
battre
2011/12/14 09:21:27
In this branch |state| can be empty. I think it sh
hashimoto
2011/12/14 09:40:02
You're right, thanks.
Fixed.
|
| + if (UpgradeDetector::GetInstance()->notify_upgrade()) { |
| + state = kNeedRestartState; |
| + download_progress = 1; |
| + } |
| +#endif |
| + DictionaryValue* dict = new DictionaryValue(); |
| + dict->SetString(kStateKey, state); |
| + dict->SetDouble(kDownloadProgressKey, download_progress); |
| + result_.reset(dict); |
| + |
| + return true; |
| +} |
| + |
| } // namespace extensions |