| 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 83f9ef2d0803649f0b8bbe9baa9889ad71d05e81..1323c666c5d5ebd3dd8e01f63a8ccab6eee219ef 100644
|
| --- a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc
|
| +++ b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc
|
| @@ -46,6 +46,7 @@ ResetScreenHandler::ResetScreenHandler()
|
| restart_required_(true),
|
| reboot_was_requested_(false),
|
| rollback_available_(false),
|
| + rollback_checked_(false),
|
| preparing_for_rollback_(false),
|
| weak_ptr_factory_(this) {
|
| }
|
| @@ -61,32 +62,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);
|
| }
|
|
|
| @@ -103,6 +93,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;
|
| @@ -115,13 +106,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();
|
| }
|
| }
|
|
|
| @@ -141,13 +131,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);
|
| @@ -155,31 +147,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);
|
| }
|
|
|
| @@ -193,7 +183,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() {
|
| @@ -211,6 +200,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() {
|
| @@ -221,26 +216,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();
|
| }
|
| @@ -252,6 +248,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;
|
|
|