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 |