diff options
19 files changed, 340 insertions, 208 deletions
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index 909a058..49f656d 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp @@ -2690,11 +2690,11 @@ Press any key to continue exploring. <message name="IDS_RESET_SCREEN_WARNING_MSG" desc="Warning text shown on reset screen above the exclamation icon."> Reset this <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> device </message> - <message name="IDS_RESET_SCREEN_CONFIRMATION_WARNING_POWERWASH_MSG" desc="Warning text shown on confirmation-form of reset screen above the exclamation icon."> + <message name="IDS_RESET_SCREEN_WARNING_POWERWASH_MSG" desc="Warning text shown on confirmation-form of reset screen above the exclamation icon."> Powerwash your <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> device </message> - <message name="IDS_RESET_SCREEN_CONFIRMATION_WARNING_POWERWASH_AND_ROLLBACK_MSG" desc="Warning text shown on confirmation-form of reset screen above the exclamation icon."> - Powerwash your <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> device and revert to a previous update + <message name="IDS_RESET_SCREEN_WARNING_POWERWASH_AND_ROLLBACK_MSG" desc="Warning text shown on confirmation-form of reset screen above the exclamation icon."> + Powerwash your <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> device and return to the previous version </message> <message name="IDS_RESET_SCREEN_WARNING_DETAILS" desc="Warning text shown on reset screen below the exclamation icon."> Powerwash to reset your <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> device to be just like new. @@ -2703,20 +2703,23 @@ Press any key to continue exploring. A Powerwash resets your <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> device to be just like new. </message> <message name="IDS_RESET_SCREEN_CONFIRMATION_WARNING_ROLLBACK_DETAILS" desc="Warning text shown on confirmation-form of reset screen below the exclamation icon."> - A Powerwash resets your <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> device to be just like new. Additionally, your device will revert to a previous update of <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>. + A Powerwash resets your <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> device to be just like new. Your device will also be returned to the previously installed version of <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>. </message> <message name="IDS_RESET_SCREEN_WARNING_DETAILS_DATA" desc="Additional warning text shown on reset screen below the main warning."> All user accounts and local data will be removed. </message> <message name="IDS_RESET_SCREEN_RESTART_MSG" desc="Text shown on reset screen below warning messages if device needs extra restart before powerwash."> - A restart is required before your device can be reset. + A restart is required to begin the Powerwash process. After restart you will be asked to confirm that you want to proceed. </message> <message name="IDS_RESET_SCREEN_ROLLBACK_OPTION" desc="Checkbox label for rollback option of powerwash process. Is shown on reset screen."> - Also revert to a previous <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> update. + Also return to the previously installed version of <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>. </message> <message name="IDS_RESET_SCREEN_POWERWASH" desc="Powerwash button text"> Powerwash </message> + <message name="IDS_RESET_SCREEN_POWERWASH_AND_REVERT" desc="Powerwash+rollback button text"> + Powerwash and Revert + </message> <message name="IDS_RESET_SCREEN_RESET" desc="Reset button text. Button launches powerwash."> Reset </message> @@ -2724,13 +2727,13 @@ Press any key to continue exploring. <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> will restart and reset momentarily. </message> <message name="IDS_RESET_SCREEN_PREPARING_REVERT_SPINNER_MESSAGE" desc="Spinner message shown on reset screen after user initiates powerwash with version revert while revert is prepared until reboot."> - Reverting to previous <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> update. + Reverting to the previously installed version of <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> </message> <message name="IDS_RESET_SCREEN_REVERT_ERROR" desc="Error message shown when revert was initiated but unavailable to be performed." meaning="Device reset screen revert option context."> Oops, something went wrong. </message> <message name="IDS_RESET_SCREEN_REVERT_ERROR_EXPLANATION" desc="Error description shown when revert was initiated but unavailable to be performed."> - <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> is unable to revert to the previous version. Please try Powerwash instead. + <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> is unable to revert to the previously installed version. Please try again to Powerwash your device. </message> <message name="IDS_RESET_SCREEN_REVERT_ERROR_BUTTON" desc="Reset device dialog, error page, revert error while initiating it, button title."> OK diff --git a/chrome/browser/chromeos/login/reset_browsertest.cc b/chrome/browser/chromeos/login/reset_browsertest.cc index 4c9ecb1..f9c2577 100644 --- a/chrome/browser/chromeos/login/reset_browsertest.cc +++ b/chrome/browser/chromeos/login/reset_browsertest.cc @@ -74,6 +74,11 @@ class ResetTest : public LoginManagerTest { OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); } + void InvokeRollbackOption() { + ASSERT_TRUE(JSExecuted( + "cr.ui.Oobe.handleAccelerator('show_rollback_on_reset_screen');")); + } + void CloseResetScreen() { ASSERT_TRUE(JSExecuted("$('reset-cancel-button').click();")); } @@ -82,6 +87,13 @@ class ResetTest : public LoginManagerTest { ASSERT_TRUE(JSExecuted("$('reset-button').click();")); } + void ClickRestartButton() { + ASSERT_TRUE(JSExecuted("$('reset-restart-button').click();")); + } + void ClickToConfirmButton() { + ASSERT_TRUE(JSExecuted("$('reset-toconfirm-button').click();")); + } + FakeUpdateEngineClient* update_engine_client_; FakeSessionManagerClient* session_manager_client_; FakePowerManagerClient* power_manager_client_; @@ -104,12 +116,10 @@ IN_PROC_BROWSER_TEST_F(ResetTest, PRE_ShowAndCancel) { IN_PROC_BROWSER_TEST_F(ResetTest, ShowAndCancel) { JSExpect("!!document.querySelector('#reset.hidden')"); - EXPECT_EQ(0, update_engine_client_->can_rollback_call_count()); InvokeResetScreen(); JSExpect("!document.querySelector('#reset.hidden')"); CloseResetScreen(); JSExpect("!!document.querySelector('#reset.hidden')"); - EXPECT_EQ(1, update_engine_client_->can_rollback_call_count()); } IN_PROC_BROWSER_TEST_F(ResetTest, PRE_RestartBeforePowerwash) { @@ -122,38 +132,16 @@ IN_PROC_BROWSER_TEST_F(ResetTest, RestartBeforePowerwash) { InvokeResetScreen(); EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); - ClickResetButton(); + ClickRestartButton(); ASSERT_EQ(1, power_manager_client_->num_request_restart_calls()); ASSERT_EQ(0, session_manager_client_->start_device_wipe_call_count()); - EXPECT_FALSE(prefs->GetBoolean(prefs::kRollbackRequested)); - EXPECT_TRUE(prefs->GetBoolean(prefs::kFactoryResetRequested)); -} - -IN_PROC_BROWSER_TEST_F(ResetTest, PRE_RestartBeforeRollback) { - RegisterSomeUser(); - update_engine_client_->set_can_rollback_check_result(true); -} - -IN_PROC_BROWSER_TEST_F(ResetTest, RestartBeforeRollback) { - PrefService* prefs = g_browser_process->local_state(); - - InvokeResetScreen(); - EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); - EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); - ASSERT_TRUE(content::ExecuteScript( - web_contents(), - "$('reset-rollback-checkbox').checked = true;")); - ClickResetButton(); - ASSERT_EQ(1, power_manager_client_->num_request_restart_calls()); - ASSERT_EQ(0, session_manager_client_->start_device_wipe_call_count()); - EXPECT_EQ(0, update_engine_client_->rollback_call_count()); - - EXPECT_TRUE(prefs->GetBoolean(prefs::kRollbackRequested)); EXPECT_TRUE(prefs->GetBoolean(prefs::kFactoryResetRequested)); } IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_ShortcutInvokedCases) { + PrefService* prefs = g_browser_process->local_state(); + prefs->SetBoolean(prefs::kFactoryResetRequested, true); RegisterSomeUser(); } @@ -164,6 +152,8 @@ IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ShortcutInvokedCases) { EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); EXPECT_EQ(0, update_engine_client_->rollback_call_count()); + InvokeRollbackOption(); + ClickToConfirmButton(); ClickResetButton(); EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); EXPECT_EQ(1, session_manager_client_->start_device_wipe_call_count()); @@ -171,9 +161,12 @@ IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ShortcutInvokedCases) { CloseResetScreen(); OobeScreenWaiter(OobeDisplay::SCREEN_ACCOUNT_PICKER).Wait(); + PrefService* prefs = g_browser_process->local_state(); + prefs->SetBoolean(prefs::kFactoryResetRequested, true); update_engine_client_->set_can_rollback_check_result(true); // rollback available and unchecked InvokeResetScreen(); + ClickToConfirmButton(); ClickResetButton(); EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count()); @@ -181,11 +174,11 @@ IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ShortcutInvokedCases) { CloseResetScreen(); OobeScreenWaiter(OobeDisplay::SCREEN_ACCOUNT_PICKER).Wait(); + prefs->SetBoolean(prefs::kFactoryResetRequested, true); // rollback available and checked InvokeResetScreen(); - ASSERT_TRUE(content::ExecuteScript( - web_contents(), - "$('reset-rollback-checkbox').checked = true;")); + InvokeRollbackOption(); + ClickToConfirmButton(); ClickResetButton(); EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count()); @@ -194,7 +187,6 @@ IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ShortcutInvokedCases) { IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_PowerwashRequested) { PrefService* prefs = g_browser_process->local_state(); - prefs->SetBoolean(prefs::kRollbackRequested, false); prefs->SetBoolean(prefs::kFactoryResetRequested, true); RegisterSomeUser(); } @@ -204,6 +196,10 @@ IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PowerwashRequested) { EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); EXPECT_EQ(0, update_engine_client_->rollback_call_count()); + ClickToConfirmButton(); + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); + EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); + EXPECT_EQ(0, update_engine_client_->rollback_call_count()); ClickResetButton(); EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); EXPECT_EQ(1, session_manager_client_->start_device_wipe_call_count()); @@ -212,22 +208,24 @@ IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PowerwashRequested) { IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_ErrorOnRollbackRequested) { PrefService* prefs = g_browser_process->local_state(); - prefs->SetBoolean(prefs::kRollbackRequested, true); prefs->SetBoolean(prefs::kFactoryResetRequested, true); RegisterSomeUser(); } IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ErrorOnRollbackRequested) { + update_engine_client_->set_can_rollback_check_result(true); OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); EXPECT_EQ(0, update_engine_client_->rollback_call_count()); - JSExpect("!$('reset').classList.contains('revert-promise')"); + JSExpect("!$('reset').classList.contains('revert-promise-view')"); + InvokeRollbackOption(); + ClickToConfirmButton(); ClickResetButton(); EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); EXPECT_EQ(1, update_engine_client_->rollback_call_count()); - JSExpect("$('reset').classList.contains('revert-promise')"); + JSExpect("$('reset').classList.contains('revert-promise-view')"); UpdateEngineClient::Status error_update_status; error_update_status.status = UpdateEngineClient::UPDATE_STATUS_ERROR; update_engine_client_->NotifyObserversThatStatusChanged( @@ -238,13 +236,15 @@ IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ErrorOnRollbackRequested) { IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_SuccessOnRollbackRequested) { PrefService* prefs = g_browser_process->local_state(); - prefs->SetBoolean(prefs::kRollbackRequested, true); prefs->SetBoolean(prefs::kFactoryResetRequested, true); RegisterSomeUser(); } IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, SuccessOnRollbackRequested) { + update_engine_client_->set_can_rollback_check_result(true); OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); + InvokeRollbackOption(); + ClickToConfirmButton(); ClickResetButton(); EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); diff --git a/chrome/browser/chromeos/login/ui/webui_login_view.cc b/chrome/browser/chromeos/login/ui/webui_login_view.cc index 42febae..9c203f7 100644 --- a/chrome/browser/chromeos/login/ui/webui_login_view.cc +++ b/chrome/browser/chromeos/login/ui/webui_login_view.cc @@ -65,6 +65,8 @@ const char kAccelNameDeviceRequisitionRemora[] = "device_requisition_remora"; const char kAccelNameDeviceRequisitionShark[] = "device_requisition_shark"; const char kAccelNameAppLaunchBailout[] = "app_launch_bailout"; const char kAccelNameAppLaunchNetworkConfig[] = "app_launch_network_config"; +const char kAccelNameShowRollbackOption[] = "show_rollback_on_reset_screen"; +const char kAccelNameHideRollbackOption[] = "hide_rollback_on_reset_screen"; // A class to change arrow key traversal behavior when it's alive. class ScopedArrowKeyTraversal { @@ -154,6 +156,14 @@ WebUILoginView::WebUILoginView() ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)] = kAccelNameAppLaunchNetworkConfig; + ui::Accelerator show_rollback(ui::VKEY_MENU, ui::EF_ALT_DOWN); + show_rollback.set_type(ui::ET_KEY_PRESSED); + accel_map_[show_rollback] = kAccelNameShowRollbackOption; + + ui::Accelerator hide_rollback(ui::VKEY_MENU, ui::EF_NONE); + hide_rollback.set_type(ui::ET_KEY_RELEASED); + accel_map_[hide_rollback] = kAccelNameHideRollbackOption; + for (AccelMap::iterator i(accel_map_.begin()); i != accel_map_.end(); ++i) AddAccelerator(i->first); } diff --git a/chrome/browser/chromeos/reset/OWNERS b/chrome/browser/chromeos/reset/OWNERS new file mode 100644 index 0000000..9817204 --- /dev/null +++ b/chrome/browser/chromeos/reset/OWNERS @@ -0,0 +1,5 @@ +dpolukhin@chromium.org +dzhioev@chromium.org +merkulova@chromium.org +nkostylev@chromium.org +ygorshenin@chromium.org diff --git a/chrome/browser/chromeos/reset/metrics.h b/chrome/browser/chromeos/reset/metrics.h index 44f848d..e998cc4 100644 --- a/chrome/browser/chromeos/reset/metrics.h +++ b/chrome/browser/chromeos/reset/metrics.h @@ -19,12 +19,15 @@ enum DialogViewType { // Invoked with shortcut. Confirming form for powerwash and rollback. DIALOG_SHORTCUT_CONFIRMING_POWERWASH_AND_ROLLBACK, - // Invoked with shortcut. Offering form, rollback checkbox unavailable. + // Invoked with shortcut. Offering form, rollback option set. DIALOG_SHORTCUT_OFFERING_ROLLBACK_UNAVAILABLE, - // Invoked with shortcut. Offering form, rollback checkbox available. + // Invoked with shortcut. Offering form, rollback option not set. DIALOG_SHORTCUT_OFFERING_ROLLBACK_AVAILABLE, + // Invoked with shortcut. Requesting restart form. + DIALOG_SHORTCUT_RESTART_REQUIRED, + // Must be last enum element. DIALOG_VIEW_TYPE_SIZE }; diff --git a/chrome/browser/resources/chromeos/login/oobe_screen.css b/chrome/browser/resources/chromeos/login/oobe_screen.css index 637fe4a..b84d318 100644 --- a/chrome/browser/resources/chromeos/login/oobe_screen.css +++ b/chrome/browser/resources/chromeos/login/oobe_screen.css @@ -143,8 +143,6 @@ html[dir=rtl] .step-extra-controls { #oobe.eula #back-button, #oobe.kiosk-enable #kiosk-cancel-button, #oobe.kiosk-enable #kiosk-enable-button, -#oobe.reset #reset-button, -#oobe.reset #reset-cancel-button, #oobe.signin #signin-button, #oobe.user-image #ok-button { display: block; diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_reset.css b/chrome/browser/resources/chromeos/login/oobe_screen_reset.css index f41f237..3bd120e 100644 --- a/chrome/browser/resources/chromeos/login/oobe_screen_reset.css +++ b/chrome/browser/resources/chromeos/login/oobe_screen_reset.css @@ -3,21 +3,6 @@ * found in the LICENSE file. */ -.norollback #rollback, -.norestart #reset-warning-restart, -.revert-promise #reset-info, -.revert-promise #rollback, -.revert-promise #reset-controls, -#powerwash-help-link, -#revert-promise { - display: none; -} - -.norollback #powerwash-help-link, -.revert-promise #revert-promise { - display: block; -} - #reset { display: flex; flex-flow: column; @@ -42,7 +27,9 @@ height: 112px; } -#reset #reset-warning-msg { +#reset #reset-warning-msg, +#reset #powerwash-warning-msg, +#reset #powerwash-and-rollback-warning-msg { color: #606060; font-size: 22px; padding: 5px 45px 30px; @@ -68,4 +55,35 @@ #reset #reset-revert-spinner-message { display: inline-block; padding: 25px 0; -}
\ No newline at end of file +} + +.powerwash-proposal-specific, +.powerwash-confirm-specific, +.rollback-confirm-specific, +.revert-promise-specific, +.restart-required-specific { + display: none; +} + +.powerwash-proposal-view .powerwash-proposal-specific, +.powerwash-confirm-view .powerwash-confirm-specific, +.rollback-confirm-view .rollback-confirm-specific, +.restart-required-view .restart-required-specific, +.revert-promise-view .revert-promise-specific { + display: block; +} + +#reset-restart-button, +#reset-button, +#reset-toconfirm-button, +.revert-promise-view #reset-controls { + display: none; +} + +.restart-required-view #reset-restart-button, +.powerwash-confirm-view #reset-button, +.rollback-confirm-view #reset-button, +.powerwash-proposal-view #reset-toconfirm-button { + display: inline-block; +} + diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_reset.html b/chrome/browser/resources/chromeos/login/oobe_screen_reset.html index ca04706..47aca9c 100644 --- a/chrome/browser/resources/chromeos/login/oobe_screen_reset.html +++ b/chrome/browser/resources/chromeos/login/oobe_screen_reset.html @@ -1,30 +1,44 @@ <div class="step faded hidden no-logo" id="reset" role="group" hidden i18n-values="aria-label:resetScreenAccessibleTitle"> <div class="step-contents"> - <div id="reset-warning-msg"></div> + <div id="reset-warning-msg" i18n-content="resetWarningTitle" + class="revert-promise-specific restart-required-specific + powerwash-proposal-specific"> + </div> + <div id="powerwash-warning-msg" + i18n-content="resetPowerwashWarningTitle" + class="powerwash-confirm-specific"> + </div> + <div id="powerwash-and-rollback-warning-msg" + i18n-content="resetPowerwasAndRollbackhWarningTitle" + class="rollback-confirm-specific"></div> <img id="reset-warning-icon" src="chrome://theme/IDR_RESET_WARNING" i18n-values="alt:resetScreenIconTitle"> - <div id="reset-info"> - <div id="reset-warning-details" class="reset-text"></div> - <div id="reset-warning-data-details" class="reset-text" + <div id="reset-info" + class="reset-text powerwash-proposal-specific powerwash-confirm-specific + rollback-confirm-specific restart-required-specific"> + <div id="powerwash-warning-details" + i18n-content="resetPowerwashWarningDetails" + class="powerwash-proposal-specific"> + </div> + <div id="powerwash-confirmation-details" + i18n-content="resetPowerwashConfirmationDetails" + class="reset-text powerwash-confirm-specific"> + </div> + <div id="powerwash-and-rollback-confirmation-details" + i18n-content="resetPowerwashRollbackConfirmationDetails" + class="reset-text rollback-confirm-specific"></div> + <div id="reset-warning-data-details" + class="reset-text powerwash-proposal-specific + powerwash-confirm-specific rollback-confirm-specific" i18n-content="resetWarningDataDetails"> </div> - <a id="powerwash-help-link" href="#" i18n-content="learnMore"></a> <div id="reset-warning-restart" i18n-content="resetRestartMessage" - class="reset-text"> - </div> - </div> - <div id="rollback" class="reset-text"> - <div> - <input id="reset-rollback-checkbox" type="checkbox"> - <label for="reset-rollback-checkbox" i18n-content="resetRollbackOption"> - </label> - <a id="reset-powerwash-help-link-on-rollback" href="#" - i18n-content="learnMore"> - </a> + class="reset-text restart-required-specific"> </div> + <a id="powerwash-help-link" href="#" i18n-content="learnMore"></a> </div> - <div id="revert-promise"> + <div id="revert-promise" class="revert-promise-specific"> <div id="reset-revert-promise-msg" i18n-content="resetRevertPromise"> </div> <div id="reset-revert-spinner" class="throbber"> diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_reset.js b/chrome/browser/resources/chromeos/login/oobe_screen_reset.js index 116d66d..6c51183 100644 --- a/chrome/browser/resources/chromeos/login/oobe_screen_reset.js +++ b/chrome/browser/resources/chromeos/login/oobe_screen_reset.js @@ -9,18 +9,24 @@ login.createScreen('ResetScreen', 'reset', function() { return { + /* Possible UI states of the reset screen. */ + RESET_SCREEN_UI_STATE: { + REVERT_PROMISE: 'ui-state-revert-promise', + RESTART_REQUIRED: 'ui-state-restart-required', + POWERWASH_PROPOSAL: 'ui-state-powerwash-proposal', + POWERWASH_CONFIRM: 'ui-state-powerwash-confirm', + ROLLBACK_CONFIRM: 'ui-state-rollback-confirm' + }, + EXTERNAL_API: [ + 'hideRollbackOption', + 'showRollbackOption', 'updateViewOnRollbackCall' ], /** @override */ decorate: function() { - $('reset-powerwash-help-link-on-rollback').addEventListener( - 'click', function(event) { - chrome.send('resetOnLearnMore'); - }); - $('powerwash-help-link').addEventListener( - 'click', function(event) { + $('powerwash-help-link').addEventListener('click', function(event) { chrome.send('resetOnLearnMore'); }); }, @@ -39,19 +45,46 @@ login.createScreen('ResetScreen', 'reset', function() { */ get buttons() { var buttons = []; + var restartButton = this.ownerDocument.createElement('button'); + restartButton.id = 'reset-restart-button'; + restartButton.textContent = loadTimeData.getString('resetButtonRestart'); + restartButton.addEventListener('click', function(e) { + chrome.send('restartOnReset'); + e.stopPropagation(); + }); + buttons.push(restartButton); + + // Button that initiates actual powerwash or powerwash with rollback. var resetButton = this.ownerDocument.createElement('button'); resetButton.id = 'reset-button'; - resetButton.textContent = ''; + resetButton.textContent = loadTimeData.getString('resetButtonReset'); resetButton.addEventListener('click', function(e) { - if ($('reset').needRestart) - chrome.send('restartOnReset', [$('reset-rollback-checkbox').checked]); - else - chrome.send('powerwashOnReset', - [$('reset-rollback-checkbox').checked]); + chrome.send('powerwashOnReset', [$('reset').rollbackChecked]); e.stopPropagation(); }); buttons.push(resetButton); + // Button that leads to confirmation dialog. + var toConfirmButton = this.ownerDocument.createElement('button'); + toConfirmButton.id = 'reset-toconfirm-button'; + toConfirmButton.textContent = + loadTimeData.getString('resetButtonPowerwash'); + toConfirmButton.addEventListener('click', function(e) { + // change view to confirmational + var resetScreen = $('reset'); + resetScreen.isConfirmational = true; + if (resetScreen.rollbackChecked && resetScreen.rollbackAvailable) { + resetScreen.setDialogView_( + resetScreen.RESET_SCREEN_UI_STATE.ROLLBACK_CONFIRM); + } else { + resetScreen.setDialogView_( + resetScreen.RESET_SCREEN_UI_STATE.POWERWASH_CONFIRM); + } + chrome.send('showConfirmationOnReset'); + e.stopPropagation(); + }); + buttons.push(toConfirmButton); + var cancelButton = this.ownerDocument.createElement('button'); cancelButton.id = 'reset-cancel-button'; cancelButton.textContent = loadTimeData.getString('cancelButton'); @@ -68,6 +101,14 @@ login.createScreen('ResetScreen', 'reset', function() { * Returns a control which should receive an initial focus. */ get defaultControl() { + // choose + if (this.needRestart) + return $('reset-restart-button'); + if (this.isConfirmational) + if (this.rollbackChecked) + return $('reset-button'); + else + return $('reset-toconfirm-button'); return $('reset-button'); }, @@ -85,75 +126,64 @@ login.createScreen('ResetScreen', 'reset', function() { onBeforeShow: function(data) { if (data === undefined) return; - this.classList.remove('revert-promise'); - if ('showRestartMsg' in data) - this.setRestartMsg_(data['showRestartMsg']); - if ('showRollbackOption' in data) - this.setRollbackAvailable_(data['showRollbackOption']); - if ('simpleConfirm' in data) { - this.isConfirmational = data['simpleConfirm']; - this.confirmRollback = false; - } - if ('rollbackConfirm' in data) { - this.isConfirmational = data['rollbackConfirm']; - this.confirmRollback = true; - } - if (this.isConfirmational) { - // Exec after reboot initiated by reset screen. - // Confirmational form of screen. - $('reset-button').textContent = loadTimeData.getString( - 'resetButtonReset'); - if (this.confirmRollback) { - $('reset-warning-msg').textContent = loadTimeData.getString( - 'resetAndRollbackWarningTextConfirmational'); - $('reset-warning-details').textContent = loadTimeData.getString( - 'resetAndRollbackWarningDetailsConfirmational'); - } else { - $('reset-warning-msg').textContent = loadTimeData.getString( - 'resetWarningTextConfirmational'); - $('reset-warning-details').textContent = loadTimeData.getString( - 'resetWarningDetailsConfirmational'); - } + this.rollbackChecked = false; + this.rollbackAvailable = false; + this.isConfirmational = false; + + if ('rollbackAvailable' in data) + this.rollbackAvailable = data['rollbackAvailable']; + + if ('restartRequired' in data && data['restartRequired']) { + this.restartRequired = true; + this.setDialogView_(this.RESET_SCREEN_UI_STATE.RESTART_REQUIRED); } else { - $('reset-warning-msg').textContent = loadTimeData.getString( - 'resetWarningTextInitial'); - $('reset-warning-details').textContent = loadTimeData.getString( - 'resetWarningDetailsInitial'); - if (this.needRestart) { - $('reset-button').textContent = loadTimeData.getString( - 'resetButtonRelaunch'); - } else { - $('reset-button').textContent = loadTimeData.getString( - 'resetButtonPowerwash'); - } + this.restartRequired = false; + this.setDialogView_(this.RESET_SCREEN_UI_STATE.POWERWASH_PROPOSAL); } }, /** - * Sets restart necessity for the screen. - * @param {bool} need_restart. If restart required before reset. - * @private - */ - setRestartMsg_: function(need_restart) { - this.classList.toggle('norestart', !need_restart); - this.needRestart = need_restart; - }, - - /** - * Sets rollback availability for the screen. - * @param {bool} can_rollback. If Rollback is available on reset screen. + * Sets css style for corresponding state of the screen. + * @param {string} state. * @private */ - setRollbackAvailable_: function(show_rollback) { - this.classList.toggle('norollback', !show_rollback); - this.showRollback = show_rollback; + setDialogView_: function(state) { + this.classList.remove('revert-promise-view'); + this.classList.remove('restart-required-view'); + this.classList.remove('powerwash-proposal-view'); + this.classList.remove('powerwash-confirm-view'); + this.classList.remove('rollback-confirm-view'); + if (state == this.RESET_SCREEN_UI_STATE.REVERT_PROMISE) + this.classList.add('revert-promise-view'); + else if (state == this.RESET_SCREEN_UI_STATE.RESTART_REQUIRED) + this.classList.add('restart-required-view'); + else if (state == this.RESET_SCREEN_UI_STATE.POWERWASH_PROPOSAL) + this.classList.add('powerwash-proposal-view'); + else if (state == this.RESET_SCREEN_UI_STATE.POWERWASH_CONFIRM) + this.classList.add('powerwash-confirm-view'); + else if (state == this.RESET_SCREEN_UI_STATE.ROLLBACK_CONFIRM) + this.classList.add('rollback-confirm-view'); + else // error + console.error('State ' + state + ' is not supported by setDialogView.'); }, updateViewOnRollbackCall: function() { - this.classList.add('revert-promise'); + this.setDialogView_(this.RESET_SCREEN_UI_STATE.REVERT_PROMISE); announceAccessibleMessage( loadTimeData.getString('resetRevertSpinnerMessage')); + }, + + showRollbackOption: function() { + $('reset-toconfirm-button').textContent = loadTimeData.getString( + 'resetButtonPowerwashAndRollback'); + this.rollbackChecked = true; + }, + + hideRollbackOption: function() { + $('reset-toconfirm-button').textContent = loadTimeData.getString( + 'resetButtonPowerwash'); + this.rollbackChecked = false; } }; }); diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc index 030e0fa..c964530 100644 --- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc @@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/logging.h" #include "base/metrics/histogram.h" +#include "base/prefs/pref_service.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "chrome/browser/browser_process.h" @@ -18,6 +19,7 @@ #include "chrome/browser/io_thread.h" #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" #include "chrome/browser/ui/webui/signin/inline_login_ui.h" +#include "chrome/common/pref_names.h" #include "chrome/grit/generated_resources.h" #include "chromeos/chromeos_switches.h" #include "chromeos/settings/cros_settings_names.h" @@ -114,6 +116,7 @@ GaiaContext::GaiaContext() has_users(false) {} GaiaScreenHandler::GaiaScreenHandler( + CoreOobeActor* core_oobe_actor, const scoped_refptr<NetworkStateInformer>& network_state_informer, policy::ConsumerManagementService* consumer_management) : BaseScreenHandler(kJsScreenPath), @@ -121,6 +124,7 @@ GaiaScreenHandler::GaiaScreenHandler( frame_error_(net::OK), network_state_informer_(network_state_informer), consumer_management_(consumer_management), + core_oobe_actor_(core_oobe_actor), dns_cleared_(false), dns_clear_task_running_(false), cookies_cleared_(false), @@ -567,8 +571,13 @@ void GaiaScreenHandler::ShowGaiaScreenIfReady() { if (focus_stolen_) HandleGaiaUIReady(); } - signin_screen_handler_->UpdateState(ErrorScreenActor::ERROR_REASON_UPDATE); + + PrefService* prefs = g_browser_process->local_state(); + if (prefs->GetBoolean(prefs::kFactoryResetRequested)) { + if (core_oobe_actor_) + core_oobe_actor_->ShowDeviceResetScreen(); + } } void GaiaScreenHandler::MaybePreloadAuthExtension() { diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h index e357d79..c2bd310f8 100644 --- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h @@ -10,6 +10,7 @@ #include "base/basictypes.h" #include "base/command_line.h" #include "base/memory/ref_counted.h" +#include "chrome/browser/chromeos/login/screens/core_oobe_actor.h" #include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h" #include "net/base/net_errors.h" @@ -61,6 +62,7 @@ class GaiaScreenHandler : public BaseScreenHandler { }; GaiaScreenHandler( + CoreOobeActor* core_oobe_actor, const scoped_refptr<NetworkStateInformer>& network_state_informer, policy::ConsumerManagementService* consumer_management); virtual ~GaiaScreenHandler(); @@ -174,6 +176,8 @@ class GaiaScreenHandler : public BaseScreenHandler { // Consumer management service for checking if enrollment is in progress. policy::ConsumerManagementService* consumer_management_; + CoreOobeActor* core_oobe_actor_; + // Email to pre-populate with. std::string populated_email_; diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc index c6fd45b..b8af152 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc +++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc @@ -264,7 +264,8 @@ OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url) g_browser_process->platform_part()->browser_policy_connector_chromeos()-> GetConsumerManagementService(); gaia_screen_handler_ = - new GaiaScreenHandler(network_state_informer_, consumer_management); + new GaiaScreenHandler( + core_handler_, network_state_informer_, consumer_management); AddScreenHandler(gaia_screen_handler_); signin_screen_handler_ = new SigninScreenHandler(network_state_informer_, 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 8182f99..7c5e958 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; diff --git a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h index 34ad2be..c208cb4 100644 --- a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h @@ -51,9 +51,12 @@ class ResetScreenHandler : public ResetScreenActor, private: // JS messages handlers. void HandleOnCancel(); - void HandleOnRestart(bool should_rollback); + void HandleOnRestart(); void HandleOnPowerwash(bool rollback_checked); void HandleOnLearnMore(); + void HandleOnShowRollback(); + void HandleOnHideRollback(); + void HandleOnShowConfirm(); void ChooseAndApplyShowScenario(); void ShowWithParams(); @@ -74,10 +77,13 @@ class ResetScreenHandler : public ResetScreenActor, // for first exec after boot situation. bool reboot_was_requested_; - // Keeps whether rollback option is available fo. + // Keeps whether rollback option is available. bool rollback_available_; - // Whether rollback is initiated. + // Keeps whether rollback option is active at the screen. + bool rollback_checked_; + + // Whether rollback is initiated. Prevents screen-hide. bool preparing_for_rollback_; base::WeakPtrFactory<ResetScreenHandler> weak_ptr_factory_; diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 4b83c8b..eca92db 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1317,7 +1317,7 @@ 'browser/net/nss_context_chromeos_browsertest.cc', 'browser/net/predictor_browsertest.cc', 'browser/net/proxy_browsertest.cc', - 'browser/net/sdch_browsertest.cc', + 'browser/net/sdch_browsertest.cc', 'browser/net/websocket_browsertest.cc', 'browser/notifications/login_state_notification_blocker_chromeos_browsertest.cc', 'browser/notifications/message_center_notifications_browsertest.cc', diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index 9ab4ef1..431de5a 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc @@ -1960,10 +1960,6 @@ const char kTabStripStackedLayout[] = "tab-strip-stacked-layout"; // Indicates that factory reset was requested from options page or reset screen. const char kFactoryResetRequested[] = "FactoryResetRequested"; -// Indicates that rollback was requested alongside with factory reset. -// Makes sense only if kFactoryResetRequested is true. -const char kRollbackRequested[] = "RollbackRequested"; - // Boolean recording whether we have showed a balloon that calls out the message // center for desktop notifications. const char kMessageCenterShowedFirstRunBalloon[] = diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index 9fbb150..6e4a982 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h @@ -728,7 +728,6 @@ extern const char kHardwareAccelerationModePrevious[]; extern const char kDevicePolicyRefreshRate[]; extern const char kFactoryResetRequested[]; -extern const char kRollbackRequested[]; extern const char kMessageCenterShowedFirstRunBalloon[]; extern const char kMessageCenterShowIcon[]; diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index f52c8b4..c550463 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml @@ -47636,6 +47636,7 @@ To add a new entry, add it with any value and run test to compute valid value. <int value="2" label="Shortcut. Confirmation for powerwash and rollback."/> <int value="3" label="Shortcut. Offer. Rollback unavailable."/> <int value="4" label="Shortcut. Offer. Rollback available."/> + <int value="5" label="Shortcut. Restart required."/> </enum> <enum name="PreconnectedNavigation" type="int"> diff --git a/ui/login/display_manager.js b/ui/login/display_manager.js index a26af0b..d2c0b6f 100644 --- a/ui/login/display_manager.js +++ b/ui/login/display_manager.js @@ -46,6 +46,10 @@ /** @const */ var ACCELERATOR_APP_LAUNCH_BAILOUT = 'app_launch_bailout'; /** @const */ var ACCELERATOR_APP_LAUNCH_NETWORK_CONFIG = 'app_launch_network_config'; +/** @const */ var ACCELERATOR_SHOW_ROLLBACK_ON_RESET = + 'show_rollback_on_reset_screen'; +/** @const */ var ACCELERATOR_HIDE_ROLLBACK_ON_RESET = + 'hide_rollback_on_reset_screen'; /* Signin UI state constants. Used to control header bar UI. */ /** @const */ var SIGNIN_UI_STATE = { @@ -372,6 +376,12 @@ cr.define('cr.ui.login', function() { } else if (name == ACCELERATOR_APP_LAUNCH_NETWORK_CONFIG) { if (currentStepId == SCREEN_APP_LAUNCH_SPLASH) chrome.send('networkConfigRequest'); + } else if (name == ACCELERATOR_SHOW_ROLLBACK_ON_RESET) { + if (currentStepId == SCREEN_OOBE_RESET) + chrome.send('showRollbackOnResetScreen'); + } else if (name == ACCELERATOR_HIDE_ROLLBACK_ON_RESET) { + if (currentStepId == SCREEN_OOBE_RESET) + chrome.send('hideRollbackOnResetScreen'); } if (!this.forceKeyboardFlow_) |