Chromium Code Reviews| Index: chrome/browser/chromeos/login/reset_browsertest.cc |
| diff --git a/chrome/browser/chromeos/login/reset_browsertest.cc b/chrome/browser/chromeos/login/reset_browsertest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b978de21e27c780d348586bddddf040c922b1bf9 |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/login/reset_browsertest.cc |
| @@ -0,0 +1,240 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "base/prefs/pref_service.h" |
| +#include "chrome/browser/browser_process.h" |
| +#include "chrome/browser/chromeos/login/login_display_host_impl.h" |
| +#include "chrome/browser/chromeos/login/login_manager_test.h" |
| +#include "chrome/browser/chromeos/login/oobe_display.h" |
| +#include "chrome/browser/chromeos/login/startup_utils.h" |
| +#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" |
| +#include "chrome/browser/chromeos/login/webui_login_view.h" |
| +#include "chrome/common/chrome_switches.h" |
| +#include "chrome/common/pref_names.h" |
| +#include "chromeos/chromeos_switches.h" |
| +#include "chromeos/dbus/dbus_thread_manager.h" |
| +#include "chromeos/dbus/fake_dbus_thread_manager.h" |
| +#include "chromeos/dbus/fake_power_manager_client.h" |
| +#include "chromeos/dbus/fake_session_manager_client.h" |
| +#include "chromeos/dbus/fake_update_engine_client.h" |
| +#include "content/public/test/browser_test_utils.h" |
| + |
| +namespace chromeos { |
| + |
| +namespace { |
| + |
| +const char kTestUser1[] = "test-user1@gmail.com"; |
| +const char kTestUser2[] = "test-user2@gmail.com"; |
|
ygorshenin1
2014/03/31 13:57:57
Do you really need two users? I thought, not.
merkulova
2014/03/31 15:33:58
Done.
|
| + |
| +} // anonymous namespace |
|
ygorshenin1
2014/03/31 13:57:57
nit: delete anonymous.
merkulova
2014/03/31 15:33:58
Done.
|
| + |
| +class ResetTest : public LoginManagerTest { |
| + public: |
| + ResetTest() : LoginManagerTest(false), |
| + update_engine_client_(NULL), |
| + session_manager_client_(NULL), |
| + power_manager_client_(NULL) { |
| + } |
| + virtual ~ResetTest() {} |
| + |
| + content::WebContents* GetWebContents() { |
|
ygorshenin1
2014/03/31 13:57:57
Looks like you do exactly what LoginManagerTest::I
merkulova
2014/03/31 15:33:58
Done.
|
| + LoginDisplayHostImpl* host = static_cast<LoginDisplayHostImpl*>( |
| + LoginDisplayHostImpl::default_host()); |
| + if (!host) |
| + return NULL; |
| + WebUILoginView* webui_login_view = host->GetWebUILoginView(); |
| + if (!webui_login_view) |
| + return NULL; |
| + return webui_login_view->GetWebContents(); |
| + } |
| + |
| + // LoginManagerTest overrides: |
| + virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
| + FakeDBusThreadManager* dbus_manager = new FakeDBusThreadManager; |
| + dbus_manager->SetFakeClients(); |
| + session_manager_client_ = new FakeSessionManagerClient; |
| + dbus_manager->SetSessionManagerClient( |
| + scoped_ptr<SessionManagerClient>(session_manager_client_)); |
| + power_manager_client_ = new FakePowerManagerClient; |
| + dbus_manager->SetPowerManagerClient( |
| + scoped_ptr<PowerManagerClient>(power_manager_client_)); |
| + update_engine_client_ = new FakeUpdateEngineClient; |
| + dbus_manager->SetUpdateEngineClient( |
| + scoped_ptr<UpdateEngineClient>(update_engine_client_)); |
| + DBusThreadManager::SetInstanceForTesting(dbus_manager); |
| + |
| + LoginManagerTest::SetUpInProcessBrowserTestFixture(); |
| + } |
| + |
| + void SetUp_() { |
|
ygorshenin1
2014/03/31 13:57:57
s/SetUp_/RegisterUsers/
merkulova
2014/03/31 15:33:58
Done.
|
| + RegisterUser(kTestUser1); |
| + RegisterUser(kTestUser2); |
| + StartupUtils::MarkOobeCompleted(); |
| + } |
| + |
| + void InvokeResetScreen() { |
| + ASSERT_TRUE(content::ExecuteScript( |
|
ygorshenin1
2014/03/31 13:57:57
Could you please create a shortcut and use it inst
merkulova
2014/03/31 15:33:58
Done.
|
| + GetWebContents(), |
| + "cr.ui.Oobe.handleAccelerator('reset');")); |
| + OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait(); |
| + } |
| + |
| + void CloseResetScreen() { |
| + ASSERT_TRUE(content::ExecuteScript( |
| + GetWebContents(), |
| + "$('reset-cancel-button').click();")); |
| + } |
| + |
| + void ClickResetButton() { |
| + ASSERT_TRUE(content::ExecuteScript( |
| + GetWebContents(), |
| + "$('reset-button').click();")); |
| + } |
| + |
| + FakeUpdateEngineClient* update_engine_client_; |
| + FakeSessionManagerClient* session_manager_client_; |
| + FakePowerManagerClient* power_manager_client_; |
| +}; |
| + |
| +class ResetFirstAfterBootTest : public ResetTest { |
| + public: |
| + virtual ~ResetFirstAfterBootTest() {} |
| + |
| + virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE { |
| + LoginManagerTest::SetUpCommandLine(command_line); |
| + command_line->AppendSwitch(switches::kFirstExecAfterBoot); |
| + } |
| +}; |
| + |
| +IN_PROC_BROWSER_TEST_F(ResetTest, PRE_ShowAndCancel) { |
| + SetUp_(); |
| +} |
| + |
| +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) { |
| + SetUp_(); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(ResetTest, RestartBeforePowerwash) { |
| + 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()); |
| + ClickResetButton(); |
| + 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) { |
| + SetUp_(); |
| + update_engine_client_->set_can_callback_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( |
| + GetWebContents(), |
| + "$('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) { |
| + SetUp_(); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ShortcutInvokedCases) { |
| + // rollback unavailable |
| + update_engine_client_->set_can_callback_check_result(false); |
| + InvokeResetScreen(); |
| + 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()); |
| + EXPECT_EQ(0, update_engine_client_->rollback_call_count()); |
| + CloseResetScreen(); |
| + OobeScreenWaiter(OobeDisplay::SCREEN_ACCOUNT_PICKER).Wait(); |
| + |
| + update_engine_client_->set_can_callback_check_result(true); |
| + // rollback available and unchecked |
| + InvokeResetScreen(); |
| + ClickResetButton(); |
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| + EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count()); |
| + EXPECT_EQ(0, update_engine_client_->rollback_call_count()); |
| + CloseResetScreen(); |
| + OobeScreenWaiter(OobeDisplay::SCREEN_ACCOUNT_PICKER).Wait(); |
| + |
| + // rollback available and checked |
| + InvokeResetScreen(); |
| + ASSERT_TRUE(content::ExecuteScript( |
| + GetWebContents(), |
| + "$('reset-rollback-checkbox').checked = true;")); |
| + ClickResetButton(); |
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| + EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count()); |
| + EXPECT_EQ(1, update_engine_client_->rollback_call_count()); |
| +} |
| + |
| +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); |
| + SetUp_(); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PowerwashRequested) { |
| + 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()); |
| + ClickResetButton(); |
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls()); |
| + EXPECT_EQ(1, session_manager_client_->start_device_wipe_call_count()); |
| + EXPECT_EQ(0, update_engine_client_->rollback_call_count()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_RollbackRequested) { |
| + PrefService* prefs = g_browser_process->local_state(); |
| + prefs->SetBoolean(prefs::kRollbackRequested, true); |
| + prefs->SetBoolean(prefs::kFactoryResetRequested, true); |
| + SetUp_(); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, RollbackRequested) { |
| + 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()); |
| + 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()); |
| +} |
| + |
| +} // namespace chromeos |