summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormerkulova <merkulova@chromium.org>2014-09-05 01:26:55 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-05 08:30:19 +0000
commitfc6d9e5869b861a5cb82018a934c44b59f58687f (patch)
tree078b467a7a658e3af08b054ed7c3b7db1b6b383f
parent6e7df01d4614df70ec2a1418a6b36717e21c85f3 (diff)
downloadchromium_src-fc6d9e5869b861a5cb82018a934c44b59f58687f.zip
chromium_src-fc6d9e5869b861a5cb82018a934c44b59f58687f.tar.gz
chromium_src-fc6d9e5869b861a5cb82018a934c44b59f58687f.tar.bz2
UI flow rework for device reset options. Reset made available from gaia screen. Tests adapted.
BUG=399186 Review URL: https://codereview.chromium.org/491263002 Cr-Commit-Position: refs/heads/master@{#293478}
-rw-r--r--chrome/app/chromeos_strings.grdp19
-rw-r--r--chrome/browser/chromeos/login/reset_browsertest.cc70
-rw-r--r--chrome/browser/chromeos/login/ui/webui_login_view.cc10
-rw-r--r--chrome/browser/chromeos/reset/OWNERS5
-rw-r--r--chrome/browser/chromeos/reset/metrics.h7
-rw-r--r--chrome/browser/resources/chromeos/login/oobe_screen.css2
-rw-r--r--chrome/browser/resources/chromeos/login/oobe_screen_reset.css52
-rw-r--r--chrome/browser/resources/chromeos/login/oobe_screen_reset.html48
-rw-r--r--chrome/browser/resources/chromeos/login/oobe_screen_reset.js166
-rw-r--r--chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc11
-rw-r--r--chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h4
-rw-r--r--chrome/browser/ui/webui/chromeos/login/oobe_ui.cc3
-rw-r--r--chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc121
-rw-r--r--chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h12
-rw-r--r--chrome/chrome_tests.gypi2
-rw-r--r--chrome/common/pref_names.cc4
-rw-r--r--chrome/common/pref_names.h1
-rw-r--r--tools/metrics/histograms/histograms.xml1
-rw-r--r--ui/login/display_manager.js10
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_)