Index: chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc |
diff --git a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc |
index 8182f99dedba238fcefd3853bbd896506116661b..7c5e958026014cfea8a57e595e2991b360d79273 100644 |
--- a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc |
+++ b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc |
@@ -45,6 +45,7 @@ ResetScreenHandler::ResetScreenHandler() |
restart_required_(true), |
reboot_was_requested_(false), |
rollback_available_(false), |
+ rollback_checked_(false), |
preparing_for_rollback_(false), |
weak_ptr_factory_(this) { |
} |
@@ -60,32 +61,21 @@ void ResetScreenHandler::PrepareToShow() { |
void ResetScreenHandler::ShowWithParams() { |
int dialog_type; |
- if (reboot_was_requested_) { |
- dialog_type = rollback_available_ ? |
- reset::DIALOG_SHORTCUT_CONFIRMING_POWERWASH_AND_ROLLBACK : |
- reset::DIALOG_SHORTCUT_CONFIRMING_POWERWASH_ONLY; |
+ if (restart_required_) { |
+ dialog_type = reset::DIALOG_SHORTCUT_RESTART_REQUIRED; |
} else { |
- dialog_type = rollback_available_ ? |
- reset::DIALOG_SHORTCUT_OFFERING_ROLLBACK_AVAILABLE : |
- reset::DIALOG_SHORTCUT_OFFERING_ROLLBACK_UNAVAILABLE; |
+ dialog_type = reset::DIALOG_SHORTCUT_OFFERING_ROLLBACK_UNAVAILABLE; |
} |
UMA_HISTOGRAM_ENUMERATION("Reset.ChromeOS.PowerwashDialogShown", |
dialog_type, |
reset::DIALOG_VIEW_TYPE_SIZE); |
- base::DictionaryValue reset_screen_params; |
- reset_screen_params.SetBoolean("showRestartMsg", restart_required_); |
- reset_screen_params.SetBoolean( |
- "showRollbackOption", rollback_available_ && !reboot_was_requested_); |
- reset_screen_params.SetBoolean( |
- "simpleConfirm", reboot_was_requested_ && !rollback_available_); |
- reset_screen_params.SetBoolean( |
- "rollbackConfirm", reboot_was_requested_ && rollback_available_); |
- |
PrefService* prefs = g_browser_process->local_state(); |
prefs->SetBoolean(prefs::kFactoryResetRequested, false); |
- prefs->SetBoolean(prefs::kRollbackRequested, false); |
prefs->CommitPendingWrite(); |
+ base::DictionaryValue reset_screen_params; |
+ reset_screen_params.SetBoolean("restartRequired", restart_required_); |
+ reset_screen_params.SetBoolean("rollbackAvailable", rollback_available_); |
ShowScreen(kResetScreen, &reset_screen_params); |
} |
@@ -102,6 +92,7 @@ void ResetScreenHandler::ChooseAndApplyShowScenario() { |
PrefService* prefs = g_browser_process->local_state(); |
restart_required_ = !CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kFirstExecAfterBoot); |
+ |
reboot_was_requested_ = false; |
rollback_available_ = false; |
preparing_for_rollback_ = false; |
@@ -114,13 +105,12 @@ void ResetScreenHandler::ChooseAndApplyShowScenario() { |
ShowWithParams(); |
} else if (!restart_required_ && reboot_was_requested_) { |
// First exec after boot. |
- PrefService* prefs = g_browser_process->local_state(); |
- rollback_available_ = prefs->GetBoolean(prefs::kRollbackRequested); |
- ShowWithParams(); |
- } else { |
chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()-> |
CanRollbackCheck(base::Bind(&ResetScreenHandler::OnRollbackCheck, |
weak_ptr_factory_.GetWeakPtr())); |
+ } else { |
+ // Will require restart. |
+ ShowWithParams(); |
} |
} |
@@ -140,13 +130,15 @@ void ResetScreenHandler::DeclareLocalizedValues( |
builder->Add("resetScreenAccessibleTitle", IDS_RESET_SCREEN_TITLE); |
builder->Add("resetScreenIconTitle", IDS_RESET_SCREEN_ICON_TITLE); |
builder->Add("cancelButton", IDS_CANCEL); |
+ builder->Add("resetButtonReset", IDS_RESET_SCREEN_RESET); |
+ builder->Add("resetButtonRestart", IDS_RELAUNCH_BUTTON); |
+ builder->Add("resetButtonPowerwash", IDS_RESET_SCREEN_POWERWASH); |
+ builder->Add("resetButtonPowerwashAndRollback", |
+ IDS_RESET_SCREEN_POWERWASH_AND_REVERT); |
builder->Add("resetWarningDataDetails", |
IDS_RESET_SCREEN_WARNING_DETAILS_DATA); |
builder->Add("resetRestartMessage", IDS_RESET_SCREEN_RESTART_MSG); |
- 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); |
@@ -154,31 +146,29 @@ void ResetScreenHandler::DeclareLocalizedValues( |
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); |
- builder->Add("resetButtonRelaunch", IDS_RELAUNCH_BUTTON); |
- builder->Add("resetButtonPowerwash", IDS_RESET_SCREEN_POWERWASH); |
- |
- builder->AddF( |
- "resetAndRollbackWarningTextConfirmational", |
- IDS_RESET_SCREEN_CONFIRMATION_WARNING_POWERWASH_AND_ROLLBACK_MSG, |
- IDS_SHORT_PRODUCT_NAME); |
- builder->AddF("resetWarningTextConfirmational", |
- IDS_RESET_SCREEN_CONFIRMATION_WARNING_POWERWASH_MSG, |
- IDS_SHORT_PRODUCT_NAME); |
- builder->AddF("resetWarningTextInitial", |
+ // Variants for screen title. |
+ builder->AddF("resetWarningTitle", |
IDS_RESET_SCREEN_WARNING_MSG, |
IDS_SHORT_PRODUCT_NAME); |
+ builder->AddF("resetPowerwashWarningTitle", |
+ IDS_RESET_SCREEN_WARNING_POWERWASH_MSG, |
+ IDS_SHORT_PRODUCT_NAME); |
+ builder->AddF("resetPowerwasAndRollbackhWarningTitle", |
+ IDS_RESET_SCREEN_WARNING_POWERWASH_AND_ROLLBACK_MSG, |
+ IDS_SHORT_PRODUCT_NAME); |
- builder->AddF( |
- "resetAndRollbackWarningDetailsConfirmational", |
- IDS_RESET_SCREEN_CONFIRMATION_WARNING_ROLLBACK_DETAILS, |
- IDS_SHORT_PRODUCT_NAME); |
- builder->AddF("resetWarningDetailsConfirmational", |
+ // Variants for screen message. |
+ builder->AddF("resetPowerwashWarningDetails", |
+ IDS_RESET_SCREEN_WARNING_DETAILS, |
+ IDS_SHORT_PRODUCT_NAME); |
+ builder->AddF("resetPowerwashRollbackWarningDetails", |
+ IDS_RESET_SCREEN_WARNING_POWERWASH_AND_ROLLBACK_MSG, |
+ IDS_SHORT_PRODUCT_NAME); |
+ builder->AddF("resetPowerwashConfirmationDetails", |
IDS_RESET_SCREEN_CONFIRMATION_WARNING_DETAILS, |
IDS_SHORT_PRODUCT_NAME); |
- builder->AddF("resetWarningDetailsInitial", |
- IDS_RESET_SCREEN_WARNING_DETAILS, |
+ builder->AddF("resetPowerwashRollbackConfirmationDetails", |
+ IDS_RESET_SCREEN_CONFIRMATION_WARNING_ROLLBACK_DETAILS, |
IDS_SHORT_PRODUCT_NAME); |
} |
@@ -192,7 +182,6 @@ void ResetScreenHandler::OnRollbackCheck(bool can_rollback) { |
// static |
void ResetScreenHandler::RegisterPrefs(PrefRegistrySimple* registry) { |
registry->RegisterBooleanPref(prefs::kFactoryResetRequested, false); |
- registry->RegisterBooleanPref(prefs::kRollbackRequested, false); |
} |
void ResetScreenHandler::Initialize() { |
@@ -210,6 +199,12 @@ void ResetScreenHandler::RegisterMessages() { |
AddCallback("restartOnReset", &ResetScreenHandler::HandleOnRestart); |
AddCallback("powerwashOnReset", &ResetScreenHandler::HandleOnPowerwash); |
AddCallback("resetOnLearnMore", &ResetScreenHandler::HandleOnLearnMore); |
+ AddCallback( |
+ "showRollbackOnResetScreen", &ResetScreenHandler::HandleOnShowRollback); |
+ AddCallback( |
+ "hideRollbackOnResetScreen", &ResetScreenHandler::HandleOnHideRollback); |
+ AddCallback( |
+ "showConfirmationOnReset", &ResetScreenHandler::HandleOnShowConfirm); |
} |
void ResetScreenHandler::HandleOnCancel() { |
@@ -220,26 +215,27 @@ void ResetScreenHandler::HandleOnCancel() { |
DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this); |
} |
-void ResetScreenHandler::HandleOnRestart(bool should_rollback) { |
+void ResetScreenHandler::HandleOnRestart() { |
PrefService* prefs = g_browser_process->local_state(); |
prefs->SetBoolean(prefs::kFactoryResetRequested, true); |
- prefs->SetBoolean(prefs::kRollbackRequested, should_rollback); |
prefs->CommitPendingWrite(); |
chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); |
} |
void ResetScreenHandler::HandleOnPowerwash(bool rollback_checked) { |
- if (rollback_available_ && (rollback_checked || reboot_was_requested_)) { |
+ if (rollback_available_ && rollback_checked) { |
preparing_for_rollback_ = true; |
CallJS("updateViewOnRollbackCall"); |
DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver(this); |
+ VLOG(1) << "Starting Rollback"; |
chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->Rollback(); |
} else { |
if (rollback_checked && !rollback_available_) { |
NOTREACHED() << |
"Rollback was checked but not available. Starting powerwash."; |
} |
+ VLOG(1) << "Starting Powerwash"; |
chromeos::DBusThreadManager::Get()->GetSessionManagerClient()-> |
StartDeviceWipe(); |
} |
@@ -251,6 +247,35 @@ void ResetScreenHandler::HandleOnLearnMore() { |
help_app_->ShowHelpTopic(HelpAppLauncher::HELP_POWERWASH); |
} |
+void ResetScreenHandler::HandleOnShowRollback() { |
+ VLOG(1) << "Requested rollback availability" << rollback_available_; |
+ if (rollback_available_) { |
+ UMA_HISTOGRAM_ENUMERATION( |
+ "Reset.ChromeOS.PowerwashDialogShown", |
+ reset::DIALOG_SHORTCUT_OFFERING_ROLLBACK_AVAILABLE, |
+ reset::DIALOG_VIEW_TYPE_SIZE); |
+ CallJS("showRollbackOption"); |
+ rollback_checked_ = true; |
+ } |
+} |
+ |
+void ResetScreenHandler::HandleOnHideRollback() { |
+ if (rollback_available_ && rollback_checked_) { |
+ CallJS("hideRollbackOption"); |
+ rollback_checked_ = false; |
+ } |
+} |
+ |
+void ResetScreenHandler::HandleOnShowConfirm() { |
+ int dialog_type = rollback_checked_ ? |
+ reset::DIALOG_SHORTCUT_CONFIRMING_POWERWASH_AND_ROLLBACK : |
+ reset::DIALOG_SHORTCUT_CONFIRMING_POWERWASH_ONLY; |
+ UMA_HISTOGRAM_ENUMERATION( |
+ "Reset.ChromeOS.PowerwashDialogShown", |
+ dialog_type, |
+ reset::DIALOG_VIEW_TYPE_SIZE); |
+} |
+ |
void ResetScreenHandler::UpdateStatusChanged( |
const UpdateEngineClient::Status& status) { |
VLOG(1) << "Update status change to " << status.status; |