| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
| 8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
| 9 #include "chrome/browser/chromeos/login/login_manager_test.h" | 9 #include "chrome/browser/chromeos/login/login_manager_test.h" |
| 10 #include "chrome/browser/chromeos/login/startup_utils.h" | 10 #include "chrome/browser/chromeos/login/startup_utils.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 | 67 |
| 68 bool JSExecuted(const std::string& script) { | 68 bool JSExecuted(const std::string& script) { |
| 69 return content::ExecuteScript(web_contents(), script); | 69 return content::ExecuteScript(web_contents(), script); |
| 70 } | 70 } |
| 71 | 71 |
| 72 void InvokeResetScreen() { | 72 void InvokeResetScreen() { |
| 73 ASSERT_TRUE(JSExecuted("cr.ui.Oobe.handleAccelerator('reset');")); | 73 ASSERT_TRUE(JSExecuted("cr.ui.Oobe.handleAccelerator('reset');")); |
| 74 OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); | 74 OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); |
| 75 } | 75 } |
| 76 | 76 |
| 77 void InvokeRollbackOption() { |
| 78 ASSERT_TRUE(JSExecuted( |
| 79 "cr.ui.Oobe.handleAccelerator('show_rollback_on_reset_screen');")); |
| 80 } |
| 81 |
| 77 void CloseResetScreen() { | 82 void CloseResetScreen() { |
| 78 ASSERT_TRUE(JSExecuted("$('reset-cancel-button').click();")); | 83 ASSERT_TRUE(JSExecuted("$('reset-cancel-button').click();")); |
| 79 } | 84 } |
| 80 | 85 |
| 81 void ClickResetButton() { | 86 void ClickResetButton() { |
| 82 ASSERT_TRUE(JSExecuted("$('reset-button').click();")); | 87 ASSERT_TRUE(JSExecuted("$('reset-button').click();")); |
| 83 } | 88 } |
| 84 | 89 |
| 90 void ClickRestartButton() { |
| 91 ASSERT_TRUE(JSExecuted("$('reset-restart-button').click();")); |
| 92 } |
| 93 void ClickToConfirmButton() { |
| 94 ASSERT_TRUE(JSExecuted("$('reset-toconfirm-button').click();")); |
| 95 } |
| 96 |
| 85 FakeUpdateEngineClient* update_engine_client_; | 97 FakeUpdateEngineClient* update_engine_client_; |
| 86 FakeSessionManagerClient* session_manager_client_; | 98 FakeSessionManagerClient* session_manager_client_; |
| 87 FakePowerManagerClient* power_manager_client_; | 99 FakePowerManagerClient* power_manager_client_; |
| 88 }; | 100 }; |
| 89 | 101 |
| 90 class ResetFirstAfterBootTest : public ResetTest { | 102 class ResetFirstAfterBootTest : public ResetTest { |
| 91 public: | 103 public: |
| 92 virtual ~ResetFirstAfterBootTest() {} | 104 virtual ~ResetFirstAfterBootTest() {} |
| 93 | 105 |
| 94 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE { | 106 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE { |
| 95 LoginManagerTest::SetUpCommandLine(command_line); | 107 LoginManagerTest::SetUpCommandLine(command_line); |
| 96 command_line->AppendSwitch(switches::kFirstExecAfterBoot); | 108 command_line->AppendSwitch(switches::kFirstExecAfterBoot); |
| 97 command_line->AppendSwitch(switches::kEnableRollbackOption); | 109 command_line->AppendSwitch(switches::kEnableRollbackOption); |
| 98 } | 110 } |
| 99 }; | 111 }; |
| 100 | 112 |
| 101 IN_PROC_BROWSER_TEST_F(ResetTest, PRE_ShowAndCancel) { | 113 IN_PROC_BROWSER_TEST_F(ResetTest, PRE_ShowAndCancel) { |
| 102 RegisterSomeUser(); | 114 RegisterSomeUser(); |
| 103 } | 115 } |
| 104 | 116 |
| 105 IN_PROC_BROWSER_TEST_F(ResetTest, ShowAndCancel) { | 117 IN_PROC_BROWSER_TEST_F(ResetTest, ShowAndCancel) { |
| 106 JSExpect("!!document.querySelector('#reset.hidden')"); | 118 JSExpect("!!document.querySelector('#reset.hidden')"); |
| 107 EXPECT_EQ(0, update_engine_client_->can_rollback_call_count()); | |
| 108 InvokeResetScreen(); | 119 InvokeResetScreen(); |
| 109 JSExpect("!document.querySelector('#reset.hidden')"); | 120 JSExpect("!document.querySelector('#reset.hidden')"); |
| 110 CloseResetScreen(); | 121 CloseResetScreen(); |
| 111 JSExpect("!!document.querySelector('#reset.hidden')"); | 122 JSExpect("!!document.querySelector('#reset.hidden')"); |
| 112 EXPECT_EQ(1, update_engine_client_->can_rollback_call_count()); | |
| 113 } | 123 } |
| 114 | 124 |
| 115 IN_PROC_BROWSER_TEST_F(ResetTest, PRE_RestartBeforePowerwash) { | 125 IN_PROC_BROWSER_TEST_F(ResetTest, PRE_RestartBeforePowerwash) { |
| 116 RegisterSomeUser(); | 126 RegisterSomeUser(); |
| 117 } | 127 } |
| 118 | 128 |
| 119 IN_PROC_BROWSER_TEST_F(ResetTest, RestartBeforePowerwash) { | 129 IN_PROC_BROWSER_TEST_F(ResetTest, RestartBeforePowerwash) { |
| 120 PrefService* prefs = g_browser_process->local_state(); | 130 PrefService* prefs = g_browser_process->local_state(); |
| 121 | 131 |
| 122 InvokeResetScreen(); | 132 InvokeResetScreen(); |
| 123 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); | 133 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| 124 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); | 134 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); |
| 125 ClickResetButton(); | 135 ClickRestartButton(); |
| 126 ASSERT_EQ(1, power_manager_client_->num_request_restart_calls()); | 136 ASSERT_EQ(1, power_manager_client_->num_request_restart_calls()); |
| 127 ASSERT_EQ(0, session_manager_client_->start_device_wipe_call_count()); | 137 ASSERT_EQ(0, session_manager_client_->start_device_wipe_call_count()); |
| 128 | 138 |
| 129 EXPECT_FALSE(prefs->GetBoolean(prefs::kRollbackRequested)); | |
| 130 EXPECT_TRUE(prefs->GetBoolean(prefs::kFactoryResetRequested)); | |
| 131 } | |
| 132 | |
| 133 IN_PROC_BROWSER_TEST_F(ResetTest, PRE_RestartBeforeRollback) { | |
| 134 RegisterSomeUser(); | |
| 135 update_engine_client_->set_can_rollback_check_result(true); | |
| 136 } | |
| 137 | |
| 138 IN_PROC_BROWSER_TEST_F(ResetTest, RestartBeforeRollback) { | |
| 139 PrefService* prefs = g_browser_process->local_state(); | |
| 140 | |
| 141 InvokeResetScreen(); | |
| 142 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); | |
| 143 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); | |
| 144 ASSERT_TRUE(content::ExecuteScript( | |
| 145 web_contents(), | |
| 146 "$('reset-rollback-checkbox').checked = true;")); | |
| 147 ClickResetButton(); | |
| 148 ASSERT_EQ(1, power_manager_client_->num_request_restart_calls()); | |
| 149 ASSERT_EQ(0, session_manager_client_->start_device_wipe_call_count()); | |
| 150 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); | |
| 151 | |
| 152 EXPECT_TRUE(prefs->GetBoolean(prefs::kRollbackRequested)); | |
| 153 EXPECT_TRUE(prefs->GetBoolean(prefs::kFactoryResetRequested)); | 139 EXPECT_TRUE(prefs->GetBoolean(prefs::kFactoryResetRequested)); |
| 154 } | 140 } |
| 155 | 141 |
| 156 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_ShortcutInvokedCases) { | 142 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_ShortcutInvokedCases) { |
| 143 PrefService* prefs = g_browser_process->local_state(); |
| 144 prefs->SetBoolean(prefs::kFactoryResetRequested, true); |
| 157 RegisterSomeUser(); | 145 RegisterSomeUser(); |
| 158 } | 146 } |
| 159 | 147 |
| 160 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ShortcutInvokedCases) { | 148 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ShortcutInvokedCases) { |
| 161 // rollback unavailable | 149 // rollback unavailable |
| 162 update_engine_client_->set_can_rollback_check_result(false); | 150 update_engine_client_->set_can_rollback_check_result(false); |
| 163 InvokeResetScreen(); | 151 InvokeResetScreen(); |
| 164 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); | 152 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| 165 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); | 153 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); |
| 166 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); | 154 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); |
| 155 InvokeRollbackOption(); |
| 156 ClickToConfirmButton(); |
| 167 ClickResetButton(); | 157 ClickResetButton(); |
| 168 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); | 158 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| 169 EXPECT_EQ(1, session_manager_client_->start_device_wipe_call_count()); | 159 EXPECT_EQ(1, session_manager_client_->start_device_wipe_call_count()); |
| 170 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); | 160 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); |
| 171 CloseResetScreen(); | 161 CloseResetScreen(); |
| 172 OobeScreenWaiter(OobeDisplay::SCREEN_ACCOUNT_PICKER).Wait(); | 162 OobeScreenWaiter(OobeDisplay::SCREEN_ACCOUNT_PICKER).Wait(); |
| 173 | 163 |
| 164 PrefService* prefs = g_browser_process->local_state(); |
| 165 prefs->SetBoolean(prefs::kFactoryResetRequested, true); |
| 174 update_engine_client_->set_can_rollback_check_result(true); | 166 update_engine_client_->set_can_rollback_check_result(true); |
| 175 // rollback available and unchecked | 167 // rollback available and unchecked |
| 176 InvokeResetScreen(); | 168 InvokeResetScreen(); |
| 169 ClickToConfirmButton(); |
| 177 ClickResetButton(); | 170 ClickResetButton(); |
| 178 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); | 171 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| 179 EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count()); | 172 EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count()); |
| 180 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); | 173 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); |
| 181 CloseResetScreen(); | 174 CloseResetScreen(); |
| 182 OobeScreenWaiter(OobeDisplay::SCREEN_ACCOUNT_PICKER).Wait(); | 175 OobeScreenWaiter(OobeDisplay::SCREEN_ACCOUNT_PICKER).Wait(); |
| 183 | 176 |
| 177 prefs->SetBoolean(prefs::kFactoryResetRequested, true); |
| 184 // rollback available and checked | 178 // rollback available and checked |
| 185 InvokeResetScreen(); | 179 InvokeResetScreen(); |
| 186 ASSERT_TRUE(content::ExecuteScript( | 180 InvokeRollbackOption(); |
| 187 web_contents(), | 181 ClickToConfirmButton(); |
| 188 "$('reset-rollback-checkbox').checked = true;")); | |
| 189 ClickResetButton(); | 182 ClickResetButton(); |
| 190 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); | 183 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| 191 EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count()); | 184 EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count()); |
| 192 EXPECT_EQ(1, update_engine_client_->rollback_call_count()); | 185 EXPECT_EQ(1, update_engine_client_->rollback_call_count()); |
| 193 } | 186 } |
| 194 | 187 |
| 195 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_PowerwashRequested) { | 188 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_PowerwashRequested) { |
| 196 PrefService* prefs = g_browser_process->local_state(); | 189 PrefService* prefs = g_browser_process->local_state(); |
| 197 prefs->SetBoolean(prefs::kRollbackRequested, false); | |
| 198 prefs->SetBoolean(prefs::kFactoryResetRequested, true); | 190 prefs->SetBoolean(prefs::kFactoryResetRequested, true); |
| 199 RegisterSomeUser(); | 191 RegisterSomeUser(); |
| 200 } | 192 } |
| 201 | 193 |
| 202 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PowerwashRequested) { | 194 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PowerwashRequested) { |
| 203 OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); | 195 OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); |
| 204 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); | 196 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| 205 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); | 197 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); |
| 206 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); | 198 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); |
| 199 ClickToConfirmButton(); |
| 200 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| 201 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); |
| 202 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); |
| 207 ClickResetButton(); | 203 ClickResetButton(); |
| 208 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); | 204 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| 209 EXPECT_EQ(1, session_manager_client_->start_device_wipe_call_count()); | 205 EXPECT_EQ(1, session_manager_client_->start_device_wipe_call_count()); |
| 210 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); | 206 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); |
| 211 } | 207 } |
| 212 | 208 |
| 213 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_ErrorOnRollbackRequested) { | 209 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_ErrorOnRollbackRequested) { |
| 214 PrefService* prefs = g_browser_process->local_state(); | 210 PrefService* prefs = g_browser_process->local_state(); |
| 215 prefs->SetBoolean(prefs::kRollbackRequested, true); | |
| 216 prefs->SetBoolean(prefs::kFactoryResetRequested, true); | 211 prefs->SetBoolean(prefs::kFactoryResetRequested, true); |
| 217 RegisterSomeUser(); | 212 RegisterSomeUser(); |
| 218 } | 213 } |
| 219 | 214 |
| 220 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ErrorOnRollbackRequested) { | 215 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ErrorOnRollbackRequested) { |
| 216 update_engine_client_->set_can_rollback_check_result(true); |
| 221 OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); | 217 OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); |
| 222 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); | 218 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| 223 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); | 219 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); |
| 224 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); | 220 EXPECT_EQ(0, update_engine_client_->rollback_call_count()); |
| 225 JSExpect("!$('reset').classList.contains('revert-promise')"); | 221 JSExpect("!$('reset').classList.contains('revert-promise-view')"); |
| 222 InvokeRollbackOption(); |
| 223 ClickToConfirmButton(); |
| 226 ClickResetButton(); | 224 ClickResetButton(); |
| 227 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); | 225 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| 228 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); | 226 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); |
| 229 EXPECT_EQ(1, update_engine_client_->rollback_call_count()); | 227 EXPECT_EQ(1, update_engine_client_->rollback_call_count()); |
| 230 JSExpect("$('reset').classList.contains('revert-promise')"); | 228 JSExpect("$('reset').classList.contains('revert-promise-view')"); |
| 231 UpdateEngineClient::Status error_update_status; | 229 UpdateEngineClient::Status error_update_status; |
| 232 error_update_status.status = UpdateEngineClient::UPDATE_STATUS_ERROR; | 230 error_update_status.status = UpdateEngineClient::UPDATE_STATUS_ERROR; |
| 233 update_engine_client_->NotifyObserversThatStatusChanged( | 231 update_engine_client_->NotifyObserversThatStatusChanged( |
| 234 error_update_status); | 232 error_update_status); |
| 235 OobeScreenWaiter(OobeDisplay::SCREEN_ERROR_MESSAGE).Wait(); | 233 OobeScreenWaiter(OobeDisplay::SCREEN_ERROR_MESSAGE).Wait(); |
| 236 } | 234 } |
| 237 | 235 |
| 238 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, | 236 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, |
| 239 PRE_SuccessOnRollbackRequested) { | 237 PRE_SuccessOnRollbackRequested) { |
| 240 PrefService* prefs = g_browser_process->local_state(); | 238 PrefService* prefs = g_browser_process->local_state(); |
| 241 prefs->SetBoolean(prefs::kRollbackRequested, true); | |
| 242 prefs->SetBoolean(prefs::kFactoryResetRequested, true); | 239 prefs->SetBoolean(prefs::kFactoryResetRequested, true); |
| 243 RegisterSomeUser(); | 240 RegisterSomeUser(); |
| 244 } | 241 } |
| 245 | 242 |
| 246 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, SuccessOnRollbackRequested) { | 243 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, SuccessOnRollbackRequested) { |
| 244 update_engine_client_->set_can_rollback_check_result(true); |
| 247 OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); | 245 OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); |
| 246 InvokeRollbackOption(); |
| 247 ClickToConfirmButton(); |
| 248 ClickResetButton(); | 248 ClickResetButton(); |
| 249 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); | 249 EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| 250 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); | 250 EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count()); |
| 251 EXPECT_EQ(1, update_engine_client_->rollback_call_count()); | 251 EXPECT_EQ(1, update_engine_client_->rollback_call_count()); |
| 252 UpdateEngineClient::Status ready_for_reboot_status; | 252 UpdateEngineClient::Status ready_for_reboot_status; |
| 253 ready_for_reboot_status.status = | 253 ready_for_reboot_status.status = |
| 254 UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT; | 254 UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT; |
| 255 update_engine_client_->NotifyObserversThatStatusChanged( | 255 update_engine_client_->NotifyObserversThatStatusChanged( |
| 256 ready_for_reboot_status); | 256 ready_for_reboot_status); |
| 257 EXPECT_EQ(1, power_manager_client_->num_request_restart_calls()); | 257 EXPECT_EQ(1, power_manager_client_->num_request_restart_calls()); |
| 258 } | 258 } |
| 259 | 259 |
| 260 | 260 |
| 261 } // namespace chromeos | 261 } // namespace chromeos |
| OLD | NEW |