#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/login/help_app_launcher.h"
#include "chrome/browser/chromeos/reset/metrics.h"
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/common/pref_names.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "grit/browser_resources.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
namespace {
// Reset screen id.
const char kResetScreen[] = "reset";
+const int kErrorUIStateRollback = 7;
+
} // namespace
namespace chromeos {
restart_required_(true),
reboot_was_requested_(false),
rollback_available_(false),
- weak_factory_(this) {
+ weak_ptr_factory_(this) {
}
ResetScreenHandler::~ResetScreenHandler() {
if (delegate_)
delegate_->OnActorDestroyed(this);
+ DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
}
void ResetScreenHandler::PrepareToShow() {
if (!restart_required_) // First exec after boot.
reboot_was_requested_ = prefs->GetBoolean(prefs::kFactoryResetRequested);
if (!CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableRollbackOption)) {
+ switches::kEnableRollbackOption)) {
rollback_available_ = false;
ShowWithParams();
} else if (!restart_required_ && reboot_was_requested_) {
} else {
chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->
CanRollbackCheck(base::Bind(&ResetScreenHandler::OnRollbackCheck,
- weak_factory_.GetWeakPtr()));
+ weak_ptr_factory_.GetWeakPtr()));
}
}
void ResetScreenHandler::Hide() {
+ DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
}
void ResetScreenHandler::SetDelegate(Delegate* delegate) {
builder->AddF("resetRollbackOption",
IDS_RESET_SCREEN_ROLLBACK_OPTION,
IDS_SHORT_PRODUCT_NAME);
+ builder->AddF("resetRevertPromise",
+ IDS_RESET_SCREEN_PREPARING_REVERT_PROMISE,
+ IDS_SHORT_PRODUCT_NAME);
+ builder->AddF("resetRevertSpinnerMessage",
+ IDS_RESET_SCREEN_PREPARING_REVERT_SPINNER_MESSAGE,
+ IDS_SHORT_PRODUCT_NAME);
// Different variants of the same UI elements for all dialog cases.
builder->Add("resetButtonReset", IDS_RESET_SCREEN_RESET);
void ResetScreenHandler::HandleOnCancel() {
if (delegate_)
delegate_->OnExit();
+ DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
}
void ResetScreenHandler::HandleOnRestart(bool should_rollback) {
}
void ResetScreenHandler::HandleOnPowerwash(bool rollback_checked) {
- if (rollback_checked && rollback_available_) {
+ if (rollback_available_ && (rollback_checked || reboot_was_requested_)) {
+ CallJS("updateViewOnRollbackCall");
+ DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver(this);
chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->Rollback();
} else {
- if (rollback_checked)
+ if (rollback_checked && !rollback_available_) {
NOTREACHED() <<
"Rollback was checked but not available. Starting powerwash.";
+ }
chromeos::DBusThreadManager::Get()->GetSessionManagerClient()->
StartDeviceWipe();
}
help_app_->ShowHelpTopic(HelpAppLauncher::HELP_POWERWASH);
}
+void ResetScreenHandler::UpdateStatusChanged(
+ const UpdateEngineClient::Status& status) {
+ VLOG(1) << "Update status change to " << status.status;
+ if (status.status == UpdateEngineClient::UPDATE_STATUS_ERROR) {
+ // Show error screen.
+ base::DictionaryValue params;
+ params.SetInteger("uiState", kErrorUIStateRollback);
+ ShowScreen(OobeUI::kScreenErrorMessage, ¶ms);
+ } else if (status.status ==
+ UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT) {
+ DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
+ }
+}
+
} // namespace chromeos